7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HoudiniAdvent Calendar 2024

Day 17

BlenderからHoudiniのbgeoファイルを出力

Last updated at Posted at 2024-12-18

この記事はHoudini Advent Calendar 2024の17日目の記事です。

初めに

Houdiniのbgeoフォーマットについては前に書いてあるので今回はこんなの作ったよという共有となります。

作ったものは以下にあります。

BlenderからHoudiniにbgeoでデータを受け渡すことで多くの情報を持たせることが出来ます。
記事の内容はほとんどはBlenderとHoudiniのデータの対応表みたいな感じです。

Houdini側でやっていること

今回の内容に直接関わるのはPython SOP1つだけです。それ以降のノードは読み込んだデータの加工処理です。

Python SOPの内容は

  • Blenderにスクリプトを実行させてbgeoを出力する
  • 出力されたbgeoを読み込む

の2つです。実行にはBlenderのexeを指定する必要があります。

python_sop.png

Blenderから持ってこれるデータ

Mesh

BlenderはZ-up、HoudiniはY-upの座標系なのでその変換が入ります。
それ以外は出来る限りそのままの情報を受け渡すのを基本方針としています。

法線

VertexアトリビュートのNで出力されます。

normal.png

UV

Blenderは複数UVを持つことが出来て名前を付けられます。
Vertexアトリビュートでその名前のまま出力されます。

blender_uv.png

houdini_uv.png

Blenderは複数のカラーアトリビュートを持つことが出来ます。
BlenderのVertexカラーはHoudiniのPointのカラーに
FaceCornerカラーはHoudiniのVertexのカラーに対応してその名前のまま出力されます。

blender_color.png

houdini_color.png

頂点グループ

0~1の数値でボーンウェイトやマスクデータなどに使われるものです。
Pointアトリビュートとしてその名前のまま出力されます。

blender_vertexgroup.png

houdini_vertexgroup.png

マテリアル名

マテリアルをHoudini側で再現するのが難しいため名前だけ持っていきます。
Primitiveアトリビュートとしてmaterial_nameで出力されます。

blender_material.png

エッジグループ

シャープエッジとUVシームをエッジグループとして出力します。
シームだけBlenderで入れておいてその後のUV展開はHoudiniでといったワークフローが作れるようになります。

blender_edgegroup.png

houdini_edgegroup.png

シェイプキー

ブレンドシェイプのデータです。
ポイントの位置(P)とVertexの法線(N)だけのメッシュデータとして出力されます。

blender_shapekeys.png

houdini_shapekeys.png

Armature

スケルトンのデータです。kinefxのスケルトンとして扱えるポリラインの形式で以下のPointアトリビュートを持ちます。

  • 位置(P)
  • 3x3の行列(transform)
  • ボーン名(name)
  • ボーンの長さ(length)

ボーンの長さはHoudiniのスケルトンとしては必要ないデータですがHoudini側でボーンウェイトを設定するのにあったら使うかもということで入れてあります。

blender_armature.png

houdini_armature.png

カーブ

Houdiniもカープを扱えるので基本的にカーブのデータとして出力されますが再現しきれていないところがあるといった状態です。Path(Nurbsカーブ)は良い感じに再現出来ていて良い感じです。

またBlenderでHoudiniのSweep SOPのように断面形状を指定してメッシュを生成する機能があるのですがそちらが使われていた場合は追加でそのメッシュも出力されます。

blender_curve.png

houdini_curve.png

Packed Geometry

ここまで多くのアトリビュートを扱いましたがそれをそのままの形で扱うと数が多くて見通しが悪くなります。
本来スケルトン(Armature)にしか必要のないtransformの情報がポリゴンメッシュのポイントに入ってきたり管理が煩わしくなります。

unpack.png

HoudiniにはPackedGeometryという便利な仕組みがありPack化することで一つのプリミティブとして扱えるようになります。
そこでBlenderの一つのオブジェクトを一つのPackedGeometryとすることでHoudiniで読み込んだ時にとてもすっきりとします。

houdin_pack.png

houdini_pack_geometryspreadsheet.png

このnameはBlenderのView Layerと対応しています。
シェイプキーを持つものは.に続けてシェイプキー名がつけられています。

blender_viewlayer.png

BlastノードやSplitノードで必要なものを選択してUnpackすることで各オブジェクトの情報にアクセス出来るようになります。

houdini_unpack.png

Blenderのアドオンにするのかしないのか

BlenderのアドオンにするとBlenderのGUIからbgeoを出力出来るようになります。しかしHoudiniのボタン一つで出力と読み込みが出来る現状で便利なので個人的にはアドオン化する必要がないかなと思っています。

Blenderでオブジェクトを選んでbgeoを出力していくフローを組みたい場合にはアドオン化した方が都合が良くなると思います。

まとめ

個人的に作成したツールの紹介でした。Houdiniのアトリビュートが他のソフトだとどのデータに相当するか等を考えるのも面白いですね。

Houdiniで自動化しやすいようにBlenderでデータ作成するということを意識するようになったので結構おもしろいツールになったんじゃないかと思います。

ではではこの記事が誰かの役に立てば幸いです。

matome.png

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?