Search Unity

このブログシリーズでは、Unity のデモ動画『Book of the Dead』の制作に関するあらゆる側面について語っていきます。今回はフォトグラメトリアセット、樹木、VFX に焦点を当てます。本記事はシリーズの 4 本目の記事にあたります。以前に公開した、『Book of the Dead』のキャラクターに焦点を当てた記事と、コンセプトアートについての記事の 2 本の記事にもぜひ目を通してください。

はじめまして。Zdravko Pavlov です。VFX、動画作成、編集、グラフィックデザインのバックグラウンドを元に、CG/VFX アーティストとして仕事をしています。2014 年から Unity のデモチームで仕事をしており、『Viking village』、『The Blacksmith』、『ADAM』の様々なパーティクル表現、リジッドボディ力学、クロスのシミュレーションを担当しました。

『Book of the Dead』のデモはそれらとは少し違う仕事でした。私のこのプロジェクトにおける役割はフォトグラメトリのアプローチで様々な環境アセットを作ることだったのですが、これは私にとってまったく新しい領域でした。外で写真を撮ることを趣味としていたので、このような仕事を担当するのは願ってもいないものでした。木を作る?それはどのくらい難しいことなのでしょうか?ブログ記事の残りの部分で、このプロジェクトのプリプロダクションと製作のフェーズで私が学んだことのすべてを語りたいと思います。

フォトグラメトリのワークフロー

幸運なことに、現在はこのプロセスに関して価値ある情報がインターネットにあふれているので、私はインターネットの情報を使って学習を始めました。多くの記事には、まず必要なものは DSLR(Digital Single Lens Reflex:デジタル一眼レフ)、つまり 50mm の高級レンズを装備したカメラであると書いてあります。私はそのときには自分の好きにできる DSLR を持っていなかったので、最初のテストは手元にあった、16mm-35mm ズームレンズを装備した 24MP ミラーレス Sony a7II を使って行うことにしました。やってみたらこれがなかなかうまくいったのです!レンズの口径が大きくなるほど、歪みは大きくなりますが、そうした歪みは例えば Lightroom で修正することができます。ですが実際、修正はしないほうが良いに決まっています。フォトグラメトリのためのソフトウェアは撮った画像を大事に扱うことができます。高級なレンズは理屈の上ではより精密で、それを使えばより鮮明な画像を撮れるとされています。もしよく管理されたスタジオの環境で使うならばそういうレンズは素晴らしい性能を発揮しますし、そのような場合なら私も高級なレンズを使うことをおすすめします。ですが、屋外では高品質なズームレンズで狙った物体をフレームに収めるほうがより優れた結果を得られます。

初期検討段階の制作物の一部

人気のあるフォトグラメトリのためのソフトウェアをたくさん試してみた結果、そのうちのいくつかはとてもいい動作を見せました。そして、他と比べて目立って高いパフォーマンスを示し、大量の写真を処理してもRAM 不足に陥らないということで、RealityCapture を選びました。このソフトウェアを使って写真から再構築したアセットの持つディティールの程度は驚くべきものです。私はこのソフトウェアを使って、時にはトライアングル数が 1 億 8500 万にもなるモデルを扱い、そのジオメトリを PLY フォーマットで正常にエクスポートすることができたのです。


このパフォーマンスは必要な水準をもちろん満たしており、やや過剰と思うこともあった程でした。私が行った再構築はおおむね 5000 万から 9000 万トライアングルの範囲に収まる規模のものでした。また、GPU も最初は GeForce 980Ti を使っていましたが、あとになって GeForce 1080 にアップグレードしました。これも少しパフォーマンスの向上に貢献しました。

