▷ 前を見る
12.2 ノーマル(normal)
ノーマルは法線(表面に垂直な直線)という意味で、物体の陰影計算にはこの法線が使われる。テクスチャに加えて陰影が計算できると物体はリアルに見える。球であれば、より球が立体的に見えるようになる。また、物体の実際の法線とは関係なしに、物体上の法線を変化させると、実際にはない凹凸がさもあるかのような表現も可能になる。
パターンはテクスチャだけではなくて、ノーマルもノーマル パターンとして法線にも適用できる。ノーマルをテクスチャと同じように物体に貼り付けて、その陰影を計算し疑似的に凹凸を表現する。同様なものとしてスロープマップやバンプマップがある。
< normal 全体の構文 >
normal {
NORMAL_IDENTIFIER |
PATTERN_TYPE [FLOAT]
[ NORMAL_TYPE ]
[ NORMAL_MODIFIERS ... ]
}
|
normal |
ノーマルのキーワード |
NORMAL_IDENTIFIER |
ノーマル識別子の設定 |
PATTERN_TYPE [FLOAT] |
パターンタイプの設定 ▷「13.1 パターンタイプ」参照
FLOATは見かけ凹凸の程度を示す数値を設定する。通常は0.0~1.0であるがどんな値でもよい(負の値はパターンを反転させる) [デフォルト: 0.5 ] |
NORMAL_TYPE |
ノーマルタイプの設定、下記のどれか
slope_map(スロープマップ)
normal_map(ノーマルマップ)
bump_map(バンプマップ)
|
NORMAL_MODIFIERS... |
変形などのオプションの設定 ▷「13.2 パターンのオプション」参照 |
※ 各項目はオプションであるが、項目の記述は上記の順序でなければならない。
※ bumps, dents, ripples, waves, wrinkles, bump_map のパターンタイプは特殊な計算を行 うため、スロープマップとノーマルマップの使用および波形修正はできない(他の パターンタイプではできる)。
ノーマルはピグメントと同様に texture{} を省略して物体に直接設定できる。
例)texture{} の省略した記述
//これは...
object {
My_Object
texture {
pigment {color Purple}
normal {bumps 0.3}
}
}
|
//このように短くできる
object {
My_Object
pigment {color Purple}
normal {bumps 0.3}
}
|
12.2-1 スロープマップ(slope_map)
スロープは傾きのことで、スロープマップはノーマルによる滑らかな傾きを細かく設定できる。
< slope_map の構文 >
normal {
PATTERN_TYPE
slope_map {
[ NUM_1 <POINT_SLOPE_1>]
[ NUM_2 <POINT_SLOPE_2>]
...
[ NUM_n <POINT_SLOPE_n>]
}
NORMAL_MODIFIERS...
}
|
normal |
ノーマルのキーワード |
PATTERN_TYPE |
パターンタイプの設定 ▷「13.1 パターンタイプ」参照 |
slope_map |
スロープマップのキーワード |
NUM_1~NUM_n |
傾きを設定する点のx 座標、0.0 ~ 1.0 の数値 |
<POINT_SLOPE_1>
~<POINT_SLOPE_n> |
各点における傾きを2次元ベクトル<h,s>で設定する。h はその点における曲線の高さを示す。通常 0.0 ~1.0 であるがどんな値でもよい。s はその点における曲線の傾きを示し、s=0 はフラット、s=1 は 45゜、s=-1は -45゜となる。通常は -3.0~3.0 の範囲で設定 |
NORMAL_MODIFIERS... |
変形などのオプションの設定 ▷「13.2 パターンのオプション」参照 |
※ ここでの [ ] はスロープマップの各エントリーを囲むもので、実際に記述する部分であり、オプションの意味ではない。マップの中で使用できるエントリーの数は 2 ~ 256 である。
※ パターンタイプは、すべての x,y,z の位置を 0.0~1.0 の範囲の値に変換する。その値は、凹凸を表す曲線の傾きや高さが変化する点の設定に使われる。
※ スロープマップでは、brick、checker、object、hexagon、bumps、dents、ripples、waves、wrinkles、bump_mapのパターンタイプは使用できない。この他は使用可能である。
 |
