RenderManのお勉強(CSG)
CSGとは??
CSGはconstructive solid geometryの略です。数学で出てくる集合演算(和集合、共通集合、差集合を作り出す演算)を物体形状に適用する方法です。プリミティブ(primitive)と呼ばれる基本物体に集合演算を順々に適用していき、複雑な形状を作っていくものです。集合は、それに属するものと属さないものの区別がきちんと出来るものです。それと同じように、CSGで利用される形状(primitive)も、物体の内部と外部がきちんと区別出来るものであることが必要となります。
union | 和集合 | 与えられた形状を全て合体させた形状を作り出す。 |
intersection | 共通集合 | 与えられた形状が重なっている部分から出来ている形状を作り出す。 |
difference | 差集合 | 1番目の形状から2番目以降の形状を削り取ってできる形状を作り出す。 |
RenderManでCSG
RenderManでCSGを利用するためには、SolidBeginとSolidEnd命令を利用します。これは、WorldBeginとWorldEndのようにペアにして利用します。SolidEndは引数をとりません。SolidBeginの呼び出し方 |
SolidBegin operation |
RenderManで用意されてい形状は、Cylinderなどのように閉じていないものが多くあります。そこで、"primitive"を利用してプリミティブを作り出します。このときに、SolidBeginとSolidEndの間には様々な形状の定義を並べることが出来ますが、出来上がる形状は完全に閉じているものになっていることが必要です。SolidBegin〜SolidEndは入れ子構造にすることが出来ます。しかし、"primitive"の場合には、間にSolidBegin〜SolidEndを入れることは出来ません。
以下のサンプルでは、球と円柱を利用しています。Cylinderで作り出しただけでは、穴の空いた筒になっているので、閉じるためにDiskを利用して蓋をしています。「Disk -2 0.5 -360」は、法線ベクトルをz軸の負の方向にするために、-360としています。
Pixieは集合演算をサポートしていないようなので、Aqsisを利用してレンダリングを行っています。
union
球と円柱を合体させた形が出来上がります。普通に球と円柱を書いたのと変わらない画像となっています。unionのサンプル
# union01.rib : Display "uinon01.tiff" "file" "rgba" Projection "perspective" Translate 0 0 2 WorldBegin Rotate -90 1 0 0 SolidBegin "union" SolidBegin "primitive" Color [1 0 0] Sphere 1 -1 1 360 SolidEnd SolidBegin "primitive" Color [0 1 0] Disk 2 0.5 360 Cylinder 0.5 -2 2 360 Disk -2 0.5 -360 # 法線ベクトルをz軸の負の方向にするため SolidEnd SolidEnd WorldEnd
unionの実行例
intersection
球と円柱の共通部分となっている形状が出来上がります。intersectionのサンプル
# intersection01.rib : Display "intersection01.tiff" "file" "rgba" Projection "perspective" Translate 0 0 2 WorldBegin Rotate -90 1 0 0 SolidBegin "intersection" SolidBegin "primitive" Color [1 0 0] Sphere 1 -1 1 360 SolidEnd SolidBegin "primitive" Color [0 1 0] Disk 2 0.5 360 Cylinder 0.5 -2 2 360 Disk -2 0.5 -360 # 法線ベクトルをz軸の負の方向にするため SolidEnd SolidEnd WorldEnd
intersectionの実行例
difference
球から円柱を取り除いた形が出来上がります。穴が空いていることを確認するために、回転角度を上のサンプルとは変えています。differenceのサンプル
# difference01.rib : Display "difference01.tiff" "file" "rgba" Projection "perspective" Translate 0 0 2 WorldBegin Rotate -20 1 0 0 SolidBegin "difference" SolidBegin "primitive" Color [1 0 0] Sphere 1 -1 1 360 SolidEnd SolidBegin "primitive" Color [0 1 0] Disk 2 0.5 360 Cylinder 0.5 -2 2 360 Disk -2 0.5 -360 # 法線ベクトルをz軸の負の方向にするため SolidEnd SolidEnd WorldEnd
differenceの実行例
ちょっとした例題(灰皿もどき)
CSGの例題として、灰皿もどきを作ってみました。同じような形状を繰り返し使うときに便利な、ObjectBegin〜ObjectEndとObjectInstanceを使ってみました。例題のribファイル
# csg01.rib : CSG sample rib file Display "csg01.tiff" "file" "rgba" Projection "perspective" "fov" [60] Translate 0 0 7 WorldBegin Rotate -120 1 0 0 LightSource "pointlight" 1 "intensity" [6] "from" [0 0 2] LightSource "ambientlight" 2 "intensity" [0.4] Surface "plastic" ObjectBegin 1 # 小さな円柱の定義 SolidBegin "primitive" Disk 1 0.3 360 Cylinder 0.3 -1 1 360 Disk -1 0.3 -360 SolidEnd ObjectEnd SolidBegin "difference" SolidBegin "difference" SolidBegin "primitive" Color [0 1 0] Disk 1 4 360 Cylinder 4 0 1 360 Disk 0 4 -360 SolidEnd SolidBegin "primitive" Color [1 0 0] Disk 1.01 3.8 360 Cylinder 3.8 0.1 1.01 360 Disk 0.1 3.8 -360 SolidEnd SolidEnd TransformBegin Translate 0 -4 1 Rotate 90 1 0 0 Color [0 1 1] ObjectInstance 1 # 小さな円柱を作り出す TransformEnd TransformBegin Rotate 120 0 0 1 Translate 0 -4 1 Rotate 90 1 0 0 Color [1 0 1] ObjectInstance 1 # 小さな円柱を作り出す TransformEnd TransformBegin Rotate 240 0 0 1 Translate 0 -4 1 Rotate 90 1 0 0 Color [1 1 0] ObjectInstance 1 # 小さな円柱を作り出す TransformEnd SolidEnd WorldEnd
実行例
説明
ObjectBeginの呼び出し方 |
ObjectBegin sequencenumber |
ObjectEndの呼び出し方 |
ObjectEnd |
ObjectInstanceの呼び出し方 |
ObjectInstance sequencenumber |
- 灰皿の例題は、緑色の大きな円柱から赤色の円柱を利用してくり抜き、小さいな円柱の位置を120度ずつ移動させながら縁の部分を切り取ることで実現しています。
- OjbectBegin〜ObjectEndの間で定義した形状をObjectInstance命令で呼び出すことが出来ます。この例題では、小さな閉じた円柱をsequencenumberを1としたもので定義しています。
- 「ObjectBegin sequencenumber」のsequencenumberには0から5535までの数字を指定できます。
- それぞれのパーツの配置状況は下の図のようになっています。
Topページに戻る
2008年02月02日(土) 17:14:23 Modified by m_riho
添付ファイル一覧(全5件)
288a9e67.jpg (9.42KB)
Uploaded by m_riho 2008年01月06日(日) 01:19:19
Uploaded by m_riho 2008年01月06日(日) 01:19:19
97c24b44.jpg (8.84KB)
Uploaded by m_riho 2008年01月06日(日) 01:16:02
Uploaded by m_riho 2008年01月06日(日) 01:16:02
ecfc480b.jpg (5.60KB)
Uploaded by m_riho 2008年01月05日(土) 23:22:46
Uploaded by m_riho 2008年01月05日(土) 23:22:46
0f1daf4f.jpg (4.03KB)
Uploaded by m_riho 2008年01月05日(土) 22:50:32
Uploaded by m_riho 2008年01月05日(土) 22:50:32
02c7d547.jpg (5.36KB)
Uploaded by m_riho 2008年01月05日(土) 22:44:12
Uploaded by m_riho 2008年01月05日(土) 22:44:12