12. テクスチャ1


12. テクスチャ1

テクスチャとは、物体の材質を表現するために物体表面に貼り付ける模様のことである。

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

ピグメント(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 変形の指定  ⇒「2.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 {}を省略して物体に直接指定することができる。

例)省略した記述の仕方
           //これは...                             //このように短くできる
           object {                                object {
            My_Object                                My_Object
            texture {                                pigment {color Red}
              pigment {color Red}                  }
            }
          }


12.1-1 単色

最も単純なピグメントは単色によるものである。 単色の指定はピグメント・ステートメントの中に色指定を置くだけである。

例) pigment {color Orange}

※ 色の指定法については「1.5 色の指定」を参照せよ。

※ 単色ではパターンを使用しないため、パターン修正オプションは無視される。


12.1-2 ブロック・パターン(checker、brick、hexagon)

チェック、六角形、レンガのパターンを指定することができる。 これは、カラー・マップ・パターンを使用したような色の混合ではなく、色の境界のはっきりしたカラー・パターンを作る。

<ブロック・パターンの構文>

pigment { checker COLOR1, COLOR2 PIGMENT_MODIFIERS ... }
pigment { brick COLOR1, COLOR2 PIGMENT_MODIFIERS ... }
pigment { hexagon COLOR1, COLOR2, COLOR3 PIGMENT_MODIFIERS ... }
pigment ピグメントを指定するキーワード
checker チェックのパターンを指定するキーワード ⇒「13.1-7 checker」
brick レンガのパターンを指定するキーワード ⇒「13.1-5 brick」
hexagon 六角形のパターンを指定するキーワード ⇒「13.1-13 hexagon」
COLOR1〜COLOR3 各ブロックの色の指定。 ⇒「1.5 色の指定」
※ 各ブロックの色はコンマで区切らなければならない。
PIGMENT_MODIFIERS ... 変形などのオプションの指定 ⇒「12.8 テクスチャのオプション」

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

●ブロック・パターンの例(図12.1-2)

     cylinder{0,y*5,1 scale z*3
       pigment{
         brick White,color rgb<0.8,0.35,0.1>*0.8
         scale 0.1 rotate x*90
       }
       translate x*-3
     }

     cylinder{0,y*5,1 scale z*3
       pigment{
         checker White,color rgb<1,0.7,0.2>
         scale 0.5 rotate x*90
       }
       translate x*0
     }

     cylinder{0,y*5,1 scale z*3
       pigment{
         hexagon Red, Green, Blue
         scale 0.4 rotate x*0
       }
       translate x*3
     }


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

カラー・マップは複数の単色をパターン・タイプに応じて滑らかに変化させるものである。

< color_map の構文>

 pigment{
   PATTERN_TYPE
   color_map {
     [ NUM_1 COLOR_1]
     [ NUM_2 COLOR_2]
     ...
     [ NUM_n COLOR_n]
   }
   PIGMENT_MODIFIERS...
 }
pigment ピグメントを指定するキーワード
PATTERN_TYPE パターン・タイプの指定  ⇒「13.1 パターン・タイプ」
color_map カラー・マップを指定するキーワード
NUM_1〜NUM_n 各エントリーの範囲の指定、 0.0〜1.0の実数値
COLOR_1〜COLOR_n 各エントリーの色の指定  ⇒「1.5 色の指定」
PIGMENT_MODIFIERS... 変形などのオプションの指定 ⇒「13.2 テクスチャのオプション」

※ ここでの[ ]はカラー・マップの各エントリーを囲むもので、実際のステートメントの一 部である(オプションの意味ではない)。

※ マップの中で使用できるエントリーの数は2〜256である。

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

図12.1-3 カラー・マップ

●カラー・マップの例(図12.1-3)

     sphere {
       <0,1,2>, 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]
         }
       }
     }

パターン(gradient x)の関数は評価され、結果は0.0〜1.0の値になる。 この値が最初のエントリー(この場合0.1)よりも小さければ、最初の色(赤)が使用される。 0.1〜0.3では、2色の線形補間を用いてRedとYellowを混合する。 同様に0.3〜0.6では、YellowとBlueを混合する。 3番目と4番目のエントリーはどちらも0.6であるが、 これは隣接したBlueとGreenの境界をはっきりさせ、色を急に変化させる。 つまり、0.6より小さい値はBlueになるが、0.6になるとGreenになる。 その先の0.6〜0.8ではGreenとCyanが混合される。 最後に0.8〜1.0ではすべてシアンになる。

