Rendering学習日記

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

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

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

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

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

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を使用しました。
  • -
  • -

Reflectシェーダよる環境マッピング

サンプルとして練習。
シェーダは次の通り
surface reflect (
float Ka = 1;
float Kd = .5;
float Ks = .4;
float Kr = .3;
float roughness = .1;
color specularcolor = 1;)
{
normal Nf = faceforward (normalize(N),I);
vector V = -normalize(I);
color Ct;
vector Rcurrent=reflect(I,Nf);
vector Rworld=vtransform("world",Rcurrent);
color Cr=color environment("envlati.tx",Rworld);

Ct=Cs;

Oi = Os;
Ci = Oi * ( Ct * (Ka*ambient() + Kd*diffuse(Nf)) +
specularcolor * (Ks*specular(Nf,V,roughness)+Kr*Cr));
}


RIBは次の通り
MakeLatLongEnvironment "studio2.tif" "envlati.tx" "gaussian" 2 2


Display "reflect3.tiff" "file" "rgb"
Display "+teapot" "framebuffer" "rgb"
Format 640 400 1.0
Projection "perspective" "fov" 25

Translate 0 0 5

WorldBegin
#Translate -10 -45 0

Rotate -115 1 0 0

LightSource "ambientlight" 1 "intensity" .4
LightSource "distantlight" 2 "intensity" 0.4
"from" [-50 300 200] "to" [0 0 0]
LightSource "distantlight" 2 "intensity" 0.2
"from" [-50 -300 200] "to" [0 0 0]
LightSource "distantlight" 2 "intensity" 0.1
"from" [50 -200 10] "to" [0 0 0]

Color [1 1 1]

Surface "reflect"

Sphere 1 -1 1 360

WorldEnd


PRMan
reflect3.jpg

MacRenderManではシェーダの変数の宣言部分を書き直す。
mac_reflect.JPG

そしてAqsisでは、フィルターがかかっているようである。
aqsis_ref.jpg

環境マップ
Essential RenderManのサンプルを利用しました。Thank you
studio2.jpg
  • -
  • -
<< 141/184 >>