その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をつくってみよう!

(つづく)