Rendering学習日記

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

RibFilter その4 環境マップ生成

RMRサイトのサンプルを参考にRibFilterで環境マップとポイントライト3つ分のシャドーマップを出力してみた。
envr01.jpg

元RIBは以下の通りに設定
#env01.rib
Display "envr_kyu.tiff" "file" "rgb"
Projection "perspective" "fov" [25 ]
Rotate 24.094801 1 0 0
Rotate -26.5651 0 1 0
Translate 2.5 2.5 5
WorldBegin
LightSource "ambientlight" 1 "intensity" [0.05 ]
LightSource "pointlight" 2 "intensity" [40 ] "from" [-4 -5 -7]
LightSource "pointlight" 3 "intensity" [40 ] "from" [3.5 6.5 -6]
LightSource "pointlight" 4 "intensity" [10 ] "from" [4 7 6]
AttributeBegin
Attribute "identifier" "name" [ "_EV_n1" ]
Surface "shinymetal" "string texturename" ["env"]
Translate 0 0 0
Sphere 1 -1 1 360
AttributeEnd
Surface "plastic"
TransformBegin
Scale 20 20 20
Color [1 0 0]
Polygon "P" [-0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 ]
Color [0 0 1]
Polygon "P" [-0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 ]
Color [0 1 0]
Polygon "P" [0.5 0.5 -0.5 0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 ]
Color [1 0 1]
Polygon "P" [0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 ]
Color [1 1 0]
Polygon "P" [0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 ]
Color [0.6 0.6 0.6]
Polygon "P" [-0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 ]
TransformEnd
WorldEnd

球体に周囲の環境を映り込ませる。
pointlightは、shadowpointに変換された。
シャドーマップ生成RIBが3つ
env01.rib.sdwRib.2
env01.rib.sdwRib.3
env01.rib.sdwRib.4

T02001 {ERROR} Can't open texture "env" [ Object: _EV_n1 Shader: shinymetal] (System Error: No such file or directory)
と出るが、無視してシャドーマップ作成。

次に環境マップ生成、シャドーマップを利用して6面作成する。
影も映ります。こんな感じ・・・

FrameBegin 1
#env01.rib

Display "env01.rib.envImg.1px" "file" "rgb"
Format 128 128 1
ShadingRate 1.000000
Option "limits" "zthreshold" [0.5 0.5 0.5]
Option "shadow" "bias0" [0.15] "bias1" [0.2]
Option "limits" "texturememory" [4096]
Projection "perspective" "fov" [92]
Rotate -90 0 1 0
Translate 0 0 0
Translate -0 -0 -0
WorldBegin
LightSource "ambientlight" 1 "intensity" [0.05 ]
LightSource "shadowpoint" 2 "intensity" [40 ] "from" [-4 -5 -7] "width" [2] "float samples" [32] "string sfpx" ["env01.rib.sdwMap.2px"] "string sfpy" ["env01.rib.sdwMap.2py"] "string sfpz" ["env01.rib.sdwMap.2pz"] "string sfnx" ["env01.rib.sdwMap.2nx"] "string sfny" ["env01.rib.sdwMap.2ny"] "string sfnz" ["env01.rib.sdwMap.2nz"]
LightSource "shadowpoint" 3 "intensity" [40 ] "from" [3.5 6.5 -6] "width" [2] "float samples" [32] "string sfpx" ["env01.rib.sdwMap.3px"] "string sfpy" ["env01.rib.sdwMap.3py"] "string sfpz" ["env01.rib.sdwMap.3pz"] "string sfnx" ["env01.rib.sdwMap.3nx"] "string sfny" ["env01.rib.sdwMap.3ny"] "string sfnz" ["env01.rib.sdwMap.3nz"]
LightSource "shadowpoint" 4 "intensity" [10 ] "from" [4 7 6] "width" [2] "float samples" [32] "string sfpx" ["env01.rib.sdwMap.4px"] "string sfpy" ["env01.rib.sdwMap.4py"] "string sfpz" ["env01.rib.sdwMap.4pz"] "string sfnx" ["env01.rib.sdwMap.4nx"] "string sfny" ["env01.rib.sdwMap.4ny"] "string sfnz" ["env01.rib.sdwMap.4nz"]
AttributeBegin
Attribute "identifier" "name" [ "_EV_n1" ]
Surface "shinymetal" "string texturename" ["env"]
Translate 0 0 0
AttributeEnd
Surface "plastic"
TransformBegin
Scale 20 20 20
Color [1 0 0]
Polygon "P" [-0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 ]
Color [0 0 1]
Polygon "P" [-0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 ]
Color [0 1 0]
Polygon "P" [0.5 0.5 -0.5 0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 ]
Color [1 0 1]
Polygon "P" [0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 ]
Color [1 1 0]
Polygon "P" [0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 ]
Color [0.6 0.6 0.6]
Polygon "P" [-0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 ]
TransformEnd
WorldEnd
FrameEnd
・・・・・


