自由制作(設計・試作・検討)

自由制作の題材を決めよう. そして,いきなり完成品を目指すのではなく, まずは,試作・検討しよう.

より素晴らしい作品を生み出すためには, 事前の周到な準備が重要だ. 「急がば回れ. 備えあれば憂いなし.」

自由制作の作業計画

スケジュール:

試作段階では全体的な構成だけ (主要なキャラクタやアイテムの大体の形状・配置・配色など) に集中するとよいだろう. また,後々の調整作業を効率よく進めて行けるようにするため, 試作段階から #declare を活用しておこう.

うまく行きそうにないと思ったら,すぐに作り直そう. 早目の決断が重要.

シーンファイルの編集中には,PC の不調に備えて, こまめに「保存」しておこう.

詳細な形状・配置・テクスチャ・フィニッシュの微調整については, 最終的な実作段階(仕上げ段階)で,時間と相談しながら進めて行こう.

このような段取りで作業を進めておけば, 途中で時間切れとなってしまっても, それなりに,ある程度は全体像が出来ているハズだ. 美しく「完璧」は無理. 不細工でも「完成」が重要.
最初から細部にこだわっていると, 「未完成」のまま時間切れとなってしまうだろう. これは最悪.

なお,形状がまだ単純な段階から部品分けしておくのは, ただ面倒なだけに思えるかもしれない. しかし,最初に適切に部品化しておけば, 形状が複雑化してきたときに, 編集作業を格段に楽にできるようになる. つまり,部品化の有無によって, 作品の最終的な完成度には大きな差がつくことになってしまう.

シーンファイルのインデント

シーンファイルの編集時には適度に改行し, 各行のインデント(字下げ,段落)を整えよう:

#declare MyObject = merge {
	object { Sphere
		translate <...>
		...
	}
	object { ...
		...
		...
	}
	...
}

インデントのルール

このように記述しておけば, merge とか object とか texture とかの 括弧「{ ... }」の左右の対応を確認しやすく, エラーを見つけやすくなるし, そもそも,エラーを増やさずに済む.

括弧の閉じ忘れ防止のため, 「{」を書いたらすぐに「}」を書いておく, という技を癖にしている人もいる.

もちろん,一行に収まるような短い object については, 括弧内を複数行に分ける必要はない:

object { MyObject translate <...> ... }
05月13日(水)の課題

作品の構想を報告せよ.

自由制作テーマ:

  1. 次世代モビリティ

    未来的な移動手段 に関連した風景を自由な発想で創造せよ. 既存のアイディアの例: 小型立ち乗りEV悪路移動用馬形ロボット空飛ぶクルマウイングスーツ宇宙エレベータ, etc.

  2. 想像オリンピック 202X

    オリパラ不採用や架空の種目でも OK. コロナ禍でも奇跡的に開催された東京と北京でのオリンピック・パラリンピック... そして一昨年 2024 夏はパリ, 今年 2026 冬はミラノ・コルティナで通常開催. スポーツ競技に関連した風景を自由な発想で創造せよ. オリパラ不採用や架空の種目でも OK.

上記の2つのジャンル(抽象的テーマ)から1つを選択し, さらに,自分自身の具体的テーマを考案しよう.

人間の CG 化は難しいので... ピクトグラム男(棒人間) を利用して OK.

注意: 作品の題材については必ず, 一般人が理解・評価できる内容とすること. (作品は,高専祭やオープンキャンパスなどで一般公開されるかもしれない. 見られても恥ずかしくないモノを作ろう.)

ヲタな(個人的過ぎる趣味の)ネタ, 内輪受け狙いのネタ, 公序良俗に反するネタ, 等は禁止. もちろん,過去作品・他者作品のパクりも不可.

担当教員へレポートを送信

構想がまとまり次第,試作を開始しよう. シーンファイルについては,前回の sample.pov 等を元にして, ファイル名を変更すればよいだろう.

gedit で sample.pov 等を開いておき:
[Ξ]→[名前を付けて保存]→名前:○○.pov

なお,完成作品に対する教員による評価では, merge,union だけでなく difference,intersection が適切に利用されていると 高得点となる.

05月20日(水)の課題

(次回提示予定)

補足情報1:曲面体各種

曲面が滑らかにつながった形状の作り方を紹介しておく.

ソースコード断片と説明レンダリング結果
// 卵形(半球の組み合わせで自作)

// 半球の定義(+y方向の半球)
#declare HemisphereY = difference {
	object { Sphere }
	object { Plane_XZ }
}

// 卵形の定義
#declare Egg = union {
	object { HemisphereY scale 1.5*y }
		// 上部(+y方向)だけ細長く
	object { HemisphereY scale -1*y }
		// 下部(-y方向)は球のまま
}

