12.5 パターン・テクスチャ

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

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

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

※ パターン・テクスチャはデフォルト・テクスチャとして使用することはできない。
「3.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 である。

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

※ テクスチャ・マップはレイヤー・テクスチャの中では使用できない。

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

※ テクスチャ・マップはいくらでもネストできる。

例)

          texture {

            gradient x             // パターン・タイプ

            texture_map {

              [0.3 pigment{Red} finish{phong 1}]

              [0.3 T_Wood11]       // テクスチャ識別子

              [0.6 T_Wood11]

              [0.9 pigment{DMFWood4} finish{Shiny}]

            }

          }

この例では、gradient xの関数が0.0〜0.3の値を返したとき、赤いハイライトのテクスチャが使用される。 0.3〜0.6ではテクスチャ識別子T_Wood11が使用され、0.6〜0.9ではT_Wood11とピグメント識別子DMFWood4(+フィニッシュ識別子shiny)が混合れる。 0.9〜1.0ではピグメント識別子DMFWood4(+ フィニッシュ識別子shiny)のみが使用される。

テクスチャ・マップの中の混合部分では、その範囲のテクスチャが両方とも別々に計算され、線形補間により混合される。 これは反射、屈折、照明などがその点で2度計算されることを意味する(基本テクスチャではすべて1度しか計算されない)。

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

例)

          texture {

            checker

              texture { T_Wood12 scale .8 }

              texture {

                pigment { White_Marble }

                finish { Shiny }

                scale .5

              }

            }

          }

※ ブロック・パターンの場合は texture {} で各テクスチャを囲まなければならない。

※ ブロック・パターンの中でレイヤー・テクスチャを使用する場合は識別子として宣言して使用しなければならない。

テクスチャ・マップはaverage(複数のテクスチャの平均的な混合)も使用できる。 ⇒「12.7-2 平均」
12.5-2 タイル(tiles)

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


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

マテリアル・マップはイメージ・マップの概念を拡張したもので、単色の変わりに完全なテクスチャを適用する特殊テクスチャである。 マテリアル・マップを使用して2次元ビットマップのテクスチャ・パターンを3次元物体に貼り付けることができる。

イメージ・マップでは物体上に単色を配置するが、マテリアル・マップではイメージの各点のカラー・インデックスを基にして完全なテクスチャを配置する。 そのため、通常のカラー・パレットの代わりにテクスチャ・パレットとして使用されるテクスチャのリストを指定しなければならない。

GIFといくつかのPNG, TGAイメージのようなマッピングされたファイル・タイプを使用するとき、各ピクセルのインデックスは指定したテクスチャ・リストの中のインデックスとして使用される。 いくつかのPNG, TGAイメージのようなマッピングされていないファイル・タイプでは、0〜255の範囲の8ビットのred要素の値がインデックスとして使用される。

< material_map の構文>


 texture {

   material_map {

     FILE_TYPE "filename"

     BITMAP_MODIFIERS...

     TEXTURE_0

     TEXTURE_1

     ...

     TEXTURE_n

   }

   TEXTURE_MODIFIERS...

 }

texture テクスチャを指定するキーワード
material_map マテリアル・マップを指定するキーワード
FILE_TYPE 2次元画像のファイル形式を次の中から指定する。
gif、tga、iff、ppm、pgm、png、jpeg、tiff、SYS
※SYSは使用するプラットフォーム固有の形式
FILE_NAME 2次元画像のファイル名の指定
※ カレント・ディレクトリとLibrary_pathを指定したディレクトリ以外の場所にあるファイルは、次のようにフルパスで指定しなければならない。
例)DドライブのpovfileディレクトリにあるImage.gifファイルを指定する場合
image_map { gif " d:\povfile\Image.gif " }
BITMAP_MODIFIERS... ビットマップ修正オプションの指定 ⇒「13.2 テクスチャのオプション」
TEXTURE_0〜TEXTURE_n 各インデックスに使用するテクスチャの指定
TEXTURE_MODIFIERS... テクスチャ修正オプションの指定 ⇒「13.2 テクスチャのオプション」
※ ピグメント、ノーマル、フィニッシュ、haloはここでは修正できない。 これらの修正はマテリアル・マップの中の各テクスチャに個別に行わなければならない。

※ マテリアル・マップの中でレイヤー・テクスチャを使用する場合は識別子として宣言して使用しなければならない。 ⇒「12.6 レイヤー・テクスチャ」

※ マテリアル・マップはレイヤー・テクスチャの中では使用できない。
「12.6 レイヤー・テクスチャ」

※ マテリアル・マップはデフォルト・テクスチャとして使用することはできない。
「3.4 デフォルト・テクスチャの指定」

デフォルトによって、マテリアルは-z方向から投影されx-y平面上にマッピングされる。 ビットマップの元のサイズに関わらず、そのマテリアルは(x, y)座標が(0, 0)から(1, 1)の正方形になる。 このデフォルトを変更してマテリアルを物体表面にマッピングするために、必要に応じて移動、回転、スケールを行うことができる。

