SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

Houdini Tips ポリゴン数へらしたモデルつくりたい


 ポリゴンを均一にならして、ざっくり減らしたモデルを作りたい(当たり判定とか、表面を覆うバリアのようなモデルをつくるとか色々応用がきくであろう)TIps

そのままRemeshノード作戦

 もとの形状を維持して、エッジの長さを基準になるべく均一にリメッシュしたり

詳細モードで細かいところは細かく、荒いところはあらくリメッシュしたりできます。しかし、もともと細かいところは必然的に細かくなりますし、ざっくりとしたリメッシュにはあまり向いていない印象でした。

 

Reduceノード作戦

 ポリゴン数を減らすことができます。できますが、うまくいったためしがありません・・・。%で指定できるのですが、ポリゴンに意図せぬ穴があいたり、キープしたいエッジが欠けたりしました。しかし、RemeshしてReduceするとうまくいくことがあります。

 

VDB作戦

 

 一旦VDB(ボリュームデータ)に変換して、ポリゴンに変換、最後にRemeshをかけるやりかたです。細かいディテールをつぶしてリメッシュがかけられるので、わりと有効な方法でした。ただし元の「メッシュの流れ」は完全に消失するので、それがいやな場合は使えません。

1.元のポリゴンを閉じたメッシュにするためPolyfillで適当に穴をふさぐ

2.VDB from Polygonsでメッシュをボリュームデータへ変換(このあたりでディテールの荒さを調整)

3.Convert VDBでConvert to Polygonsにしてポリゴンへ変換

4.Remeshノードでポリゴン数を減らす。

 

おまけ・デフォームするメッシュをリメッシュする

 アニメーションの入ったデフォームメッシュをリメッシュすると毎フレームリメッシュ処理が走ってとんでもなく重くのと、毎フレームトポロジーが変わるので、よろしくありません。どこか1fだけリメッシュをかけてそれにアニメーションを流し込めないかと方法を探したところ見つかりました。応用がききそうです。

f:id:sui332015:20171003191832p:plain

まず、timeshiftでリメッシュしたいフレームを抽出します。(1fとか)

つぎにリメッシュをかけて、かけたものにrayノードをつなぎます。

rayノードは第一引数のオブジェクトの各ポイントからそのノーマル方向へRayを飛ばし、ぶつかったオブジェクトの頂点の値やUVの値、プリミティブ番号を自分に転写する・・・ような機能をもっているようです。第二引数をリメッシュをかけるまえのオブジェクトに指定しているので、つまりリメッシュ後のオブジェクトにuvやprimnumを転送しているようです。

f:id:sui332015:20171003191835p:plain

 

 次に、attributeInterpolateを使います。これはポリゴン数や形状が違っていても同じエレメントナンバー(この場合プリミティブ番号)、uvを元に第二引数のオブジェクトからアトリビュートを補完転写してくれるノードのようです。これは、元のデフォームしてるオブジェクトを第二引数にしているため、アニメーションが無事転写された。ということになります。

f:id:sui332015:20171003191841p:plain

 

以下のサイトを参考しました。感謝。

genchansansan.blogspot.jp