▷ 前を見る 


12.3 フィニッシュ(finish)

フィニッシュは部材の仕上げのことであり、 物体表面の光の反射特性を設定し物体の質感を表現する。フィニッシュの設定は物体(オブジェクト)の様子にかなり変化与え、さまざまな表現ができる大切なものである。

各パラメータは、特に設定が無い限り、基本的にそれぞれ併用できるがパラメータの種類が多いので、詳しくは、5つに分けて設定などを説明する。

< finish 全体の構文 >

finish { [ FINISH_IDENTIFIER ] [ ambient <COLOR> ] [ emission <COLOR> ] [ diffuse [ albedo ] AMOUNT ] [ brilliance AMOUNT ] [ crand AMOUNT ] [ phong [ albedo ] AMOUNT ] [ phong_size AMOUNT ] [ specular [ albedo ] AMOUNT ] [ roughness AMOUNT ] [ metallic [AMOUNT] ] [ reflection <COLOR> ] [ reflection { [REFLECTION_ITEM... ] } ] [ irid { [ IRID_ITEM... ] } ] [ conserve_energy BOOL_ON_OFF ] [ subsurface { translucency <COLOR> } ] }
finish フィニッシュのキーワード
FINISH_IDENTIFIER フィニッシュの識別子
ambient <COLOR> 物体の環境光の設定 [デフォルト:0.1 ] ▷「12.3-1 環境光」参照
emission <COLOR> 物体からの発光設定(ラジオシティ用)[デフォルト:0 ] 使用方法は ▷「12.3-1 環境光」と同じ
diffuse [ albedo ] FLOAT 拡散反射率の設定 [デフォルト:0.6 ] ▷「12.3-2 拡散反射」参照
brilliance AMOUNT 拡散面の輝き設定 ▷「12.3-2 拡散反射」参照
crand AMOUNT 拡散面の表面粗さ設定 ▷「12.3-2 拡散反射」参照
phong [ albedo ] AMOUNT フォンハイライト(phong)の設定 ▷「12.3-3 ハイライト」参照
phong_size AMOUNT フォンサイズ設定、ハイライト使用時に有効 [デフォルト: 40 ]
specular [ albedo ] AMOUNT 鏡面ハイライト設定  ▷「12.3-3 ハイライト」参照
roughness AMOUNT 表面粗さ設定、鏡面ハイライト使用時に有効 [デフォルト: 0.05 ]
metallic AMOUNT 金属のような反射、ハイライト(フォン・鏡面)使用時に有効
reflection <COLOR> 鏡面反射の設定 ▷「12.3-4 鏡面反射」参照
reflection { [REFLECTION_ITEM... ] } より細かな鏡面反射の設定  ▷「12.3-4 鏡面反射」参照
irid { [ IRID_ITEM... ] } 虹色の設定(虹色;表面を覆う油のような薄膜干渉)  ▷「12.3-5 虹色」参照
conserve_energy yes|no エネルギー保存法則の設定
subsurface { translucency <COLOR> } 表面下散乱おける半透明色

※ 同じパラメータを複数設定すると、最後に設定したものが適用される。 フィニッシュはピグメントと同様に texture{} を省略して物体に直接設定できる。

例)texture{} の省略

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

※ 各パラメータはすべてオプションであり、設定されないパラメータにはデフォルト値が使用される。フィニッシュ文記述を省略したときは、次のように ambient 0.1 と diffuse 0.6 が自動的に設定されるので意識しておく方がよい。

finish{ ambient 0.1 diffuse 0.6 }


12.3-1 環境光(ambient)

環境光は、光源の光が物体などの反射散乱により生じる間接光である。この光は空間の至る所に散乱され、光源からの直接光がない影の部分でも環境光でわずかに明るくなる。正確な環境光の計算は複雑なため、POV-Ray では各物体に環境光として一定の明るさを与えることができる。

< ambient の構文 >

finish { [ ambient <COLOR> ] }
finish フィニッシュのキーワード
ambient <COLOR> 物体表面の環境光の設定、 通常0.0~1.0 であるがどんな値でもよい。[デフォルト:0.1 ](ラジオシティ使用時は無効)

