<< 10/15 >>
RibFilter その5 環境マップ生成2
RenderManでレイトレーシングを使わない環境マップとシャドーマップを試してみた。RibFilterを使って影と周囲を映す環境マップを作成した。
元になるRIBの記述で注意点としてpointlightの記述はWorldBeginの外に書いてあるとRibfilterはシャドーマップRIBを出してくれない。
WorldBeginの内側、すぐ下に記述した。
今回はBMRTのサンプルSkylight.ribをちょっといじってみた。
なかなか面白いですね。ありがとうございます。
##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としたら、
時間かかります。が、きれいに出ますね。
球面の反射がうまくできないところです。オフセットするのかな・・・
RenderManさらにベスト尽くします。
ありがとうございます。
RibFilter その7 環境マップ生成4
できました!!段取りをきちんとすれば、RenderManはレイトレーシングより速いかもしれません。
Attribute "identifier" "name" ["_EV_n1_s1.0"]
環境マップの中心をオブジェクト座標中心から、ずらしてみました。
オブジェクト座標原点より、視点方向へオブジェクト座標スケールで1.0
移動した点を中心とする、ワールド座標にそった環境マップを生成しています。
RenderMan奥が深いですね。
最初の環境マップ生成時のintensityが1.0だったので明るくない環境マップになってたのもわかりました。
いかに段取りが大切かよくわかります。
RenderMan 感謝しています。ありがとうございます。
RibFilter その8 環境マップ生成時の明るさ
RenderManでの環境マップ生成時のintensityが大切ですね。
intensity 1.0
intensity 250
前の記事と比べて球体が青くないのは、環境マップ生成時の周囲を包んでいる球体が
AttributeBegin
Attribute "identifier" "name" ["dome"]
Color [0.2773 0.2855 0.6679]
Opacity [1 1 1]
Surface "matte"
Sphere 500 -500 500 360
AttributeEnd
と大きいからですね
いかに、段取りが大切かよーく、わかります。
Sphere 40 -40 40 360
がベストなところでRibfilterやる前の元ファイルを調整しておくべきです。
shadowpointのシャドーマップ生成は、MacOS8.6で動くRibfilterを利用しました。WindowsにRIBを持っていき、RenderManでレンダリングしています。面白くなってきました。
ありがとうございます。
RibFilter その9 環境マップ生成用元RIB
いろいろと試してみてわかると楽しい。RenderMan面白い。
Macで利用するRibfilter、いったりきたりが面倒になってきました。似たようなものがほしいですね。
#sphere_ref.rib
Display "sphere_ref.tif" "framebuffer" "rgb"
Projection "perspective" "fov" 20
Format 320 240 1
Imager "background" "color background" [0.2 0.4 0.6]
# placecam 10 5 -10 0 0 0
Rotate -19.47 1.00 0.00 0.00
Rotate 45.00 0.00 1.00 0.00
Translate -10.00 -5.00 10.00
WorldBegin
LightSource "ambientlight" 1 "intensity" 0.2
LightSource "pointlight" 2 "from" [ 10 10 -10] "intensity" 250
LightSource "pointlight" 3 "from" [ -10 10 -10] "intensity" 250
AttributeBegin
Attribute "identifier" "name" ["dome"]
Color [0.2773 0.2855 0.6679]
Opacity [1 1 1]
Surface "matte"
Sphere 40 -40 40 360
AttributeEnd
AttributeBegin
Attribute "identifier" "name" ["_EV_n1_s1.0"]
Translate 0 0 0
Color 0.921875 0.796875 0.91796875
Surface "shinymetal" "string texturename" [""]
Sphere 1 -1 1 360
AttributeEnd
AttributeBegin
Translate 3 0 0
Color 1 1 0
Surface "plastic"
Sphere 0.8 -1 1 360
AttributeEnd
AttributeBegin
Attribute "identifier" "name" ["_EV_n2_s1.0"]
Translate 0 0 3
Color [0.9 0.7 0.4]
Surface "shinymetal" "string texturename" [""]
Sphere 1 -1 1 360
AttributeEnd
AttributeBegin
Translate 0 0 0
Surface "plastic"
Color 0 0 1 #blue
Cylinder 0.1 -100 100 360 # Z axis
Color 0 1 0 #green
Rotate 90 1 0 0
Cylinder 0.1 -100 100 360 # Y axis
Color 1 0 0 #red
Rotate 90 0 1 0
Cylinder 0.1 -100 100 360 # X axis
AttributeEnd
AttributeBegin
Color 1 1 1
Translate 0 -1.5 0
Scale 5 5 5
Surface "matte"
Polygon "P" [-4 0 -4 -4 0 4 4 0 4 4 0 -4] "st" [0 0 0 1 1 1 1 0]
AttributeEnd
WorldEnd
RenderMan 感謝しています。
RibFilter その10 環境マップ生成
RenderMan練習としてPOV-Rayのサンプルを参考にしてみた。
元になるRIBファイルをつくる。Macの改行で保存する。
MacOS8.6にファイルを送り、RibFilterを使って環境マップ、シャドーマップを生成する。
Windowsで、バッチファイルをつくり、RenderMan prmanでレンダリングする。
何とかできました。ありがとうございます。
感謝しています。RenderMan
RibFilter その11 環境マップ・シャドーマップ生成
RenderMan練習を続けます。POV-RAYのサンプルをサイトからひっぱってきてRIBに書きかえてみました。まずは環境マップ、影なしで、どのようになるか検討してみます。数値を調整していきます。
続いて、Macへ持っていきRibFilterで環境マップとシャドーマップ生成し、WindowsでRenderMan prmanを使ってレンダリングしました。
手際よくなってくるとサクサクできますね。
ありがとうございます。感謝しています。RenderMan
RibFilter その12 ポリゴンスムージング
RibFilterを使ってポリゴンスムージングやってみました。MetasequoiaでRenderManのRIBを出力したものをMacOS8.6に持っていき、RibFilterでスムージングしました。PolygonをPointsGeneralPolygons
に変換します。
方法は、
AttributeBegin
Attribute "identifier" "name" [ "_GS" ]
Color [ 1.000 1.000 1.000 ]
Polygon "P" [ 2.589 98.745 -12.513 -17.075 94.546 -26.777 2.568 93.675 -34.382 ]
・・・・
と、"_GS"を入れておくと、
AttributeBegin
Attribute "identifier" "name" [ "_GS" ]
Color [ 1.000 1.000 1.000 ]
PointsGeneralPolygons
[
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
・・・・・・・・
と変換してくれます。
変換前
スムージング
distantlightは自動的にshadowdistantになります。
一歩一歩、ありがとうございます。
感謝しています。RenderMan
RenderMan、環境マップ生成でわかったこと
原点にカメラをキューブ環境マップを求めてRenderManで計算すると
こんな感じになってしいます。
なので、RibFilterではカメラ位置をちょっとずらしてくれる機能があります。設定方法として
Attribute "identifier" "name" ["_EV_n1_s1.0"]
とありますが、オブジェクト座標原点より、視点方向へオブジェクト座標スケール1.0平行移動した点を中心として、ワールド座標にそって6面の環境マップを作ります。
RibFilterで環境マップ生成RIBの数値がどうしてそうなるのという感じで調べてみました。
「実践CGの誘い」によれば、
ワールド空間の原点から物体の中心へ平行移動させる
とあります。
s1.0の部分がちょっとずらすということになりますから、視点と注視点を結ぶ単位ベクトルを求めておいて、物体の位置の分だけ、各6面計算するということなんでしょうか。
たとえば、原点にある球体を
placecam 10 5 -10 0 0 0
から見てると
Ribfilterでは
Translate -0.707107 -0.235688 0.666672
とずらしていて、
結果は
と、赤い軸の部分がちょっとずれています。
python cgkitを使って
単位ベクトルを求めてみました。
>>> from cgkit.all import *
>>> v=vec3(-10,-5,10)
>>> v.normalize()
(-0.666667, -0.333333, 0.666667)
Ribfilterで出していた箇所を
Translate -0.666667 -0.333333 0.666667
に変更したら、
赤い軸の部分もずれなくてよくなりました。
ということで、注視点から視点の単位ベクトルを求めて、その終点位置を平行移動の値に当てはめるとうまくいくようです。
ちなみに今回、soft shadowにするのに、
LightSource "shadowpoint" 2 "from" [10 10 -10] "intensity" 250 "width" [2] "float samples" [32]
の部分を
"width" [16] "float samples" [512]
にあげてみました。
ありがとうございます。RenderManまだまだ勉強します。
RenderMan shadowspotの影出ない・・・!
RIBの勉強続きます。
RenderManのシャドーマップを計算してから、
intensityをいくらあげても、明るくならない・・・・
出力したRenderMan RIBを眺める。
WorldBegin
LightSource "ambientlight" 2 "intensity" [ 0.39 ] "lightcolor" [ 0.85098
1 1 ]
AttributeBegin
Attribute "identifier" "name" "lgt_LS_n1_i1_a60_d10_z1024"
Declare "blur" "uniform float"
Declare "shadowname" "uniform string"
LightSource "shadowspot" 1 "from" [ -1 1 0 ] "to" [ -0.292893 0.292893
0 ] "intensity" [ 1 ] "coneangle" [ 1.0472 ] "conedeltaangle" [ 0.174533
] "blur" [ 0.0050 ] "shadowname" [ "cone9_F_L1.shad" ]
AttributeEnd
・・・・・・
原因は、shadowspotをAttributeBeginとAttributeEndではさんでいるので、他に影響しなかったのでした。AttributeBeginとAttributeEndを削除した。影出ました。
繰り返しRenderMan勉強ですね。
使いやすいようにRIBの記述をどう工夫するか課題です。
一歩一歩です。ありがとうございます。
<< 10/15 >>