最後にレンダリング
env01.rib.scnRib
コメントアウトとサイズを加える。
#Option "limits" "zthreshold" [0.5 0.5 0.5]
#Option "shadow" "bias0" [0.15] "bias1" [0.2]
#Option "limits" "texturememory" [4096]
Format 640 480 1
Display "envr01.tiff" "file" "rgb"

ポイントライトの影が出たのはうれしい。なかなか面白いところ、ほかにも実験してみます。
ありがとうございます。
  • -
  • -

RibFilter その5 環境マップ生成2

RenderManでレイトレーシングを使わない環境マップとシャドーマップを試してみた。RibFilterを使って影と周囲を映す環境マップを作成した。
元になるRIBの記述で注意点としてpointlightの記述はWorldBeginの外に書いてあるとRibfilterはシャドーマップRIBを出してくれない。
WorldBeginの内側、すぐ下に記述した。
今回はBMRTのサンプルSkylight.ribをちょっといじってみた。
なかなか面白いですね。ありがとうございます。
fakesky4.jpg
##RenderMan RIB-Structure 1.0
version 3.03
#Option "limits" "zthreshold" [0.5 0.5 0.5]
#Option "shadow" "bias0" [0.15] "bias1" [0.2]
#Option "limits" "texturememory" [4096]
#
# fakesky04.rib

PixelSamples 3 3
Projection "perspective" "fov" [18]
Format 480 360 1
Display "fakesky4.tif" "file" "rgba"

##CameraOrientation 2 20 5 0 0 1.5 -0.0170699 -0.170699 0.985175
ConcatTransform [0.995037 -0.0170699 -0.0980286 0 -0.0995037 -0.170699 -0.980286 0 1.86265e-09 0.985175 -0.17155 0 0 0 0 1]
Translate -2 -20 -5

WorldBegin
LightSource "ambientlight" 1 "intensity" [0.2 ]
LightSource "shadowpoint" 2 "intensity" [700] "from" [2 4.5 20] "width" [2] "float samples" [32] "string sfpx" ["fakesky4.rib.sdwMap.2px"] "string sfpy" ["fakesky4.rib.sdwMap.2py"] "string sfpz" ["fakesky4.rib.sdwMap.2pz"] "string sfnx" ["fakesky4.rib.sdwMap.2nx"] "string sfny" ["fakesky4.rib.sdwMap.2ny"] "string sfnz" ["fakesky4.rib.sdwMap.2nz"]
AttributeBegin
Color [.2773 .2855 .6679]
Surface "DPCloudplane"
Sphere 50 -50 50 360
AttributeEnd

AttributeBegin
Scale 10 10 10
Translate 0 0 -0.25
Declare "Kr" "float"
Surface "LGAntialiasedChecks" "color color1" [0.9 0.5 0.5]
Patch "bilinear" "P" [-1 -1 .005 1 -1 .005 -1 1 .005 1 1 .005]
AttributeEnd

AttributeBegin
Attribute "displacementbound" "float sphere" [0.5]
Displacement "cloth" "float freq" [12.0] "float depth" [0.6]
Surface "plastic"
Color [ .75 .75 .75 ]
Translate -2 -1.5 0
Rotate 20 0 0 1
Sphere 2 -2 2 360
AttributeEnd

AttributeBegin
Attribute "identifier" "name" [ "_EV_n1" ]
Color [0.9 0.7 0.4]
Surface "shinymetal" "Kr" [0.7] "float roughness" [0.1] "string texturename" ["fakesky4.rib.envMap.1"]
Translate 2 -3 0
Rotate 60 0 0 1
Sphere 2 -2 2 360
AttributeEnd

WorldEnd
  • -
  • -

RibFilter その6 環境マップ生成3

RenderManでの反射マップ作成方法がわかってきた。RibFilter便利ですが、エディタ使って、バッチ処理できるようにReadArchiveを使う。
ReadArchive "sphere_ref.rib.sdwRib.2"

ReadArchive "sphere_ref.rib.sdwRib.3"

ReadArchive "sphere_ref.rib.envRib.1"

ReadArchive "sphere_ref.rib.envRib.2"

ReadArchive "sphere_ref.rib.scnRib"

をall.ribにして、
prman all.ribでレンダリング。
さすがに、シャドーマップ4096 4096としたら、
時間かかります。が、きれいに出ますね。
sphere_ref.jpg
球面の反射がうまくできないところです。オフセットするのかな・・・
RenderManさらにベスト尽くします。
ありがとうございます。
  • -
  • -
<< 4/12 >>