2017-08-17

[]剛体破壊をテクスチャに焼いてUnityに持っていく(3) 剛体破壊をテクスチャに焼いてUnityに持っていく(3) - Nao_uの日記 を含むブックマーク はてなブックマーク - 剛体破壊をテクスチャに焼いてUnityに持っていく(3) - Nao_uの日記 剛体破壊をテクスチャに焼いてUnityに持っていく(3) - Nao_uの日記 のブックマークコメント

頂点カラーに焼かれていた回転中心を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のテクスチャが吐けたのでノード構成をメモ

f:id:Nao_u:20170819110601p:image

  • 基本は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) を設定

モデルの出力側

f:id:Nao_u:20170820132323p:image

  • unpackして頂点を展開してから、pointWrangleでuv2を生成して、vertexにpromoteする