ini-T MUSIC SKY [CGのBLOG] CG


Unity2017.2 FBXインポーター変更点
Unity



少し前のことなのですが、Unity2017.2からFBXのインポーターの仕様が変更されていて結構焦ったことがあったので書いておこうと思います。




とりあえず、説明用に即席でBlenderで4つのプロシージャルテクスチャを付けて、それをベイクしてイメージテクスチャに変換したボックスを用意してみました。これをFBXとしてエクスポートします。




そのボックスFBXをUnityにテクスチャと一緒にドラッグアンドドロップでインポートします。そうすると、Unity2017.1まではインポート時にMaterialsフォルダーが出来てマテリアルがそこに保存されていたのですが、Unity2017.2からはマテリアルがパックされたままなのです。




マテリアルのシェーダーなどを変えようとしてパックされたままのマテリアルを選択してもグレーアウトして変更することができません。




そのFBXをシーンに配置してからメッシュを選択して「Mesh Render」のところのMaterialsの項目を開くと、そのFBXで使用されているマテリアルを変更出来るようになっています。

しかし、梱包されているマテリアルではなく新規でマテリアルを用意しなくてはなりません。こんな方法でシーンに配置していちいち設定していたら面倒くさくて仕方ありません。

どうしてUnityはこんな面倒な仕様にしてしまったのかと思いつつ何か解決策がないものかググってみてもそれで困っている人もいないのかまるでヒットしませんでした。それでマニュアルを見たらあっさり解決しました。




FBXの項目は2017.1までは3つでしたが2017.2からはMaterialsという項目が追加されていて4つになっていました。

パックされているテクスチャとマテリアルを展開するのはオプションになったようです。Extract~を押すとそれぞれの展開先を自分で設定できるようです。







「Extract Materials」を押してmatsというフォルダーを作って展開するとそこにマテリアルが保存されます。これで一安心です。




Locationの項目から「Use External Materials (Legacy)」を選んでApplyを押すと2017.1までと同じくMaterialsフォルダとテクスチャがパックされているならTexturesフォルダが作られて、それぞれそこに展開されます。こっちの方が楽ですね。







確かに2017.2からのインポーターの変更はマテリアルをいじる必要がない場合はスペース的にはスッキリしていい感じがしますけどね。そういう要望もあったということでしょうか。

スポンサーサイト
テーマ: CG ジャンル: 日記
最近の自分的Unity関連のまとめ
Unity



日頃、Unity関連のことは色々試したりはしているのですがブログに書くほどのことではなかったり、まとめるのが大掛かりになりそうなことは後回しに、という感じになってしまいます。

今まで避けていたTwitterですが(^^;)、ちょっと試したことやちょっとした動画を公開したい時などはTwitterだと手軽で便利そうだなと考え方が変わってきました。

YouTubeはちょっとしたものを上げにくいし、Pixivのうごイラは150フレームまでという制限があるので動画で見せたいものを形にしようとすると結構な制限なんですよね。Twitterならそのままそのツイートをブログに貼るだけでいいですもんね。

自分が知らなかった役立つ情報の収集にも役立ちそうでもあります。それで今年からTwitterを始めてみることにしました。

今回は、Unity関連で最近Tweetしたものをまとめてみようと思います。



「SabreCSG Level Design Tools」を試したものをGIF動画にしてみたものです。選択した面ごとに簡単にマテリアルを変更できるのもすごくいいですね。こういうレベルデザインは外部3DCGモデリングソフトではなくて、Unity上で出来ると気分的にも捗りそうです。

GIFは極力サイズを削ったのですが、Twitterではアップロードするとさらに圧縮されてしまうのですね。さらに拡大されて画像がかなり劣化してしまっていますね。(汗)


Unityも慣れてくるとアセットストアで扱われているアセットの有用性が分かってきますね。人気のアセットは有料でもやはり仕入れておきたいものです。じつは、去年はセールの度に有名所を結構購入しておきました。「Play Maker」も半額セールの時に購入しておきました。

最初の使用感想はメソッド名がC#で書くのと若干違っていたりプログラムの組み立て方をいつもと違うアプローチで考えないといけなかったりと戸惑うことも多く、これならコードを書いた方が早いんじゃないの、とか思ったりしたのですが、慣れてくるとどのゲームオブジェクトに何をさせているかが分かりやすく、さすが人気のアセットというのが分かります。本当にコードを一行も書かずにゲームを作ることも可能だと思います。

「Play Maker」のことはいつかブログに書きたいと思ってはいたのですが、後回しになってしまっています。他の購入したアセットもいつかは紹介したいと思っています。

ところで、Twitterで動画をアップする時はYouTubeと違って1コマ目がサムネイルになるんですね。「Play Maker」にはカメラに付けるフェードイン、アウトをさせるアクションがあったので試してみたのですが、そのまま動画にしてアップロードしてしまい気がついたら肝心な部分が真っ黒となっていました。今後は気を付けないといけませんね。f(^^;)



いちおう、動画のキレイなワンカットを貼っておきます。





Unityの「Post Processing Stack」も結構試したりしているのですが、なかなかブログに書く機会がありませんでした。

Shade3Dでレンダリングする時は光源の設定が結構大変で自然に見えるようにするには結構ややこしいい設定をしなくてはならないのですが、Unityでは無限光源1つで窓から入ってくる光を表現出来ます。リアルタイムレンダリングなので光源の角度も確認しながら出来るので楽ですね。ただ、影の設定はベイクとかもうちょっと勉強する必要がありそうです。




ちなみに、この教室は「Shade3Dで学校でも作ってみる」のときの教室です。