※ POV-Ray3.7 では、ambient に代わるものとしてラジオシティ用に emission(発光)が用意された。使用方法はキーワード名が異なるだけで ambient と全く同じである。emission は ambient_light の影響を受けない。

※ グローバル設定の ambient_light は、シーンの全物体の環境光の調整係数になっており、ambient_light の設定値が各物体の ambient の値に掛け合わされる。 ▷「4.2 環境光係数」参照

※ ambient は物体の周囲を囲むものの色の影響は考慮されない。例えば、壁、 床、天井がすべて赤い部屋の中では、白い服は反射した光によって実際はピンクに見え るが、POV-Ray の ambient はこのような表現はできない。

ただ、ambient に数値の代わりにカラー名やカラーベクトル設定し、環境光に色を付けることはできる。

例) finish { ambient rgb <0.3,0.1,0.1> } // ピンクの環境光

次の図12.3-1 は デフォルトの diffuse 0.6 、ambient 0.1 と比較したもので、ambient を0 .3 と 0.5 に変化させている。わかりやすいように3つのテクスチャついて示している。値を大きくすると球全体が明るくなるが、陰の部分は変化していない。これは球の影がある物体の ambient の値は変化していないためである。

デフォルト  ambient 0.3  ambient 0.5
(ambient 0.1)               
図12.3-1 環境光 (ambient)
//-------------------- Fig. 12.3-1 ambient #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= ambient #declare FN1=finish{ } //----- default #declare FN2=finish{ambient 0.3} #declare FN3=finish{ambient 0.5} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }


12.3-2 拡散反射(diffuse)

物体表面での主要な光の反射は、拡散反射と鏡面反射の2つがある。拡散反射は、表面の非常に細かい凹凸(艶消し状態)によって光が全方向に散乱されるような反射である。鏡面反射は光の入射角と反射角が等しい反射で、鏡が代表的である。物体表面における光の反射は、通常この2つが混ざり合った状態で、物体によりその割合が異なる。

ここでは、拡散反射(diffuse)の他に、それに関連した光沢(brilliance)、粗さ(crand)についても一緒に示す。

< diffuse, brilliance, crand の構文 >

finish { [ diffuse [ albedo ] AMOUNT ] [ brilliance AMOUNT ] [ crand AMOUNT ] }
finish フィニッシュのキーワード
diffuse [ albedo ] AMOUNT 拡散反射率の設定、 光源からの直接光の強さに対する拡散反射光の強さの割合を制御する。albedo が記述されると総合反射率(拡散反射率+鏡面反射率)になる。通常 0.0~1.0 であるがどんな値でもよい。[デフォルト:0.6 ]
brilliance AMOUNT 表面の光沢の設定、光の入射角による拡散反射光の減衰率を制御する。値を小さくすると浅い入射角でも拡散反射が起こりやすくなる。また値を大きくすると金属的になる。brillianceにはどんな値でもよい。この効果はハイライトと併用すると効果的 [デフォルト:1 ]
crand AMOUNT 表面の粗さの設定をする。直接照明から拡散反射している部分にランダムな細かい影を作り、石やコンクリートなどのざらざらした表面を表現する。通常0.01~0.5程度であるが、どんな値でもよい。[デフォルト:0 ](粗さ無し)
※ この効果はピクセル単位で適用されるため、視点と物体との距離に関係なく同じに見える。
※ 乱数を利用するため、アニメーションではちらつきが生じるので使用しない方がよい。
 

図12.3-2a は 拡散反射率 (diffuse) の値による違いを示している。ambientと違い、値を大きくすると直接光が当たっている部分がだんだん明るくなって行き、そうでない部分は変化しない。

デフォルト  diffuse 0.3  diffuse 0.8
(diffuse 0.6)              
図12.3-2a 拡散反射率 (diffuse)
//-------------------- Fig. 12.3-2a diffuse #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= diffuse #declare FN1=finish{ } //-------- default #declare FN2=finish{diffuse 0.3} #declare FN3=finish{diffuse 0.8} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-2b は 光沢 (brilliance) の値による違いを示している。値が大きくなると金属的な感じになっている。

