Topic 2 無限の選択肢を生み出す部屋設計
堅牢性と自由度を兼ね備えた柔軟なHDA構成
本プロジェクトは大きく3つの工程に分けて進められた。おおね時系列順に「プロップ制作」「和室の設計」「シーンの作成」と並ぶが、例えば終盤のブラッシュアップに応じてプロップが追加されるなど、ある程度並行しながらの進行となっている。全体のフローの策定と「和室の設計」をTAが担当し、プロップ・シーン作成実務にアーティストが随時参加した。検証プロジェクトという性質上メイン業務の傍ら少人数でスタートし、7〜8名を平均に適宜増減をくり返しながらの進行となった。プロップや和室などのプロシージャル化が10月半ばからスタートし、11月半ばにはそのバリエーション出しに着手している。このバリエーション出しの中でHDAの拡張やエラー修正、さらにUE4Pythonを用いたフローの検証も行われた。HDAは、各アーティストが担当したプロップ、それらを構成する小さなもの、また和室を出力する大規模なものまで多数作成された。「例えば障子をつくるHDAは、格子だけをつくるHDA、さらにその軸の一本をつくるHDA......と細かい機能単位でHDA化しています。ちょうどプログラミングで関数を細かく切り分けたり、クラスを継承しながら拡張していくイメージです」と、背景TAを務めた小出大翔士氏はふり返る。分業・保守に優れ、変更があればHDAファイルを更新することで適用箇所に波及する。更新のために個別にプロップを修正するといった雑務から解放される。
和室の構築は、Houdini Engineで連携するUE4上で行われる。起点となる「RoomSizeOutput」HDAがシンプルな面構成のオブジェクトを生成し、部屋の広さや各面のアトリビュートを決定。これを読みとりながら障子や襖、床の間、屋根、畳といった詳細がそれぞれに対応するHDAを用いて配置され、和室全体が段階的にディテールアップされていく。和室を出力するために必要なパラメータは全てUE4上からアクセスできるようになっている。完成した部屋へのライティングにも、プロシージャルなアプローチが取り入れられている。屋内照明は光源となるアセットに合わせて自動配置される。屋外はIBLの光源方向に応じてディレクショナルライトとスカイライトを作成、専用HDAを介してUE4に反映される。ライトベイクはUE4Pythonで自動化されており「実行しておけば何もせず一連の処理が行われるので、終業時に実行して次の結果を確認するなど効率的に運用できました」とは、エンバイロメントアーティストの中岡翔一氏。
全体のワークフロー
部屋の設計を中心としたフローチャート。大きく「プロップ制作」「和室の設計」「シーンの作成」の3工程に分けられる。プロップは、机など汎用性が求められるものはHDAで、それ以外はbgeo形式で保存される。設計フェーズは、畳の敷き方を起点に部屋のガイドを作成、各HDAへと処理が流れていく。各HDAはそれぞれ相互に作用することもあり、全体的設計をTAが組み上げつつ、個別のHDAごとにアーティストが分業。シーンの作成にはHoudini Engine for Unrealが使われており、和室のHDAをUE4に読み込むことで部屋の生成、マテリアルの適用、ライトの配置までが自動で行われる
Houdini Engineのパラメータ変更例
UE4上でHoudini Engineを使用し、和室をカスタマイズしていく作業の例。様々なパラメータを変更し、最終的にはUnreal Pythonでライトを自動配置してライトビルドするまでの様子を記録したもの
部屋の基礎となるHDA
部屋のベースを構成する「RoomSizeOutput」HDA。畳の敷き方や、側面に和室のどの要素を配置するか自由に選ぶことができるようになっている。Geometry Spread Sheet上では、和室を構成するための様々なアトリビュートを仕込んでいることが確認可能
畳の配置例
「Tatami Generator」で実行される畳の配置デモ
和室は「畳の数」と「敷き方」によって広さが決まる。「祝儀敷き」「不祝儀敷き」「巴敷き」の3パターンから好きなものを選ぶことができるほか、床は畳だけでなく板張りも用意されている
和室を生成するHDA「Washitu Generator」。和室を構成する各要素ごとにタブが分かれており、必要に応じて細かく設定できるようになっている
床の間の拡張と自動レイアウト
床の間を拡張するパラメータと自動レイアウトのシードをランダムにしたもの。床の間の拡張性と、小物が自動で配置されてる様子がわかる
HDAを機能ごとに細分化
和室HDAは個別の機能を受けもつ多数のHDAと連帯しており、機能ごとに関数を切り分けるプログラミング的な発想で構築されている。図はその一部だが、UV展開やベベル機能をもった棒を作成する「柱作成HDA」から、それを格子状に組み上げるHDA......などから障子作成HDAが構成されている。一方、障子のレイアウトを受けもつHDAも別に存在し、これは敷居作成HDAや、先ほども登場した「柱作成HDA」から成る。こうした細かな単機能HDAの積み重ねが和室の各構成要素を作成し、それらをまとめ上げるかたちで「和室生成HDA」が作られている
汎用性が考慮されたHDA
障子を生成する「Syouji Generator」HDA。様々な障子をつくれるように設計されている。前述の通り、「格子をつくるHDA」「柱をつくるHDA」と細かく分けられて再利用性を高めた構成となっている
「Syouji Generator」で生成された障子は、「Syouji Layout」HDAによって配置される。同HDAは障子だけでなく、襖、欄間、天袋なども含めてレイアウトする役割をもつ
「Syouji Generator」と「Syouji Layout」使用例
「Syouji Generator」と「Syouji Layout」のHoudini上での作業をキャプチャした動画。Syouji Generatorの汎用性とSyouji Layoutが障子、欄間、襖、天袋に使用されていることがわかる
バリエーションを豊かにする特殊なHDA
制作が進む中で、さらに豊富なバリエーションを得るための要望が随時寄せられた
印象的な丸窓や、雅やかな赤絨毯
テーマに合わせたマテリアルの自動切り替え
「Washitu Generator」にあるMaterialパラメータを変更することでテーマに合わせたマテリアルに一括で切り替えることが可能。マテリアル名の最後に_Modernや_Retoroという名前のサフィックスを付けることで管理している
プロシージャルによるパターン出しと自動ライトベイク
ライトベイク時には、ライトリークを防ぐために部屋を覆うボックスも自動生成される。光が差し込んでほしい障子のある側面や、生成結果に縁側が含まれる場合は、そこを避けるしくみ。図はわかりやすく半透明にしたもの
自動生成の例。シード値を変更するだけで、あらゆるパターンの和室が生成されるようになっている。後述するように、ライティングはリアルタイムレンダリングを意識し、IBLを設定すると、その高輝度部分から光源方向を判定しディレクショナルライトが配置される。これにより反射プローブよりも正しい反射が得られ、動的シャドウも扱える。和室の生成とその後のライトビルドはUnrealPythonによって自動化されている。ライトビルドの自動化に際しては一部UE4側の拡張も行われた
Unreal Pythonを用いた和室の自動生成
UE4のData Tableで各パラメータのパターンを定義し、それをUnreal Pythonでランダムに変更して和室を自動生成している。部屋の形、部屋に置かれる小物、ライティング、ライトビルド、スクリーンショットに至るまで全て自動で行われている