12. テクスチャ1

テクスチャは物体の材質を表現するために物体に貼り付ける模様のことで、壁紙のようなものである。さまざまなテクスチャが用意されており、多様な物体の表現が可能になっている。POV-Ray では、テクスチャは3次元的に定義されているものが多い。そのようなテクスチャは、表面ばかりでなく内部にもそのテクスチャが適用される。

テクスチャは下記の3つの要素から成る。

▷ピグメント(pigment)
 材質固有の色やカラーパターンの設定
▷ノーマル(normal)
 物体表面の凹凸や波紋のパターンの設定
▷フィニッシュ(finish)
 材質の反射と屈折の特性

このセクションでは POV-Ray のテクスチャの設定方法について説明する。

< texture の基本的な構文 >

texture { [ TEXTURE_IDENTIFIER ] [ pigment { PIGMENT_BODY } ] [ normal { NORMAL_BODY } ] [ finish { FINISH_BODY } ] [ TEXTURE_MODIFERS ... ] }
texture テクスチャのキーワード
TEXTURE_IDENTIFIER テクスチャ識別子の設定
pigment { PIGMENT_BODY } ピグメントの設定  ▷「12.1 ピグメント」参照
normal { NORMAL_BODY } ノーマルの設定  ▷「12.2 ノーマル」参照
finish { FINISH_BODY } フィニッシュの設定  ▷「12.3 フィニッシュ」参照
TRANSFORMATION 変形の設定  ▷「3.2 変形」参照

※ 各項目はすべてオプションであり、記述を省略した項目のパラメータにはデフォルト値が使用される。複数回設定したパラメータは、最後に設定したものが有効となる。

※ 変形は途中に記述すると、適用されない項目やパラメータがでてくる。全体に適用する場合は、最後に記述する。

※ インテリアは記述できない。

パターンや色の混合関数の使用により、複数のテクスチャを組み合わせて特殊なテクスチャを作ることもできる。▷「12.5 パターンテクスチャ」参照


12.1 ピグメント(pigment)

ピグメントとは色素という意味で、物体の色やカラーマップなどを設定する。

< pigment の構文 >

pigment { [ PIGMENT_IDENTIFIER ] [ PATTERN_TYPE ] [ PIGMENT_TYPE ] [ PIGMENT_MODIFIERS ... ] }
pigment ピグメントのキーワード
PIGMENT_IDENTIFIER ピグメント識別子の設定
PATTERN_TYPE パターンタイプの設定  ▷「13.1 パターンタイプ」
PIGMENT_TYPE ピグメントタイプの設定、下記のものが使用できる。
●カラー(色、色名など)
●ブロックパターン(checker, brick, hexagon)
●カラーマップ(color_map)
●ピグメントマップ(pigment_map)
●イメージマップ(image_map)
●クイックカラー(quick_color)
(上記の各オプションはピグメント文内で有効)
PIGMENT_MODIFIERS ... 変形などのオプションの設定 ▷「13.2 パターンのオプション」

※ 各項目はすべてオプションであるが、上記の順序で記述する必要がある。

※ 記述を省略した項目のパラメータにはデフォルト値が使用される。

※ 上記の順序で記述された各項目のパラメータに、後述のパラメータで関係するものがあれば、それによってパラメータの設定が変更される。

ピグメントはtexture {}を省略して物体に直接設定できる。

例)texture {}の省略した記述

//これは... object { My_Object texture { pigment {color Red} } }
  //このように短くできる   object {    My_Object    pigment {color Red}    }    


12.1-1 カラー

最も単純なピグメントは、カラー(色)のみを設定したものである。ピグメント文の中に色名やカラーベクトルを記述する。オプションとして、光の透過率(filter、transmit)も設定できる。

例) カラー設定の記述
   pigment {color Orange}
   pigment {color rgb<0.7, 0.6, 0.3>}
   pigment {color rgbf<0.7, 0.6, 0.3, 0.8>}  // filter 設定 0.8
   pigment {color rgbt<0.7, 0.6, 0.3, 0.8>}  // transmit 設定 0.8

 ※ 色の記述方法:▷「1.5 カラー」参照
 ※ さまざまな色:▷「14.1 カラー(色名)」参照