特定のインデックス値がイメージの中で使用されない場合、ダミー・テクスチャを供給しなければならない場合がある。 テクスチャ・リストをどのように配列するかを決定するために、マップ・ファイル・パレットを調べるためのペイント・プログラムやその他のユーティリティが必要になる場合がある。


12.6 レイヤー・テクスチャ
レイヤー・テクスチャとは、透明部分を持ったテクスチャの層(レイヤー)をいくつも重ねていくことによって、各層のテクスチャが部分的に透けて見えるような効果を表現するテクスチャである。 レイヤー・テクスチャの指定は2つ以上のテクスチャを順番に記述するだけでよい。

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


 OBJECT { OBJECT_ITEM

   texture {T1}

   texture {T2}

   ...

   texture {Tn}

 }

OBJECT、OBJECT_ITEM レイヤー・テクスチャを使用する物体の指定
texture {T1}
〜texture {Tn}
各層のテクスチャの指定、 T1 が最下層、Tn が最上層とな
る。
※ T1 以外のテクスチャは透明部分をもたなければならない
※ 特殊テクスチャは使用できない
※ 各テクスチャは texture{} で囲まなければならない。

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

下層のテクスチャの色は上層のテクスチャによってフィルターされるが、レイヤー・テクスチャでは下層のテクスチャで反射された光だけがフィルターされる(入ってきた光が下層のテクスチャにとどくまではフィルターされない)。 標準インクルード・ファイルの stones.inc の中にレイヤー・テクスチャがいくつかあるので参照せよ。

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

例)

          #declare Layered_Examp =

            texture {T1}

            texture {T2}

            texture {T3}



          object {

            My_Object

            texture {

              Layer_Examp

              finish { shiny }       // これは最下層のテクスチャのみを修正する

            }

          }


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)
回転軸を包み込むようにマッピングされる。
球(sphere) 球を包み込むようにマッピングされる。
ボックス(box) 下図12.7aに示すような形式で画像部分がマッピングされる。

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

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

図12.7b イメージ・マッピング用画像例(glass.png)

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

(1)ベジェ曲面


図12.7c ベジェ曲面へのマッピング

   bicubic_patch{

     type 1  flatness 0  u_steps 4 v_steps 4

     <-2,-5,-2>,<1,0,1>,<2,0,1>,<3,0,0>

     <0,1,1>,<1,1,1>,<2,1,1>,<3,1,1>

     <0,2,1>,<1,2,1>,<2,2,1>,<3,2,1>

     <0,3,-2>,<1,3,1>,<2,3,1>,<4,3,5>

      uv_mapping pigment{image_map{png "glass.png"}}

   }



   bicubic_patch{

     type 1  flatness 0  u_steps 4  v_steps 4

     <-2,-5,-2>,<1,0,1>,<2,0,1>,<3,0,0>

     <0,1,1>,<1,1,1>,<2,1,1>,<3,1,1>

     <0,2,1>,<1,2,1>,<2,2,1>,<3,2,1>

     <0,3,-2>,<1,3,1>,<2,3,1>,<4,3,5>

     pigment{image_map{png "glass.png"} scale 3}

     translate <5,0,0>

   }

(2)回転体

図12.7d 回転体へのマッピング

     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 "glass.png"} rotate 0*y scale 2}

       finish{phong 1 reflection 0.1}

       rotate x*90  scale<0.5,0.5,1>

     }



     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 "glass.png"}  scale 0.5}

       finish{phong 1 reflection 0.1}

       rotate x*90  scale<0.5,0.5,1>  translate x*1.5

     }

(3)球

図12.7e 球へのマッピング

  sphere{

    0,1

    pigment {image_map{png "glass.png"}}

  }



  sphere{

    <2.5,0,0>,1

    uv_mapping pigment{

       image_map{png "glass.png"} scale 0.5}

  }

(4)ボックス

図12.7f ボックスへのマッピング

  box{

    <0,0,0>,<1,1,1>

    pigment {image_map{png "glass.png"}}

  }



  box{

    <0,0,0>,<1,1,1>

    uv_mapping pigment{

       image_map{png "glass.png"} scale 0.5}

    translate<1.5,0,0>

}


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 テクスチャリストの例

図12.8の例)

         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

         }


12.9 インテリア・テクスチャ(interior_texture)
テクスチャは、物体の表面に貼り付ける画像や凹凸のこと指す。インテリア・テクスチャは、物体の表面ではなくで、物体の内側に貼り付けるテクスチャのことである。

< interior_texture の構文>


object {

  texture { TEXTURE_ITEMS }

  interior_texture { TEXTURE_ITEMS }

}

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

図12.9 インテリア・テクスチャの例

図12.9の例)

         cylinder {

             <0, 0, 0>, <0, 0, 4>, 4  open

             texture { PinkAlabaster }

             interior_texture { Red_Marble }

          }


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 論理演算テクスチャの例

図12.10の例)

         difference {

            box{<0, 0, 0>, <4,5,4> 

                texture {T_Wood7} }

            sphere{<3.5,1.5,3>,2 } 

            cutaway_textures     

         }