ユーザ用ツール

サイト用ツール


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki