Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

RenderManシェーダーを使って金属質感を作る

Presenter3Dでシーンを作成し、shinymetalを割り当てました。
ShadingRate 1
シャドーマップは4096でshadowdistantを利用しています。

左2つの球体はSpecular300% Specular size25%
txdemo.jpg


■■以下転用します。■■

MacRenderManはレイトレーシング(光線追跡法)の手法を持っていないので、そのかわり金属質感のシェーダーを使ってオブジェクトの質感を表現します。
当然、周囲の反射、屈折が表現できません。それらの表現を環境マップとスペキュラーによってリアルにしています。

metalシェーダー及びrsmetalシェーダーには環境マップの設定は入っていないので写り込み表現のない金属感になります。

環境マップの設定が入っているshinymetalを適用してみましょう。

環境対象の画像を環境マッピングのtexファイルに変換するためMakeLatLongEnvironment "carL.pic" "carLenv.tex" "box" 2 2
の1行文をテキストファイルに保存し、それをRenderAppでRender実行するとcarLenv.texファイルができます。(tex変換)適用されたshinymetalシェダーアイコンをダブルクリックしshinymetalパラメーターを表示させtexturename欄(環境マップ名)にcarLenv.texと入力しOKボタンを押します。

金属の質は微妙にサーフェス情報のSpecularとSpecular sizeとDiffuseパラメータで変わっていきます。

Specularの高いものはクロムメッキのように見えます。



■Presenter3DでのTextureやマップの収納場所
作成したテクスチャーをTEXファイルに変換するためテキストエディターで変換するファイル名の入った MakeTexture "moji.pic" "moji.tex" "periodic" "periodic" "box" 1 1 の1文を作り保存します。その書類をMacRenderManに付いているRenderAppアプリケーションで書類をレンダーしてテクスチャーをRenderMan用に変換しTEXファイルを作ります。TEXファイルはPresenter3DのPlug-Insフォルダに置いておきます。
AttributesウインドのshadersウインドからembossシェダーをDispmフォルダの属性格納エリアへドラッグ&ドロップしDispmフォルダへ割り当てます。embossアイコンをダブルクリックしシェダーパラメーターを入力します。

Kmに適用したい深さを(マイナスでもりあがる)texturenameの欄にTEXファイル名を入れます。
S1.jpg

RenderManのディスプレイスメントは映画やコマーシャルでも使用されているほどハイエンドでクリア
な仕上がり見せ、Presenter3DはMacintosh上で唯一アニメーション表現のできるサポートをしています。
4.jpg
Valis Group社の販売されていたVG Shaders Volume6のHide Dragonを使用しました。
  • -
  • -

MacRenderManのShaderを適用した結果

下記のShaderは3DJoy(Presenter3D)のサイトにあった高野薫氏作成のシェーダーです。申し訳ありません。勝手ながら実験させていただきました。
日本語のコメントが入ったままでも、MacRenderManのShaderAppは問題なくコンパイルしました。ありがとうございます。WindowsでのPRManでは、たくさん警告表示はしましたが、コンパイルはされています。
/*
* KTshinyMetal(): give a surface a metallic appearance
*/
surface
KTshinyMetal(
float Ka = 1;
float Kd = 1;
float Ks = 1;
float Kr = 1;
float roughness = .25;
color specularcolor=1;
string mapname = "carLenv.tex"; )
{
color ev;
point D, Nf, NI;
vector V;

/* N 面のシェーディング法線 I 面に当る光線の方向(カメラから) */
Nf = faceforward(normalize(N), I);
NI = normalize(I);

if( mapname != "" ) {
/* 環境マップの検索方向Dを計算する */
D = reflect(NI, Nf);
/* Dを環境マップの空間に変換する */
D = transform("world", point "world" (0,0,0) + D);
ev = color environment(mapname, D);
} else
ev = 0;

/* Oi面の不透明度(出力)Os面の不透明度(入力) */
Oi = Os;
/* Ci面からの色(出力)Cs面の色(入力) */
Ci = Os * Cs * (
Ka * ambient() + Kd * diffuse(Nf)
+ (specularcolor * Ks * ((Kr * ev) + specular(Nf,-NI,roughness)) )
) ;
}


Presenter3Dでは、ちょっと問題がありました。
Limit Number of Shaders

Presenter can't handle more than 350 shaders in the system folder. We had to cut our shaders down to 316.

ということで、シェーダの登録数を減らしてこのKTshinyMetalが使えるようになりました。
左上KTshinyMetal
右上Metal,Polished(VG Shaders)
右下Valis Group 社で販売されているVG Shaders Vol.6 のBrushed Metal, Turned
左下shinymetal
txdemo7.JPG

■■以下転用します。■■
より金属らしい質感をほしい場合、パラメーター調整かカスタムシェダーか販売されているシェダーを利用すると良いでしょう。

環境マップの方向性も考えてオブジェクトを分割し作成すると、よりリアルな反射表現を得ることもできます。

またディスプレイスメントを用いるとよりリアルな表面を得られます。
  • -
  • -

エラーメッセージ

RIBをレンダリングする際、警告がずららと出た。
シェーダの記述に型をつけておかなければならない。

S31003 {WARNING} RIB value for "Ambient" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "Specular" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "Roughness" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "Environment" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "EnvFilterSize" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "EnvName" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "EnvSim" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "EnvSimFreq" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]
S31003 {WARNING} RIB value for "AntiAlias" in shader "vgs00035" on gprim "Design" was not declared. [ Object: Design]

例えば
Surface "vgs00089"
"float Ambient" [1]
"float Specular" [1]
"float Roughness" [0.1]
"float Environment" [0.75]
"float EnvFilterSize" [2]
"string EnvName" ["envlati.tx"]
"string EnvSim" ["on"]
"float EnvSimFreq" [1]
"point Origin" [0 0 0]
"point UpVector" [0 1 0]
"point AtVector" [0 0 1]
"string Unit" ["foot"]
"float Scale" [1]
"float AntiAlias" [1]

すべてのパラメータにfloatやstringやpointとつけておくこと。
使っているシェーダのパラメータがわからないときは、
PRManだと、sloinfoを使う。各レンダラーによって違う。
>sloinfo vgs00089.slo

surface "vgs00089"
"Name" "parameter uniform string"
Default value: "Brushed Metal, Turned"
"Ambient" "parameter uniform float"
Default value: 1.000000
"Specular" "parameter uniform float"
Default value: 1.000000
"Roughness" "parameter uniform float"
Default value: 0.100000
"Environment" "parameter uniform float"
Default value: 0.750000
"EnvFilterSize" "parameter uniform float"
Default value: 2.000000
"RefName" "parameter uniform string"
Default value: ""
"EnvName" "parameter uniform string"
Default value: ""
"EnvSim" "parameter uniform string"
Default value: "on"
"EnvSimFreq" "parameter uniform float"
Default value: 1.000000
"Origin" "parameter uniform point"
Default value: "shader" [0.000000 0.000000 0.000000]
"UpVector" "parameter uniform point"
Default value: "shader" [0.000000 1.000000 0.000000]
"AtVector" "parameter uniform point"
Default value: "shader" [0.000000 0.000000 1.000000]
"Unit" "parameter uniform string"
Default value: "foot"
"Scale" "parameter uniform float"
Default value: 1.000000
"AntiAlias" "parameter uniform float"
Default value: 1.000000

ちなみにこのvgs00089.sloはMacRenderManで利用しているシェーダです。コンパイルされたsloはそのままWindowsのPRManでも利用できるから便利ですね。MacOS8.6で動くPresenter3DからRIB出力し、Windowsに持って行きエディタで編集してPRManでレンダリング。シャドーマップは4096にした。txdemo3.jpg
  • -
  • -
<< 12/50 >>