<< RibFilter その12 ポリゴンスムージング 戻る RenderMan shadowspotの影出ない・・・! >>

RenderMan、環境マップ生成でわかったこと

原点にカメラをキューブ環境マップを求めてRenderManで計算すると
こんな感じになってしいます。
sphere_origin.jpg
なので、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
とずらしていて、
結果は
sphere_ref2.jpg
と、赤い軸の部分がちょっとずれています。

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
に変更したら、
sphere_ref_norm_s512.jpg
赤い軸の部分もずれなくてよくなりました。
ということで、注視点から視点の単位ベクトルを求めて、その終点位置を平行移動の値に当てはめるとうまくいくようです。
ちなみに今回、soft shadowにするのに、
LightSource "shadowpoint" 2 "from" [10 10 -10] "intensity" 250 "width" [2] "float samples" [32]
の部分を
"width" [16] "float samples" [512]
にあげてみました。
ありがとうございます。RenderManまだまだ勉強します。
  • -
  • -

<< RibFilter その12 ポリゴンスムージング 戻る RenderMan shadowspotの影出ない・・・! >>