効率化と高品質化

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

本日のサンプルシーンファイル: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 ... }
	...
}
...
// 冗長(無駄に長い),非効率的

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

まあ,一度書くだけなら,#declare なんて使わずに, コピペ(コピー&ペースト)の方が早いかもしれない. しかし,一度書いて完成するなんてことは,まず,ありえない. 最初は面倒に思うかもしれないが, 将来的に楽をするために,#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	// 映り込み
  }
}

これで,鏡のように周囲が映り込むようになった. --- ぴかぴか.


透明物体

マテリアル(材質)を指定すれば, ガラスのような透明物体も表現できる.

例:

...
#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 には, 様々なテクスチャ,フィニッシュ,マテリアルが用意されている. マニュアル の項目「定義済みテクスチャ」,「フィニッシュ」,等を参照し, いろいろ試してみよう.

マニュアルの誤植訂正:誤 #include "Woods.inc" → 正 #include "woods.inc"

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

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


(c) 2016, yanagawa@kushiro-ct.ac.jp