■ [Houdini]剛体破壊をテクスチャに焼いてUnityに持っていく(3)
頂点カラーに焼かれていた回転中心をuv3に持っていけないかとデフォルトのvexを書き換えたりして試したけど、モデルが壊れるだけでうまくいかず。
出力部分と同等のものをゼロから作ろうとしてみてるけど、テクスチャの出力がグリッドの板ポリに頂点カラーを割り当てたものをカメラで撮影して作ってるっぽい。
ライトの設定とか、exrを出力してもUnityで読めないとかわからない点が多くて困ってるが、一通りこの辺が動くようにできれば理解は深まりそう。
調査メモ:
テクスチャを出すために、今のフレームの頂点位置を頂点カラーに焼いた横長のグリッドを作って、それをBlockBegin-endでマージしながら合成した板を作り、その板をレンダリングしている
レンダリング時にはcameraと同階層にMaterial Networkが置かれていて、その中にMaterialBuilderでConstantのシェーダーが置かれている。コメントには"Created from Gallery Entry: Constant. Mantra Constant Shader"と書かれているので、なにかコンスタントなシェーダーを作る方法があるのかもしれない。
描画するTEXTURE_MESH のGeometryに../matnet1/constant のシェーダーが割り当てられていた。
Houdiniでの任意のテクスチャの出力方法
シェーダーをGetmetryに割り当てる方法
- Material Networkを任意の場所に作れる。今回は、out/objnet1の下に作る。
- Material Palletを開いて、out/objnet1/matnet1 に Constantのシェーダーをコピーすれば、matnet1にConstantのシェーダーが増やせる。
- GeometryのRenderタブのMaterialから作成したシェーダーを割り当てることで、該当Geometryに任意のシェーダーを設定することができる。
Render Viewから任意のカメラを設定することで、レンダリング結果を確認できる。
カメラの設定と出力解像度
- ViewタブのResolution のXYで、出力テクスチャの解像度が決まる。レンダーターゲットの縦横比もこの時点で決まる。
- ProjectionをOrthographicにして、Ortho Widthを設定することで、横幅が決まる。縦の長さは出力テクスチャの解像度に依存
- なので、Ortho WidthはResolutionの横幅と一致させるようにする
テクスチャの出力
- outにMantraノードを作って、Cameraに適切なカメラを設定する
- "Render to Disk"のボタンでOutput Pictureにファイルを描きだす。
- Output Deviceでテクスチャフォーマットを決める
- OutputタブのPixel Filter は"minmax max"になっていた。内容は要確認…
- Quantization は 32bit float になってた
たまにUnityで読めない.exrができちゃうんだけど、何をミスってるんだろう…
とりあえずexrのテクスチャが吐けたのでノード構成をメモ
- 基本はvertex_animation_texture_bataのrigid_objを改変したもの。
- pointwrangleで頂点数分の横長のポイント列を生成して、copyPointsでgridを並べて横長のグリッドに変換し、block_begin-endでtimeshiftしながら時系列にループさせて縦に並べる
- block_metaでblock_beginのループ回数を取得できるらしい。
- wrangleで1番目につないだノード(左端は0番目)の頂点数は、[npoints(1)]で取得できる
- 今回は、wrangleに ch("vert_count") と書いて、右側のボタンを押すとwrangleのパラメータを追加できる。そのパラメータにnpoints(1)を設定して、頂点数を取得していた。
- テクスチャの幅は、cameraのviewのResolutuion.xとOrthoWidthには npoints("../geo1/object_merge1") を設定して、Resolution.yには bbox("../geo1", D_YSIZE) を設定
モデルの出力側
- unpackして頂点を展開してから、pointWrangleでuv2を生成して、vertexにpromoteする