デフォルト  brilliance 3  brilliance 5
図12.3-2b 光沢 (brilliance)
//-------------------- Fig. 12.3-2b brilliance #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= brilliance #declare FN1=finish{ } //-------- default #declare FN2=finish{brilliance 3} #declare FN3=finish{brilliance 5} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-2c は 粗さ (crand) の設定による表面の違いを示している。ピクセル単位の処理であるため、ややリアルさにかける。

デフォルト  crand 0.3  crand 0.7
図12.3-2c 粗さ (crand)
//-------------------- Fig. 12.3-2c crand #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= crand #declare FN1=finish{ } //-------- default #declare FN2=finish{crand 0.3} #declare FN3=finish{crand 0.7} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }


12.3-3 ハイライト(phon, specular)

ハイライトは、鏡面の物体表面に光源が映り込み、物体表面に生じる明るい部分のことである。物体がピカピカしているような場合に使う。ハイライトを正確に表現するためには、表面の無数の極小面(細かい凹凸)の鏡面反射を計算しなければならない。POV-Rayでは、フォン(phong)と鏡面(specular)の2種類の反射モデルを用意して簡易的にハイライトを表現している。

< ハイライトの構文 >

finish { [ phong [ albedo ] AMOUNT ] [ phong_size AMOUNT ] [ specular [ albedo ] AMOUNT ] [ roughness AMOUNT ] [ metallic [ AMOUNT ] ] }
finish フィニッシュのキーワード
phong [ albedo ] AMOUNT フォンハイライトの設定、通常 0.0~1.0 であるがどんな値でもよい。albedo が記述されると総合反射率(拡散反射率+鏡面反射率)になる。phong 1.0 のとき、ハイライトの中心は光源の色になる。[デフォルト:0 ](ハイライトは生じない)
phong_size AMOUNT フォンハイライトのサイズの設定、通常1~250であるがどんな値でもよい。値を大きくするとハイライトは小さく締まって強く輝き、値を小さくすると大きくぼやけて輝きは弱くなる。 [デフォルト:40 ](プラスティック)※ phong が設定されなければ phong_size は物体に影響を与えない。
specular [ albedo ] AMOUNT 鏡面ハイライトの設定、通常 0.0~1.0 であるがどんな値でもよい。albedo が記述されると総合反射率(拡散反射率+鏡面反射率)になる。specular 1.0のとき、ハイライトの中心は光源の色になる。[デフォルト:0 ](ハイライトは生じない)
roughness AMOUNT 鏡面粗さサイズの設定、通常 0.0005 ~ 1.0 であるがどんな値でもよい。値を大きくするとハイライトは大きくぼやけて輝きが弱くなり、値を小さくすると小さく締まって強く輝く。[デフォルト:0.05 ](プラスティック) ※ specular が設定されなければ roughness は物体に影響を与えない。
metallic [ AMOUNT ] 金属表面のハイライトを表現する。ハイライトに物体表面の色を加えることによって、金属的な表面を表現する。通常はキーワードのみで使用する。( 0.0~1.0 の値で効果の程度設定も可)キーワードのみ記述は [デフォルト:1 ]となる。※ phong または specular が設定されなければ metallic は物体に影響を与えない。

※ 鏡面ハイライトはフォンハイライトとほとんど同じであるが、より現実の鏡面反射に近 く、物体の地平線付近に生じるハイライトをより正確に表現できる。

※ 鏡面ハイライトとフォンのハイライトは同時に使用できるが、通常はどちらか一方だけを設定する。

図12.3-3a は フォンハイライト (phon) の設定による違いを示している。phon の値が大きくなると輝きが増しているように見える。

デフォルト  phong 0.3      phong 1
        (phong_size 40)   (phong_size 40)
図12.3-3a フォンハイライト (phon)
//---------------------- Fig. 12.3-3a phon #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //--- phong_size 40 (phon) //======================================= phong #declare FN1=finish{ } //-------- default #declare FN2=finish{phong 0.3 } #declare FN3=finish{phong 1 } //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-3b はフォンのサイズ (phong_size) の設定による違いを示している。左側がデフォルトの 40 であるがサイズにより滑らかさの程度が異なって見える。

