opengl:maya_shaderfx
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
opengl:maya_shaderfx [2014/04/22 17:39] – 作成 oga | opengl:maya_shaderfx [2014/04/23 01:06] (現在) – [Advanced Mode] oga | ||
---|---|---|---|
行 1: | 行 1: | ||
====== 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/ | ||
+ | |||
+ | |||
+ | 利用する場合は OpenGL 3/4 以上に対応した GPU が必要になります。 | ||
+ | |||
+ | ===== Uniform 入力 ===== | ||
+ | |||
+ | Color 等の入力値は Shader の定数値になりますが、Attribute Editor の | ||
+ | " | ||
+ | 外部設定可能な Uniform になります。 | ||
+ | |||
+ | Maya からは ShaderFX | ||
+ | |||
+ | |||
+ | ===== Vertex Attribute ===== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Advanced Mode ===== | ||
+ | |||
+ | Advanced Mode に切り替えると、よりプリミティブなノードを扱うことが可能で Group の内部構造の編集ができるようになります。 | ||
+ | |||
+ | - ShaderFX を開く | ||
+ | - 任意の場所で右ボタンから Tools → Toggle Advanced Mode | ||
+ | |||
+ | Group Node の上に四角いボタンが表示されるようになるので、click すると Group を展開できます。 | ||
+ | |||
+ | |||
+ | ===== Data Access ===== | ||
+ | |||
+ | ShaderFX 内部情報にアクセスするためには shaderfx コマンドを使用します。 | ||
+ | |||
+ | 内部の情報を読み出すプログラム。 | ||
+ | |||
+ | < | ||
+ | // ShaderFX の内部情報取得 | ||
+ | |||
+ | global proc a7ListShaderFx() | ||
+ | { | ||
+ | string | ||
+ | |||
+ | int $count= `shaderfx -sfxnode $node_name -getNodeCount`; | ||
+ | int $root= `shaderfx -sfxnode $node_name -getHwShaderNodeRootGrpID`; | ||
+ | int $hwnode= `shaderfx -sfxnode $node_name -getHwShaderNodeID`; | ||
+ | print ( " | ||
+ | print ( " | ||
+ | print ( " | ||
+ | |||
+ | string | ||
+ | int $ni; | ||
+ | for( $ni= 0 ; $ni< $count ; $ni++ ){ | ||
+ | int $uid= `shaderfx -sfxnode $node_name -getNodeUIDFromIndex $ni`; | ||
+ | string | ||
+ | string | ||
+ | string | ||
+ | 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= " | ||
+ | } | ||
+ | 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 + " | ||
+ | |||
+ | // Properties | ||
+ | string | ||
+ | for( $prop_name in $prop_list ){ | ||
+ | string | ||
+ | switch( $prop_type ){ | ||
+ | case " | ||
+ | print ( $indent + " | ||
+ | break; | ||
+ | case " | ||
+ | string | ||
+ | print ( $indent + " | ||
+ | for( $si in $prop_value ){ | ||
+ | print ( $indent + " | ||
+ | } | ||
+ | } | ||
+ | break; | ||
+ | default: { | ||
+ | string | ||
+ | print ( $indent + " | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Sockets | ||
+ | int $socket_type; | ||
+ | for( $socket_type= 0 ; $socket_type < 2 ; $socket_type++ ){ | ||
+ | int $socket_count= `shaderfx -sfxnode $node_name -getSocketCount $uid $socket_type`; | ||
+ | int $si; | ||
+ | if( $socket_count != 0 ){ | ||
+ | switch( $socket_type ){ | ||
+ | case 0: print ( $indent + " | ||
+ | case 1: print ( $indent + " | ||
+ | } | ||
+ | } | ||
+ | for( $si= 0 ; $si < $socket_count ; $si++ ){ | ||
+ | string $socket_name= `shaderfx -sfxnode $node_name -getSocketName $uid $socket_type $si`; | ||
+ | string $socket_stype= `shaderfx -sfxnode $node_name -getSocketType $uid $socket_type $si`; | ||
+ | int $connected_count= `shaderfx -sfxnode $node_name -getConnectedSocketCount $uid $socket_type $si`; | ||
+ | print ( $indent + " | ||
+ | int $ci; | ||
+ | for( $ci= 0 ; $ci < $connected_count ; $ci++ ){ | ||
+ | string $connected_node= `shaderfx -sfxnode $node_name -getConnectedNodeID $uid $socket_type $si $ci false`; | ||
+ | string $connected_id= `shaderfx -sfxnode $node_name -getConnectedSocketIndex $uid $socket_type $si $ci false`; | ||
+ | print ( $indent + " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if( `shaderfx -sfxnode $node_name -isGroupEnd $uid` ){ | ||
+ | $indent= ""; | ||
+ | print " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
opengl/maya_shaderfx.1398155946.txt.gz · 最終更新: 2014/04/22 17:39 by oga