● 光の透過率 filter と transmit について

図12.1(a) filter の値による違い

図12.1(a): filter で光の透過率を大きくしていくと、透過する光は物体色の影響を受けていることがわかる。

図12.1(b) transmit の値による違い

図12.1(b) : transmit で光の透過率を大きくしていくと、物体がだんだん透明になっていく。1.0 になると完全に透明になり、見えなくなる。

//-------------------- Fig. 12.1-1a filter #version 3.7 #include "colors.inc" #include "textures.inc" global_settings { assumed_gamma 2.2 } //-----------------------------camera - light camera{ location <0,-14,8> sky <0, 0, 1> right <-image_width/image_height,0,0> look_at <-0.6, 0, 0.3> angle 22 } light_source{ <-150, -500, 600> color rgb 1.5} //================================== <<<<< color / filter #declare C0= pigment{color rgb<1, 0.5, 0.2>} #declare C1= pigment{color rgbf<1, 0.5, 0.2, 0.25>} #declare C2= pigment{color rgbf<1, 0.5, 0.2, 0.5>} #declare C3= pigment{color rgbf<1, 0.5, 0.2, 0.75>} #declare C4= pigment{color rgbf<1, 0.5, 0.2, 1.0>} //------------------------------------object box{0,1 pigment{C0} rotate -25*z scale<0.5,0.5,2.3> translate <-3,-1,0>} box{0,1 pigment{C1} rotate -25*z scale<0.5,0.5,2.3> translate <-2,-1.0,0>} box{0,1 pigment{C2} rotate -25*z scale<0.5,0.5,2.3> translate <-1,-1,0>} box{0,1 pigment{C3} rotate -25*z scale<0.5,0.5,2.3> translate < 0,-1.0,0>} box{0,1 pigment{C4} rotate -25*z scale<0.5,0.5,2.3> translate < 1,-1.0,0>} //---------------------------------floor #declare CA1=rgb<0.85,0.85,0.8>; #declare CA2=rgb<0.85,0.85,0.8>*1.2; plane{ z, -0.2 pigment{ checker color CA1, color CA2 scale 0.3 } } //-------------------------------text text{ttf "cyrvetic.ttf","0 0.25 0.5 0.75 1.0",0.1,0 scale 0.3 no_shadow pigment{Black} rotate<90,0,0> translate <-2.7,-2,0> } text{ttf "cyrvetic.ttf","filter",0.1,0 scale 0.3 no_shadow pigment{Black} rotate<90,0,0> translate <-1,-2.8,0> }
//-------------------- Fig. 12.1-1b transmit #version 3.7 #include "colors.inc" #include "textures.inc" global_settings { assumed_gamma 2.2 } //-----------------------------camera - light camera{ location <0,-14,8> sky <0, 0, 1> right <-image_width/image_height,0,0> look_at <-0.6, 0, 0.3> angle 22 } light_source{ <-150, -500, 600> color rgb 1.5} //================================== <<<<< color / transmit #declare C0= pigment{color rgb<1, 0.5, 0.2>} #declare C1= pigment{color rgbt<1, 0.5, 0.2, 0.25>} #declare C2= pigment{color rgbt<1, 0.5, 0.2, 0.5>} #declare C3= pigment{color rgbt<1, 0.5, 0.2, 0.75>} #declare C4= pigment{color rgbt<1, 0.5, 0.2, 1.0>} //------------------------------------object box{0,1 pigment{C0} rotate -25*z scale<0.5,0.5,2.3> translate <-3,-1,0>} box{0,1 pigment{C1} rotate -25*z scale<0.5,0.5,2.3> translate <-2,-1.0,0>} box{0,1 pigment{C2} rotate -25*z scale<0.5,0.5,2.3> translate <-1,-1,0>} box{0,1 pigment{C3} rotate -25*z scale<0.5,0.5,2.3> translate < 0,-1.0,0>} box{0,1 pigment{C4} rotate -25*z scale<0.5,0.5,2.3> translate < 1,-1.0,0>} //---------------------------------floor #declare CA1=rgb<0.85,0.85,0.8>; #declare CA2=rgb<0.85,0.85,0.8>*1.2; plane{ z, -0.2 pigment{ checker color CA1, color CA2 scale 0.3 } } //-------------------------------text text{ttf "cyrvetic.ttf","0 0.25 0.5 0.75 1.0",0.1,0 scale 0.3 no_shadow pigment{Black} rotate<90,0,0> translate <-2.7,-2,0> } text{ttf "cyrvetic.ttf","transmit",0.1,0 scale 0.3 no_shadow pigment{Black} rotate<90,0,0> translate <-1,-2.8,0> }