(phong_size 40)  phong_size 200  phong_size 5
phong 0.5    phong 0.5    phong 0.5
図12.3-3b ハイライト フォンのサイズ
//-------------------- Fig. 12.3-3b phong_size #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //--- phong_size 40 (phon) //======================================= phong_size #declare FN1=finish{phong 0.5 } #declare FN2=finish{phong 0.5 phong_size 200} #declare FN3=finish{phong 0.5 phong_size 5} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-3c は 鏡面ハイライト (specular) の設定による違いを示している。このハイライトは比較的穏やかなタイプである。

デフォルト   specular 0.3   specular 0.8
        (roughness 0.05) (roughness 0.05)
図12.3-3c 鏡面ハイライト (specular)
//-------------------- Fig. 12.3-3c specular #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= specular #declare FN1=finish{ } //-------- default #declare FN2=finish{specular 0.3} #declare FN3=finish{specular 0.8} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-3d は 鏡面粗さ (roughness) の設定による違いを示している。左側がデフォルトの 0.05 であるが、値によりハイライトの広がりが変わってくる。

(roughness 0.05)  roughness 0.03  roughness 0.2
specular 0.5    specular 0.5    specular 0.5
図12.3-3d 鏡面粗さ (roughness)
//-------------------- Fig. 12.3-3d roughness #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //--- roughness 0.05 (specular) //======================================= roughness #declare FN1=finish{specular 0.5} #declare FN2=finish{specular 0.5 roughness 0.03} #declare FN3=finish{specular 0.5 roughness 0.2} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

図12.3-3e は 金属表面 (metallic) の設定によるハイライトの違いを示している。図の右側の列の metallic 1 は、値なしでキーワード metallic のみを記述した場合と同じである。

 (無)     metallic 0.5   metallic 1
specular 0.5  specular 0.5  specular 0.5
図12.3-3e 金属表面のハイライト (metallic)
//-------------------- Fig. 12.3-3e metallic #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //--- roughness 0.05 (specular) //======================================= metallic #declare FN1=finish{specular 0.5} #declare FN2=finish{specular 0.5 metallic 0.5} #declare FN3=finish{specular 0.5 metallic 1} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }


12.3-4 鏡面反射(reflection)

周りの物体などか映り込む鏡面を設定したいときに使用する。鏡面反射は非常に滑らかな表面で起きる、光の入射角と反射角が等しい反射で、正反射とも呼ばれる。光の入射角と反射角が等しくない場合は指向性反射となる。物体に鏡面を設定すると、周囲の景色が映り込んだり、ハイライトが生じたりする。鏡面反射は2種類あり、簡単な設定で使えるものと、より細かな設定ができるものが用意されている。

< reflection の構文 >

finish { reflection { [ COLOR_REFLECTION_MAX | COLOR_REFLECTION_MIN, COLOR_REFLECTION_MAX ] [ fresnel on|off ] [ falloff FLOAT ] [ exponent FLOAT ] [ metallic [ FLOAT ] ] } }
finish フィニッシュのキーワード
reflection 鏡面反射のキーワード
COLOR_REFLECTION_MAX 物体表面の反射率の設定、 通常 0.0~1.0 であるがどんな値でもよい。[デフォルト:0 ](鏡面反射は生じない)
※ 数値の代わりにカラー名またはカラーベクトルを設定し、反射光に色を付けることができる。
例) finish { reflection rgb <1,0,0> } // 赤い光を反射する鏡面
COLOR_REFLECTION_MIN 物体の最小反射率の設定(角度によって反射率が減少する場合に設定)
fresnel on|off フレネルの反射スイッチ、onで有効にできる。このスイッチを有効にしたときは、インテリアで屈折率を設定する必要がある。[デフォルト:off ]
falloff FLOAT 反射率の減衰指数を設定、反射率がn乗して適用される。通常は 1.0 以上を設定する。
exponent FLOAT 反射率の指数によるコントロールで、芸術的な表現を目的とした実験的な実装 [デフォルト:1.0 ]
metallic FLOAT 金属のような反射を表現する。0.0~1.0の数値で反射光に対する物色の影響の割合を設定することもできる。反射はフレネルの式が使用される。[デフォルト:1.0 ]

