mental ray シェーダ言語拡張

 
 
 

名前付けのガイドライン

Maya 独自の構文拡張機能

ノードの各アトリビュート、そしてノード自身に、パラメータを追加することができます。mental ray のシーン記述言語にはこういったパラメータに相当する機能がないので、アトリビュートやシェーダ、フェノメナごとに与えられる特定のキーワードを認識するため、ファクトリ パーサは標準の mental ray 構文を超えた解析ができるように拡張されました。

キーワード付きでアトリビュートを追加する

.mi 宣言ファイルにキーワードを入れると、ノードの各アトリビュート、またはノード自体にパラメータを追加できます。

標準的な mental ray パーサが宣言ファイルを受け入れられるよう、キーワードには接頭辞 #: が付いている必要があります。標準的な mental ray パーサはキーワードをコメントとして認識し、無視します(ノード ファクトリ パーサは無視しません)。間違った位置にある特殊なコメントや、構文的に誤りのある #: コメントは、構文解析エラーの原因になり、エラーはスクリプト エディタ(Script Editor)に書き出されます。

キーワードを挿入する場所と、書く内容

#: 付きのコメントは、シェーダ パラメータまたはフェノメナ パラメータの後ろか、宣言の要件セクションの中の 2 箇所に表示できます。

  • パラメータの後では次の構文が有効です。

    default scalar [scalar [scalar]] max scalar [scalar [scalar]] min scalar [scalar [scalar]] shortname "string" softmax scalar softmin scalar hidden boolean

  • 宣言の要件セクションでは、次のデータ型が構文的に正しいものです。

    nodeid integer

キーワードが追加されない場合の既定値は 0、min/max および softmin/softmax は未定義、そしてショート ネームはノード上のアトリビュート数をカウントして一意に割り当てられます。同様に、固有のノード ID はノード数をカウントすることで定義されます。

アトリビュートに関しては、すべてのキーワードがすべてのアトリビュート タイプに意味を成すわけではありません。Maya および Node Factory でサポートする各データ型を以下に示します。

mental ray の型 Maya の型 既定の型 min/max ソフトウェアの min/max

boolean

boolean

0/1

   

color

float3

3 scalars

   

integer

long

1 int

1 int

1 int

Scalar

float

1 scalar

1 scalar

1 scalar

vector

float3

3 scalars

3 scalars

 

ショート ネーム

すべてのアトリビュートにショート ネームを付与できます。ファクトリはカラーの子ネーム/ショート ネームに R、G、B を追加し、ベクトルの子ネーム/ショート ネームに X、Y、Z を追加します。

例 1 (2 つのうち)

declare shader
	vector					#: shortname "ov"
	"multiplyDivide" (
		integer		"operation",		#: default 1 min 0 max 2
		vector		"input1",		#: default 1. 1. 1.
		vector		"input2"		#: default 1. 1. 1.
		)
	#:
	#: nodeid 6894 # This is the node ID for binary Maya files.
	#:
	version 1
end declare

例 2 (2 つのうち)

declare shader
	struct {
		color		"outColor",		#: shortname "oc"
		scalar		"outAlpha"		#: shortname "oa"
	} "ramp" (
		array struct		"colorEntryList" {
			scalar		"position",
				#: default 1.
			color		"color"
				#: default 0.8 0.8 0.8
			},
			#: shortname "cel"			# compound's short name
		scalar		"uWave",
			#: shortname "uw"
			#: default 0.5
			#: softmin 1E-5 softmax 1
			#: min 1.0E-05 max 1
		scalar		"vWave",
		scalar		"noise",
		scalar		"noiseFreq",
		scalar		"hueNoise",
		scalar		"satNoise",
		scalar		"valNoise",
		scalar		"hueNoiseFreq",
		scalar		"satNoiseFreq",
		scalar		"valNoiseFreq",
		# Inherited from Texture2d
		vector		"uvCoord",
			#: shortname "uv"
		vector		"uvFilterSize",
		scalar		"filter",
		scalar		"filterOffset",
		boolean		"invert",
			#: default 0
		boolean		"alphaIsLuminance",
			#: default 1
		color		"colorGain",
			#: default 1.0 0.8 0.8
			#: min 0.1 0.1 0.1 max 0.5 0.5 0.5
		color		"colorOffset",
		scalar		"alphaGain",
			#: shortname "ag"
		scalar		"alphaOffset",
			#: shortname "ao"
		color		"defaultColor"
		)
	#:
	#: nodeid 6895 # Node ID for binary Maya files
	#:
	apply texture
	version	2
