昔、作者宅にもありました。ステージ上をバレリーナのフィギュアがクルクル回るオルゴール。今回は、バレリーナのフィギュアを万華鏡の中に入れて、クルクル回してみます。
「シルエット錯視」で使用した、ジョイント付きの人型を使います。ジョイントの回転角度を適当に調整して、バレリーナが踊っている様なポーズを取らせます。ここは、理論ではないので、感覚で……(1^^;)。データ中のコメントにもあるように、ポーズを取らせるための一次変換命令はインデントしていませんので、適当にいじってみてください(ポーズが変わります)。
オルゴールのステージ上でバレリーナのフィギュアが回るのは、ステージの下で磁石が回っていて、フィギュアの足の部分についた台の中の磁石と引き合っているから、ですよね?なので、足元に磁石を模した台を置いておきました。
今回は、フィギュアをクルクル回すステージを万華鏡の鏡の間にしてみます。万華鏡の鏡は、「万華鏡(レイトレ版)」で作成しましたので、それに習って生成しました。
attr 壁の色=
{
color 1.00,1.00,1.00;
refl 0.90,0.5,0.2;
diff 0.10,0.00;
};
model WallCeil
{
attr 壁の色;
roty 360/3;
plane HR,0,0, -1,0,0;
plane HR,HH,0, -1,-1,0;
roty 360/3;
plane HR,0,0, -1,0,0;
plane HR,HH,0, -1,-1,0;
roty 360/3;
plane HR,0,0, -1,0,0;
plane HR,HH,0, -1,-1,0;
}
今回は、普通の万華鏡の様に上から覗くのではなく、三面の鏡の内部の、フィギュアに近い視点からVR(360°+ステレオ3D)で眺めてみようと思っていますので、天井にも鏡を貼っておきました。ですので、完成動画で上(天井)も眺めてみてくださいね。
万華鏡の内部を模した作りにした上、地面と天井も付いていて、完全に閉じた空間になっています。閉じているだけに、無限遠方に存在し、そこからこちらを照らしてくる平行光線源(inf命令)では、天井なり壁なりが光を遮ってしまい、使い物になりません。
そこで、有限の位置に存在する、局所光線源(loc命令)を使います。
attr loclit=
{
refl 0.01,100,0.3;
diff 0.50,0.00;
color 1.00,1.00,1.00;
};
loc 0,HH,0, 10, 0.80,0.80,0.80;
局所光線源の中心座標を、閉じた空間の内部に設定してあります。局所光線源は実体を持っていますので、実体の属性を設定しておきます(attr命令)。うまく光っているように見えるように、属性を調整しましょう。この例では、実体として中心座標(0,HH,0)、半径10の球面が定義されます。
普通の投影視野で眺めるケースと、YouTubeのCardboardで視聴するためのVR(360°+ステレオ3D)で眺めるケースの両方をレンダリングできるようにスイッチを作っておきました。
var enb360=false; // 360度画像を生成する
var enbs3d=false; // 3D画像を生成する
enb360=trueとすると、360度動画を生成します。enb360=falseでは、通常の投影視野でレンダリングします。
enbs3d=trueとすると、ステレオ3D画像をレンダリングします。この時、enb360=trueでは、Top and Bottom、enb360=falseでは、Left and Rightで画像を生成します。
レイトレーシングで反射や透過が起きた時、交点から新たに視線が生成され、その先に見える映像を計算しに行きます。反射や透過を無限に繰り返すと、「合わせ鏡」を作った時、無限に処理が繰り返されてしまうため、反射や透過回数の上限を設定しています。
cond 0,2, 20,20,0;
cond命令の第三引数が反射や透過回数の上限で、上の例では20回に設定してあります。次の第4引数は影処理の上限になっており、基本的には、第三引数と同じ値を設定しますので、こちらも20にしてあります。
万華鏡の様に、三角形の合わせ鏡になった部屋の中では、反射回数がまともにレンダリング結果に影響します。
反射回数1回
反射回数2回
反射回数3回
反射回数10回
反射回数20回
このデータだと、鏡の反射率が90%に設定されていて、反射する度に10%づつ光が減衰するため、20回以上に設定しても、ほとんど完成画像に差は見られなくなります。それでも、反射回数10回の画像と20回の画像では、反射像の奥行きが全く違うことがお分かりいただけたでしょう。
完成したデータと動画です。
Xi-TRACEデータ | music_box.xitr |
VR(360°+ステレオ3D)動画だけですが、upしておきました。通常視野の方は、興味があればXi-TRACEでレンダリングしてみてください。