※ テクスチャに鏡面を設定すると追加の光線をトレースしなければならなくなるため、レンダリングの時間は長くなる。

図12.3-4 は鏡面反射の設定による表面の違いを示している。右の球には左の球と空、床が映り込んでいる。

デフォルト   reflection 0.3   reflection 0.8
図12.3-4a 鏡面反射(reflection)
//-------------------- Fig. 12.3-4a reflection #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= reflection #declare FN1=finish{ } //-------- default #declare FN2=finish{reflection 0.3} #declare FN3=finish{reflection 0.8} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <0,0,1>} #declare SP2=sphere{0,1.4 translate <0,0,4>} #declare SP3=sphere{0,1.4 translate <0,0,7>} #declare TX1=pigment{rgb<1,1,0.8>} #declare TX2=texture{T_Wood7 rotate x*90} #declare TX3=texture{T_Grnt26} union{ object{ SP1 texture{TX1} finish{FN1} } object{ SP2 texture{TX2} finish{FN1} } object{ SP3 texture{TX3} finish{FN1} } translate x*-4 } union{ object{ SP1 texture{TX1} finish{FN2} } object{ SP2 texture{TX2} finish{FN2} } object{ SP3 texture{TX3} finish{FN2} } translate x*0 } union{ object{ SP1 texture{TX1} finish{FN3}} object{ SP2 texture{TX2} finish{FN3}} object{ SP3 texture{TX3} finish{FN3}} translate x*4 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } box{0,1 scale <20,10,20> pigment{rgb<0.8,1,0.6>*1.2} translate <10,-30,-1> } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }

ディフォルトで、環境光 ambient 0.1、拡散反射 diffuse 0.6 なっているので、鏡面反射のみを設定しても完全な鏡とはならない。完全な鏡は、これらを 0 にして reflection 1.0 にする設定である。次の図12.3-4b には完全な鏡面に設定したものを示す。周りの景色がよく映り込んでいる。

図12.3-4b 完全な鏡面
//---------------- Fig. 12.3-4b perfect mirror #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <0,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,3.5> } light_source {<-50,-100,80> color White*1.2 parallel point_at 0 } //========================== mirror sphere sphere{0,4.5 pigment{rgb 1} finish{ // <<<--- perfect mirror reflection 1.0 ambient 0 diffuse 0 } translate <0,0,4> } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } box{0,1 scale <20,10,20> pigment{rgb<0.8,1,0.6>*1.2} translate <10,-30,-1> } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }


12.3-5 虹色 [薄膜干渉](irid)

水たまりの上の油膜や石鹸の泡の表面などの薄膜に生じる虹色を表現する。タイルやガラスフィルムなどで発生すると虹彩現象などと呼ばれる。

< irid の構文 >

finish { irid { AMOUNT [ thickness FLOAT ] [ turbulence <VECTOR> ] } }
finish フィニッシュのキーワード
irid 虹色の縞模様のキーワード
AMOUNT 表面の色に対する虹色の縞模様の効果の強さの設定、 通常 0.25(25%)以下で設定するが、どんな値でもよい。※ 表面が明るすぎる場合は ambient と diffuse の値を小さくする。
thickness FLOAT 膜の厚さの設定、値を大きくすると縞模様が細かくなる。この厚さは物体のサイズとは無関係 [デフォルト:0 ](虹色は発生しない)
turbulence <VECTOR> 縞模様のパターンの乱れの設定、値を大きくするとパターンの乱れが大きくなる。[デフォルト:0 ](乱れは生じない)
※ ここでは turbulence だけしか設定できない。octaves, lambda, omega の値は自動的に設定される。

この機能は、光源と表面の間の角度の関数として表面の色を修正する。その効果は光源と表面の位置と角度に依存するため、ピグメントパターンとは違った性質を持つ。

図12.3-5a 虹色 irid の強さと thickness は、irid の強さを、0.1, 0.15, 0.25 の3種類、thickness を 1, 5, 10 の3種類の組み合わせによる違いを9個の白い球に示している。それぞれ虹色の発生が異なっている。