あと、一枚目の背景の街並みはShade3Dの付属のものをHDRにしてSky Boxに使っています。机とイスはそれぞれ一つだけFBXでUnityに渡してUnity側で複製して並べてあります。


今回は以上になります。

テーマ: CG ジャンル: 日記
Blender、挫折しないためのトピック
Blender



Blenderは3DCGクリエイトアプリとしてはハイエンド並みの機能を持っているのにフリーで使えるという夢のようなアプリです。

しかし、例えフリーであってもその操作性が馴染めず断念する人も多いようです。じつは私も3年ぐらい前にBlenderを試してみたものの、その操作に全く馴染めず挫折して一度は諦めた一人です。

でも、Blenderのあまりの多機能の魅力に引き寄せられ一年ほど前から再び使い始めたら、今度は着々とBlenderのことが理解できるようになりました。現在は手に馴染んでいるぐらいの感覚で使えるメインツールとなっています。

Blenderの操作は確かにかなり特殊な感じもあります。でも、その独特の性質のようなものを念頭に置いておけば、もしかしたら挫折しないで済むかもしれないとも思います。

そこで、Blenderを操作するにあたって、その違和感が感心に変わるかも知れないようなトピックをあまりされていないような切り口から書いてみたいと思います。

まず、誰しもが最初に疑問に思うこと言えば、

「何でBlenderは左クリック選択ではなく、右クリック選択なの?」

でしょう。(笑)

これは、私も最初に思いました。これは設定から左クリック選択にも変更できます。自分も初めは当然左クリック選択に変更しました。しかし、現在は迷いなく右クリック選択です。右クリック選択にはそれなりのメリットがあるからです。

Blenderが何故右クリック選択になっているのかと言えば、
「左クリック選択であると、メッシュ編集時にマニピュレーターの
操作と競合してしまう」
、ということからだと思います。




まず、立方体を頂点編集モードで細かく分割してみた図です。真ん中の頂点を一つ選択してあります。その頂点を操作するためのマニピュレーターがそれを囲んでいる状態です。




マニピュレーターは左クリックで操作するのですが、頂点を左クリック選択の設定にしている時にマニピュレーターの操作エリアに重なっている場合は、マニピュレーターの方の操作が優先されます。

ようするに、左クリックでは上図のピンク色のエリアの中にある頂点は選択することが出来ません。

