第 5 章 テクスチャー 50
5.3 カラーマップ
location <10, 10, -15>
look_at 0 angle 70 }
light_source { <10, 20, -20> color rgb 1.6 } object {
box { -5, 5 }
pigment { brick color rgb 1, color rgb <0.6, 0, 0> } }
5.2.7 ピグメントに対する変形
ピグメントの記述の中には、変形の記述、つまり移動、拡大、回転の記述を書くこともできま す。ピグメントの記述の中に変形の記述を書いた場合には、ピグメントが移動したり拡大したり 回転したりすることになります。
次のシーンは、立方体のパターンを、x軸方向に5倍だけ拡大して、z軸を回転軸にして30度 回転させて、x軸方向に3だけ移動させたのち、立方体に適用しています。
シーンの例 tranpig.pov camera {
location <10, 10, -15>
look_at 0 angle 70 }
light_source { <10, 20, -20> color rgb 1.6 } object {
box { -5, 5 } pigment {
checker color rgb 1, color rgb <0, 0.6, 0>
scale <5, 1, 1>
rotate 30*z
translate <3, 0, 0>
} }
拡大率や回転角や移動先をいろいろと変更してレンダリングしてみましょう。
5.3 カラーマップ
5.3.1 カラーマップとは何か
第5.2.2項で説明したように、ピグメントの記述の中には、「カラーマップ」(color map)と呼
ばれる記述を書くことができます。カラーマップを使うと、カラーリストと同じように、複数の 色から構成されるパターンのピグメントを作ることができます。
カラーマップというのは、0から1までの線分の上の位置に対して色を割り当てる記述のこと です。
5.3.2 カラーマップの作り方
カラーマップは、
color_map {
[ 位置の記述 色の記述 ]
•• } •
というように書きます。この中の「位置の記述」というところには、線分の上の位置を示す、0 から1までのあいだの数値を書きます。たとえば、
[0.4 color rgb <1, 0, 0>]
という記述は、線分の上の0.4という位置に対して赤色を割り当てるという意味になります。こ のようにして、0から1までのあいだのいくつかの位置に対して色を割り当てていくことによっ て、ひとつのカラーマップが作られます。なお、色が割り当てられた位置と位置とのあいだは、
一方の色から他方の色へ、色が連続的に変化していくことになります。
5.3.3 パターンタイプ
カラーマップからピグメントを作りたいときは、
pigment {
パターンの記述 カラーマップ }
という形の記述を書きます。この中の「パターンの記述」というところには、基本的には、「パ ターンタイプ名」と呼ばれる名前を書きます(その名前の後ろに、さらに何かを書かないといけ ない場合もあります)。
「パターンタイプ名」というのは、「パターンタイプ」(pattern type)と呼ばれるものの名前 で、パターンタイプというのはパターンの種類のことです。
パターンタイプにはさまざまなものがあるのですが、この節では、次の八つのパターンタイプ を紹介したいと思います。
gradient 勾配。
cylindrical 円柱。
spherical 球。
wood 年輪。
onion タマネギ。
spotted 斑点。
cells 枡目。
crackle ひび。
5.3.4 勾配
gradientというパターンタイプは、「勾配」(gradient)と呼ばれるピグメントを作ります。勾
配というのは、特定の方向に沿って反復的に色を変化させるというパターンのことです。
gradientを使うパターンの記述は、
gradient 方向
と書きます。この中の「方向」というところには、3次元ベクトルを値とする式を書きます。そ の3次元ベクトルは、勾配の方向を決めるためのものです。色は、そのベクトルが向いている方 向に沿って変化していきます。たとえば、
gradient y
というパターンの記述を書くことによって、y軸の方向に沿って色が変化する勾配のピグメント を作ることができます。
次のシーンは、カラーマップを使って作られた、y軸に沿って色が変化する勾配を、0.4倍に 縮小させたのち、立方体に適用しています。
シーンの例 gradient.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 }
5.3. カラーマップ 55 object {
box { -1, 1 } pigment {
gradient y color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.4 }
}
5.3.5 円柱
cylindricalというパターンタイプは、「円柱」(cylindrical)と呼ばれるピグメントを作りま す。円柱というのは、y軸を中心にして、そこから、xz平面に沿って放射状に色が変化していく パターンのことです。中心の色はカラーマップの1の色で、y軸から離れるにつれて0の色に近 づいていきます。
cylindricalを使うパターンの記述は、ただ単にcylindricalと書くだけです。
カラーマップで作られたピグメントも、移動させたり拡大したり回転させたりすることができ ます。円柱の中心軸はy軸に固定されていますので、それ以外の向きを持つ円柱を作りたい場合 は、それを回転させる必要があります。
次のシーンは、カラーマップを使って作られた円柱のパターンを、x軸で90度回転させて、x 軸の方向に1だけ移動させたのち、立方体に適用しています。
シーンの例 cylindrical.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
cylindrical color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
rotate 90*x
translate <1, 0, 0>
} }
5.3.6 球
sphericalというパターンタイプは、「球」(sphere)と呼ばれるピグメントを作ります。球と
いうのは、原点を中心にして、そこから放射状に色が変化していくパターンのことです。ただし、
中心の色はカラーマップの1の色で、y軸から離れるにつれて0の色に近づいていきます。
sphericalを使うパターンの記述は、ただ単にsphericalと書くだけです。
次のシーンは、カラーマップを使って作られた球のパターンを、2倍に拡大して、中心を<1,
1, -1>の位置に移動させたのち、立方体に適用しています。
シーンの例 spherical.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
spherical color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 2
translate <1, 1, -1>
} }
5.3.7 年輪
woodというパターンタイプは、「年輪」(annual ring)と呼ばれるピグメントを作ります。年輪 というのは、z軸を中心にして、xy平面に沿って反復的に同心円柱を作っていくパターンのこと です。
woodを使うパターンの記述は、ただ単にwoodと書くだけです。
次のシーンは、カラーマップを使って作られた年輪のパターンを、0.2倍に縮小して、x軸の 方向に1だけ移動させたのち、立方体に適用しています。
シーンの例 wood.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
wood
color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.2
translate <1, 0, 0>
} }
5.3.8 タマネギ
onionというパターンタイプは、「タマネギ」(onion)と呼ばれるピグメントを作ります。タマ
ネギというのは、原点を中心にして、反復的に同心球を作っていくパターンのことです。
onionを使うパターンの記述は、ただ単にonionと書くだけです。
次のシーンは、カラーマップを使って作られたタマネギのパターンを、0.2倍に縮小して、中 心を<1, 1, -1>の位置に移動させたのち、立方体に適用しています。
シーンの例 onion.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
5.3. カラーマップ 57 box { -1, 1 }
pigment { onion color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.2
translate <1, 1, -1>
} }
5.3.9 斑点
spottedというパターンタイプは、「斑点」(spot)と呼ばれるピグメントを作ります。斑点と
いうのは、ランダムな形状で色が変化していくパターンのことです。
spottedを使うパターンの記述は、ただ単にspottedと書くだけです。
次のシーンは、カラーマップを使って作られた斑点を、0.3倍に縮小させたのち、立方体に適 用しています。
シーンの例 spotted.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
spotted color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.3 }
}
5.3.10 枡目
cellsというパターンタイプは、「枡目」(cell)と呼ばれるピグメントを作ります。枡目という
のは、空間を立方体の区画に細分化して、カラーマップの中のランダムな位置の色をそれぞれの 区画に割り当てるというパターンのことです。
cellsを使うパターンの記述は、ただ単にcellsと書くだけです。
次のシーンは、カラーマップを使って作られた枡目を、0.4倍に縮小させたのち、立方体に適 用しています。
シーンの例 cells.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
cells color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.4 }
}
5.3.11 ひび
crackleというパターンタイプは、「ひび」(crackle)と呼ばれるピグメントを作ります。ひび
というのは、空間をランダムな形状の区画に細分化するというパターンのことです。
crackleを使うパターンの記述は、
crackle ひびのタイプの記述
と書きます。この中の「ひびのタイプの記述」というところには、ひびが持っている四つのタイ プのうちのどれかの名前を書きます。ひびのタイプによっては、その名前の右側に数値またはベ クトルを書くことによって、ひびの形状などを変化させることができます。
ひびが持っている四つのタイプのそれぞれは、form、metric、offset、solidという名前 によって識別されます。formの右側には1個の3次元ベクトル(デフォルトは<-1, 1, 0>)、
metricの右側には1個の数値(デフォルトは2)、offsetの右側には1個の数値(デフォルト
は0)を書くことができます。solidの右側には、何も書くことができません。
次のシーンは、カラーマップを使って作られたmetricタイプのひびを、0.4倍に縮小させたの ち、立方体に適用しています。
シーンの例 crackle.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 } pigment {
crackle metric 1 color_map {
[0 color rgb 1 ]
[1 color rgb <0, 0, 1> ] }
scale 0.4 }
}
solidタイプのひびは、空間をランダムな形状の区画に細分化して、カラーマップの中のラン
ダムな位置の色をそれぞれの区画に割り当てるというパターンです。このタイプのひびを使うこ とによって、ステンドグラスのようなピグメントを作ることができます。
次のシーンは、カラーマップを使って作られたsolidタイプのひびを、0.6倍に縮小させたの ち、立方体に適用しています。
シーンの例 cracklesolid.pov camera {
location <3, 2, -3>
look_at 0 angle 70 }
light_source { <5, 5, -5> color rgb 1.6 } object {
box { -1, 1 }
5.4. 光の透過 59