今回は,オリジナル部品を定義して, 複雑な形状のモデルを効率良く組み立てられるように工夫しよう. また,テクスチャとフィニッシュを使って, 作成したモデルを高品質にレンダリングできるように調整しよう.
本日のサンプルシーンファイル:table.pov
CSG(merge, difference, intersection)で物体を自作し, その物体を複数個使いたい場合には,次のようにしよう. その物体を1回だけ作成し,名前を付けて登録しておき, それを複数回再利用する. 複数回作成ではない. たとえば:
シーンファイルには,次のように記述する:
// 物体の定義(作成,登録) #declare 物体名 = CSG演算 { object { 部品a ... } object { 部品b ... } object { 部品c ... } ... } // 物体の配置 object { 物体名 ... } // (1個目) object { 物体名 ... } // (2個目.同じ物体を別の場所などに) object { 物体名 ... } // (3個目. 〃 ) ...
サンプルシーンファイルについて, どんな物体が #declare されているか調べてみよう.
それと,#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 ... } ... } ... // 冗長(無駄に長い),非効率的
この書き方でも,同じ画像は生成できるだろう. しかし,シーンファイル作成の手間と時間が増えてしまう. また,後々の手直しも嫌になってしまうだろうし, もし,直そうとしても逆に,間違いを増やしてしまいそうだ.
テクスチャ(模様)を貼り付けたり, フィニッシュ(仕上げ)を変更すると, 物体に現実的な質感を与えられる.
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 // 映り込み
}
}
これで,鏡のように周囲が映り込むようになった. --- ぴかぴか.
マテリアル(材質)を指定すれば, ガラスのような透明物体も表現できる.
例:
... #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 } // ガラス } ... // ガラスのボトルの配置 object { Bottle scale ... translate <...> }
オリジナルの住宅設備(本棚,タンス,流し台,等)を作成せよ. ただし,#declare を適切に利用すること.
前回作成したシーンファイルについて, 部品分けして効率的に記述できないか見直してみよう.
または,新たに,複数の部品から成る物体や 複数の物体から成る風景を作成してみよう.
なお,POV-Ray には, 様々なテクスチャ,フィニッシュ,マテリアルが用意されている. マニュアル の項目「定義済みテクスチャ」,「フィニッシュ」,等を参照し, いろいろ試してみよう.
それと次回までに,自由制作のテーマを考えておこう.