end declare

ファクトリ パーサの構文と mental ray パーサの構文の対応

ファクトリ パーサは受け付けないが、mental ray のパーサは受け付ける事項を以下に示します。

 declare shader
 			vector
 			"reverse" (
			vector "input",
			)
 end declare

ファクトリ パーサはカンマでの構文エラーを通知します。

フック

ファクトリは mental ray シェーダ宣言を元に Maya ノードを作成します。いったん作成されると、これらの各ノードはカスタム mental ray シェーダ(正確にはシェーダの定義)を表すことになります。各ノードは以下の各種 Maya シーン構成要素で使用するのに便利です。

メッセージ アトリビュート

ノード ファクトリはライト、ジオメトリ、カラー テクスチャ、スカラー テクスチャ、ベクトル テクスチャ、ライト プロファイル、シェーダといった mental ray シェーダ パラメータをメッセージ アトリビュートとして登録しています。

ノードはすべて上記アトリビュートに接続できます(ノードをアトリビュート エディタの message attr にドラッグすると、ソース ノードのメッセージ アトリビュートがアトリビュートに接続される。たとえば、node1.message -> mrShaderNode.shader)。ただし、正しく接続する必要があります。接続が不正だと、Maya のクラッシュやレンダリングの停止が起こる可能性もあります。

それぞれの mental ray シェーダ パラメータのタイプには以下を接続することになっています。

  • ライト: ライト トランスフォーム ノード。たとえば、pointLight1.message -> dgs_material1.lights[0]
  • ジオメトリ: ジオメトリ シェーダ。たとえば、mib_geo_sphere1.message -> mib_geo_instance1.object
  • シェーダ: mental ray シェーダ。たとえば、mib_illum_phong1.message -> mib_geo_instance.material
  • カラー テクスチャ、スカラー テクスチャ、ベクトル テクスチャ: mentalrayTexture ノード。たとえば、mentalrayTexture1.message -> mib_texture_lookup1.tex。シェーダのアトリビュート エディタ内のカラー/スカラー/ベクトル テクスチャ アトリビュートの隣のボタンで新しい mentalrayTexture ノードを作成し、それをアトリビュートに接続します。
  • ライトプロファイル: mentalrayLightProfile ノード。たとえば、mentalrayLightProfile1.message -> mib_light_photometric.profile。 シェーダのアトリビュート エディタ内の lightprofile アトリビュートの隣にあるボタンで新しい mentalrayLightProfile ノードを作成し、アトリビュートに接続します。
    マテリアル

    カスタムのマテリアルはシェーディング グループ ノードで指定できます。アトリビュート エディタ(Attribute Editor)で、このシェーダと併せて作成されたシェーディング エンジンの mental ray セクションに移動します。すべての Maya シェーダの無視(Suppress all Maya shaders)をオンに設定し、対応するアトリビュートに目的のカスタム シェーダを接続します。この時点で、シェーディング エンジンは mental ray マテリアルとして書き出しされる準備が整っています。このシェーディング エンジンを通常の方法で Maya オブジェクトに割り当てることも可能です。

    ライト

    あらゆる Maya ポイント、スポット、ディレクショナル ライトの mental ray セクションでカスタム ライト シェーダを指定できます。すべての Maya シェーダの無視(Suppress all Maya shaders)をオンに設定し、ライト シェーダを接続します。書き出しでは、ライトのその他の特性(方向、スポット円錐角度など)は保持されますが、このライト シェーダが既定の Maya シェーダにオーバーライドします。

    カメラ

    独自に作成した出力シェーダ、ボリューム シェーダ、レンズ シェーダ、環境シェーダを、アトリビュート エディタのあらゆるカメラ シェイプ ノードの mental ray セクションで提供します。現状では、複数の出力シェーダを指定することはできません。

    トランスフォーム

    カスタム ジオメトリ シェーダを備えたトランスフォーム ノードにアタッチされているシェイプ ノードをオーバーライドさせることが可能です。Maya のトランスフォーム ノードの mental ray セクションにあるジオメトリ シェーダの有効化(Enable geometry shader)をオンに設定するだけです。トランスフォーム ノードには単一シェイプの子があるのが理想的です。

    テクスチャ

    mental ray テクスチャ(Texture)ノードを使用します。mental ray テクスチャはシェーダ のアトリビュート エディタで「カラー テクスチャ、スカラー テクスチャ、ベクトル テクスチャ」パラメータを使って作成し、シェーダに接続されます。