▷ 前を見る 


12.5 パターンテクスチャ

パターンテクスチャは複数のテクスチャを組み合わせた複雑なテクスチャである。その要素にはどんなテクスチャでもよい。

パターンテクスチャには下記のものがある。

 ●テクスチャマップ(texture_map):テクスチャパターンを混合する
 ●マテリアルマップ(material_map):イメージマップを拡張したもの。

※ パターンテクスチャはデフォルト テクスチャとして使用できない。
   ▷「2.4 デフォルト テクスチャの設定」参照

※ パターンテクスチャはレイヤーテクスチャの中では使用できない。
   ▷「12.6 レイヤーテクスチャ」参照


12.5-1 テクスチャマップ(texture_map)

テクスチャマップでは、ピグメントマップやノーマルマップと同様の方法で複数のテクスチャを混合できる。テクスチャマップでは各マップエントリーにテクスチャを設定するが、それ以外はピグメントマップと同じである。

< texture_map の構文 >

texture { PATTERN_TYPE texture_map { [ NUM_1 TEXTURE_BODY_1] [ NUM_2 TEXTURE_BODY_2] ... [ NUM_n TEXTURE_BODY_n] } TEXTURE_MODIFIERS... }
texture テクスチャのキーワード
PATTERN_TYPE パターンタイプの設定  ▷「13.1 パターンタイプ」参照
texture_map テクスチャマップのキーワード
NUM_1~NUM_n 各エントリーの範囲の設定、 0.0~1.0の数値
TEXTURE_BODY_1
~TEXTURE_BODY_n
各エントリーのテクスチャの設定、通常のテクスチャであればすべて使用できる。texture { } はここでは必要ない。
TEXTURE_MODIFIERS... 変形などのオプションの設定 ▷「13.2 パターンのオプション」参照

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

※ テクスチャマップの中でレイヤーテクスチャを使用する場合は、識別子として宣言して使用する。しかし、テクスチャマップはレイヤーテクスチャの中では使用できない。

※ テクスチャマップはデフォルト テクスチャとして使用できない。

※ テクスチャマップにはネストの制限はない。

図12.5-1 テクスチャマップ
//-------------------- Fig. 12.5-1 texture_map #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" global_settings {assumed_gamma 2.2} camera{ location<1,-9.5,3.2> sky<0,0,1> right <-image_width/image_height,0,0> look_at <2,0,3> angle 50 } light_source {<-20,-20,20> rgb 2 parallel point_at 0} //================================== texture_map (box) box{0,1 scale <5,5,1> texture { gradient x texture_map { [0.2 pigment {Red_Marble}] [0.7 pigment {Orange*1.1}] [0.9 T_Grnt13 scale 2] [1.0 pigment {Red_Marble}] } warp{ turbulence 0.3 } rotate z*90 } rotate x*90 translate <0,0.8,0.5> } //-----------------------------wall and floor box{0,1 scale <20,1,20> pigment { triangular rgb 1 rgb<1,0.8,0.6> rgb<1,1,0.8> rgb<0.8,0.8,1> rgb<0.8,1,0.8> rgb<1,0.8,1> scale 0.8 } translate <-10,0.2,-1> } plane{ z, 0 pigment{ checker rgb 1, LightSteelBlue scale 0.4} }

上図のテクスチャマップ記述部分を次に示す。

