効率化と高品質化

今回は,オリジナル部品を定義して, 複雑な形状のモデルを効率良く組み立てられるように工夫しよう. また,テクスチャとフィニッシュを使って, 作成したモデルを高品質にレンダリングできるように調整しよう.


作業の概要

サンプルシーンファイル(ダウンロード): 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回目,  〃  )
...
サンプルシーンファイル table.pov について, どんな物体が #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 ... }
	...
}
...
冗長(無駄に長い),非効率的

この羅列的な書き方でも,#declare したものと同じ画像は生成できるだろう. しかし,シーンファイル作成の手間と時間が増えてしまう. また,後々の手直しも嫌になってしまうだろうし, もし,直そうとしても逆に,別の間違いを増やしてしまいそうだ.

まあ,一気に書いて完成できるなら,#declare なんて使わずに, コピペ(コピー&ペースト)の方が早いかもしれない. しかし,現実的には,一気に完成なんてことは,まず,ありえない. 完成までには,試行錯誤が必要.
そこで,最初は面倒かもしれないが, 将来的に楽をするために, #declare を活用すべきだ. 要するに,初期投資.
ちなみに,学校での勉強も生活も, 面倒かもしれませんが, すべてが人生の初期投資なのですよ.
テクスチャとフィニッシュで高品質化

テクスチャ(模様)を貼り付けたり, フィニッシュ(仕上げ)を変更すると, 物体に現実的な質感を与えられる.

object { ...
	texture { テクスチャ名  幾何変換 }
	finish { 属性名    ... }
}

とりあえず,以下の通り, サンプルシーンファイルを書き換え, レンダリング結果の変化を観察して行こう.

まず,木目を貼ってみよう:

#include "textures.inc"	// 様々なテクスチャの組み込み
#include "woods.inc"	// 木目テクスチャの組み込み

...

// テーブルの配置
object { Table 
	// pigment { color White }	// 色指定を削除 or コメント化
	texture { DMFWood4 }	// テーブル全体に木目
}
texture については 教科書の chapter 6 や 巻末資料5 も参考にしよう. 木の他,石や金属などの素材もある.

木目はついたが,これでは何だかミニチュアっぽいし, すぐに折れそうな天板に見える.

では,木目の細かさと方向を変えてみよう:

object { Table 
	texture { DMFWood4  scale 0.3  rotate 90*y }
}
幾何変換(translate,scale,rotate)は, object だけでなく, texture に対しても指定できる.

これで,天板だけは少しは良くなった. しかし,全体的に同じ木目なので, テーブル全体を 一本の丸太から削り出して作ったように見える. また,木目が直線すぎる. これは不自然だ.

本物のテーブルと同じように, 脚と天板との間で木目の方向を変えよう:

// 脚のパーツ定義
#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 <...> }

ガラス瓶(手抜き版...注ぎ口が開いていない...)

ガラスのマテリアル名:

教科書の巻末資料5に紹介されているように, material ではなく texture のガラスもある. 光の屈折などリアルな表現が欲しい場合には, material を使うとお手軽.
本日の課題

サンプル table.pov を改造し, オリジナルのテーブルや椅子などのオブジェクトを作成せよ.

必ず,自作オブジェクトを #declare すること. そして,texturefinishmaterial, 等を適切に使用すること.

できるだけヒネリがあると良い. 同じテーブルにしても, 天板を円形にする, 天板を拡張式にする, 脚を折りたたみ式にする, 等. 短足化し座卓にするだけでは単純すぎる.
担当教員へレポートを送信

それと次回までに,自由制作のテーマを考えておこう.

練習問題

前回の練習問題で作成したシーンファイルについて, 部品分けして効率的に記述できないか見直してみよう.

または,新たに,複数の部品から成る物体や 複数の物体から成る風景を作成してみよう.

なお,POV-Ray には, 様々なテクスチャ,フィニッシュ,マテリアルが用意されている. 教科書の巻末資料5マニュアル の項目「14. inc ファイル」,「12.3 フィニッシュ」,等を参照し, いろいろ試してみよう.


金属製・ガラス製のマグカップ,
木製のテーブル,石製の床

机割に挑戦する
空手家なピク太郎