色を変化させたくない範囲では、隣接した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 ピグメント・マップ

●ピグメント・マップの例(図12.1-4)

 #declare pm1=pigment{
     granite color_map{[0.0 color rgb<0.6,0.2,0.3>][0.7 White]}
     scale 0.4
     }
     
 #declare pm2=pigment{
     bozo color_map{[0.2 color rgb<0.8,0.8,0.3>][0.5 White]}
     scale 0.08
   }

 #declare pm3=pigment{
     crackle color_map{[0.0 color rgb<0.1,0.8,0.8>][0.5 White]}
     scale 0.15
   }

  sphere {
    0, 2
    pigment {
      gradient z        // パターン・タイプ
      pigment_map {
        [0.0 pm3]
        [0.3 pm2]
        [0.6 pm1]
        [1.0 pm3]
      }
    }
  }

この例では、gradient z の関数が0.0〜0.3の値を返したとき、pm3とpm2が混合され、0.3〜0.6ではpm2とpm1が混合され、0.6〜1.0ではpm2とpm3が混合される。

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

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

例)
          pigment {
            checker
            pigment { Jade scale .8 }
            pigment { White_Marble scale .5 }
          }
※ ブロック・パターンの場合は、pigment {} でピグメント情報を囲まなければならない。

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

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


12.1-5 イメージ・マップ(image_map)

イメージ・マップを使用して2次元画像を3次元物体に貼り付けることができる。

< image_map の構文>

 pigment {
   image_map {
     FILE_TYPE "filename"
     MAP_MODIFIERS...
   }
 }
pigment ピグメントを指定するキーワード
image_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 " }
MAP_MODIFIERS... イメージ修正オプション  ⇒「13.2 テクスチャのオプション」

図12.1-5a イメージ・マップ

●イメージ・マップの例(図12.1-5a)

     sphere{0.5,0.5
       pigment {
         image_map{tga "povray.tga"}
       }
       translate -0.5
       rotate x*90
     }

イメージ・マップはx-y平面に1x1の大きさで投影される。 デフォルトでは、図12.1-5bのイメージは、図12.1-5cの向きで物体に貼り付けられる。 イメージ・マップの投影法については「13.2 テクスチャのオプション」を参照せよ。

図12.1-5b イメージ・マップのもとになる2次元画像

図12.1-5c イメージ・マップの向きと大きさ

●画像の透過率の修正

イメージの一部または全部を透明にするために、(少なくともパレットを使用したモードのための)PNG, GIF, IFF の画像のカラー・パレットにfilterとtransmitの値を指定することができる。 これはファイル名の後にfilterとtransmitのキーワードを追加することによって行うことができる。 キーワードのあとには2つの数を指定する。 最初の数はパレット・ナンバーで、次の数は透過率である。 2つの値はコンマで分けなければならない。

例)
          image_map {
            gif "mypic.gif"
            filter 0, 0.5     // カラー 0 を 50% のフィルター透過にする。
            filter 5, 1.0     // カラー 5 を 100% のフィルター透過にする。
            transmit 8, 0.3   // カラー 8 を 30% のノン・フィルター透過にする。
          }
filter all VALUEまたはtransmit all VALUEを使用して、イメージ全体にfilterとtransmitの値を与えることができる。

例)
          image_map {
            gif "stnglass.gif"
            filter all 0.9
          }
※ filterとtransmitの違いについては「1.5 色の指定」を参照せよ。

●Alpha Channel の使用

イメージのノン・フィルター透過を指定するもう一つの方法は、alpha channelの使用によるものである。

PNGでは、必要に応じてファイルの各カラー・インデックスに異なった透過率を与えることができる。 使用するペイント・プログラムがPNGのこの特徴を利用できるのなら、POV-Ray のファイルで各色にtransmitの値を指定せずに、そのペイント・プログラム内で透過率の編集を行うことができる。 PNGとTGAのイメージ・フォーマットは完全なalpha channel(透過率)の情報を蓄積することもできるので、イメージの中のピクセルの色ではなく、その位置によって透過率を指定したイメージ・マップを生成することができる。

POV-Ray では transmit 0.0 では全く透過せず、1.0 で完全に透明になるが、alpha のデータは反対向きに0〜255の範囲になる。 alphaデータ0はtramsmit 1.0と同じ意味であり、alphaデータ255はtransmit 0.0になる。


12.1-6 クイック・カラー(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以下ではそれぞれ異なった色になるので識別することができる。