11. 物体の形状


11. 物体の形状

POV-Rayでは形状と材質を指定することで物体を表現する。 このセクションでは物体の形状の指定に関する解説を行う。

11.1 プリミティブ

POV-Rayではのプリミティブ(基本立体)を組み合わせて物体を表現する。このようなモデルの作成方法をCSGと呼ぶ。ここでは以下の26種類について示す。

(1) ボックス(box)
(2) 球(sphere)
(3) 円柱(cylinder)
(4) コーン(cone)
(5) トーラス(torus)
(6) 円盤(disc)
(7) 超2次曲面(superellipsoid)
(8) 3角形(triangle)
(9) スムーズ3角形(smooth_triangle)
(10) 多角形(polygon)
(11) メッシュ(mesh)
(12) メッシュ2(mesh2)
(13) 簡易回転体(sor)
(14) 回転体(lathe)
(15) 角柱(prism)
(16) 球スイープ(sphere_sweep)
(17) ハイト・フィールド(height_field)
(18) ブロブ(blob)
(19) フラクタル(julia_fractal)
(20) 3次元テキスト(text)
(21) 無限平面(plane)
(22) 2次曲面(quadric)
(23) 3次曲面(cubic)
(24) 4次曲面(quartic)
(25) 高次曲面(poly)
(26) ベジエ曲面(bicubic_patch)

※ プリミティブのタイプによっては、クリッピング形状(ある物体の一部を切り取る形状) として使用できるものもある。 ⇒「11.4 形状指定オプション」

※ プリミティブは単体でも物体として使用できるが、CSGによって複数のプリミティブを組 み合わせて1つの物体として扱うことがよく行われる。 ⇒「11.3 CSG」

<プリミティブのタイプ>

プリミティブには3つのタイプがあり、それぞれ性質が異なる。

@有限ソリッド・プリミティブ(内側と外側の境界があり、大きさが有限の形状)
A有限パッチ・プリミティブ(内側と外側の境界がなく、大きさが有限の形状)
B無限パッチ・プリミティブ(内側と外側の境界があり、大きさが無限の形状)

@有限ソリッド・プリミティブ

有限ソリッド・プリミティブとは、大きさが有限で内側と外側の境界が明確な形状のことである。 下記の14種類のものは有限ソリッド・プリミティブとして扱われる。

●ブロブ(blob)
●ボックス(box)
●コーン(cone)
●円柱(cylinder)
●ハイト・フィールド(height_field)
●フラクタル(julia_fractal)
●角柱(prism)
●回転体(lathe)
●簡易回転体(sor)
●球(sphere)
●球スイープ(sphere_sweep)
●超2次曲面(superellipsoid)
●3次元テキスト(text)
●トーラス(torus)

※ これらのプリミティブは内側がはっきり定義できるため、CSG(⇒「11.2 CSG」)で使 用できる。

※ これらのものは有限であるため自動的にバウンディング(境界の指定)が行われる。

A有限パッチ・プリミティブ

有限パッチ・プリミティブとは、大きさが有限で厚さがなく、内側と外側の境界が明確でない形状のことである。 下記の7種類のものは有限パッチ・プリミティブとして扱われる。

●ベジエ曲面(bicubic_patch)
●円盤(disc)
●メッシュ(mesh)
●メッシュ2(mesh2)
●多角形(polygon)
●3角形(triangle)
●スムーズ3角形(smooth_triangle)

※ これらのものは内側がはっきり定義できないため、クリッピング形状としては使用でき ない。 またCSGでも使用できない場合がある。

※ これらのものは有限であるため自動的にバウンディング(境界の指定)が行われる。

B無限パッチ・プリミティブ

無限パッチ・プリミティブは大きさが無限で厚さがなく、内側と外側が明確な形状のことである。 下記の5種類のものは無限パッチ・プリミティブとして扱われる。

●無限平面(plane)
●2次曲面(quardric)
●3次曲面(cubic)
●4次曲面(quartic)
●高次曲面(poly)

※ これらのものは内側が定義できるため、クリッピング形状として使用できる。 またCSG でも使用できる。


11.1-1 ボックス(box)

ボックスは、立方体や直方体を表現する。対角の2点を指定するだけで直方体を表現することができる。

図11.1-1a ボックス