※ カラー設定はパターンを使用しないため、パターンのオプションなどは無効


12.1-2 カラーリストパターン

カラーリストパターンには、チェッカー(checker)、レンガ(brick)、六角形(hexagon)の3つがある。これは、カラーマップパターンのような色が変化するような混合ではなく、色の境界のはっきりしたカラーパターンが特徴である。

< カラーリストパターンの構文 >

pigment { checker <COLOR1>, <COLOR2> PIGMENT_MODIFIERS ... } pigment { brick <COLOR1>, <COLOR2> PIGMENT_MODIFIERS ... } pigment { hexagon <COLOR1>, <COLOR2>, <COLOR3> PIGMENT_MODIFIERS ... }
pigment ピグメントのキーワード
checker チェッカーのパターンのキーワード ▷「13.1-9 checker」
brick レンガのパターンのキーワード ▷「13.1-6 brick」
hexagon 六角形のパターンのキーワード ▷「13.1-20 hexagon」
<COLOR1> ~ <COLOR3> 各パターン色の設定 ▷「1.5 カラー」
※ 各色はコンマで区切ること
PIGMENT_MODIFIERS ... 変形などのオプションの設定 ▷「13.2 パターンのオプション」

図12.1-2 (左から)レンガ、チェッカー、六角形のパターン

//-------------------- Fig. 12.1-2 color-list pattern #version 3.7 #include "colors.inc" #include "textures.inc" global_settings {assumed_gamma 2.2} camera{ location<0,-7,0> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,0> } light_source {<0,-1000,1000> color White} background{color rgb 1} //=============================== brick box{ -0.5,0.5 scale <1.5,4.5,4.5> pigment{brick White,rgb<0.8,0.35,0.1>*0.8 scale 0.1 rotate x*90} finish{phong 1 reflection 0.2} translate <-2.1,0.5,0> } //=============================== checker box{ -0.5,0.5 scale <1.5,4.5,4.5> pigment{checker White,rgb<1,0.7,0.2> scale 0.5 rotate x*90} finish{phong 1 reflection 0.2} translate <0,0.5,0> } //=============================== hexagon box{ -0.5,0.5 scale <1.5,4.5,4.5> pigment{hexagon scale 0.3 } finish{phong 1 reflection 0.2} translate <2.1,0.5,0> }


12.1-3 カラーマップ(color_map)

カラーマップにより、複数のカラーをある色から次の色へと滑らかに変化させることができる。カラーマップはパターンタイプに応じてうまく利用すると豊かな色彩表現ができる。

< color_map の構文 >

pigment { PATTERN_TYPE color_map { [ NUM1 <COLOR1> ] [ NUM2 <COLOR2> ] ... [ NUMn <COLORn> ] } PIGMENT_MODIFIERS... }
pigment ピグメントのキーワード
PATTERN_TYPE パターンタイプの設定  ▷「13.1 パターンタイプ」参照
color_map カラーマップのキーワード
NUM1~NUMn 各エントリーの範囲の設定、 0.0~1.0の数値
<COLOR1> ~ <COLORn> 各エントリーの色の設定  ▷「1.5 カラー」参照
PIGMENT_MODIFIERS... 変形などのオプションの設定 ▷「13.2 パターンのオプション」参照

