第 3 章 基本的なプリミティブ 29
3.6 ブロブ
3.6. ブロブ 35
3.6.2 ブロブの記述
blobを使ってブロブを作る記述は、
blob {
threshold 閾値 ブロブ部品
••
• }
と書きます。この中の「閾値」というところには、ブロブの内側と外側の境界面を決定する閾値 を指定します。そして、「ブロブ部品」というところには、ブロブ部品を作るためのsphereまた はcylinderの記述を書きます。ただし、sphereとcylinderの書き方は、本来の書き方とは少 し違います。sphereの記述は、
sphere { 中心の座標 , 半径 , 強さ }
と書きます。同じように、cylinderの記述は、
cylinder { 中心1 , 中心2 , 半径 , 強さ }
と書きます。これらの記述の中の「半径」のところには、力の強さが0になる、中心からの距離 を書きます。そして、「強さ」というところには、ブロブ部品の中心での力の強さを書きます。た とえば、
blob {
threshold 0.5
sphere { <-1, 0, 0>, 1.5, 1 } sphere { <1, 0, 0>, 1.5, 1 } }
という記述は、中心での力の強さが1で、中心から1.5だけ離れたところで力が0になる二つの ブロブ部品から構成される、力の強さが0.5のところをつないでできる境界面で囲まれたブロブ を作ります。
次のシーンは、二つの球から構成されるブロブを作っています。
シーンの例 blob.pov camera {
location <0, 0, -4>
look_at 0 angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
blob {
threshold 0.5
sphere { <-1, 0, 0>, 1.5, 1 } sphere { <1, 0, 0>, 1.5, 1 } }
pigment { color rgb 1 } }
閾値や強さをいろいろと変更してレンダリングしてみましょう。
3.6.3 円柱を含むブロブ
ブロブの記述の中にsphereの記述を書いた場合は、中心が点であるようなブロブ部品ができ るわけですが、それに対して、cylinderの記述を書いた場合は、中心が線分であるようなブロ ブ部品ができます。
次のシーンは、円柱と球から構成されるブロブを作っています。
シーンの例 blob2.pov
3.6. ブロブ 37 camera {
location <0, 0, -5>
look_at 0 angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
blob {
threshold 0.5
sphere { <-1, 0, 0>, 1.5, 1 }
cylinder { <1, -1, 0>, <1, 1, 0>, 1.5, 1 } }
pigment { color rgb 1 } }
閾値や強さをいろいろと変更してレンダリングしてみましょう。
3.6.4 ブロブとテクスチャー
ブロブを構成するそれぞれの球や円柱に対しては、異なるテクスチャーを指定することもでき ます。
次のシーンは、異なる色を持つ球から構成されるブロブを作っています。
シーンの例 blob3.pov camera {
location <0, 0, -4>
look_at 0 angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
blob {
threshold 0.5 sphere {
<-1, 0, 0>, 1.5, 1
pigment { color rgb <1, 1, 0> } }
sphere {
<1, 0, 0>, 1.5, 1
pigment { color rgb <0, 1, 1> } }
} }
3.6.5 マイナスの強さを持つブロブ部品
ブロブ部品の中心での力の強さは、マイナスにすることも可能です(閾値は、プラスでないと いけません)。中心での力の強さがマイナスであるようなブロブ部品の場合、力は、中心から離 れるほど強くなっていって、半径として指定された距離で0になります。
マイナスの強さを持つブロブ部品を使うことによって、凹みを持つブロブを作ることができ ます。
次のシーンは、プラスの強さを持つ球とマイナスの強さを持つ球から構成されるブロブを作っ ています。
シーンの例 blob4.pov camera {
location <5, 0, -3>
look_at 0 angle 70 }
light_source { <5, 3, -5> color rgb 1.6 } object {
blob {
threshold 0.5
sphere { <0, 0, 0>, 4, 1 } sphere { <2, 0, 0>, 1.5, -1 } }
pigment { color rgb 1 } }
閾値や強さをいろいろと変更してレンダリングしてみましょう。