Unityによる映画クオリティのフルCGショートフィルム「Windup」のメイキング記事が公開されています。やはりシャドウの品質など設定を高くすればプリレンダリング品質になるというわけではなく、ゲームエンジン向けの調整をしないとプリレンダに近い品質にすることが難しいみたいですね。
https://cgworld.jp/feature/202009-cgw264t1wu.html
イービン監督の経歴と本作にかける想い
本作はプリレンダリングに基づく長編映画的な制作手法ではなく、AAA規模のゲーム開発の手法を採用して制作が進められた。
コンセプト&試作
脚本制作と同時並行でビジュアルイメージを固める
コンセプトアートの一例。ビジュアルイメージは脚本制作と並行して固めていった。
テストシーンでリアルタイムレンダリングの可能性を探る
映画全体のトーンの確認や、本制作時の技術的な問題点の洗い出しを行うために、テストシーンが制作された。
試作では現段階の作品の様子や技術的なボトルネックの突破などが示されるが、本作ではリアルタイムレンダリングをセールスポイントとして制作された。
キャラクター制作
柔軟に更新を重ねたキャラクター制作
前髪の形状など、制作中たびたび変更が加えられた。
マニュアルソートによる髪の毛表現
メッシュ形状がある程度決まったところで、髪の毛をつくり込んでいく。この際、重要になるのが半透明オブジェクトのソート方法だ。品質に優れる一方負荷も高いOIT(Order Independent Transparency)、軽快だがノイズなどの問題があるディザと比べ、品質・負荷のバランスがいいマニュアルソートが採用された。欠点は、制作の手間がかさむことだ。
ノーマルマップは十分なテクスチャサイズが必要になる一方、効果が実感できるのは髪の毛にカメラがかなり寄ったときに限られる。ラフネスにノイズパターンを用いることで髪の毛が多いように見せている。また、毛束から逸脱した細かい毛はXGenで表現した。
セーターの質感を追求
セーターは、デザイン上はシンプルなため複雑なシワなどをモデリングする必要はなかったが、だからこそ他のディテールでリアルさを引き出す必要があった。
ディテールテクスチャの例。 Maya、ZBrushで制作し、法線・AOなどのマップを256×256ピクセルで出力して貼り付ける。
けば(Fuzz)は板ポリをルーズに配置して表現している。このポリゴン数がキャラクター自体のポリゴン数を超えてしまわないよう注意し、LOD(0~2)を設定してカリングしている。
背景&植生
背景に這う木の根はHoudini Engineを用いてプロシージャルに作成している。
アニメ映画相当の植生アニメーション
植生のクローズアップや葉の動きもあるので、葉の1枚1枚まで緻密にモデリングしている。Shader Graphの機能を利用し、頂点アニメーションとHDRPのライティングモデルとの互換性をもった新たな植物用シェーダで表現した。
マテリアルライブラリ
AAA規模のゲーム開発と同じように、準備期間中にマテリアルを事前に大量に作成し、一望できるようにテスト用のマップに配置。
頂点カラーを設定した平面にレイヤードシェーダを割り当て、1つの平面状で同じ素材の異なる劣化度合いを見ることができるようにしてある。
リギング&アニメーション
リギングと形状破綻への対応
フェイシャルコントローラの選択UIに、Malcolmリグで知られるAnim Schoolが提供している「AnimSchoolPicker」を採用。布の柔らかな形状変形を表現するためにできるだけ多くのジョイントを使用し、FBXでUnityへ渡している。
フェイシャルはジョイントによるアニメーションとブレンドシェイプが併用された。さらに、顔・布そのほかに現れる形状破綻に対しては、PSD(Pose Space Deformation)やRBF(Radial Basis Function)を用いて自動修復されるしくみになっている。
Mayaで制作したアニメーションをUnityで受け取る
アニメーションをインポートする際に注意したいのは、デフォルトではアニメーションデータに圧縮がかかるようになっています。これをOFFにして読み込む必要があります。
シミュレーション結果をジョイントにベイク
作中の布はnClothでシミュレーションし、その結果をジョイントにベイクしてアニメーションさせている。
セーターへのシミュレーション結果のベイク。変換にはWebber huang氏のプラグインが使用された。ボーン数が多いほど変換精度は高く、ロスが少なくなる。
ショットワーク&レンダリング
ゲーム開発のスタイルを取り入れ自由度を向上
本作ではAAAゲームタイトルの開発スタイルを採り入れ、リアルタイムレンダリングによって各部門が常に最新の結果を見ることができるようにすることで自由度の高いプロジェクト運用を実現した。
Unityの特性を活かしたショットワーク
Unityでのライティング作業。HDRPのシャドウレイヤーを切り替えることで、キャラクターのライティングと落ち影を分離してそれぞれ調整して対応した。
カメラはMayaからFBXで出力される。このとき、命名規則とプログラマーによる対応で自動的に焦点距離・フレーム番号を読みとるしくみが構築された。
各部門が並行して更新し続けるシーン制作
シーン制作では、まずカメラマンが単純な歩き・走りのループでキャラクターの移動経路を確認し、並行してマテリアルライブラリから質感設定を開始。
アニメーションは順次更新され、ライティングではスポットライトが多数追加されていく。アニメーターは芝居に合わせて実際に演技をして動画を撮影、それを参考に精度を高めていく。
シャドウマップの設定
本作ではライトマップ解像度を8Kに設定していたが、これは全ライトの総和であり、合計がこれを超える場合にはリサイズされてしまい意図した解像度は得られない。重要でないライトの解像度を下げることで、効果的に影の解像度を上げた。
高負荷なテッセレーションへの対応
テッセレーションはメッシュを細分割してディテール感を高めてくれるが、負荷も高い。そこでPixel Displacementを用い、ライトのRender ModeをForcePixelにすることで、地面や壁などのほぼ平らなオブジェクトではテッセレーションと遜色ない仕上がりを低コストに得ることができた。最終的には、1シーンで最大2までのテッセレーションシェーダしか存在できず、広い範囲で用いないという規定を設けることとなった。