※ ここでの [ ] はカラーマップの各エントリーを囲むもので、実際に記述する部分であり、オプションの意味ではない。マップの中で使用できるエントリーの数は 2 ~ 256 である。

パターンタイプは、すべての x,y,z の位置を 0.0~1.0 の値に変換する関数である。その値はカラーマップの色混合に使われる。

図12.1-3 カラーマップ

上図は、パターン(gradient x)を使い、カラーマップは座標が 0.0~1.0 の値に割り当てられる。この値はスケーリングで調節すると、カラーマップの大きさ(密度)をコントロールできる。

例)上図のカラーマップ部分 pigment { gradient x color_map { [0.1 color Red] // 0~0.1 : Red [0.3 color Yellow] // 0.1~0.3 : Red と Yellow を混合 [0.6 color Blue] // 0.3~0.6 : Yellow と Blue を混合する。 [0.6 color Green] // 0.6 より小さい値は Blue、0.6 になると Green [0.8 color Cyan] // 0.6~0.8 : Green と Cyan を混合 [1.0 color Cyan] // 0.8~1.0 : Cyan } scale 1 // カラーマップの拡大縮小 }
//-------------------- Fig. 12.1-3 color_map #version 3.7 #include "colors.inc" #include "textures.inc" global_settings {assumed_gamma 2.2} camera{ location<3,-5,5> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,0> angle 48 } light_source {<-200,-1000,1000> color White*1.3} background{color SkyBlue} //============================= color_map sphere { 0, 2 pigment { gradient x color_map { [0.1 color Red] [0.3 color Yellow] [0.6 color Blue] [0.6 color Green] [0.8 color Cyan] [1.0 color Cyan] } scale 1 } finish{phong 1 reflection 0.1} } //---------------------------------floor #declare CA1=rgb<0.85,0.85,0.8>; #declare CA2=rgb<0.85,0.85,0.8>*1.2; plane{ z, -3 pigment{ checker color CA1, color CA2 scale 0.3 } }

色が変化しない範囲を設定するときは、隣接した2つのエントリーに同じ色を設定する。

例)カラーマップ 同色 color_map { [0.1 color Red] [0.3 color Yellow] [0.6 color Yellow] [0.8 color Green] }
この場合、0.3~0.6ではすべてYellowになる。

カラーマップは、ブロックパターン(brick, checker, hexagon)とイメージマップ(image_map)以外のすべてパターンに使用できる。

次の例は識別子として宣言した例である。

例)カラーマップ 識別子 #declare Rainbow_Colors= color_map { [0.0 color Magenta] [0.33 color Yellow] [0.67 color Cyan] [1.0 color Magenta] } object{My_Object pigment{ gradient x color_map{Rainbow_Colors} } }

12.1-4 ピグメントマップ(pigment_map)

ピグメントマップでは、カラーマップと同様の方法でピグメントを混合できる。ピグメントマップでは各エントリーに単色ではなくピグメントを設定するが、それ以外はカラーマップと同じである。

< pigment_map の構文 >

pigment { PATTERN_TYPE pigment_map { [ NUM_1 PIGMENT_BODY_1] [ NUM_2 PIGMENT_BODY_2] ... [ NUM_n PIGMENT_BODY_n] } PIGMENT_MODIFIERS... }
pigment ピグメントのキーワード
PATTERN_TYPE パターンタイプの設定 ▷「13.1 パターンタイプ」参照
pigment_map ピグメントマップのキーワード
NUM_1~NUM_n 各エントリーの範囲の設定、0.0~1.0 の数値
PIGMENT_BODY_1
~PIGMENT_BODY_n
各エントリーのピグメントの設定、通常のピグメントはすべて使用できる。pigment {} はここでは必要ない。
PIGMENT_MODIFIERS... 変形などのオプションの設定 ▷「13.2 パターンのオプション」参照

※ ここでの [ ] はピグメントマップの各エントリーを囲むもので、実際に記述する部分であり、オプションの意味ではない。マップの中で使用できるエントリーの数は 2 ~ 256 である。