図12.3-5a 虹色 irid の強さと thickness
//-------------------- Fig. 12.3-5a irid #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <-0.5,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<-0.5,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= irid #declare FN1=finish{irid{ 0.10 thickness 1 }} #declare FN2=finish{irid{ 0.15 thickness 1 }} #declare FN3=finish{irid{ 0.25 thickness 1 }} #declare FN4=finish{irid{ 0.10 thickness 5 }} #declare FN5=finish{irid{ 0.15 thickness 5 }} #declare FN6=finish{irid{ 0.25 thickness 5 }} #declare FN7=finish{irid{ 0.10 thickness 10 }} #declare FN8=finish{irid{ 0.15 thickness 10 }} #declare FN9=finish{irid{ 0.25 thickness 10 }} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <-4,0,0>} #declare SP2=sphere{0,1.4 translate < 0,0,0>} #declare SP3=sphere{0,1.4 translate < 4,0,0>} #declare TX0=pigment{rgb 1} union{ object{ SP1 texture{TX0} finish{FN1}} object{ SP2 texture{TX0} finish{FN2}} object{ SP3 texture{TX0} finish{FN3}} translate z*7 } union{ object{ SP1 texture{TX0} finish{FN4} } object{ SP2 texture{TX0} finish{FN5} } object{ SP3 texture{TX0} finish{FN6} } translate z*4 } union{ object{ SP1 texture{TX0} finish{FN7} } object{ SP2 texture{TX0} finish{FN8} } object{ SP3 texture{TX0} finish{FN9} } translate z*1 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } } //----------------------------character #declare Font="cyrvetic.ttf" union{ text{ttf Font,"irid",0.1,0 rotate x*90 scale 0.6 translate <-6,-1,-1> } text{ttf Font,"0.1",0.1,0 rotate x*90 scale 0.6 translate <-4.3,-1,-1> } text{ttf Font,"0.15",0.1,0 rotate x*90 scale 0.6 translate <-0.8,-1,-1> } text{ttf Font,"0.25",0.1,0 rotate x*90 scale 0.6 translate <3,-1,-1> } pigment{rgb 1.5} } union{ text{ttf Font,"thick",0.1,0 rotate x*90 scale 0.6 translate <-7.2,0,8> } text{ttf Font," ness",0.1,0 rotate x*90 scale 0.6 translate <-7.2,0,7.5> } text{ttf Font," 1",0.1,0 rotate x*90 scale 0.6 translate <-6.5,0,6.5> } text{ttf Font," 5",0.1,0 rotate x*90 scale 0.6 translate <-6.5,0,4> } text{ttf Font,"10",0.1,0 rotate x*90 scale 0.6 translate <-6.5,0,0.6> } pigment{Yellow*1.5} }

図12.3-5b は 膜の厚さ (thickness) を 5 に固定し、irid の強さを、0.1, 0.15, 0.25 の3種類、turbulence を 0.05, 0.1, 0.15 に変化させたときの、乱れの様子を示している。