この仕事の途中で、カメラを Planar T* FE 50mm f/1.4 ZA レンズを搭載した 42MP Sony aRII にアップグレードしました。しかし、解像度を倍にして、超高鮮明度をうたう高級レンズを使っても、期待したような感動的な結果は得られませんでした。理由のひとつに、長い(そして、視野の狭い)高級レンズを使うと、うまく再構築を行うために必要な画像のオーバーラップを取るには 2、3 歩後ろに下がらなければならないということがあります。他の木や低木などいろいろなものがある森の真ん中で撮影を行う場合、これは常にできることではありません。また、高級レンズを使うと何ギガバイトもある画像データを管理、保存、処理する手間も倍になります。しかし、こうした苦労を払ってもより高精細のスキャン結果が得られるとは限らないのです。結局、画像を沢山撮ったほうがより良い結果に近づきやすく、それなら 24MP で撮ったほうが管理がしやすいのです。聞いてみれば当たり前と思うかもしれませんが、私の場合はまずそれを自分で試してみるまではわからなかったのです。

時間をかけて可能な限り多くのデータを集めることで最大の見返りが得られる

先に述べた通り、私はこの気が狂うほど密度の高いジオメトリのエクスポートに PLY フォーマットを使いました。RealityCapture の PLY エクスポーターには FBX にあるようなスケールや軸の方向の制御はついておらず、出来上がった PLY データはスケールが大きすぎたし回転してしまっていましたが、私は FBX より PLY のほうが良いと思いました。私はスケールや回転の問題に取り組むことを選んだわけですが、それは FBX を使ってテクスチャをベイクしようとするとたまにエラーが出るためでした。また、バイナリ FBX のエクスポートはあとになって実装されました。


あの数のポリゴンを扱えるソフトウェアはそう多くありません。そのため、私は単純にファイルを保存し、RealityCapture のデシメーション機能を使って同じモデルのローポリゴンバージョンを作りました。モデルはたいてい 100 万トライアングル程度に収まりました。また、こうして作ったモデルは ZBrush、MeshLab といった他のモデリングソフトで開くことができ、それらのソフトでリトポロジーやアンラップ処理を行うことができます。モデルによってリトポロジーの様々なテクニックを使い分けました。作業はたいてい ZRemesher を使って行い、ときどき手動で作業することもありました。

ここで、私は xNormal を使って拡散テクスチャをベイクしました。xNormal は数億のトライアングルを読み込んでも動作に支障は見られず、そうした重いデータを苦もなく扱います。私は頂点カラー情報を使って拡散テクスチャをベイクしました。ハイポリゴンバージョンの頂点の密度は頂点間の補間をまったく行わなくても綺麗で鮮明なテクスチャを生成するために必要な水準を上回っていました。RealityCapture に統合されていたアンラップ機能とテクスチャリング機能はまったく出番がありませんでした。

とは言っても、たとえば、何らかの理由で厚い雲の密度が十分でない、あるいは欠けている領域がある(下の画像のような状態)場合は、写真からテクスチャを投影するとそうした領域に余分なディティールを加えてしまうことになります。

到達できない領域が生じることもある

多くのフォトグラメトリのチュートリアルで述べられているように、オブジェクトをスキャンするときに直接的でとげとげしいライティングとシャドウを避ける場合は、これは最善の方法です。小さな岩をキャプチャしようとしている場合は、陰の中にそれを移動させたり、場合によってはスタジオに持ち込んで、ソフトボックスやターンテーブルを使って撮影することができます。木にはそういうことは出来ません。なので私は天気予報を見て曇りになってくれと願ったものです。しかし、曇天下であってもシャドウやアンビエントオクルージョンになってしまう部分が出てしまいました。このような問題は Unity の DeLighting ツールを使って解決しました。このツールが使うのは法線マップ、ベント法線マップ、それにベイク済みの AO だけです。ツールを使って、拡散光の値をそのまま保存しつつ、シャドウを除去することができました。

 

Unity の DeLighting ツールの動作

こうして完成させたアセットは Unity にインポートされ、動的なライティングやシェーダーを使ったテストに回されました。


