[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Maya付属のヘルプから抜粋。
To interpret these parameters in the .mi file, mental ray needs a declaration of parameter names and types that is equivalent to the C struct that the shader later uses to access the parameters. The declaration in the .mi file must be exactly equivalent to the C struct, or the shader will mis-interpret the parameter data structure constructed by mental ray. (Using the mkmishader utility ensures that both declarations agree, see section mkmishader.) This means that three parts are needed to write a shader: the .mi declaration, the C parameter struct, and the C source of the shader. The .mi declaration is normally stored in a separate file that is included into the .mi scene file using a $include statement.
The syntax of .mi shader declarations is fully described in section declaration. Here, only a brief overview is given. Shaders must be declared with shader name, return type, and the types and names of all parameters. Options such as the shader version may be specified also:
declare shader
[ type ] " shader_name " (
type " parameter_name ",
type " parameter_name ",
...
type " parameter_name "
)
[ version versionint ]
[ options ]
end declare
For example, a simple material shader containing ambient, diffuse, and specular colors, transparency, an optional array of bump map textures, and an array of lights could be declared in the .mi file as:
declare shader
color "my_material" (
color "ambient",
color "diffuse",
color "specular",
scalar "shiny",
scalar "reflect",
scalar "transparency",
scalar "ior",
vector texture "bump",
array light "lights"
)
version 1
end declare
If there is only one array, there is a small efficiency advantage in listing it last. It is recommended that the largest array (arrays of large structs are larger than arrays of primitives) is given as the last parameter. The material shader declared in this example can be used in a material statement like this:
material "mat1"
"my_material" (
"specular" 1.0 1.0 1.0,
"ambient" 0.3 0.3 0.0,
"diffuse" 0.7 0.7 0.0,
"shiny" 50.0,
"bump" "tex1",
"lights" [ "light1", "light2", "light3" ],
"reflect" 0.5
)
end material
Note that the parameters can be defined in any order that does not have to agree with the order in the declaration, and that parameters can be omitted. Omitted parameters default to 0. This example assumes that the texture tex1 and the three lights have been defined prior to this material definition. Again, be sure to use the names of the textures and lights, not the names of the texture and light shaders. All names in the above two examples were written as strings enclosed in double quotes to disambiguate names from reserved keywords, and to allow special characters in the names that would otherwise be illegal.
When choosing names, avoid double colons and periods, which have a special meaning when accessing structured shader return values and interface parameters in phenomenon subshaders.
When the shader my_material is called, its third argument will be a pointer to a data structure built by mental ray from the declaration and the actual parameters in the .mi file. In order for the C source of the shader to access the parameters, it needs an equivalent declaration in C syntax that must agree exactly with the .mi declaration. The type names can be translated according to the following table:
全然読めねぇ
3Dを生業にするのなら、英語は習得せんとイカンと痛感したorz
↓翻訳サイト
http://www.excite.co.jp/world/english/
もしくはスレイプニールってタブブラウザにサイトを翻訳する機能がついてるからそれで雰囲気は把握できる
と、思う
.miシェーダ宣言の構文はセクション宣言で完全に説明されます。 ここに、簡潔な概観だけを与えます。 すべてのパラメタのシェーダ名、リターンタイプ、タイプ、および名前でシェーダを宣言しなければなりません。 また、シェーダバージョンなどのオプションは指定されるかもしれません:
シェーダを宣言してください。
[タイプします]「シェーダ_名前」、(
「パラメタ_名前」をタイプしてください。
「パラメタ_名前」をタイプしてください。
...
「パラメタ_名前」をタイプしてください。
)
[バージョンversionint]
[オプション]
終わりは宣言します。
例えば、a簡単な物質的なシェーダ含有周囲であり、拡散してください。そうすれば、鏡面は着色します、透明、隆起地図織地の任意の勢ぞろい、そして、以下として.miファイルの中でライトのアレイを申告することができました。
シェーダを宣言してください。
「私の_の材料」を着色してください、(
「周囲色のです」。
「拡散してください」を着色してください。
「鏡面」を着色してください。
スカラ「輝きます」。
スカラは「反射します」。
スカラの「透明」
スカラの"ior"
ベクトル織地「隆起」
軽い「ライト」を整列させてください。
)
バージョン1
終わりは宣言します。
1つのアレイしかなければ、最後にそれを記載するのにおいて小さい効率利点があります。 最後のパラメタとして最も大きいアレイ(大きいstructsのアレイは基関数の勢ぞろいより大きい)を与えるのはお勧めです。 このような物質的な声明でこの例で宣言された物質的なシェーダは使用することができます:
材料"mat1""
「私の_の材料」、(
「鏡面」1.0 1.0 1.0
「周囲」の0.3 0.3 0.0
「拡散している」0.7 0.7 0.0
「輝いている」50.0
「隆起」"tex1""
「ライト」、[「light1"、「light2"、「light3"]」
「反射してください」という0.5
)
終わりの材料
宣言におけるオーダーに同意する必要はないどんなオーダーでもパラメタを定義することができて、パラメタを省略することができるのに注意してください。 省略されたパラメタは0をデフォルトとします。 この例は、織地tex1と3つのライトがこの物質的な定義の前に定義されたと仮定します。 もう一度、織地と軽いシェーダの名前ではなく、織地とライトの名前を必ず使用してください。 上の2つの例のすべての名前が予約されたキーワードから名前のあいまいさを除いて、そうでなければ不法な名前の特殊文字を許容するために二重引用符に同封されたストリングとして書かれました。
名前を選ぶとき、二重コロンと期間を避けてください。(現象「副-シェーダ」の構造化されたシェーダリターン値とインタフェース・パラメータにアクセスするとき、期間は格別の意味があります)。
シェーダであるときに、私の_の材料は呼ばれて、3番目の議論は精神的な光線によって.miファイルの中の宣言と実引数から築き上げられたデータ構造へのポインタになるでしょう。 シェーダのC情報筋がパラメタにアクセスするように、それはちょうど.mi宣言に同意しなければならないC構文で同等な宣言を必要とします。 以下のテーブルに従って、型名を翻訳することができます:
~~~~~~~
これじゃ意味不明だわ・・・
サーセンw