その2 リアルなガラス玉
さっそくガラス玉をつくってみよう。その前に、まずはガラスの屈折や反射の効果がよく見えるように、床を白と黒のチェック柄にしてみる。Chapter 1の最後のプログラムを一部変更して、下にようにしてみよう。赤で示した変更部分の命令は、それぞれ以下のとおり。
checker → チェック柄にするための命令。"checker 色1 色2" のように使う。
scale → チェック柄のスケール。値が大きいほど、チェックのマス目が大きくなる。
// → レンダリングのときには無視されるコメント部分
#include "colors.inc"
light_source {
<-20, 50, -20>, color White*2
}
camera{
location <-20,15,0>
look_at <0,0,0>
}
sphere{
<0,0,0>,8
texture{
pigment{color Blue}
finish{
phong 0.4
reflection 0.2
}
}
}
plane{
<0,1,0>,-5
texture{
pigment{
checker color Black White //白と黒のチェック柄
scale 4.0
}
finish{
phong 0.2
reflection 0.4
}
}
}
で、これをガラス玉にするためにはどうすればいいだろう??
まずは玉を透明にしてみよう。透明にするためには、いままで色の指定をしていた "rgb" のかわりに "rgbt" を使うといい。最後の t は、透過の度合いで、1に近いほど透明になる。というわけで、まずは完全に透明にするために、このtの値を1に設定してみよう。
#include "colors.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{rgbt<0,0,0,1>} //完全に透過 finish{ phong 0.4 reflection 0.2 } } } plane{ <0,1,0>,-5 texture{ pigment{ checker color Black White scale 4.0 } finish{ phong 0.2 reflection 0.4 } } }
これで玉は完全に透明になった。透明なのに玉がボンヤリと見えるのは、反射のおかげだ。("finish" で光沢や反射を設定していることを思い出そう!)
さて、このままではお世辞にも「リアルなガラス玉」なんて言えない。何が足りないのかといえば、そう、屈折だ。POV-Rayには物体の屈折率を指定することができるので、ためしにやってみよう。
#include "colors.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{ pigment{rgbt<0,0,0,1>} finish{ phong 0.4 reflection 0.2 } } interior{ ior 1.03 //屈折率 fade_distance 50 //透過した光が1/2に減衰する距離 fade_power 1 //謎のパラメータ。誰かおしえて! }} plane{ <0,1,0>,-5 texture{ pigment{ checker color Black White scale 4.0 } finish{ phong 0.2 reflection 0.4 } } }
さて、ここでちょっと物理を知ってる人は疑問に思うかもしれない。
「んん??ガラスの屈折率は1.5前後なのに、なんで1.03なんて中途ハンパな値なんや!?」
では、試しに屈折率を1.5にしてレンダリングしてみよう。結果はどうだろうか??たぶん玉を透過したチェック柄のゆがみ具合が、強すぎるように感じたはずだ。おそらく本物のガラス玉はこうなのかもしれない。でも1.03くらいにしたほうが、より、「ガラス玉」らしく見えるのではないだろうか??まぁこのへんは、かなりやる人の主観の問題になるけれども、必ずしもリアルな値を使うことが、「リアルに見える」結果になるとは限らないということは、CGをつくるときに覚えておいても損はないはずだ。
ここまで長々と書いてきたけど、じつはPOV-Rayには標準で、ガラスを創作するためのインクルードファイルが用意されている。これを使うと、いままで屈折率やら反射率やらをいちいち指定していたのが、たった一行で書くことができて、なかなか便利だ。
「なんだ、そんなええモンがあるんやったら、早く言ってよ」
、といいたいところだけど、残念ながらこのインクルードファイルはあんまり出来がよくない。
たとえば、こんな感じ。
#include "colors.inc"#include "glass.inc" light_source { <-20, 50, -20>, color White*2 } camera{ location <-20,15,0> look_at <0,0,0> } sphere{ <0,0,0>,8 texture{T_Glass1}} plane{ <0,1,0>,-5 texture{ pigment{ checker color Black White scale 4.0 } finish{ phong 0.2 reflection 0.4 } } }
・・・ショボい。
リアルに見えるCGをつくるためには、コツコツと地味な努力が必要なのだ。
次回は "while" という命令を使って、何十個もの玉をズラリと並べて、見た目も鮮やかなCGをつくってみよう!
(つづく)