(木)動的にモデルを読み込むおはようございます。プログラマーのM.Iです。今年もCEDECが近づいてきました。ゲーム開発では効率化のため、モデルの修正をリアルタイムで確認したい、といったモチベーションがあります。ゲームを動かしながらモデルを修正できれば調整しやすくなりますし、シェーダがのった状態で確認できるのもいい点です。Unity等だとVRで見られるので、知識があればVRでのアニメーションやモデリングツールも作れるかもしれません。間近でモデルを見ることで確認できる不具合もあるかもしれないですしね。言うわけで今回のお題はモデル・テクスチャを動的に読みこむ方法です。UnityではSkinnedMeshRendererのsharedMeshを変更すれば動的にモデルを変更できます。頂点や面、マテリアルは以下で設定できます。テレビのリモコンのモデルがあるとすれば、ゴム部分、プラスチック部分、金属部分の3つのマテリアルが必要ですね。1);と呼ぶとマテリアル毎の面を作ってくれるというわけです。ちなみにMeshTopology.Pointsにすれば頂点のみ描画してくれるようになります。形が違うモデルを複数用意しておき、それぞれの形をブレンドする事をブレンドシェイプと言います。プログラム的には頂点のインデックスと、どのくらい移動するかのオフセットさえあれば計算できます。ブレンドシェイプは以下のようにすれば追加できます。第2引数は複数フレームのブレンドシェイプを作る場合のウェイト。);美顔ライトなどで影の入り方も調整する場合、法線のオフセットも設定できるようです。スキニングはunity公式のバインドポーズのページをもとに、骨インデックスやウェイト等を設定すればいいので割愛します。tex;これをマテリアル分作れば、SkinnedMeshRendererのmaterialsに設定できます。最後にSkinnedMeshRendererのsharedMeshにメッシュを設定すれば反映完了です。※クリックで拡大表示maya等からモデル情報をudpなりで送ればボタンを押すだけでゲームエンジンに反映、といったことができるわけです。.netの資源があるのでBinaryReader、Writerを使えばデータの入出力もできますしね。バインドした骨オブジェクトを動かせば骨を動かせますし、SkinnedMeshRendererのSetBlendShapeWeightでブレンドシェイプも確認できます。ちなみにUE4ではProceduralMeshComponentを使えば、動的にメッシュ作成ができそうなのですが、UV設定やマテリアル等はできそうなのにスキニング設定周りが見当たりません。ProceduralMeshの機能はプラグインとして提供されていたので、Engine\Source\Runtime\Engine\Private\Components\SkinnedMeshComponent.cpp辺りを参考にすれば実装できるかもしれないですね。技術交流の業(2019.03.07)福袋争奪戦デビュー(2019.01.31)温泉旅行(2019.01.24)ゲーセンの近況(2018.11.29)健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)コメントコメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。