opengl:maya_shaderfx
文書の過去の版を表示しています。
Maya ShaderFX
ShaderFX とは
Connection Base の Shader Editor です。
従来の Maya の Shading Network とよく似ていますが、 GPU で直接実行できるように新たに設けられたものです。
Maya からは 1 つの Material Node とみなされ、その中にさらに HW 専用の Node 構造が含まれています。 Maya の Node と ShaderFX の HW Shader node は別物で互換性はありません。
グラフ接続によりシェーディング動作をカスタマイズできる点は従来の Maya の Shading Network と同じですが、 GPU で直接実行可能な HLSL/GLSL/Cg を生成することができます。
利用する場合は OpenGL 3/4 以上に対応した GPU が必要になります。
Uniform 入力
Color 等の入力値は Shader の定数値になりますが、Attribute Editor の “Expose as Material Input” にチェックを入れることで 外部設定可能な Uniform になります。
Maya からは ShaderFX Material の Attribute としてアクセスできるようになります。
Vertex Attribute
Data Access
内部情報にアクセスするためには shaderfx コマンドを使用します。
global proc a7ListShaderFx() { string $node_name= "ShaderfxShader1"; int $count= `shaderfx -sfxnode $node_name -getNodeCount`; print ( "count=" + $count + "\n" ); string $indent= ""; int $i; for( $i= 0 ; $i< $count ; $i++ ){ int $uid= `shaderfx -sfxnode $node_name -getNodeUIDFromIndex $i`; string $class_name= `shaderfx -sfxnode $node_name -getNodeClassName $uid`; string $name= `shaderfx -sfxnode $node_name -getPropertyValue $uid "name"`; string $flag= ""; if( `shaderfx -sfxnode $node_name -isGroupStart $uid` ){ int $gend_uid= `shaderfx -sfxnode $node_name -getGroupEndUID $uid`; $flag+= "* Group START from " + $uid + " to " + $gend_uid; print "group start {\n"; $indent= " "; //int $gid= `shaderfx -sfxnode $node_name -getGroupUID $uid`; } if( `shaderfx -sfxnode $node_name -isGroupEnd $uid` ){ $flag+= "* Group END"; } if( `shaderfx -sfxnode $node_name -isGroupFromDisk $uid` ){ int $value= `shaderfx -sfxnode $node_name -isGroupFromDisk $uid`; $flag+= "* Group FROM DISK (" + $value + ")"; } print ( $indent + $uid + ": <" + $class_name + "> " + $name + " " + $flag + "\n" ); string $prop_list[]= `shaderfx -sfxnode $node_name -listProperties $uid`; for( $prop_name in $prop_list ){ string $prop_type= `shaderfx -sfxnode $node_name -getPropertyType $uid $prop_name`; switch( $prop_type ){ case "float4": print ( $indent + " skip...\n" ); break; case "stringlist": { string $prop_value[]= `shaderfx -sfxnode $node_name -getPropertyValue $uid $prop_name`; print ( $indent + " " + $prop_name + " <" + $prop_type + ">=\n" ); for( $si in $prop_value ){ print ( $indent + " [" + $si + "]\n" ); } } break; default: { string $prop_value= `shaderfx -sfxnode $node_name -getPropertyValue $uid $prop_name`; print ( $indent + " " + $prop_name + " <" + $prop_type + ">= [" + $prop_value + "]\n" ); } break; } } if( `shaderfx -sfxnode $node_name -isGroupEnd $uid` ){ $indent= ""; print "}\n"; } } }
opengl/maya_shaderfx.1398173750.txt.gz · 最終更新: 2014/04/22 22:35 by oga