第2日目(9月29日)
CSGを用いて立体を構成する.また,移動と回転により複雑立体を構成する.さらに,制御構造により繰り返し記述を可能とする.
また,立体を「らしく」見せるための,テクスチャーマッピング(質感や模様)をいろいろと試して見る.したがって,今日のキーワードは,「形と模様にこだわろう」です.
CSGによる複雑な形状の構成
CSGとは、Constructive Solid
Geometryの略語である。
POV−Rayでは、4つの違った方法で基本的な形状を結合することにより,より複雑な形状をつくることができる.
unionは、2つかそれ以上の形状を合体させた形状を構成する.
intersectionでは、2つかそれ以上の形状から、それらの形状全てに共通した領域からなる形状を構成する.
differenceでは、一方の形状から、もう一つの形状差し引いた形を構成する.
mergeは,union形状から,それらの内部にある表面を取り除いた形状である.これらは,透明性のあるCSGオブジェクトを扱う場合,便利である
以後、それぞれを詳細に説明する。
CSGオブジェクトは,これらの操作を繰り返すこともできる。
例えば、differenceのunionとか、intersectionのdifferenceのmergeのintersection、とか,mergeのdifferenceのintersectionのunionなどのように。
CSG UNION
unionは、2つかそれ以上の形状を合体させた形状を構成する.
単純なunion形状を作ってみよう。csgdemo.pov
というファイルを作って、そして次のようにそれを編集する。
#include "colors.inc" camera { location <0, 3, -5> look_at <0, 0, 0> } light_source { <0, 5, -5> White } plane { <0,1,0> , -1.5 pigment { checker color Black White } } |
次に,各々x軸に沿って,原点から0.5単位動いた2つの球を加えよう。1つを赤く,そして、もう1つを青く着色する。
sphere { <0, 0, 0>, 1 pigment { color Red } translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 pigment { color Blue } translate <0.5,0,0> } |
このファイルをトレースして、結果をよく観察しおく.
さて,次に,2つの球を,unionブロックでくくる.
これにより,2つの球オブジェクトから1つのCSGのunionを作ることができる。
union{ sphere { <0, 0, 0>, 1 pigment { color Red } translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 pigment { color Blue } translate <0.5,0,0> } } |
再びファイルをトレースする。unionは,もとの形状が占める範囲では,もとの形状を同様の見え方をする.
そこで,union形状全体を一つの形状とみなして,属性を与えることができる.
以下で,pigment,
scale, rotationは,union形状そのものに適用される.
union{ sphere { <0, 0, 0>, 1 translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 translate <0.5,0,0> } pigment { color Red } rotate < 0, 0, 45> } |
再びファイルをトレースする.
CSG INTERSECTION
intersectionでは、2つかそれ以上の形状から、それらの形状全てに共通した領域からなる形状を構成する.
さて、次にCGSオブジェクトの『共通部分』を説明するために、また同じ球体を使ってみよう。
まず、直前に作成したシーン記述のなかで,「union」という単語を、「intersection」に変え、「rotate」という記述を削除する。
intersection { sphere { <0, 0, 0>, 1 translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 translate <0.5,0,0> } pigment { color Red } } |
ファイルをトレースすると、二つの球体の代わりにレンズの形をした物体を見るだろう。
これのレンズの形をした形状は,2つの形状の重なり合った部分,すなわち,2つの球がともに占めている空間の表している.rotateを加えて,回転させその形を確認する.
intersection { sphere { <0, 0, 0>, 1 translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 translate <0.5,0,5> } pigment { color Red } rotate < 0,20, 0> } |
CSG
DIFFERENCE
differenceでは、一方の形状から、もう一つの形状差し引いた形を構成する.
差し引いた面がカメラから見えないので、この物体をy軸について回転させてみる。
difference{ sphere { <0, 0, 0>, 1 translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 translate <0.5,0,0> } pigment { Red } rotate <0, 20, 0> } |
CSG
MERGE
mergeは,union形状から,それらの内部にある表面を取り除いた形状である.
merge操作により,第4番目のCSGオブジェクトを構成することができる.
mergeで出来上がる形状はunionと同じように見えるが、mergeでは,全体が一つの形状となる.その大きな違いは,透明(または,半透明)のオブジェクトを使うと分かる.
ではやってみよう。以下のシーン記述において,mergeとunionの双方で,実行して,その結果を比べてみよう.
merge{ sphere { <0, 0, 0>, 1 translate -0.5*x } sphere { <0, 0, 0>, 1 translate 0.5*x } pigment { Red filter .5} } |
CSG演算の合成
まず,以前のintersectionでレンズを作成し,その後に,レンズの中心を通る緑色の円柱を置く。
cylinder { <-1, 0, 0> <1, 0, 0>, 0.5 pigment { Green } } |
次のようにレンズの形をした物体のintersectionブロックとシリンダーをdiffereceブロックで囲む.
difference { intersection { sphere { <0, 0, 0>, 1 translate <-0.5,0,0> } sphere { <0, 0, 0>, 1 translate <0.5,0,0> } pigment { Red } } cylinder { <-1 0, 0> <1, 0, 0>, 0.5 pigment { Green } } } |
これは
difference {
intersection{ 球1 球2 }
円柱
}
の構造をしている.このように,操作を組み合わせることで,様々な形状が構成できる.
またファイルをトレースする.
シリンダーのあった中央に穴があいたレンズの形をした形状が現れる。シリンダー定義にあるの色指定によりシリンダー表面色である緑で,穴が色づけられている.
全体を,y軸周りに30度回転させ,どのとうな形かを,確認する.
今日のトップページへ
制御構造 ー繰り返しと条件分けー
下のイメージのように,同じ形状が繰り返し現われるイメージを作成してみよう.
・代入と計算
POV-RAYでは,「変数」が利用できる.
*代入の例
#declare x=1;
#declare Rows = 5;
#declare Ao = rgb <0,0,1>;
#local SiroKuro = pigment { checker White, Cyan }
#local Here = <1,2,3>;
*計算の例
#declare y=x*x + 3 ;
#declare Count = Count+1;
#declare x=x+1 ;
*具体例:
#include "colors.inc"
#declare ao = rgb<0,0,1> ;
#declare SiroKuro = pigment{checker White, ao };
#declare me = <0,3,-10> ;
#declare uemuki = <0,1,0> ;
camera {
location me
look_at <0,0,0>
}
light_source { <500,500,-1000> color White }
plane {
uemuki, 0
pigment{ SiroKuro }
}
・繰り返し構造
#while ( <条件> ) :
#end
ー><条件>部に書かれた条件が,成り立っている間,
#while-#end間が繰り返される.
・条件分け
#if ( <条件> )
: <- <条件>部が成り立つ場合
#else
: <- <条件>部が成り立たない場合
#end
・サンプルプログラム(本節の先頭に示した,球225個からなるイメージを生成するシーンファイルを以下に示す
#include "colors.inc"
camera {
location <0,5,-10>
look_at <0,0,0>
}
light_source { <500,500,-1000> color White }
plane { <0,1,0>, 0
pigment{ checker color White color Blue }
}
#declare c=-5;
#while( c< 10 ) :15回繰り返す
#declare r=-5 ;
#while( r< 10 )
sphere{ <0,0,0>,0.2
translate < c*0.4,0.5,r*0.4>
#if ( r> 0 ) pigment{ color Green}
#else pigment{ color Red}
#end
}
#declare r=r+1;
#end
#declare c=c+1;
#end
球移動と回転体
・球移動
・球を移動させ,その法絡面として形状を定義する.
記述法:
sphere_sweep{
<移動の方法> −> linear_spline(直線的な移動), cubic_spline(3次スプラインでの移動)
<制御点の数>
:
<制御点座標>,<球の半径> −>繰り返す
:
}
#include "colors.inc" background{ color Cyan } camera{ location <0,0,-20> look_at <0,0,0> } light_source{ <0,0,-5> color White} sphere_sweep { linear_spline 4, <-5, -5, 0>, 1 <-5, 5, 0>, 1 < 5, -5, 0>, 1 < 5, 5, 0>, 1 } |
![]() |
シーンファイル(直線的な移動) | 生成イメージ |
sphere_sweep { cubic_spline 6, <-4, -5, 0>, 1 <-5, -5, 0>, 1 <-5, 5, 0>, 1 < 5, -5, 0>, 1 < 5, 5, 0>, 1 < 4, 5, 0>, 1 tolerance 0.1 pigment{ color Green } } |
![]() |
シーンファイル(3次スプラインでの移動) | 生成イメージ |
・回転体の定義
回転体は,x−y平面での断面線を定義し,y軸周りに回転させることて定義する.
断面線は,3次のスプラインの形式で表現する.
記述法:
sor{
<制御点の数>
:
<制御点> <−必要な個数繰り返す
;
<アフィン変換>
<表面情報>
}
#include "colors.inc“ #include "golds.inc“ global_settings { assumed_gamma 2.2 } camera { location <10, 15, -20> look_at <0, 5, 0> angle 45 } background { color rgb<0.2, 0.4, 0.8> } light_source { <100, 100, -100> color White } plane { <0,1,0>, 0 pigment { checker color Red, color Green scale 10 } } sor { 8, <0.0, -0.5>, <3.0, 0.0>, <1.0, 0.2>, <0.5, 0.4>, <0.5, 4.0>, <1.0, 5.0>, <3.0, 10.0>, <4.0, 11.0> open texture { T_Gold_1B } } |
![]() |
回転体のシーンファイル | 断面線の定義例 |
2−4 テキストオブジェクト
Text Object*
Pov−Rayには,立体化して「文字」がテキストオブジェクトとして利用できる.
#include "colors.inc" background{ color Cyan} camera{ location <0,5,-10> look_at<0,0,0> angle 45 } light_source { <0,1,-5> color White} text{ ttf "gothic.ttf" "WorkShop 2" 0.5,0 pigment{ color White} translate< -2.5,0,0> } |
![]() |
テキストオブジェクトの例 | 生成例 |
テキストは立体であるため,CSGなどの要素として使用できる.
今日のトップページへ
演習・宿題 課題
以下のイメージとPOV−RAYにより生成しなさい.
課題1:「回転面により作られた「花瓶」または「食器」の近くに球移動により作成した自分のイニシャルがある」
課題2:「秋」をテーマに作品を作成しなさい.