No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdini:テクスチャ連番を個別にオフセットする

Houdini回。今回はこういうヤツ。

パーティクルに板を貼り付けたもので、マテリアルとテクスチャ連番画像は共通。
テクスチャのシーケンス番号に対する値をパーティクルごと個別に設定しています。

簡単にできるとおもってたら思いの外手間取ってしまって。
いくつか試して、最終的にinline Code(VOP)を使う方法に落ち着きました。

inline Code(VEX)はVOP内でVEXが書けるノードです。
このノードの詳しい解説はまたの機会に回すとして、やってる事はシェーダー側でのテクスチャパスの作成です。

シェーダー側で使うテクスチャのフレーム番号は、事前にPrimitive Attributeとして作成し、それを用いています。

さて、inline Code(VOP)の記述等を詳しく見てみます。

inline Code(VOP)の入力は2つ。
テクスチャパスを記述したパラメータ”mainPath”と、参照するシーケンス番号のパラメータ”f”。
この2つの入力された値を使って、inline Code(VOP)で次のようなコードを書いています。

string offset = sprintf("%04d", $f);
string str[] = split($mainPath, ".");
$colormap = concat(str[0], "." , $offset, ".tif");

一行目で、シーケンス番号を4桁のstring型に変換。
二行目で入力したテクスチャパスを”.”で配列に分割。これにより、文字列を[出力パス][シーケンス番号][ファイルフォーマット]の3つに分解。
三行目で、文字列を結合してパスを生成。
このパスは、シーケンス番号のパラメータ”f”を使って生成されているので、各プリミティブ毎に使用されるテクスチャもそれに応じたものが適用される。

アトリビュートにシーケンス番号ではなく、テクスチャパスそのものを持たせても良かったのですが、データ量が大きくなるだけだと思い直しやめました。


シーンファイルはこちら TexOffs_Sample.hip


この方法の難点は、シーンビュー上では全て同じテクスチャが適用されて見えること。
レンダリングしてみなければ、結果が確認できない。
シーンビューで確認するためには、おそらく、それ用にOpenCL(シェーダー?)をカスタマイズしなければいけないが、やりかたが分からない)

もっと楽で画期的な方法が存在する予感はあるんだけどなぁ。
SpliteSheet作るのも同じくらい面倒に感じてしまうし、CVEXも同様。

誰か知ってたら教えてください。

以上!

関連記事

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

ほしい?(複数可)

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2018 (16)
  • 2017 (29)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (54)

スポンサードリンク