図12.1-4 ピグメントマップ
//-------------------- Fig. 12.1-4 pigment_map #version 3.7 #include "colors.inc" #include "textures.inc" global_settings {assumed_gamma 2.2} camera{ location<3,-5,5> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,0> angle 48 } light_source {<-200,-1000,1000> color White*1.3} background{color SkyBlue} //=================== granite pattern 1 #declare MA=pigment{ granite color_map{[0.0 color rgb<0.9,0.4,0.1>][0.9 White]} scale 0.5 } //=================== granite pattern 2 #declare MB=pigment{ granite color_map{[0.0 color rgb<0.3,0.9,0.1>][0.9 White]} scale 1 } //=================== granite pattern 3 #declare MC=pigment{ granite color_map{[0.0 color rgb<0.1,0.6,0.8>][0.9 White]} scale 0.7 } //======================================== pigment_map sphere { 0, 2 pigment { gradient x pigment_map { [0.0 MC] [0.1 MB] [0.7 MA] [1.0 MC] } warp{turbulence 0.2} scale 1 } finish{phong 1 reflection 0.1} } //---------------------------------floor #declare CA1=rgb<0.85,0.85,0.8>; #declare CA2=rgb<0.85,0.85,0.8>*1.2; plane{ z, -3. pigment{ checker color CA1, color CA2 scale 0.3 } }

上図の例は、前出のカラーマップと同様に gradient x を使用し、色名の代わりにパターンを使っている。記述形式はカラーマップと同じである。

ピグメントマップにはネストの制限はない。ピグメントマップのエントリーには単色も使用できるが、すべてのエントリーが単色である場合はカラーマップを使用したほうがレンダリングは速くなる。

ブロックパターン(チェッカー、レンガ、六角形)のカラーリストの代わりに、ピグメントの使用もできる。

例)チェッカー pigment { checker pigment { Jade scale 0.8 } pigment { White_Marble scale 0.5 } }
  ▷「13.1-9 チェッカー(checker)」参照

  ▷「13.1-20 六角形(hexagon)」参照

※ ブロックパターンの場合は、pigment {} でピグメント情報を囲まなければならない。

※ ピグメントマップはaverage(複数のピグメントの平均的な混合)も使用できる。▷「13.1-3 平均」参照

※ ピグメントマップと個別のピグメントはイメージマップには使用できないが、テクスチャマップによって同様の効果が得られる。▷「12.5 パターンテクスチャ」参照


12.1-5 クイックカラー(quick_color)

POV-Rayのシーンを作るとき、低品質でより速いテストを行うことはしばしば便利である。+Q コマンドラインスイッチによって、カラーパターンと照明の計算を簡単にしてレンダリング速度を上げることができる。しかし、+Q5 以下の設定はすべてのピグメントの計算を省略し、グレーの物体を作る。

ピグメントにquick_colorを追加し、パターンやピグメントの代わりに単色を用いてレンダリングを速くできる。

例)クイックカラー pigment { gradient x color_map{ [0.0 color Yellow] [0.3 color Cyan] [0.6 color Magenta] [1.0 color Cyan] } turbulence 0.5 lambda 1.5 omega 0.75 octaves 8 quick_color Neon_Pink }
この例では +Q5 以下のテストを行うために単色の Neon_Pink を使用しているが、+Q6 以上では乱れた gradient のパターンを使用してレンダリングする。

次のような単色のピグメントは、自動的にその値の quick_color に設定される。

pigment {color Magenta}

必要に応じてこれを無効にできる。画面上に黄色の球が10個あるとする。それらを個別に識別したい場合は、次のような異なったクイックカラーをそれぞれに与えることができる。

sphere { <1,2,3>,4 pigment { color Yellow quick_color Red } } sphere { <-1,-2,-3>,4 pigment { color Yellow quick_color Blue } } sphere { ......
+Q6 以上ではこれらはすべて黄色になるが、+Q5 以下ではそれぞれ異なった色になるので識別できる。


 ▷ 次を見る