図12.1-1 スロープマップ
|
//-------------------- Fig. 12.2-1 slope_map
#version 3.7
#include "colors.inc"
#include "textures.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,25> rgb 1.5 parallel point_at 0}
//=============================== slope_map 1
box{0,1 scale <3,5,1>
texture {Chrome_Metal}
normal {
wood
slope_map {
[0 <0, 1>]
[0.5 <1, 1>]
[0.5 <1,-1>]
[1 <0,-1>]
}
scale 1
}
rotate x*90
translate <-1.5,0.8,0.5>
}
//=============================== slope_map 2
box{0,1 scale <3,5,1>
texture {Chrome_Metal}
normal {
wood
slope_map {
[0 <0, 1>]
[0.5 <1, 1>]
[0.8 <1,-1>] // <<<---change
[1 <0,-1>]
}
scale 1
}
rotate x*90
translate <2.5,0.8,0.5>
}
//-----------------------------wall and floor
box{0,1 scale <20,1,20> scale 1
pigment {White_Wood scale 0.5 }
translate <-10,0.2,-1> }
plane{ z, 0 texture {Cork scale 2} }
sky_sphere{
pigment{
gradient z
color_map{
[0.0 White]
[0.5 SkyBlue]
}
}
}
上図の左側のスロープマップの記述部分を次に示す。
normal {
wood // パターンタイプ
slope_map {
[0 <0, 1>] // 高さ 0、傾き 1(上向き45°)
[0.5 <1, 1>] // 高さ 1、傾き 1(上向き45°)
[0.5 <1,-1>] // 高さ 1、傾き -1(下向き45°)
[1 <0,-1>] // 高さ 0、傾き -1(下向き45°)
}
scale 1 // パターンの大きさ調整
}
このスロープマップは、断面が三角形の疑似の凹凸を作る。x=0.5 が三角形の頂点となる。この三角形の凹凸が繰り返される。その大きさは scale により調節できる。
上の図12.1-1 スロープマップの左側は上記に示すスロープマップを使っていて、右側は同じスロープマップの x の値を1か所だけ変更している。スロープマップは、少しの変更でも大きく様子がかわる。
12.2-2 ノーマルマップ(normal_map)
ノーマルマップでは、パターンタイプを設定することで物体に疑似的な凹凸の貼り付けを行う。また、複数のノーマルを混合することもできる。ノーマルマップの使用方法はピグメントマップと似ている。
< normal_map の構文 >
normal {
PATTERN_TYPE
normal_map {
[ NUM_1 <NORMAL_BODY_1>]
[ NUM_2 <NORMAL_BODY_2>]
...
[ NUM_n <NORMAL_BODY_n>]
}
[ NORMAL_MODIFIERS... ]
}
|
normal |
ノーマルのキーワード |
PATTERN_TYPE |
パターンタイプの設定 ▷「13.1 パターンタイプ」参照 |
normal_map |
ノーマルマップのキーワード |
NUM_1~NUM_n |
各エントリーの範囲の設定、 0.0~1.0の数値 |
<NORMAL_BODY_1>
~<NORMAL_BODY_n> |
各エントリーのノーマルの設定、通常のノーマルはすべて使用できる。normal {} はここでは不要 |
NORMAL_MODIFIERS... |
変形などのオプションの設定 ▷「13.2 パターンのオプション」参照 |
※ ここでの [ ] はノーマルマップの各エントリーを囲むもので、実際に記述する部分であり、オプションの意味ではない。マップの中で使用できるエントリーの数は 2 ~ 256 である。
※ ノーマルマップにネストの制限はない。マップの中のノーマルはすべてノーマルタイプが使用できる。
 |