しかし、右クリック選択であればマニピュレーターの後ろにある頂点も優先エリアの影響関係なく選択することが出来ます。おそらく、そういう理由からBlenderでは左クリックと右クリックの役割を分けたのだと思われます。(べつに、高機能なのにフリーなのだから使う人間に少しは不便さを与えてやろうとかの意地悪からではないと思います。(^^;)

ポリゴンモデリングでは(とくにフィギュアなど)作り込んでいくと頂点が大幅に増えてきます。左クリック選択だと頂点が密集しているところではどうしてもマニピュレーターが重なっていると頂点は反応せず選択できない箇所も多々出てきます。仕方ないのでオブジェクトを少し回転させマニピュレーターと重ならないようにして頂点選択、続けていくとまたクリックしても選択できないからオブジェクトを少し回転・・・と数多あるポリ頂点を少しでもテンポよく選択して動かしていきたい時に結構ストレスとなってしまいます。

じつは、Shadeを使っていたときからやはりメッシュが細かいところでは頂点が選択できないことがあり、なんとかならないのかなぁとか思っていました。この右クリック選択によって機能の重複を回避するという手段があるBlenderはよく考えられているなと感心しました。

私も初めの頃は左クリック選択にしていましたが、右クリック選択のメリットが判ってから「慣れ親しんでいる左クリック」か「ストレス無く頂点を選択出来る右クリック」かを天秤に乗せたなら、自分としてはもう迷うこと無く右クリック選択となったわけです。

しかし、これは人それぞれです。やはり、右クリックだとストレス感じるし、どうしても左クリックじゃないと無理という人もいるでしょう。そういう時には設定で左クリック選択でも、もう少し使い勝手のいいようにマニピュレーターとの競合エリアを狭めることは可能です。




ユーザー設定の「インターフェイス」の「マニピュレーター」の「ホットスポット」のところで変えることが出来ます。ここの値はデフォルトでは14pxになってますが、最小で4pxまで小さくすることが出来ます。




4pxにすれば競合エリアはだいたいこのくらいまで狭める事ができます(※推定イメージです)。これぐらいなら一般的な3DCGソフトと同じぐらいでしょう(Shadeもこれぐらいだと思います)。しかし、これぐらいでもクリックが反応しないことは完全には避けられないので、やはり私は心安く全く競合しない右クリック選択を選びます。

勘違いしないでいただきたいのは、右クリック選択はオブジェクトやメッシュを選択する時の話です。他の通常の作業では左クリックですので(初め自分はすべてのことが左右逆なのかと思っていたことがあったため、念のため)。自分的にはBlenderで右クリック選択を使っていても他アプリで混乱することもまずありませんよ。

Blenderの操作性は確かに独特です。それは、Blenderは「OSに準拠しないUI操作」だからです。WindowsなどのOSに慣れ親しんだ操作とは若干感覚を変えないと何かしようという時に反応してくれずイラッとすることがあると思います。しかし、慣れてくると直感的にスムーズに作業が進められるように考えられていると思うようになりますね。

Blenderでは「マウスポインターの位置」が結構重要な役割を持っていると思います。これもBlenderの独特な操作性と感じさせる大きな要因となっていると思います。

Windowsなどのアプリではマウスポインターというのはクリックやドラッグをしてその位置を確定して使うわけですが、Blenderではそれ以前にマウスポインターが画面上のどこに置いてあるかだけでも操作に影響があります。




例えば、オブジェクトを結合する、分離する、ペアレントを設定するなどのオブジェクト編集に関わるショートカットなどはオブジェクト編集エリア内にポインターがないと反応してくれません。もし、アウトライナーの上にポインターがあったなら、それはアウトライナーの作業とみなされるからです。オブジェクトの編集作業ならポインターは3Dビュー内に置いておかないといけないということです。

Blenderのマウスポインターの位置によって操作の影響が変わる面白い例として、「切り裂き(Rip)」機能を紹介したいと思います。




平面を縦横2分割した平面で真ん中の頂点を選択してしてあります。




作業画面を田の字な4分割で考えて、右側の方にポインターが置いてある時にVキーを押してポインターを右側に動かすと、頂点は右側の方に分裂します。




今度は画面の下の方にポインターを置いた状態でVキーを押してポインターを下の方に動かすと頂点は下の方に分裂されます。上や左も同様です。こういうのはBlenderならではという感じがしますね。慣れると直感的でとても便利です。

自分も初めはショートカットが反応するときとしないときがあってBlenderって何だか意味がわからないと思っていたのですが、ポインターの場所を意識するようになってから急速に慣れていきましたね。

あと、ショートカットについてです。他の3DCGソフトからBlenderに乗り換えようという時に、同じ様な機能なら今まで使い慣れているソフトのショートカットと同じにしたいと思うかもしれません。

しかし、Blenderのショートカットはポリゴン編集、UV編集、アニメーション編集など各作業エリアごとにみっしりと割り当てがしてあります。その数は一般的なアプリの比ではないでしょう。それを後から変えるのはかなり大変な作業になるだろうし、知らぬ間にショートカットの競合が起こってしまうと使えなくなってしまう機能などが出てくる可能性があります。

今後Blenderを使っていきたいと思うのならBlenderのショートカットは洗練された上で設定されているのだと信じてデフォルトの設定で慣れてしまうのをお勧めします。

ショートカットが割り当てられていないものに関しては追加設定してもいいでしょう。ただ、競合するキーが割り当てられていない事を確認する必要はあります。

なんだか長くなってきたので今回はこの辺で区切りたいと思います。Blenderの機能紹介など書き始めたらキリがないは分かっているのですが、もうちょっとBlender関連で書いておきたいこともあるのでまたの機会にでもということで。


テーマ: CG ジャンル: 日記
Blenderでカレンをリメイク
Blender



Shadeで作成したオリジナルキャラクターのカレンでしたが、Unityでトゥーンレンダで輪郭線を付けると、アップでは線がカクカクしてしまうところがありました。

今なら意識的に輪郭線がなるべく自然に見えるようなトポロジーを念頭に作れるようになりましたが、当時はそんなところまで気が回りませんでした。何と言っても、Shadeではいったん複雑にしてしまったポリゴンメッシュを後から編集し直すのは至難の業で諦めざるを得ないという感じになってしまいます。

しかし、Blenderであれば複雑なポリゴンメッシュであろうと後から修正する手段がいくらでもあります。

それで、カレンをBlenderでトゥーンレンダ・エッジに適したリトポロジーを施してみようかと思いました。見直さないといけない箇所が多すぎて頂点の追加と削除は避けられず、表情モーフは全部捨ててやり直すことにしました。




今回、ボディも試しにフリーの3D人体モデル生成ソフトのMakeHumanを利用して新たに作り直してみました。ちなみに、ゲームエンジン用のローポリタイプです。

MakeHumanは元々Blenderのアドオンだったらしいですが、そこから独立して現在に至るようですね。Blenderとはそれは相性がいいのでしょうね、たぶん。

MakeHuman本体側でもそれなりに多項目なプロパティの設定で体型を変えられるのですが、結構大雑把で思うようにはなってはくれませんね。その上、リアル調と漫画調とでは求められるモデルの体型はかなり違ってくるので、結局はBlenderの方で細かくメッシュの修正が必要になります。

フィギュア作成の簡略化ができるかなとMakeHumanを実験的に試してみましたが、結局はほぼ全身を編集し直す羽目となってしまったので作業量的には一から作るのと同じぐらいになってしまったのかもしれません(汗)。でも、もともと完成しているものなので気分的には楽かもしれませんね。

もはや、Shadeで作ってそのまま残っているのは目と髪と髪飾りぐらいとなってしまいました(汗)。それで「カレン ver.2」ということになりました。




テクスチャは、Blenderのみで描いてあります。Blenderのデフォルトのブラシだとイメージ通りに塗れなかったりすることもあると思いますが、Blenderで使うブラシは透過PNGテクスチャを用意すれば自分のオリジナルのものを使うことが出来ます。3Dペイントは直感的に描けていいですねぇ。




水着もBlenderで作ってみました。作る時、ビキニというものは知っていそうでも、じつは構造がよくわかってなかったので本物の作り方を紹介しているサイトを参考にさせてもらいました。紐を引っ張ると丸みを帯びるというわけですね、なるほど。




シェイプキーも作り直すついでに舌も追加してみました。これで「え」の表情も出来るようになりました。しかし、ちょっと分かりにくいかもしれませんね(笑)。このキャラは元々バンドでキーボード担当というつもりで考えていたので、いつか歌う日も来るかもしれません。歌う時は「い」一つ取っても様々な表現がありますからね。



Blenderのプレビューでの360°回転を「うごイラ」にしてみました。



あと、同じものをBlenderのFreestyleを使ってレンダリングしてみたものも「うごイラ」にしてみました。

本来、Freestyleはサブサーフを使った方がキレイに線が出ると思いますが、ローポリでもそんなに線は暴れてないように感じます。トゥーンレンダラ・エッジ対策のリトポロジーの成果は出ているようです。

しかし、思い通りにFreestyleで線を出すには結構大変そうですね。じつは、今までBlenderであんまりレンダリングをしたことがなかったのです。こちらももう少し勉強した方がいいかもしれませんね。




おまけ的にFreestyleで漫画風に「キラーン!」のレンダリング(笑)。目にも色々モーフは仕込んでいるのですが使う機会がないので使ってみました。吹き出し等はコミPo!です。

BlenderのFreestyleは輪郭線の有無をメッシュ上で指定することが出来ます。Shadeのトゥーンレンダリングの輪郭線もそういうことが出来たらいいと思うのですけどね。


テーマ: CG ジャンル: 日記
POSER PRO 11 SR8 リリース
POSER



POSER PRO 11のSR8がリリースされていました。まさかSR8までくるとは。




アップデートのリリースノートはSmithMicroのHPではなくフォーラムの方に載っていたのですね。

今回、SR8で気になったのは、
’・PNGs with alpha are now supported.The alpha is discarded, and the PNG is looked as a 24 bit image.’
「アルファ情報を含むPNGがサポートされるようになりました。アルファ情報は破棄され、PNGは24ビットイメージとして見えます。」という記述。

ようやく、POSERもPNG形式の透過グラデーションテクスチャに対応したのかと、早速SR8にアップデートしてDiffuse_ColorやTransparencyに透過グラデーションを付けたPNGをノードリンクして試してみたのですが、特に反映はされませんでした。どういうことなのでしょう??

SR7ではFBXインポートが改善したという記述があったので、今まで試したことのあるFBXモデルで試してみたのですが、前にも読み込み失敗をするものはSR8でもうまく読み込めず、とくに改善したようには感じませんでした。

それでもPOSERはどうもBlenderとは相性が良いらしく、POSERでうまく読み込めなかったFBXモデルもBlenderを介してエクスポートしたものだとうまくいく確率が上がります。

Blenderで作ったオリジナルフィギュアの「まいティーちゃん」はまだPOSERで試したことがなかったので、試しにインポートしてみてチェックしてみようと思いました。テクスチャ等のマテリアルの設定をしていたら、PNGで透過表現をしてあるテクスチャの透過が反映されていました。あれ?




POSER PRO 11にFBXでインポートしたまいティーちゃんです。即席なのでライトをDiffuse IBLにして陰影を無くしてトゥーンマテリアル調にしています。Geometric Edge Linesで輪郭線を付けています。(ちょっと画面が暗かったですね)







PNGの透過で描いてある頬の赤らみがPOSERでも再現されています。ちなみに、目の影もPNGの透過です。

ただ、この直前にPOSERのプリミティブの平面に透過テクスチャをあてがってテストした時は透過は反映されませんでした。

何が違うのか考えてみたら、まいティーちゃんのテクスチャはUV情報を持っています。もしかしたら、そういうことなのか試してみました。




Blenderで平面をUV展開して、そこに赤と透明でグラデーションにしてあるPNGテクスチャを貼り付けてFBXでエクスポートしたものをPOSERにインポートしてみたら透過が表現されていました。

では、何故POSERのプリミティブに直接張った場合は反映されないのだろうと思っていたら、カラクリがわかりました。




この平面に貼ってあるイメージは「red_transparency.png」という名前です。Diffuse_Colorにはその画像がノードリンクされているのですが、Transparencyには「red_transparencyRGB_ZERO」という見覚えがない画像が設定されています。



どうやら、インポートするオブジェクトに透過情報を持つPNGが使われているマテリアルがあれば、PNGの透過情報をグレースケールに変換したRGB_ZEROという語尾が付いたイメージを生成し、Transparency(透明度)に自動的にノードリンクさせるというようになっているみたいです。

そして、Diffuse_Colorにはアルファ情報が破棄された24ビットイメージとして見えるPNGが使われるというという話なのでしょう。ようするに、red_transparency.pngは透過情報を持っていても均一に赤いテクスチャ扱いというわけです。

まいティーちゃんのところにも語尾にRGB_ZEROが付いたグレースケールのテクスチャーが作られていました。

結局、Diffuse_ColorやTransparencyで透過PNGが扱えるようになったわけではないようです。Transparencyは今まで通り黒を使うということで変わらないようですね。もう少し詳しく書いておいて欲しいものですね。(^^;)

ついでに、今回インポートしたマイティちゃんですが一応動かせるのですが、じつは中身が凄いことになっています。



何故かマテリアルごとにフィギュア扱いになっていて、各マテリアルに全身のボーンが付いてしまっています(汗)。Unityにインポートして使っていたものと同じFBXなのですが、どうなっているのでしょう?

POSERでのFBXはファイルごとに安定感がないですねぇ。いつか、解決する日が来るのでしょうか。


テーマ: CG ジャンル: 日記
Unityで揺れモノを風で揺らす表現
Unity


「Unity揺れ物スクリプト」でも揺れモノを風で揺らす表現が出来たらいいなとちょっと取り組んでみました。

ユニティちゃんアセットの「SpringBone」は「RandomWind」というスクリプトで揺れモノを風で揺らす表現をさせることが出来ます。

「RandomWind」も参考にさせてもらい、パーリンノイズを使って「Unity揺れ物スクリプト」に揺れモノが風で揺れる機能を追加する「YureWind」スクリプトを書いてみました。


YureWind.cs
using UnityEngine;

  namespace Yuremono {

      public class YureWind : YureManager {

        [SerializeField, Range(-3, 3)]
        private float WindForceX = 0.0f;
        [SerializeField, Range(-3, 3)]
        private float WindForceY = 0.0f;
        [SerializeField, Range(-3, 3)]
        private float WindForceZ = 0.0f;
        [SerializeField, Range(1, 3)]
        private float WindSpeed = 1.7f;
        [SerializeField, Range(0.001f, 0.01f)]
        private float noiseStrong = 0.004f;
        public bool moreDynamic = false;

        public bool strongWind = false;
        [SerializeField, Range(-3, 3)]
        private float strongWindL = -2.0f;
        [SerializeField, Range(-3, 3)]
        private float strongWindR = 2.0f;
        [SerializeField, Range(1, 2)]
        private float WindCycle = 1.0f;

        float timer = 0;
        float timer2 = 0;
        float wfx;

        void Start() {
            wfx = WindForceX;
        }

        void Update() {
            if (moreDynamic) {
                timer += Time.deltaTime;
                if (timer >= 0 && 3 > timer)
                    WindForceX = Mathf.MoveTowards(WindForceX, wfx * 0.8f, 0.002f);
                else
                if (timer >= 3 && 5 > timer)
                    WindForceX = Mathf.MoveTowards(WindForceX, -wfx * 0.8f, 0.05f);
                else
                if (timer >= 5 && 6 > timer)
                    WindForceX = Mathf.MoveTowards(WindForceX, wfx, 0.1f);
                else
                    timer = 0;
            }
            if (strongWind) {
                timer2 += Time.deltaTime;
                if (timer2 >= 0.0f && 0.1f * WindCycle > timer2)
                   WindForceX = strongWindL;
                else
                if (timer2 >= 0.1f * WindCycle && 0.2f * WindCycle > timer2)
                   WindForceX = strongWindR;
                else
                    timer2 = 0;
            }
        }

        void LateUpdate() {
            float pnoise = Mathf.PerlinNoise(Time.time * WindSpeed, 0.0f) *
            noiseStrong;
            for (int i = 0; i < springBones.Count; i++)
                springBones[i].springForce = new Vector3(pnoise * -WindForceX,
                pnoise * WindForceY, pnoise * -WindForceZ) * WindSpeed;
        }
    }
}
(YureWind.csは、https://yahoo.jp/box/_e4KIDに置いてあります)


「YureWind.cs」を使うためには、nscripter.comさんのところで公開されている「Unity揺れ物スクリプト」が必要です。

この「YureWind」スクリプトは「YureManager」スクリプトと同じところにアタッチして使います。YureWindクラスはYureManagerクラスをスーパークラスとして継承させるかたちにしています。




揺れ方をカスタマイズできるように色々盛ってみました。

「Wind Force XYZ」はXYZ各軸に沿って風の吹く方向を変えることが出来ます。ここの値はグローバル座標なのでキャラクターを回転させれば揺れ方も変わります。

「Wind Speed」はパーリンノイズの周期を変化させることで風速を変えているように見せます。「Noise Strong」はパーリンノイズの値幅を変えることで揺れ幅を抑えたり、より大袈裟な動きにしたい時に使います。

だだ、これだけだと一方向に吹いたきりになり、動きが少し物足りないと思います。それで、2つの風揺れパターンのアルゴリズムを付けてみました。

「More Dynamic」にチェックを入れると、例えば右向きに吹いていた風が左向きに変わってまた右向きに戻るという動きになります。この時、ループさせるために実行前に設定した「Wind Force X」の値をキャッシュしておいて使用しているので実行中はインスペクターから「Wind Force X」の操作は出来なくなります。

「Strong Wind」にチェックを入れると、強風でバタバタと髪や服が左右になびく様な動きになります。「Strong Wind LR」の値で「Wind Force X」を0.1秒ごとに交互させています。この値をLは-1、Rは3などと平行にずらせば斜め前から吹く風も表現できます。「Wind Cycle」を大きくするとバタバタする速さは遅くなります。

「YureWind」を使ったデモ動画を作ってみました。髪の長いキャクターの方が分かりやすいかと思い、カレンを使ってみました。今回はスカートはクロスではなくボーンを使っています。


YouTubeの動画元はこちらです。


ImgurでGIF動画にするには15秒以内にしなくてはならず、そのため時間ぴったりに一連の動作が収まるようにスクリプトから「YureWind」の値を操作しています。




いい機会だったのでカレンの直そうと思っていたところの修正をいくつかしました。何箇所かのメッシュの修正と髪のテクスチャを描き直しました。シェーダーは「ユニティちゃんトゥーンシェーダー」に変えました。透過テクスチャを使わなくても眉が透けて見えるようになりました。




あと、髪ボーンの追加です。はじめ、カレンの後ろ髪のボーンは一列で4本だけでした。それはMMDモデルなら一本のボーンでも板状の剛体を付ければ髪の幅をカバーできると想定していたからでした。




しかし、「Unity揺れ物スクリプト」ではコリダーは球状のみなのでボーン一列では腕にコリダーを付けても届かないので貫通しやすくなってしまいます。

より自然に風でなびかせるためにも髪の束をそれぞれ独立させておいた方が良いかなとも思いました。それで後ろ髪のボーンを大幅に増やしました(4本→44本)。

今回試してみて、よりなめらかな揺れをさせるためには一列8本ぐらい必要かとも思いました(44本→88本ぐらい)。ゲーム用ならこのままで妥協も出来ますが映像用となれば多くするべきでしょうね。

「YureWind.cs」については「Unity揺れ物スクリプト」の製作者様同様、私も権利は主張いたしません。ご自由にどうぞ。


~後日追加~


pixivのうごイラに110フレームほどのショートループ版を投稿していたのですが、こちらの方が画質も良く、揺れ方も15秒版とは違う感じでうまくまとまってくれたので、もし良かったらこちらも観てみて下さい。
テーマ: CG ジャンル: 日記
Unity、クロス、ボーン、試行錯誤
Unity



前回触れました、まいティーちゃんのスカートのUnity上での挙動の件にについて書いておきたいと思います。

とりあえず、MMDでも動かせるようにスカートにはボーンを付けていましたが、クロスシミュレーションの方が自然な動きになってくれそうかなと思い、Unityではクロスコンポーネントを使う予定でした。




まず、スカートにクロスコンポーネントをアタッチして、スカートの頂点にクロスコンストレイントを設定します。そして、足と腰にコリダーを設定して動作テストしてみました。




そしたら、スカートのメッシュがとんでもないことに!?

まさに、メッシュの爆発状態ですねぇ(汗)。前にカレンでクロスを使った時は普通に使えたのですけど。あの時のUnityのバージョンは5.4でしたが今回は2017です。それが原因なのか?

5.4は5.6を入れる時に上書きしてしまったのですが、2017を入れる時は念のため5.6を残して置いたので、そちらでも試してみたのですがメッシュは同じく崩壊状態でした。

それで、もっとシンプルなモデルで試したらどうなのかと、Blenderで簡単なモデルを用意してFBXで書き出して試してみたら、やはりクロスを設定したメッシュは形状が崩壊してしまいます。

まいティーちゃんは一からBlenderで作ってあったのですが、カレンはShadeで作ったものです。まさかそれが原因だったりするのかと、Shade3Dでも同じようなテストモデルを作って試してみたら、そちらは普通でした。




左の緑のがShade3Dで作ったもの、右の青いのがBlenderで作ったものです。それぞれ、アニメーション付きのFBXで書き出したものをインポートしたものです。




GIF動画にしてみました。クロスの設定は3つとも同じです。セッティングは「Stretching Stiffness」、「Bending Stiffness」が共に1。「Damping」が0.5です。

Shadeで作ったものは元の形状を保っているのですが、どういうわけかBlenderで作ったものはメッシュの元の形状を保てず伸びきってしまってます。理由は分かりません。(汗)

FBX形式は何かと相性とかが問題になったりします。一応、Autodesk FBX Converterでバージョンの変換とかも試してみたのですが改善はしませんでした。

では、FBX形式じゃなかったらどうなのだろうと、Blenderから傘の部分だけOBJ形式で書き出して、Unity上で左の青いモデルを複製して、その傘の部分を付け替えてみたものが真ん中の赤いメッシュです。こちらは形状を保っています。

とりあえず、Blenderで作ってあってもOBJ形式のメッシュならメッシュの破綻はないようです。しかし、カレンはShadeで作ってあってもFBXのエクスポートはBlenderからしていました。元のメッシュがどのソフトで作ってあるかが関係しているのか、はたまた自分の環境だけそうなるのかは分かりません。

それでとりあえず、まいティーちゃんのスカートのみをOBJ形式でインポートして取り替えてクロスコンポーネントを付けてテストしてみました。

形状は保てるようになったのですが、今度は黒いノイズが現れる様になりました。




スカートは溝もメッシュで段差を付けて作っておいたのですが、そこの頂点が近すぎるために揺れる時に奥の頂点が表側より前に出たりするのが原因のようでした。




それで、溝の段差を無くして単純なメッシュ構造に変更してみました。モデラーとしては溝も凝ってみたのですが、揺らしてみて不都合となるようなら修正せざるを得ませんね。動き重視です。(あと、若干全体的に膨らませました)




黒いノイズは出なくなりましたが、なんか想像していた動きと違っていました(もっと形状を維持してくれるのかと)。しかも、なんか動作も少し重いような感じもありました。それで、クロスは諦めてボーンでやることにしました。




スカートの前のボーンは始めは一本だったのですが、一本だと横に振られた時に大袈裟に動いてしまうので、ボーンを2本に変更して影響を分散させることにしました。

スカートの場合、複数のボーンの影響を受けた方がより自然になるということでウエイトは自動でやり直しました。こういうのはケース・バイ・ケースですね。

使わせてもらっている「Unity揺れものスクリプト」はシンプルでコリジョンと自然な揺れを表現できる素晴らしいスクリプトです。ただ、剛体形状が球のみなので、ぶつかった角度に対して素直に跳ね返るし隙間も出来やすいので、スカートのように平面的なものを表現したい時に少し考えなくてはならなくなります。

MMDだとスカートには、広がっても突き抜けにくく前後に揺れやすい板状の剛体を使うのが一般的なので少し困りました。




そこで、腿のところと股間辺りの2箇所にコリダーを置いてスカートのボーンをなるべく前に弾くようになるようにしました。片側の足を上げた時、反対側のスカートも前方に動くようにすることでうまくごまかそうという訳です。




股間のところのコリダーが無いとメッチャ左右に揺れてしまうことになり後ろ側に比べると結構前だけ横方向に大袈裟な動きになってしまいます。それよりはまだマシに見えるかなという感じです。

走らせることを前提としているのならば、お椀型のようにスカートの前方をもっと広くして足から離れるようにしたらもう少しすんなりいったかもしれません。ちょっと、このキャラには将来的にはギターとかも持たせてみようかなとか思っていて前面はあまり広がらないようにしておいたのです。

Blenderで作ったメッシュは本当にUnityのクロスシミュレーションと相性が悪いのか気になります。ググっても同じような症状になるという話題は見かけませんでしたので、自分環境なのでしょうかね。

今思えば、スカートをShadeで作ってクロスを試してみれば、また印象が変わるのでしょうか。

先程の傘モデルのように、同じ「Stretching Stiffness」、「Bending Stiffness」が共に1の設定でも、緑のShadeの傘は元の形状を保っていますが、赤いBlenderの傘は垂れてなんか柔らかい感じがします。クロスが垂れないのならShadeで作り直してみる価値もあるかもしれませんが、今すぐには気力が湧きませんね。(^^;)

揺れものは一筋縄ではいきませんねぇ。走らせるのならホットパンツとかならもっと楽だったとは思いますが、何事もやってみないと分かりませんからね。

あと、Unity 2017はインスペクターからは日本語入力が出来なくなってしまいましたね。必要があれば、メモ帳に書いてからコピペという感じです。次のアップデートでは対応してくれるとよいのですが。


~後日追記~

BlenderからスカートのみをFBXでエクスポートしてクロスを試してみたら、OBJと同様でメシュの崩壊はありませんでした。しかし、同じく柔らかくて垂れますね。

関連記事:

Unityでオリキャラのモーションテスト

テーマ: CG ジャンル: 日記
Unityでオリキャラのモーションテスト
Unity



さて、Blenderで作り上げたオリキャラをUnityにFBXでインポートしてみた図です。Unity 2017使ってみました。




そろそろ、このキャラクターの名前を決定しておくことにしました。

その名も『桃実沢まい』。小柄で華奢な割にはけっこう力持ち、チャレンジ精神が旺盛で身体能力も並外れているところから、周りからは「Mighty」をもじって「まいティーちゃん」と呼ばれている、という感じで。(^^;)




シェーダーは「ユニティちゃんトゥーンシェーダー2.0」を使ってます。今回は、前髪に隠れている眉を透けて見えるようにしてみました。ただ、眉と髪が同じ色だと境目が分からなくなってしまうので、より効果的にするために眉のテクスチャに輪郭線を描き足しました。




設定の仕方は、隠れているもの(眉)のシェーダーを「StenciMask系」に、透かして見せるもの(前髪)のシェーダーを「StenciOut系」にすると言う具合です。




「ユニティちゃんトゥーンシェーダー2.0」ではポリゴンの片面表示と両面表示の設定が出来るようになってます。デフォルトで「BACK」になっていてスカートの裏側が黒かったのですが「Cull Mode」をOFFにすると両面表示になりました。




Blenderでモデルを作ってモーションを付けてもUnity上でどう動いて見えるかは実際にUnityで動かしてみないと分かりません。それで、まいティーちゃんにBlenderでいくつかアニメーションを作ってUnityで動作チェックしてみました。


今回もImgurのGIF動画にしてみました。

元のYouTube動画はこちら
https://youtu.be/kiVnTLmzjUc


前に作った動画の画質が悪くてどうしたものかと思っていたらブラウザにもよるみたいですね。普段IE11を使っているのですが、Chromeで見てみたら普通に綺麗でした。なんででしょう?




一応、モーションの解説的なものを。まず、「待機」です。ここから各モーションへ分岐するということに。

キーボードのキーにも各モーションを割り当てていたのですが、動画的にUIボタンも付けてみました。「走る」と「ピース」はボタンを押したら3秒間モーションを再生するとしてみました。




「走る」です。今まで走るモーションはいろいろなソフトでチャレンジしましたがかなり苦戦したものです。意外にもBlenderが一番付けやすかったですね。Blenderだとボーンコンストレイントを簡単に設定できるので今後はモデリングだけではなくモーション付けにも大いに役立ってくれそうです。

髪やスカート等の揺れモノは今回も「Unity揺れものスクリプト」を使わせてもらってます。リボンの動きがちょっとコミカルで面白いですね。やはり、手付けではこんなに自然な動きは付けられません。

ただ、難航したのはUnity上でのスカートの挙動です。結局、かなり試行錯誤と修正が必要でした。これについてはまたの機会に。




「がんばるぞい!」。ではなく、「よし!」です。(笑)




「おー!」。本当は「やったー!」のつもりでしたが思っていたよりモーションが短かったので「おー!」に変更しました。(^^;)

髪用として左右の肩にコリダーを付けていますが、左腕を上げたとき髪が貫通しないように左腕にさらに2つコリダーを追加してあります。うまくいったようです。




「ピース」。実際にピースする時は薬指と小指はぎっちり握ってないんですよね。あと、腰に手を当てるときは腰骨の手を置く方が少し上がるのが自然です。これらも作った後に気がついて修正です。




「ユニティちゃんトゥーンシェーダー」だとリアルタイムでのベタ塗りの影がいい感じですね。逆光の演出も使えそうです。




せっかくなので、「走る」の別角度を「うごイラ」にしてみました。



関連記事:

Unity、クロス、ボーン、試行錯誤

テーマ: CG ジャンル: 日記
Blenderで衣装を作る
Blender



Benderでオリジナルのフィギュアを作っていたのですが、衣装がなかなか決められなくて長らく作業がストップしていました。

とりあえず、完成させてしまおうと衣装を決めてみました。





衣装はデザインを決めてしまってからは早いものでモデリング自体は大体3~4時間ぐらいで完成させました。

はじめは、スポーティーな衣装を考えていたのですが、うまくイメージがまとまらずウェイトレス風な衣装に変更しました。とりあえずはうまくまとまったとは思います。気力が湧けば他のも考えたいですが、しばらく湧きそうもありません。f(^^;)

自分の場合、キャラクター自体はすぐに描いたり出来るのですが、衣装がなかなか決められないんですよねぇ。自分にとってはフィギュアをモデリングすることより衣装を考えることの方がはるかに難しいことかもしれません。(汗)

しかし、モデリングの後はテクスチャを描くのでモデリングの5倍ぐらいの時間がかかっているかもしれません。
(テクスチャは凝りだすと出すとキリがなくなってくるんですよねぇ、汗)








今回、衣装のテクスチャは全部Blenderのペイント機能だけで描いてみました。

Blenderではマテリアル設定や画像設定など切り替える時は結構ややこしくなり面倒だなと感じる部分が多々あるわけです。

こんなとき、「yPanel」というペイント機能を便利に強化してくれるアドオンがあるのです。これはとても秀逸でペイント時にUVの画像を簡単に切り替えたりペイントソフトのように簡単な操作でレイヤーを重ねて描くことも出来ます。

服の模様や髪のハイライトとかもレイヤーを使えば気が済むまで描き直すこともできます。

あと、今回は使ってませんがバンプなどもペイントできるし、その描いた凹凸をノーマルマップに変換する事も出来ます。Blenderの機能をよりリッチにしてくれるとてもありがたい今では欠かすことのできないアドオンです。





リギングと足IKも付け終えています。このキャラはUnityで動かすことが前提なのでスカートはクロスシミュレーションを使えばボーンは入れなくてもいいのですが、一応MMDでも動かせるようにしておこうとボーンを入れてあります。

髪とスカートのスキニングは自動では不自然なところが出るのは当たり前なのでいつも手動で設定しています。自分の場合、ウェイトペイントというのはどうも苦手ですね。やりだすとキリがなくなってくるというか。

きっちり数字で管理したい自分としては、こういう場合は事前にスキンのウェイト値を計算してノートに表に書いて手動で設定しています。


そういえば、先月ZBrush 4R8がリリースされましたね。でも、やはり自分にとって今すぐ必要とか思わないかなぁ。

自分の場合、まず動くキャラを作りたいわけです。動かすとなるとボーンを入れてスキニングすることになります。自分でポリゴンモデリングをする時は、後で入れるボーンに対する頂点のウェイト値を考えながらポリラインを増やしてきます。そうして作れば、後でウェイトを手動で設定したい時などは作業がやりやすくなります。

スカルプトでは、ハイポリで作った後に自動でリトポロジーしながらポリゴンリダクションしていきます。そこで出来たポリラインはある程度は意に沿っていたとしても結局は機械的なもので、それをそのまま人がウェイト設定するのはおそらく大変だろうなと思います(まだやったことはないですけど)。

(なおさら、ZBrushCoreでモデルを作ってBlenderでリトポというのは手間がかかり過ぎて現実的ではないかもしれませんね。これはやってみましたが)

後からの手間を考えれば、ローポリモデルを作るのならスカルプトより、やはりポリゴンモデリングの方が向いている気はします。でも、それは人それぞれなのでしょうね。ポリゴンモデリングよりスカルプトの方がやりやすいという人もたくさんいるようですし。

とりあえず、今のところ自分はBlenderでのポリゴンモデリングでとくに不満もありません。Blender様様ですね。(本音を言えば、資金に余裕があったらもちろんZBrush 4R8にも手を出したいところなのですが)



関連リンク

Blenderでフィギュアを作る

Blenderでテクスチャーペイント

・Blenderで衣装を作る

テーマ: CG ジャンル: 日記
Shade3Dで学校でも作ってみる
Shade 3D



学校3Dモデルを作っておけば漫画用の背景素材やゲーム用のアセットでも使えるだろうし、ここは一つShade3Dで作ってみようということで建設開始してみました。




まず教室内部。やはりShadeはこういう寸法が決まっているようなものを作るのが得意なのですよね。サクサク作っていけます。




黒板や掲示板、窓やフレームもきっちりした寸法で作ってあります。蛍光灯も実際の製品のCAD図を参考にほぼ同じサイズで作ってあります。







この教室を1ユニットとして同じような教室はリンクで複製して重ねていきます。(パーツが結構な量なのでリンクを使わないとだんだん動作が重くなってしまいます)







とりあえず、階段も作り4階ぐらいに重ねてみるといかにも学校っぽく見えてきますね。(屋上は重要なものですからね、後からちゃんと作ることにしましょう^^;)

しかし、今までのShadeだと込み入ってくると中の様子を確かめるのが非常に困難になってくるのでした。




ここで、ver.16の新機能の「切断面表示」を使うとオブジェクトを好きなところで切断して簡単に中を確認できます。




X軸の「切断面表示」。




Y軸の「切断面表示」。




Z軸の「切断面表示」。

確かにあると便利な機能ですね。GIFアニメにしてみましたが、今のところShadeでは「切断面表示」にキーフレームを打つことは出来ずアニメーションには出来ません。切断面アニメーションが出来たらけっこう面白いと思うのですけどね。

しかし、ここまでで完成の8分の1ぐらいでしょうか?先はまだ長いですね(^^;)。一度、一から校舎や校庭全部作ってみたいとは思ってはいたのですが、なかなか時間が回せず気が向いたらという感じになりそうです。

でも、建物を作るのも楽しいですね。


テーマ: CG ジャンル: 日記
カテゴリ
ini-T MUSIC SKY
プロフィール