●ボックスの例(図11.1-1a)



     box{<0,0,0>,<1,1,1>

       pigment{checker White*1.5, color rgb<0.5,0.8,0.4> scale 0.25}

       finish{phong 1 reflection 0.1}

       translate <-0.5,-0.5,0>

     }

※ ボックスは能率的に計算されるため、よいバウンディング形状となる。
「11.4 形状指定オプション」

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< box の構文>


 box { 

   <CORNER1>, <CORNER2>

   [ OBJECT_MODIFIERS... ] 

  }

box ボックスを指定するキーワード
<CORNER1>, <CORNER2> ボックスの対角の頂点のx, y, z座標(図11.1-1b)
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

※ ボックスの各面は座標軸に平行に現 れる。 向きを変えたい場合はrotate を使用する。

図11.1-1b ボックスのパラメータ


11.1-2 球(sphere)

球は中心と半径を指定して作る。 球のxyz方向スケールが異なる値のとき楕円球となる。

図11.1-2a 球


●球の例(図11.1-2a)



     sphere{z*1.5,1}



     sphere{0,1

       scale <0.5,2,0.5>

       rotate x*15

       translate <-2,0,1>

     }



     sphere{0,1

       scale <0.1,2,0.5>

       rotate x*15

       translate <2,0,1>

     }



     sphere{0,1

       scale z*0.3 

       translate <0,-2,0.2>

     }

球は効率的に計算されるため、バウンディング形状に適している。
「11.4 形状指定オプション」

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< sphere の構文>


 sphere {

   <CENTER>, RADIUS

   [ OBJECT_MODIFIERS... ] 

 }

sphere 球を指定するキーワード
<CENTER> 球の中心のx, y, z座標
RADIUS 球の半径
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

図11.1-2b 球のパラメータ


11.1-3 円柱(cylinder)

両端の底面の座標と底面の半径を指定することで円柱を作ることができる。 またオプションのキーワードopenの追加によって両端のふたを取り除くこともできる。

図11.1-3a 円柱


●円柱の例(図11.1-3a)



     cylinder{0,z*1,0.5

       pigment{checker White*1.2, Yellow scale 0.25}

       finish{phong 1 reflection 0.1}

       translate <-0.7,0,0>

     }



     cylinder{0,z*1,0.5 open

       pigment{checker White*1.2, Red scale 0.25}

       finish{phong 1 reflection 0.1}

       translate <0.7,0,0>

     }

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< cylinder の構文>


 cylinder {

   <BASE_POINT>, <CAP_POINT>, RADIUS

   [ open ]

   [ OBJECT_MODIFIERS... ] 

 }

cylinder 円柱を指定するキーワード
<BASE_POINT>
<CAP_POINT>
底面の中心のx, y, z座標
RADIUS 底面の半径
open 両端面を取り除く指定、筒となる。
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

図11.1-3b 円柱のパラメータ


11.1-4 コーン(cone)

コーンとは円錐または円錐台のことである。 コーンは底面と頂点の座標と半径を指定して作る。 またオプションのキーワードopenの追加によって、両端面を取り除いてメガホン状の物体を作ることもできる。

図11.1-4a コーン


●コーンの例(図11.1-4a)



     cone{0,1,z*1,0.5 open

       pigment{checker White*1.2, White*0.0 scale 0.5}

       finish{phong 1 reflection 0.1}

       rotate x*60

       translate <-2,1,1>

     }



     cone{0,1,z*2,0

       pigment{checker White, color rgb<0.8,0.1,0.1> scale 0.5}

       finish{phong 1 reflection 0.1}

       translate <0,0,0>

     }



     cone{0,1,z*1,0.5

       pigment{checker White*1.5, White*0.0 scale 0.5}

       finish{phong 1 reflection 0.1}

       rotate x*60

       translate <2,1,1>

     }

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< cone の構文>


 cone {

   <BASE_POINT>, BASE_RADIUS,

   <CAP_POINT>, CAP_RADIUS

   [ open ]

   [ OBJECT_MODIFIERS... ] 

 }

cone コーンを指定するキーワード
<BASE_POINT>
<CAP_POINT>
底面の中心のx, y, z座標
BASE_RADIUS
CAP_RADIUS
底面の半径、どちらかを0にすると円錐となる。
open 両端面を取り除く指定
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

図11.1-4b コーンのパラメータ


11.1-5 トーラス(torus)