// 卵形の配置
object { Egg pigment { color White } }
// 角丸の直方体(定義済みオブジェクト)
// Round_Box_Union(頂点1,頂点2,角の半径)
// または,Round_Box_Merge(頂点1,頂点2,角の半径)
// (不透明物体の場合,UnionとMergeは,どちらでも同じ.
// 少しだけ短い記法として,Round_Box(..., 0)
// または,Round_Box(..., 1) でもOK.)

object { Round_Box_Union(<-1, -1, -1>, <1, 1, 1>, 0.0)
	pigment { color White }
	translate -3*x
}			// 半径 = 0 の場合,Cube と同じ

object { Round_Box_Union(<-1, -1, -1>, <1, 1, 1>, 0.2)
	pigment { color White }
	translate 0*x
}

object { Round_Box_Union(<-1, -1, -1>, <1, 1, 1>, 0.4)
	pigment { color White }
	translate 3*x
}

// 角丸直方体は Cube と Disk_* と Sphere の組み合わせで自作もできる.
// (前回のテーブルの天板 Top を参照.)
// 角丸の円柱(定義済みオブジェクト)
// Round_Cylinder_Union(底面中心点,上面中心点,角の半径)
// または,Round_Cylinder_Merge(底面中心点,上面中心点,角の半径)
// (その他,Round_Boxと同様.)

object { Round_Cylinder_Union(<0, -1, 0>, <0, 1, 0>, 1, 0.0)
	pigment { color White }
	translate -3*x
}			// 角の半径 = 0 の場合,Disk_Y と同じ

object { Round_Cylinder_Union(<0, -1, 0>, <0, 1, 0>, 1, 0.2)
	pigment { color White }
	translate 0*x
}

object { Round_Cylinder_Union(<0, -1, 0>, <0, 1, 0>, 1, 0.4)
	pigment { color White }
	translate 3*x
}

// 角丸円柱は Disk_* と torus の組み合わせで自作もできる.
// 角丸の円錐(定義済みオブジェクト)
// Round_Cone_Union(底面中心点,底面半径,上面中心点,上面半径,角の半径)
// または,Round_Cone_Merge(底面中心点,上面中心点,角の半径)
// (その他,Round_Boxと同様.)

object { Round_Cone_Union(<0, -1, 0>, 1, <0, 0, 0>, 0.5, 0.0)
	pigment { color White }
	translate -3*x
}

object { Round_Cone_Union(<0, -1, 0>, 1, <0, 0, 0>, 0.5, 0.2)
	pigment { color White }
	translate 0*x
}

object { Round_Cone_Union(<0, -1, 0>, 1, <0, 0, 0>, 0.5, 0.4)
	pigment { color White }
	translate 3*x
}

// 角丸円錐は Cone_* と torus 等の組み合わせで自作もできる.
// かなり大変だけど...

これらの他,回転体,角柱,球スイープやブロブも便利かもしれない. 詳しくは, 利用参考マニュアル Geometric Shapes を参照せよ.

補足情報2:凹凸の表現

物体によっては,CSG で作成した形状のままでは, 表面が滑らか過ぎて不自然な感じがするかもしれない. 形状のノーマル(法線;表面の方向)にパターンを設定すれば, 物体の表面に微妙な凹凸感を与えることもできる. (ただし,実際に形状を変えているわけではなく, あくまでも,変わったように見せかけているだけ. 明確な凹凸形状を表現したい場合には, やはり,CSG で整形する必要がある.)

この作業は,現在の試作段階では不要. 最終的な仕上げ段階で,必要に応じて,採り入れてみよう.
...
// マグカップの定義
#declare Mug = ...

// ガラスのマグカップ(凹凸なし)
object { Mug material { M_Glass3 }
	translate ...
}

// ガラスのマグカップ(凹凸あり)
object { Mug material { M_Glass3 }
	normal { bumps 0.2 scale 0.2 }	// コブ追加(大きさ 0.2,間隔 0.2)
	translate ...
}

// 金属のマグカップ(凹凸なし)
object { Mug texture { Silver1 }
	translate ...
}

// 金属のマグカップ(凹凸あり)
object { Mug texture { Silver1 }
	normal { dents 1.0 scale 0.1 }	// ヘコミ追加(大きさ 1.0,間隔 0.1)
	translate ...
}
...

ノーマルの設定は,テクスチャやマテリアルと同じ感じで記述すればよいし, テクスチャやマテリアルと組み合わせることもできる. 詳しくは,利用参考マニュアルの 12.2 ノーマルを参照. なお,scale の拡大率として,スカラ(単独の数値)ではなく, ベクトル(<x, y, z>)を指定すれば, シワとかヒビのようなものも表現できるかもしれない.