モデルのそれぞれのパーツを分けてキャプチャできない場合もあります。障害物のせいですべてのアングルから撮影ができない場合もあります。また、急いでいたりバッテリーが切れかけていて、撮るべきものを撮らずに家に帰ってデータの処理を始めようとしたときにはじめてそのことに気付いたなんてこともあるでしょう。私はそんな失敗を何度も重ねたのですが、そういう場合でも Substance Painter を使ってスタンプをクローンし、欠損しているデータを修復することで、完全に作業を無駄にせずに済んだことがあります。

実際のゲームアセット

『Book of the Dead』の製作にあたっていたほとんどの期間、デモチームのスタッフに環境アーティストがおらず、ずっとその仕事を担当する人材を探していました。仕事の一部は外部の環境アーティスト Tihomir Nyagolov に委託しました。彼は環境に関する初期検討と詳細設計を担当しましたが、残った大部分の仕事はクリエイティブディレクター兼アートディレクターの Veselin Efremov と私が担当することになりました。私たちはそれぞれ、近くの森に出向いてフォトグラメトリに使うデータを収集していましたが、そこから自然と必要な最終版のゲームアセットを制作する作業へと移行していきました。私には環境アートのバックグラウンドはありませんし、ゲームの最適化や LOD に関する経験もまったくありませんでした。その時点では Tihomir が GrowFX で作ったプレースホルダーの木が配置されていただけで、私がそれを引き継ぎ、学びながら作業を進めていきました。

GrowFX はあらゆる種類の植物を作る目的では、本当にパワフルで何でもできるツールということがわかりました。GrowFX はシーンにある他のオブジェクトと相互にやりとりするので、あらゆる種類のユニークで自然な見た目の出来上がりを得ることができます。GrowFX はゲームアセットの制作を意識して開発されたツールではありませんが、十分にコントロールできるもので、この仕事にも使うことができました。GrowFX は 3ds Max のプラグインで、私は 20 年以上 3ds Max を使ってきたので、その取扱いには慣れたものでした。ただ悪いことに、GrowFX はカーブ編集ダイアログのような、あまり使いやすいとは言えない時代遅れの 3ds Max のコンポーネントに依存しているのですが、それでも手元のタスクにおいて良いツールであることには変わりなく、私はこのツールだけを使って作業を行うことができました。

『Book of the Dead』の森は針葉樹の多い森にしようと思いました。美しい森や公園が私の自宅近くにあったので、そこに「ハンティング」に出かけていき、景色をスキャンしました。そして GrowFX で作っていたものをスキャンしたモデルに組み合わせる作業を進めました。最終版の樹の幹はスキャンしたジオメトリと根元の部分のユニークなテクスチャと、それにプログラムで生成した幹を組み合わせて、根元から上はタイル化されたテクスチャで頂点まで覆うという形で構成されました。

根元の小さなパッチをクローンスタンプとしてタイル化し、木の頂点までタイル化したテクスチャで覆う

岩や樹の幹についてフォトグラメトリを行うことはよくあることですが、尖った松葉をス関するのはまったく新しい作業です。この領域は Quixel が踏み込んだ場所であり、Quixel は彼らの美しくスキャンされたアトラスを与えてくれました。Quixel はデモチームと連携して、『Book of the Dead』のために特別に草や低木、破片といった小さなアセットを無数に制作してくれました。

最初に述べたように、私のバックグラウンドは CG 制作であり、Multiscatter や Forest Pack Pro を使って、V-ray でレンダリングを行い、大規模な森を作ったことがあります。そのような仕事では、Quixel Megascans のアトラスをそのまま使うことができますが、『Book of the Dead』のようなリアルタイムプロジェクトでは、いくらか最適化を行う必要がありました。その最適化にはより大きなエレメント(枝、樹のてっぺんなど)の制作とそれらを新しいテクスチャに組みなおす作業、最初にスキャンしたデータを法線マップに変換する作業、ディプレースメント、トランスミッションなどが含まれていました。