トーラスはドーナツやタイヤのチューブのような形状を作るものである。

図11.1-5a トーラス


●トーラスの例(図11.1-5a)



     torus{1,0.3

       pigment{checker color rgb<1,0.8,0.4>*1.5,

                       color rgb<1,1,0.8> scale 1}

       finish{phong 1 reflection 0.2}

       rotate x*-60

       translate z*1

     }

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< torus の構文>


 torus {

   MAJOR_RADIUS ,

   MINOR_RADIUS

   [ sturm ]

   [ OBJECT_MODIFIERS... ] 

 }

torus トーラスを指定するキーワード
MAJOR_RADIUS 穴の中心から枠の中心線までの距離
MINOR_RADIUS 枠の断面の半径
sturm 形状が正しく描かれない場合に、時間をかけて正確な計算をする指定
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

※ トーラスは常に中心が原点でy軸に垂直に作られる。

図11.1-5b トーラスの位置、向き、パラメータの関係


11.1-6 円盤(disc)

円盤は、中心の座標、面の向きを決める法線ベクトル、半径の指定によって作る。また、半径をもう1つ追加することで、中心に穴をあけることもできる。

図11.1-6a 円盤


●円盤の例(図11.1-6a)



     disc{0,z,1.0,0.5

       pigment{checker White*1.2, color rgb<0.3,0.3,1> scale 0.25}

       finish{phong 1 reflection 0.1}

       rotate x*15

       translate z*0.5

     }



     disc{0,z,1

       pigment{checker White*1.2, color rgb<0.3,1,1> scale 0.25}

       finish{phong 1 reflection 0.1}

       rotate x*15 

       translate <0,0.5,1.5>

     }

●プリミティブのタイプ:有限パッチ
●クリッピング形状:×
●CSG:△(面の端部は×)

< disc の構文>


 disc {

   <CENTER>, <NORMAL>, RADIUS [, HOLE_RADIUS ]

   [ OBJECT_MODIFIERS... ] 

 }

disc 円盤を指定するキーワード
<CENTER> 円盤の中心のx, y, z座標
<NORMAL> 面の法線ベクトル、円盤の向きを決定する。
RADIUS 円盤の半径
HOLE_RADIUS 円盤の中心にあける穴の半径
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

図11.1-6b 円盤のパラメータ


11.1-7 超2次曲面(superellipsoid)

超楕円球は2次曲面を拡張したものである。 かどの丸いボックスや円柱を作ることができる。

左から<e, n> = <0.25, 3.00>、<0.25, 0.25>、<3.00, 0.25>

図11.1-7a 超2次曲面


●超2次曲面の例(図11.1-7a)



     superellipsoid{<0.25,3.0>

        pigment{checker White*1.2,

                  color rgb<0.9,0.6,0.2> scale 2.5}

        finish{phong 1 reflection 0.2}

        scale 0.5 translate <-1.2,0,0.5>

     }



     superellipsoid{<0.25,0.25>

        pigment{checker White*1.2, 

                  color rgb<0.8,0.8,0.2>*1.5 scale 2.5}

        finish{phong 1 reflection 0.2}

       texture{Check}

       scale 0.5 translate <0,0,0.5>

     }



     superellipsoid{<3.0,0.25>

       pigment{checker White*1.2, 

                 color rgb<0.3,0.3,0.8> scale 2.5}

       finish{phong 1 reflection 0.2}

       scale 0.5 translate <1.2,0,0.5>

     }

●プリミティブのタイプ:有限ソリッド
●クリッピング形状:○
●CSG:○

< superellipsoid の構文>


superellipsoid {

   <e, n> 

   [ OBJECT_MODIFIERS... ] 

 }

superellipsoid 超2次曲面を指定するキーワード
<e, n> 角の丸みを決定する。 通常は0〜1の実数値で指定する。値を大きくするほど角が丸くなり、1より大きい値を使うと角の部分が中心に向かって引っ張られたような形状になる。
e=1, 0<n<1:角の丸い円柱(図11.1.7bの右側)
e=n, 0<e<1, 0<n<1:角の丸いボックス(図11.1.7bの左側)
e=1, n=1:球
値が小さすぎると正確に計算されない場合がある。超楕円球は常に原点を中心にして作られる。
OBJECT_MODIFIERS... 物体の変形・テクスチャなどの指定

図11.1-7b 角の丸いボックスと円柱