図12.3-5b turbulence による影響の大きさ
//-------------------- Fig. 12.3-5b irid #version 3.7 #include "colors.inc" #include "textures.inc" #include "stones.inc" #include "Woods.inc" global_settings {assumed_gamma 2.2 } //------------------------------camera and light camera{ location <-0.5,-11,4> sky<0,0,1> right <-image_width/image_height,0,0> look_at<-0.5,0,3.5> } light_source {<-50,-100,80> color White*1.2} //--- finish default //--- ambient 0.1 //--- diffuse 0.6 //======================================= irid #declare FN1=finish{irid{ 0.10 thickness 5 turbulence 0.05}} #declare FN2=finish{irid{ 0.15 thickness 5 turbulence 0.05}} #declare FN3=finish{irid{ 0.25 thickness 5 turbulence 0.05}} #declare FN4=finish{irid{ 0.10 thickness 5 turbulence 0.1}} #declare FN5=finish{irid{ 0.15 thickness 5 turbulence 0.1}} #declare FN6=finish{irid{ 0.25 thickness 5 turbulence 0.1}} #declare FN7=finish{irid{ 0.10 thickness 5 turbulence 0.15}} #declare FN8=finish{irid{ 0.15 thickness 5 turbulence 0.15}} #declare FN9=finish{irid{ 0.25 thickness 5 turbulence 0.15}} //--------------------------------------object 9 spheres #declare SP1=sphere{0,1.4 translate <-4,0,0>} #declare SP2=sphere{0,1.4 translate < 0,0,0>} #declare SP3=sphere{0,1.4 translate < 4,0,0>} #declare TX0=pigment{rgb 1} union{ object{ SP1 texture{TX0} finish{FN1}} object{ SP2 texture{TX0} finish{FN2}} object{ SP3 texture{TX0} finish{FN3}} translate z*7 } union{ object{ SP1 texture{TX0} finish{FN4} } object{ SP2 texture{TX0} finish{FN5} } object{ SP3 texture{TX0} finish{FN6} } translate z*4 } union{ object{ SP1 texture{TX0} finish{FN7} } object{ SP2 texture{TX0} finish{FN8} } object{ SP3 texture{TX0} finish{FN9} } translate z*1 } //---------------------------------floor #declare T1= texture{ pigment{ cells color_map{ [0.0 color rgb<0.7,0.8,0.8>*0.8] [0.2 color rgb<1,0.8,0.7>*0.8] [1.0 color White] } scale 0.5 } } plane{z,0 texture {T1 scale 1.5} translate z*-1 } //---------------------------------wall box{0,1 scale <60,1,60> translate <-30,0,-1> texture {T_Wood30 scale 3} } //---------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } } //----------------------------character #declare Font="cyrvetic.ttf" union{ text{ttf Font,"irid",0.1,0 rotate x*90 scale 0.6 translate <-6,-1,-1> } text{ttf Font,"0.1",0.1,0 rotate x*90 scale 0.6 translate <-4.3,-1,-1> } text{ttf Font,"0.15",0.1,0 rotate x*90 scale 0.6 translate <-0.8,-1,-1> } text{ttf Font,"0.25",0.1,0 rotate x*90 scale 0.6 translate <3,-1,-1> } pigment{rgb 1.5} } union{ text{ttf Font,"turbu",0.1,0 rotate x*90 scale 0.6 translate <-7.3,0,8> } text{ttf Font," lence",0.1,0 rotate x*90 scale 0.6 translate <-7.3,0,7.5> } text{ttf Font,"0.05",0.1,0 rotate x*90 scale 0.6 translate <-7,0,6.5> } text{ttf Font,"0.1",0.1,0 rotate x*90 scale 0.6 translate <-6.8,0,4> } text{ttf Font,"0.15",0.1,0 rotate x*90 scale 0.6 translate <-7,0,0.6> } pigment{Yellow*1.5} }

次の図12.3-5c は シャボン玉のような表現をした例である。

図12.3-5c シャボン玉
//---------------- Fig. 12.3-5c soup bubbles #version 3.7 #include "colors.inc" #include "textures.inc" global_settings {assumed_gamma 2.2} camera{ location<0,-4,0> sky<0,0,1> right <-image_width/image_height,0,0> look_at<0,0,0.3> } light_source {<50,-100,100> color White parallel point_at 0 } //======================= soup bubble (left) union{ sphere{0,1 hollow pigment{White*1.25 filter 0.7} interior{ ior 1.005} finish { Shiny diffuse 0.2 irid { 1 thickness 1 turbulence 0.2 } } } translate <-1.2,0,1> } //======================= soup bubble (right) union{ sphere{0,1 hollow pigment{White*1.25 filter 0.7} interior{ ior 1.005} finish { Shiny diffuse 0.2 irid { 1 thickness 1 turbulence 0.1 } } } translate <1.2,0,0.5> } //------------------------------ground #declare TA= pigment{ bozo color_map{ [0.0 color rgb<0.6,0.9,0.3>*1.5] [0.9 White] } } #declare NA= normal{ bozo 2 } disc{0,z,30 pigment{TA scale 0.3} normal{NA scale 0.3} translate z*-1 } //------------------------------sky sky_sphere{ pigment{ wrinkles color_map{ [ 0.3 SkyBlue] [ 0.9 White ] } scale <1, 0.2, 0.2> } }
12.3-6 halo

haloは、POV-Ray 3.1で廃止され、Media に置き換わった。▷「8. メディア」参照


 ▷ 次を見る