texture { gradient x texture_map { [0.2 pigment {Red_Marble}] // (1) [0.7 pigment {Orange*1.1}] // (2) [0.9 T_Grnt13 scale 2] // (3) [1.0 pigment {Red_Marble}] // (4) } warp{ turbulence 0.3 } // (5) rotate z*90 }
このテクスチャマップは、
 (1) x 値(0.0~0.2) : Red_Marble のテクスチャ使用
 (2) x 値(0.2~0.7) : Red_Marble から Orange カラーになるよう混合
 (3) x 値(0.7~0.9) : Orenge から T_Grnt13 のテクスチャになるよう混合
 (4) x 値(0.9~1.0) : T_Grnt13 から Red_Marble のテクスチャになるよう混合
のようなテクスチャ制御をし、最後に turbulence で乱れを与えている。

※ ブロックパターン(チェッカー、レンガ、六角形)の各ブロックにもテクスチャを適用することができる。

  ▷「13.1-9 チェッカー(checker)」参照

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


12.5-2 タイル(tiles)

初期バージョンの POV-Ray では、テクスチャのチェッカーパターンを作るためにタイルテクスチャと呼ばれる特殊テクスチャを使用していた。それは旧バージョンの互換性のために今でも使用できるが、tile sの代わりに、テクスチャパターンで checker を使用する。


12.5-3 マテリアルマップ(material_map)

 (省略)


12.6 レイヤーテクスチャ

レイヤーテクスチャは、複数のテクスチャを使用する。透明部分を持ったテクスチャを層(レイヤー)のようにいくつも重ねて利用すると、各層のテクスチャが重なり合い複雑な表現ができる。レイヤーテクスチャの設定は、2つ以上のテクスチャを下層から上層に順番に記述する。

< レイヤーテクスチャの構文 >

OBJECT { OBJECT_ITEM texture {T1} texture {T2} ... texture {Tn} }
OBJECT、OBJECT_ITEM レイヤーテクスチャを使用する物体の設定
texture {T1}
  ...
texture {Tn}
各層のテクスチャの設定、 T1 が最下層、Tn が最上層
※ T1 以外で、透明部分がないテクスチャを設定すると、それ以前の層のテクスチャはすべて見えなくなる。
※ 特殊テクスチャは使用できない

※ ブロックパターン(checker, brick, hexagon)やマテリアルマップの中でレイヤーテクスチャを使いたい場合は、識別子として宣言しそれを使用する。

下層のテクスチャは上層の透明部分から見える。レイヤーとしてテクスチャを重ねることができ、下層のテクスチャは、上層のテクスチャの透明部分や半透明部分を通して見えることになり、複雑な表現も実現できる。インクルードファイルの stones.inc にも定義されているテクスチャにレイヤーテクスチャが使われている。わかりやすい例として天空に使われている雲がある。

レイヤーテクスチャを宣言して使用できる。また、テクスチャ識別子の後にピグメント、ノーマル、フィニッシュを追加した場合、最下層のテクスチャだけが修正される。

例)レイヤーテクスチャの宣言と使用 #declare Layered_TTT = texture {T1} texture {T2} texture {T3} object { My_Object texture { Layered_TTT finish { shiny } // 最下層のテクスチャ T1 を修正 } }


12.7 UVマッピング(uv_mapping)

UVマッピングは、テクスチャを uv 軸で表現し、これを xyz 軸の空間にある物体に貼り付ける。イメージマップやバンプマップでは1つの平面を基本としたマッピングしかできないが、UVマッピングでは機能が拡張されており、さらに高度なマッピングができる。

< uv_mapping の構文 >

texture { uv_mapping pigment { PIGMENT_BODY } | pigment { uv_mapping PIGMENT_BODY } uv_mapping normal { NORMAL_BODY } | normal { uv_mapping NORMAL_BODY } uv_mapping texture { TEXTURE_BODY } | texture { uv_mapping TEXTURE_BODY } }
uv_mapping UVマッピングのキーワード
pigment ピグメント(色彩、画像ファイルなど)の設定  ▷「12.1 ピグメント」参照
normal ノーマル(法線ベクトル)の設定  ▷「12.2 ノーマル」参照
texture テクスチャの設定  ▷「12. テクスチャ1」参照

<UVマッピングが使用できる物体>

ベジェ曲面(bicubic_patch) UV座標軸は、ベジェ曲面定義の座標軸を基本とする。曲面定義領域に伸縮してマッピング
メッシュ(mesh)
メッシュ2(mesh2)
UVマッピング:各頂点と対応したマッピング
回転体(lathe)
簡易回転体(sor)
UVマッピング:回転軸を中心に包むマッピング
球(sphere) UVマッピング:y 軸を中心に球を包むマッピング
ボックス(box) 下図12.7aに示すような形式で画像部分をマッピング

図12.7a ボックスのUVマッピング

UVマッピングと通常マッピングの比較例

図12.7b イメージマッピング用画像例

下の各図の左側がUVマッピング、右側が通常のマッピング

(1) ベジェ曲面

図12.7c ベジェ曲面へのマッピング
//-------------------- Fig. 12.7c uv_map bicubic_patch #version 3.7 #include "colors.inc" #include "textures.inc" global_settings {assumed_gamma 2.2} camera{ location<4,-5,25> sky<0,0,1> right <-image_width/image_height,0,0> look_at <3.3,2,0> angle 20 } light_source {<50,-500,1000> color White*1.6} //========================== uv_mapping (bicubic_patch :left) bicubic_patch{ type 1 flatness 0 u_steps 4 v_steps 4 <0,0,-5>,<1,0,1>,<2,0,3>,<3,1,2> <0,1,2>,<1,1,6>,<2,1,5>,<3,2,1.5> <0,2,3>,<1,2,5>,<2,2,4>,<3,4,2> <0,3,1>,<1,3,3>,<2,3,4>,<3,3,5> uv_mapping pigment {image_map{png "prz-1207-b-glass.png"}} } //========================== image_map (bicubic_patch :right) bicubic_patch{ type 1 flatness 0 u_steps 4 v_steps 4 <0,0,-5>,<1,0,1>,<2,0,3>,<3,1,2> <0,1,2>,<1,1,6>,<2,1,5>,<3,2,1.5> <0,2,3>,<1,2,5>,<2,2,4>,<3,4,2> <0,3,1>,<1,3,3>,<2,3,4>,<3,3,5> pigment{image_map{png "prz-1207-b-glass.png"} scale 3} translate <3.5,0,0> } //----------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

(2) 回転体

図12.7d 回転体へのマッピング
//-------------------- Fig. 12.7d uv_map lathe #version 3.7 #include "colors.inc" #include "textures.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2} camera{ location<1,-5,5> sky<0,0,1> right <-image_width/image_height,0,0> look_at <1,0,1> angle 32 } light_source {<-300,-1000,800> color White*1.5} //============================= uv_mapping (lathe :left) lathe{ cubic_spline 12, <1,0>,<1,0.1>,<0.5,0.4>,<1,1.5>,<0.5,2>, <0.4,2>,<0.9,1.5>,<0.4,0.4>,<0.8,0>,<1,0>,<1,0.1>,<0.5,0.4> uv_mapping pigment {image_map{png "prz-1207-b-glass.png" } scale 0.45} finish{phong 1 reflection 0.1} rotate x*90 scale<0.5,0.5,1> translate x*0.3 } //============================= image_map (lathe :rigth) lathe{ cubic_spline 12, <1,0>,<1,0.1>,<0.5,0.4>,<1,1.5>,<0.5,2>, <0.4,2>,<0.9,1.5>,<0.4,0.4>,<0.8,0>,<1,0>,<1,0.1>,<0.5,0.4> pigment{image_map{png "prz-1207-b-glass.png"} scale 2} finish{phong 1 reflection 0.1} rotate x*90 scale<0.5,0.5,1> translate x*1.7 } //-----------------------------Floor plane { z, 0 texture { T_Wood9 scale 0.6 rotate x*90} }

(3) 球

図12.7e 球へのマッピング
//-------------------- Fig. 12.7e uv_map sphere #version 3.7 #include "colors.inc" #include "textures.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2} camera{ location<1.25,-5,5> sky<0,0,1> right <-image_width/image_height,0,0> look_at <1.25,0,0> angle 40 } light_source {<300,-1000,1000> color White*1.5} //============================== uv_mapping (sphere :left) sphere{ 0,1 uv_mapping pigment {image_map{png "prz-1207-b-glass.png"} scale 0.5} rotate x*-30 } //============================== image_map (sphere :right) sphere{ 0,1 pigment {image_map{png "prz-1207-b-glass.png"} scale 1.2} rotate x*-30 translate x*2.5 } //-----------------------------Floor plane { z, -1 texture { T_Wood9 scale 0.6 rotate x*90} }

(4) ボックス

図12.7f ボックスへのマッピング
//-------------------- Fig. 12.7f uv_map box #version 3.7 #include "colors.inc" #include "textures.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2} camera{ location<1.25,-3,5> sky<0,0,1> right <-image_width/image_height,0,0> look_at <1.25,0,1> angle 33 } light_source {<300,-1000,800> color White*1.8} //=========================== uv_mapping (box :left) box{ 0,1 uv_mapping pigment {image_map{png "prz-1207-b-glass.png"} scale 0.3} } //=========================== image_map (box :right) box{ 0,1 pigment {image_map{png "prz-1207-b-glass.png"} } translate<1.5,0,0> } //-----------------------------Floor plane { z, 0 texture { T_Wood9 scale 0.6 rotate x*90} }


12.8 三角形のテクスチャ補間(texture_list)

三角形の各頂点にそれぞれ異なったテクスチャを設定すると、その三角形内では、異なったテクスチャを混ぜ合わせて補間ができる。この機能はキーワード texture_list によって有効にできる。

< texture_list の構文 >

mesh { triangle { <Corner_1>,<Corner_2>,<Corner_3> texture_list { TEXTURE_1 TEXTURE_2 TEXTURE_3 } ............... triangle { <Corner_1>,<Corner_2>,<Corner_3> texture_list { TEXTURE_1 TEXTURE_2 TEXTURE_3 } }
mesh メッシュのキーワード
triangle 三角形のキーワード、smooth_triangle も使用可
<Corner_1>,<Corner_2>,<Corner_3> 三角形の各頂点
texture_list 三角形のテクスチャ補間のキーワード
TEXTURE_1 TEXTURE_2 TEXTURE_3 三角形各頂点のテクスチャ

図12.8 テクスチャリスト
//-------------------- Fig. 12.8 texture_list #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" global_settings {assumed_gamma 2.2} camera{ location<20,5,10> sky<0,0,1> right <-image_width/image_height,0,0> look_at <0,0,0.2> angle 5 } light_source { <103,-80, 100> color White*2 } //========================================== texture_list mesh{ triangle{x,y,z texture_list { T_Stone30 T_Stone40 T_Stone21 }} triangle{y,-x,z texture_list { T_Stone40 T_Stone30 T_Stone21 }} triangle{-x,-y,z texture_list { T_Stone30 T_Stone40 T_Stone21 }} triangle{-y,x,z texture_list { T_Stone40 T_Stone30 T_Stone21 }} scale z*0.8 } //------------------------------- Floor plane { z, 0 texture {Cork scale 2} }


12.9 インテリアテクスチャ(interior_texture)

通常、テクスチャは物体の表面に貼り付けられる。物体の内側に貼り付けられるテクスチャをインテリアテクスチャと呼ぶ。

< interior_texture の構文 >

object { texture { TEXTURE_ITEMS } interior_texture { TEXTURE_ITEMS } }
texture 物体表面へのテクスチャマッピング
interior_texture 物体内側へのテクスチャマッピング

図12.9 インテリアテクスチャ
//-------------------- Fig. 12.9 interior_texture #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" global_settings {assumed_gamma 2.2} camera{ location<10,10,10> sky<0,0,1> right <-image_width/image_height,0,0> look_at <0,0,1> angle 45 } light_source {<10, 0.5, 8>*10 color White*2 } //=================================== interior_texture cylinder { <0, 0, 0>, <0, 0, 4>, 4 open texture { PinkAlabaster } interior_texture { Red_Marble } } //--------------------------------Floor plane { z, 0 pigment { checker rgb<0.5,0.8,0.7> color White } }


12.10 論理演算テクスチャ(cutaway_textures)

物体の論理積論理差を使用しCSGによる物体作成をすると、その表面のテクスチャは元の表面があった方の物体のテクスチャとなる。論理演算テクスチャは、論理差や論理積で生じる物体表面を同じテクスチャにできる。

< cutaway_textures の構文 >

intersection | difference { OBJECT_1_WITH_TEXTURES OBJECT_2_WITH_NO_TEXTURE cutaway_textures }
intersection | difference 論理積 または 論理差 の設定
OBJECT_1_WITH_TEXTURES 論理演算を実行する物体1
(テクスチャの設定が必要)
OBJECT_2_WITH_NO_TEXTURE 論理演算を実行する物体2
(テクスチャの設定が不要)
cutaway_textures 論理演算テクスチャのキーワード

※ 論理演算を実行する物体2にテクスチャの設定があるとこの機能は働かない。

図12.10 論理差のテクスチャ
//-------------------- Fig. 12.10 cutaway_textures #version 3.7 #include "colors.inc" #include "textures.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2} camera{ location<20,10,10> sky<0,0,1> right <-image_width/image_height,0,0> look_at <-5,0,-1.5> angle 30 } light_source { <10, 0.5, 8>*10 color White*2 } //============================= cutaway_textures difference { box{<0, 0, 0>, <4,5,4> texture {T_Wood7} } sphere{<3.5,1.5,3>,2 } cutaway_textures } //-----------------------------Floor plane { z, 0 texture { DMFWood6 scale 7} }


(End) 12.テクスチャ1