今回は,オリジナル部品を定義して, 複雑な形状のモデルを効率良く組み立てられるように工夫しよう. また,テクスチャとフィニッシュを使って, 作成したモデルを高品質にレンダリングできるように調整しよう.
サンプルシーンファイル(ダウンロード): table.pov
コマンド:
$ gedit table.pov & # シーンファイルの編集(モデリング) $ povray +P table.pov # 画像の生成(レンダリング) $ eog table.png & # 画像の確認
レンダリング結果:
初期状態:簡素な白いテーブル |
部品構成を理解,
外観を改良 → → → |
高級感・現実感のある木製テーブル |
CSG(merge, union, difference, intersection)で物体を自作し, その物体を複数個使いたい場合には,次のようにしよう. その物体を1回だけ作成し,名前を付けて登録しておき, それを複数回再利用する. 複数回の再作成ではない. たとえば:
シーンファイルには,次のように記述する: ↓ 良い例:
// 物体Aの定義(作成・登録,1回だけ)
#declare 物体A = CSG演算 {
object { 部品a ... }
object { 部品b ... }
object { 部品c ... }
...
}
// 物体Aの利用(配置,複数回)
object { 物体A ... } // (1回目)
object { 物体A ... } // (2回目,同じ物体を別の場所などに)
object { 物体A ... } // (3回目, 〃 )
...
それと,#declare しないと, シーンファイルがどれだけ長く複雑になってしまうだろうか? ↓ 悪い例:
CSG演算 { // 物体の作成・配置(1回目)
object { 部品a ... }
object { 部品b ... }
object { 部品c ... }
...
}
CSG演算 { // 同じ物体の作成・配置(2回目,同じ物体の作り直し)
object { 部品a ... }
object { 部品b ... }
object { 部品c ... }
...
}
CSG演算 { // 同じ物体の作成・配置(3回目,またも同じ物体の作り直し)
object { 部品a ... }
object { 部品b ... }
object { 部品c ... }
...
}
...
この羅列的な書き方でも,#declare したものと同じ画像は生成できるだろう. しかし,シーンファイル作成の手間と時間が増えてしまう. また,後々の手直しも嫌になってしまうだろうし, もし,直そうとしても逆に,別の間違いを増やしてしまいそうだ.
テクスチャ(模様)を貼り付けたり, フィニッシュ(仕上げ)を変更すると, 物体に現実的な質感を与えられる.
object { ...
texture { テクスチャ名 幾何変換 }
finish { 属性名 値 ... }
}
とりあえず,以下の通り, サンプルシーンファイルを書き換え, レンダリング結果の変化を観察して行こう.
まず,木目を貼ってみよう:
#include "textures.inc" // 様々なテクスチャの組み込み
#include "woods.inc" // 木目テクスチャの組み込み
...
// テーブルの配置
object { Table
// pigment { color White } // 色指定を削除 or コメント化
texture { DMFWood4 } // テーブル全体に木目
}
木目はついたが,これでは何だかミニチュアっぽいし, すぐに折れそうな天板に見える.
では,木目の細かさと方向を変えてみよう:
object { Table
texture { DMFWood4 scale 0.3 rotate 90*y }
}
これで,天板だけは少しは良くなった. しかし,全体的に同じ木目なので, テーブル全体を 一本の丸太から削り出して作ったように見える. また,木目が直線すぎる. これは不自然だ.
本物のテーブルと同じように, 脚と天板との間で木目の方向を変えよう:
// 脚のパーツ定義
#declare Leg = ... {
...
texture { DMFWood4 scale 0.3 rotate 91*x }
}
...
// 天板のパーツ定義
#declare Top = ... {
...
texture { DMFWood4
scale 0.3 rotate 92*y rotate 2*z
translate <0.0, -0.65, 0.1>
}
}
...
object { Table
// texture { DMFWood4 scale 0.3 rotate 90*y } // 削除 or コメント化
}
これで,組み立てた感じが現れた.
仕上げとして,天板をキレイに磨いてみよう:
#declare Top = ... {
...
finish { specular 0.8 } // ツヤ出し
}
これで(ちょっと分かりづらいが天板の端の方に,) ハイライト(光沢)が見えるようになった. つるつる.
さらに,ワックスがけしてみよう:
#declare Top = ... {
...
finish {
...
reflection 0.3 // 映り込み
}
}
これで,鏡のように周囲が映り込むようになった. ぴかぴか.
マテリアル(材質)を指定すれば, ガラスのような透明物体も表現できる.
前回の CSG 「ボトル」の改造例:
...
#include "textures.inc"
...
// ボトル形状の定義
#declare BottleShape = merge {
object { Disk_Y translate -1*y }
object { Sphere }
object { Disk_Y scale 0.4 translate 1*y }
}
// ガラスのボトルの定義
#declare Bottle = difference {
object { BottleShape } // 外部
object { BottleShape scale 0.95 } // 内部の空洞
material { M_Green_Glass } // ガラス
// textureではなく,materialですよ
}
...
// ガラスのボトルの配置
object { Bottle scale ... translate <...> }
ガラスのマテリアル名:
サンプル table.pov を改造し, オリジナルのテーブルや椅子などのオブジェクトを作成せよ.
必ず,自作オブジェクトを #declare すること. そして,texture,finish,material, 等を適切に使用すること.
それと次回までに,自由制作のテーマを考えておこう.
前回の練習問題で作成したシーンファイルについて, 部品分けして効率的に記述できないか見直してみよう.
または,新たに,複数の部品から成る物体や 複数の物体から成る風景を作成してみよう.
なお,POV-Ray には, 様々なテクスチャ,フィニッシュ,マテリアルが用意されている. 教科書の巻末資料5や マニュアル の項目「14. inc ファイル」,「12.3 フィニッシュ」,等を参照し, いろいろ試してみよう.
金属製・ガラス製のマグカップ, 木製のテーブル,石製の床 |
机割に挑戦する 空手家なピク太郎 |