既存の Megascans の法線データを少し修正して、見かけのボリュームの印象を強める

私は「Normal Thief(法線本歌取り)」のような、いろいろな法線編集テクニックや、他のカスタムビルドされた 3ds Max スクリプトを使って枝を幹になじませていきました。

頂点の法線を修正して枝を幹になじませる

このアプローチで、私はいろいろなタイプの松の樹を作ることができました。

私たちは森が「生きている」感じを出したかった。風はその実現に向けた非常に重要な要素でした。そして、私たちの環境アーティスト Julien Heijmans が作った風のアニメーションのソリューションをベースとした頂点シェーダーに合わせて樹木の設定が行われました。

ベクターフィールドを作成する方法は多数あり、私もいくつかの選択肢を検討していました。検討の過程で、私は Chaosgroup の流体ソルバー「PhoenixFD」を使い込んでいて、このソフトから出力できる利用可能なデータの種類を調べてみて、また出力したデータを Unity に取り込んでみることにしたのです。シーンジオメトリをエクスポートすることができ、そのデータを 3ds Max に FBX として取り込み、そしてその FBX に流体を流してみました。すると、植物の周りで流体が渦を巻き、乱れのある風のエフェクトが作られたのです。大きな木は小さな植物の覆いとなり、小さな植物へのエフェクトの影響は大きな木に比べると小さくなりました。

PhoenixFD の速度チャネルのスライス

私は PhoenixFD に統合されている再生コントロールを使ってシミュレートされたシーケンスをループさせてみました。

ベクター情報は PhoenixFD Texmap を通して読み取られ、標準化されてプログラムで生成された等値面の上に拡散テクスチャとしてつなぎこまれました。

ベクター情報は PhoenixFD Texmap を通して読み込まれ、標準化され拡散テクスチャとしてつなぎこまれた

シミュレーションの平面上のスライスの例

描画された画像のシーケンスは Unity に再度インポートされ、そこで最終版のテクスチャアトラスが構築されました。以前私はその作業を行う際には AfterEffects を使っていましたが、今は Unity に同じ作業のかなりの部分を自動化できるとても便利な Image Sequencer ツールが入っているので、Unity でこの作業を行っています。このツールはパリにいる Unity の GFX チームが開発している新しい VFX ツールのひとつです。

Image Sequencer の動作

生成されたテクスチャアトラスはシーンに配置されました。私は単純なボックスを作り、行おうとしていたシミュレーションの境界を定義して、また同じボックスを位置の目安として使いました。

誤解のないように述べておきますが、これは私たちがお見せした映画のようなティザー動画に含まれる一部のショットのビジュアルを一段上のレベルに押し上げる土台となった実験でした。もし Unity を映像制作に使おうとされているなら、私たちと同様に実験を重ねることをおすすめします。この実験が、メインのプロシージャルな頂点シェーダーをベースにした風のアニメーションのソリューションにつながっています。このソリューションは私たちのテックリードである Torbjorn Laedre がプロジェクトのために開発し、ティザー動画の多くのシーンで使われました。また、GDC で公開したコンソール版にも使われています。

後続のブログ記事で、Julien と Torbjorn が風の扱い方と、最終的に私たちが採用したソリューションについて説明してくれる予定です。

Unity が内部的に持っている、アニメーションするベクターフィールド

「巣箱(The Hive)」

私は早い段階から「巣箱」のアイデアの一部を形にし始めました。

MultiScatter で製作し、V-Ray でレンダリングしたコンセプト実証

初期のデザインが済んだあと、私は Unity アセットを作成するために、ゲーム内で使えるエレメントの制作に入りました。

PFlow を使って「巣箱」のクラスターを作成

Unity で構築された初期の「巣箱」のプロトタイプ

「狂人(The Screwies)」

