■概要
Arnold に Triplanar という6つの側面から投影してテクスチャをマッピングする機能があります。
この機能には座標空間(Coord Space)を指定するパラメータがあり、その中に Pref 座標を指定できるのですが、その使い方について説明をします。
■Pref 座標
ドキュメントによると、下記のように説明されています。
Pref は「vertex in reference pose (参照ポーズの頂点)」の略です。プラグインは(通常の変形した頂点とは別に) Arnold にこれらの頂点を渡し、ノイズ シェーダで照会できるため、ノイズが参照ポーズに「くっ付き」、メッシュの変形に合わせてずれなくなります。
トライプラナー - Arnold for Maya User Guide - Arnold Renderer
■"Pref"に設定しただけでは動作しない?
aiTriplanarを接続したシェーダーでTriplanarのCoord Spaceをobject, pref に設定してアニメーションさせてみました。
それぞれの設定でレンダリングして、アニメーションを比較しましたが、差異は見つけられません。
Coord Space: Object
Coord Space: Pref
■Pref の設定方法
Pref を設定するには、事前にTriplanarを使用するメッシュに専用のアトリビュートを追加する必要があります。
以下は、アトリビュート追加のサンプルスクリプトです。
Maya2020(Python2系)の場合
import maya.cmds as cmds
def add_pref():
# using maya python
sel = cmds.ls(sl=True, dag=True, shapes=True, type="mesh" )
for obj in sel:
vertPosTemp = cmds.xform(obj + '.vtx[*]', q=True, ws=True, t=True)
# split the resulting list into sets of 3
vertPos = zip(*[iter(vertPosTemp)]*3)
cmds.addAttr(obj, ln="mtoa_varying_Pref", dt="pointArray")
cmds.setAttr(obj+".mtoa_varying_Pref", len(vertPos), *vertPos, type='pointArray')
add_pref()
Maya2022(Python3系)の場合
import maya.cmds as cmds
def add_pref():
# using maya python
sel = cmds.ls(sl=True, dag=True, shapes=True, type="mesh" )
for obj in sel:
vertPosTemp = cmds.xform(obj + '.vtx[*]', q=True, ws=True, t=True)
# split the resulting list into sets of 3
vertPos = list(zip(*[iter(vertPosTemp)]*3))
cmds.addAttr(obj, ln="mtoa_varying_Pref", dt="pointArray")
cmds.setAttr(obj+".mtoa_varying_Pref", len(vertPos), *vertPos, type='pointArray')
add_pref()
実行すると、メッシュにmtoa_varying_Prefのアトリビュートが追加されます。
レンダリング結果を確認すると、メッシュのアニメーションに応じて、テクスチャが移動しているのわかります。
Coord Space: Pref
テクスチャがメッシュに追従するようになったのはいいのですが、Triplanarが6方向からの投影であるため境目にあたる部分がちらついています。Blendの値を上げます。
Coord Space: Pref, Blend=0.2
境目の部分がブレンドされて、ちらついていた部分がなくなりました。