図12.2-2 ノーマルマップ
|
//-------------------- Fig. 12.2-2 normal_map
#version 3.7
#include "colors.inc"
#include "textures.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,25> rgb 1.5 parallel point_at 0}
//=============================== normal_map object
box{0,1 scale <5,5,1>
texture {Chrome_Metal}
normal {
gradient x
normal_map {
[0.2 marble turbulence 0.4]
[0.4 facets coords 0.3 scale 0.3]
[0.6 facets coords 0.3 scale 0.3]
[0.7 marble turbulence 0.4]
}
scale 0.8
}
rotate x*90
translate <0,0.8,0.5>
}
//-----------------------------wall and floor
box{0,1 scale <20,1,20> scale 1
pigment {White_Wood scale 0.5 }
translate <-10,0.2,-1> }
plane{ z, 0 texture {Cork scale 2} }
sky_sphere{
pigment{
gradient z
color_map{
[0.0 White]
[0.5 SkyBlue]
}
}
}
上図のノーマルマップの記述部分を次に示す。
normal {
gradient x // パターン gradient x
normal_map {
[0.2 marble turbulence 0.4] // (1)
[0.4 facets coords 0.3 scale 0.3] // (2)
[0.6 facets coords 0.3 scale 0.3] // (3)
[0.7 marble turbulence 0.4] // (4)
}
scale 0.8
}
このノーマルマップは、
(1) x 値(0.0~0.2) : mable のノーマル使用
(2) x 値(0.2~0.4) : mable から facets のノーマルになるよう混合
(3) x 値(0.4~0.6) : facets のノーマル使用
(4) x 値(0.6~0.7) : facets から mable のノーマルになるよう混合
x 値(0.7~1.0) : mable のノーマル使用(記述は省略されている)
のようなノーマル制御をし、また scale により大きさの調節をしている。
12.2-3 バンプマップ(bump_map)
バンプマップを使用して2次元画像のバンプパターン(凹凸のパターン)として物体に貼り付けることができる。バンプマップはまず2次元画像の各ピクセルの色をグレイスケールに変換し、その明るさをノーマルに換算して使用する。その結果、その画像の形が浮き彫りにされたような表現ができる。また、イメージのパレットインデックスを使うこともできる。
※ バンプマップは見かけの凹凸を表現するので、物体の形状は変化しない。ハイトフィールドには、2次元画像を実際の高さに換算して物体に変換できる機能がある。▷「11.1-18 ハイトフィールド」参照
< bump_map の構文 >
normal {
bump_map {
FILE_TYPE "filename"
[ bump_size VALUE ]
[ use_color | use_index ]
[ once ]
[ map_type TYPE_NUM ]
[ interpolate 2 | interpolate 4 ]
}
[ NORMAL_MODIFIERS... ]
}
|
normal |
ノーマルのキーワード |
bump_map |
バンプマップのキーワード |
FILE_TYPE |
2次元画像のファイル形式を次の中から設定する。
png、jpg、gif、tga、iff、ppm、pgm、tiff、SYS
※SYSは使用するプラットフォーム固有の形式 |
FILE_NAME |
2次元画像のファイル名の設定
※ カレントディレクトリとLibrary_pathを設定したディレクトリ以外の場所にあるファイルは、次のようにフルパスで設定しなければならない。例えばWindowsの場合、DドライブのpovfileディレクトリにあるImage.pngファイルの設定は、
bump_map { png " d:\povfile\Image.png " } のようになる。 |
bump_size VALUE |
バンプサイズ、凹凸の程度 0.1~5 くらいで設定 |
use_color use_index |
凹凸の変換に使うカラーまたはカラーインデックス [デフォルト:use_color] |
once |
「13.2-7 ビットマップ修正」参照
|
map_type TYPE_NUM |
「13.2-7 ビットマップ修正」参照
|
interpolate 2 interpolate 4 |
「13.2-7 ビットマップ修正」参照
|
NORMAL_MODIFIERS... |
ノーマル修正オプションの設定、スロープマップとパターン波形以外のノーマル修正が使用できる。 |
※ use_index, use_colorについて
凹凸の計算に2次元画像の色を使用(use_color)するか、パレットインデックスを使用(use_index)するかを設定できる。通常バンプマップでは、画像のピクセルの色は 0.0 ~ 1.0 のグレイスケールに変換され、その値を基に凹凸の程度が計算される。しかし、use_index の設定をすると、凹凸の程度の計算に各点の色のパレット ナンバーを使用する。イメージのパレット数が最大 256 の場合、カラーナンバー 0 が最も低くなり、カラーナンバー 255 が最も高くなる。このオプションはパレットを基にしたフォーマットでしか利用できない。
 |
図12.2-3a バンプマップ |
 |
図12.2-3b バンプマップ用画像 |
//-------------------- Fig. 12.2-3 bump_map
#version 3.7
#include "colors.inc"
#include "textures.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 {<-200,-200,250> rgb 1.5}
background{color rgb 1}
//=============================== bump_map object
box{0,1 scale <5,5,1>
pigment {
gradient x
color_map {
[0.0 rgb<1,0.6,0.4>*1.3]
[0.3 color Yellow*1.2]
[0.5 color Green*1.2]
[0.8 color Cyan*1.2]
[1.0 rgb<1,0.6,0.4>*1.3]
}
scale 3
rotate z*60
}
normal{
bump_map{ // <<<----bump_map
png "prz-1202-bm.png"
use_index
bump_size 3
}
scale 5
}
rotate x*90
translate <0,0.8,0.5>
}
//-----------------------------wall and floor
box{0,1 scale <20,1,20> scale 1
pigment {White_Wood scale 0.5 }
translate <-10,0.2,-1> }
plane{ z, 0 texture {Cork scale 2} }
バンプマップは x-y 平面上にマッピングされる。2次元画像のサイズに関わらず、バンプマップは (x, y)座標が (0, 0) から (1, 1) の正方形に割り当てられる。物体表面に思うようなマッピングするためには、必要に応じて回転、スケーリング、移動を行う。
●バンプサイズ(bump_size)
bump_size により凹凸の程度を変更ができる。バンプサイズの値は 0.0 以上で、典型的な値は0.1~5.0くらいである。
例)バンプサイズ 1
normal {
bump_map {
png "stuff.png"
bump_size 3.0
}
}
bump_size すべてのノーマルに使用できる。通常は前に定義されたサイズを変更するために使用する。
例)バンプサイズ 2
normal {
My_Normal // 前に定義されたノーマル名
bump_size 2.0 // 新しいサイズに変更
}
▷ 次を見る