「狂人」の群れを作るときに、私は身体のバリエーションについて検討を行いました。再び Chaos Group の PhoenixFD を使って、煙の流体シミュレーションを実行しました。それから、「狂人」のシェイプを切り出して、流体の温度に基づいて等値面を作りました。

PhoenixFD で製作したシェイプ検討のための製作物の一部

この方法では私たちは様々なシェイプを素早くプレビューすることができましたし、検討のために作った製作物は制作全般に渡って参考にしました。最終版の「狂人」のキャラクターモデルは Plamen (Paco) Tamnev が製作しました。このキャラクターモデルについては、彼自身による驚くほど詳しい解説がついたブログ記事で読むことができます。

滴る樹液のエフェクト

「狂人」の顔に滴る樹液を表現するために、私はまた PhoenixFD を使いました。まず小さなコンセプト実証を作るところから始め、その可能性と濃い粘液によって表現できることを探ることにしました。

PhoenixFD の FLIP(Fluid-Implicit-Particle)ソルバーが滴る樹液の表現に適しているか検証するためのコンセプト実証

全体的な結果と流体の動きにとても満足した私は実モデルの製作に移りました。シミュレーションで樹液があまりに多くの部分に分かれたり、雫のようにならないようにするのが目的でした。

滴る樹液のシミュレーションには 2、3 種類のバージョンが存在した

シミュレーション結果から、生成したジオメトリシーケンスから 1 枚のフレームを取り、それをリトポロジー処理にかけ、UV を作り、WRAP3 を使ってシーケンスのその他のシェイプに投影すればよいことになりました。結果として、同じトポロジーを使う一揃いのブレンドシェイプが得られました。

Unity に置かれたブレンドシェイプ

また、一部の木の幹の上で樹液のシミュレーションを実行することも試しました。

私たちは最終版のプロジェクトでは木の幹に樹液のシミュレーションを使いませんでした。しかし、スキャンされたモデルにディティールを加えたいときに有効な手立てであることはわかりました。


本シリーズの次の記事も楽しみにしていてください。次回は『Book of the Dead 』のために製作された環境アートについて、Julien Heijmans がその詳細を語ってくれます。

6 月 19 日から開催される Unite Berlin では『Book of the Dead』の環境をご自分で探検していただける試遊台をご用意しています。また Julien Heijmans がデモの環境アートに関するプレゼンテーションを行います。完全なスケジュールはこちらでご覧ください(英語)。

『Book of the Dead』の詳細はこちらのリンクからご覧ください。

 

 

コメント受付を終了しました。

  1. amine from tunisia

    6月 16, 2018 2:20 pm

    great blog and amazing work ; can’t wait to see the unite brelin and what will say there ; we hope the hole conference will be published on youtube

  2. Raees Rahim

    6月 16, 2018 1:24 am

    I’m quite new to any of this, but I really do enjoy these deep dives.
    Thank you

  3. Hi Zdravko, nice blog and very impressive work. I was especially interested reading about creation of trees. As I can see, there are two types of trees here, pines and spruces (conifers). The pines looks very impressive, with unique geometries, especially large variety of branches. However, it seems like the spruce model would need a bit more work. Ideally, it would be nice if spruces would be modelled in a similar way like it was done with pines. However, for a quick start, there would be still some improvements with GrowFX. For example, spruce would have its branches facing up in the upper part of the tree. And at the lower part of the tree branches are more massive and bending down. Only the endings of these massive branches are bending up. Making variety of spruces would be also very nice. Finally, at some point, in-depth tree asset creation guide would be helpful. As there is the whole book about photogrammetry, creating rocks and trunks becomes more straightforward. But many steps in creation of trees remains unclear.

    Wind simulation looks very impressive, can’t wait to see the next blog :) .

  4. Wow! Amazing info! What did you do with the terrain in book of dead as terrain in unity hdrp is not currently working, (eg. which shader did you use) ?