第2日目(9月29日)


CSGを用いて立体を構成する.また,移動と回転により複雑立体を構成する.さらに,制御構造により繰り返し記述を可能とする.
また,立体を「らしく」見せるための,テクスチャーマッピング(質感や模様)をいろいろと試して見る.
したがって,今日のキーワードは,「形と模様にこだわろう」です.

本日の予定:




2−1.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度回転させ,どのとうな形かを,確認する.


今日のトップページへ



2−2 繰り返しと条件分岐

制御構造 ー繰り返しと条件分けー


下のイメージのように,同じ形状が繰り返し現われるイメージを作成してみよう.


・代入と計算

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



今日のトップページへ



2−3 移動と回転による形状生成

球移動と回転体


・球移動

・球を移動させ,その法絡面として形状を定義する.
記述法:
 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などの要素として使用できる.

今日のトップページへ



2−5 練習課題

演習・宿題 課題


以下のイメージとPOV−RAYにより生成しなさい.

課題1:「回転面により作られた「花瓶」または「食器」の近くに球移動により作成した自分のイニシャルがある」

課題2:「秋」をテーマに作品を作成しなさい.


今日のトップページへ