Unity を検索

ArtEngine の Chrome Ball ノードによるフォトメトリックステレオを使って、リアルなマテリアルを作る

2021年12月2日 カテゴリ: Engine & platform | 12 分 で読めます
hero image
hero image
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

Chrome Ball ノードを使ったフォトメトリックステレオをご紹介します。これは、どんな表面からでも驚くほど写実的なオリジナルの物理ベースレンダリングマテリアルを作る便利な手段です。

Chrome Ball ノードの概要

この新しい ArtEngine ノードは、さまざまな角度から光で照らされた静止した表面にクロムボール(光を反射する球体)を置いたところを撮影した複数の写真を解析して、詳細なアルベドマップと法線マップを自動的に生成します。

このフォトメトリックステレオ法を使えば、屋内外の表面をより迅速にキャプチャして、独自の高品質な PBR 素材を作成することができます。

必要なもの

必要なものは、カメラ、三脚、光源、光を反射するボール、暗い環境、そしてもちろん ArtEngine です。

手法の概要

光があまり入らない撮影環境を準備し、クロムボールを置いて固定したカメラで 4 〜 16 枚撮影します。撮影のたびに、光源の位置を変えます。コンピューターに戻って、マスクを追加し、画像を ArtEngine に読み込み、ノードを実行します。ボールをクロップすれば完成です。

仕組み

それぞれの画像のクロムボールの反射を利用して光の方向を推定しています。すべての画像を分析することで、ArtEngine は正確な表面特性を持つ法線マップとアルベドマップを生成することができます。

これが ArtEngine にどのような機能を付け加えるか

リアルさを追求するアーティストやテクニシャンにとって、現実世界の表面に見られる微妙で粗いディテールを捉えることが非常に難しい課題として立ちはだかります。実際、カスタム機器が必要になることも多々あります。

異なるライティング条件で物体を観察することで、表面の法線を推定することができます。この手法は「フォトメトリックステレオ」と呼ばれています。ArtEngine の Multi-angle to Texture ノードはこの手法をサポートしていますが、厳密なライティング角度が必要となるため、カスタムのスキャンリグを使って作業が行われることもあります。

しかし、Chrome Ball ノードによるフォトメトリックステレオでは、これまでと同じようなプロフェッショナル水準の結果をもたらしながらも、プロセス全体がより早く、安価で、柔軟になっています。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

始めよう

フォトメトリックステレオを実際に試すために必要なものの詳細なリストは以下の通りです。

  • カメラ:リモコンまたはタイマーレリーズ付きのもの
  • 三脚:加えて、地上を撮影する場合はブラケットやエクステンションも必要
  • 光源:十分な明るさを出せる手持ちライト、フラッシュライト、またはフラッシュ(レンズバンディングのない LED)
  • クロムボール:光を反射する球体(磨き上げられたステンレスや黒曜石などでできた球体)
  • ソフトウェア:ArtEngine

 

クロムボールの選び方

球体は磨かれていて光をよく反射するものを選びましょう。選択肢としては以下のものがあります。

  • ステンレス:磨き仕上げまたはクロム仕上げのソリッドベアリングボール
  • ガラス:黒曜石(真っ黒なもの)
  • スヌーカー・ビリヤード用のボール:フェノール樹脂またはポリエステル(真っ黒なもの)
  • おすすめの大きさ:直径 2 ~ 5cm
Black snooker balls
黒いスヌーカーボール(左、ポリエステル)と黒曜石の球体(右、ガラス)を並べたところ。どちらも直径 5cm。ここに挙げたどの素材のボールを使っても、ほとんどのシナリオで同様の結果をもたらすと思われる。

スキャンの仕方

光源は手持ちでも大丈夫です。結局、厳密なライティング角度は求められないからです。あとは撮影環境の周りを時計回りまたは反時計回り(または両方の向きを混ぜてもよい)に回るだけです。

Top view
上から見た図:撮影環境の周りを一周する間に、そこから光を当てる可能性のある位置を示したもの

セッション中は、光源を動かす皆さん自身が動くのと、光源の位置を変更する以外は、何も動かしてはいけません。

撮影するたびに光源を表面の中心に向け、一定の距離を保ちます。

三脚の影が撮影環境に落ちないように注意してください。

Side view
適切な角度で光を当てているところを横から見た図

簡単にするために、光源とカメラはスキャンの中心からほぼ等距離になるようにします。

撮影環境の周りをまわっている間は、スキャンの中心から垂直方向に約 45° のライティング角度を維持するか、または図の中の「safe zone」内にいるようにします。

シャッターを切るたびに光源を固定します。

一般的なガイドライン

ライティング

撮影環境には光が当たらず、暗ければ暗いほど望ましいです。できるだけ夜の屋外や暗い部屋で撮影を行うようにしましょう。自分が持っている光源が主な光源でなければなりませんが、夕暮れや月光程度の環境光があっても一般的には問題ありません。 

分析のためには、光が表面を照らし、球体上に明確に光を反射しているとわかる点を作る必要があることを覚えておいてください。レンズバンディングのない明るい LED トーチがおすすめです。また、レンズを外して LED を露出させることができるトーチもあります。このような道具を使えば、屈折のない明るい光源を得ることができます。

カメラ

一度設定したカメラは、セッションの間はずっとしっかりと固定されていなければなりません。タイマー式のインターバル撮影機能やリモコンを使ってシャッターを切りましょう。

露出

また、カメラの露出を設定して、光をなくしたときに黒くレスポンスが出るようにするのも良い方法です。そして、光を当てた状態で写真を撮ります。

三脚

カメラは三脚などでしっかりと固定し、撮影環境にさまざまな方向から光を当てられるようにします。

スキャン表面領域

大きな面積をスキャンする場合は、より強い照明が必要です。また、カメラの距離が長くなれば、より大きなクロムボールが必要になるかもしれません。

(相対的な)球体の大きさ

スキャンされた球体の画像は、分析に十分な鮮明さを持っていなければなりません。これには 3 つの変数が影響します。すなわちカメラの距離、画像の解像度、そして球体の物理的な大きさです。球体自体にブロックノイズが発生してしまうと、精度が落ちてしまいます。ほとんどの場合、推奨される直径は 2 ~ 4cm です。滑らかな表面では、安定性のためにワッシャーを使用してください。球体を配置する際には、磨いて汚れを落としておくとよいでしょう。

スキャンの数

最大で 16 枚の画像を処理することができます。求める臨場感に応じて使うべき画像の数は変わりますが、最低でも 4 回は撮影することをお勧めします。1 周した後に撮影した領域に重なりがあっても全く問題ありません。  

ArtEngine での処理

スキャンが終わって画像ができあがったら、あとは ArtEngine で加工するだけです。

分析を行うためには、ボールの位置を示す簡単なマスク画像が必要です。カメラ、球体、表面自体は静止しているので、入力されたスキャンのうちどれか 1 つを使って、球体のサイズと位置を示す白い円板の入った黒いマスクを作成することができます。マスクは 100% 白黒(グレートーンは不可)にしてください。

ArtEngine では、任意の画像を読み込んでこのマスクを作成します。そして、Mask Paint ブラシのサイズ(直径)を調整し、影を無視してボールを正確に覆うようにします。

球体がスキャンの中心付近に配置されていないと、レンズの歪みによって球体が細長く見えることがあります。もしそうなっている場合は、少し中心寄りにずらしてください。なお、楕円ではなく、正円の円板を作ることが重要です。また、細かい部分まで描き込むことにこだわるのもやめましょう。

次に、このマスクをスキャン画像と同じフォルダーに、ファイル名に「mask」と入れて出力します。ArtEngine では、自動的に白黒画像として保存されます。これで、画像を処理して PBR マテリアルを作成する準備が整いました。

画像のインポート

標準の Multi-Angle to Texture ノードでは各画像が入力ピンに配線されていますが、Chrome Ball ノードでは、入力ピンを使うか、または入力フォルダーを参照するかをノードのプロパティパネルから選択できます。

プロパティパネルには Mirror Shape、Shadow Strength、Normal Gradient の 3 つの設定があります。

Proporties panel

Mirror Shape(ドロップダウン)

これは、球体と半球のどちらを使用したかを指定するためのものです。これはオブジェクトの高さをアルゴリズムに伝えるための設定で、球体を選べば直径程度、半球を選べば半径程度の高さであるとアルゴリズムは判断します。Mirror Shape を適切に設定することで、正確な計算が可能になります。光を反射する半球は見つけるのも作るのも難しいですが、使うと影が少なくなります。

Shadow Strength(スライダー)

光を反射する球体を使ってアルベド画像を作成する場合、その計算精度に関する情報はすでに得られています。この情報をもとに、アルベド画像の誤差を補正することができます。一般的には、影と光沢のトレードオフになります。Shadow Strength を上げると影が多くなり、光沢がなくなります。逆に下げると、結果も逆になります。このオプションは法線の計算やアルベドの基礎となる部分には影響しないため、この値を変更した後の再計算は最適化されています(範囲は 0 ~ 1)。

Normal Gradient Removal(スライダー)

これは、出力として得られる法線マップ(範囲は 0 ~ 1)に、法線を考慮したグラデーション除去を適用します。このノードは、出力を 2 つの独立したマップにすることも、1 つのマテリアルにすることもできます。

Node with Material output (left) and with Bitmap output (right)
マテリアルを出力するノード(左)とマップを出力するノード(右)

ノードを実行すると、入力フォルダー内の最初の 16 枚の画像(マスクも含む)がアルファベット順に処理されます。画像の数が少なすぎたり、マスク画像が存在しない場合、ノードはエラーを報告するか、結果を出力しないという動作をします。

マテリアルが生成されると、ArtEngine の能力をフル活用できます。処理を行った Chrome Ball をマテリアルから取り除くだけで、タイル状にしたり、バリエーションを追加したり、ブレンドを調整したりすることができます。

処理を行った Chrome Ball をマテリアルから取り除く

処理を行った Chrome Ball を取り除く最も便利な方法は、クロップすることです(マテリアルをクロップして正方形にする)。

クロップせずに手動で削除するには、まず Clone Stamp を使って、アルベドマップから削除します。その後、ノードを実行すると、法線マップから自動的に削除されます。

また、ArtEngine の AI 機能である Mutation や Seam Removal ノードを利用して、ボールのある部分を新しい画像データに置き換えることもできます。

スキャンセットとマスクの例

Chrome ball scan
セット内のスキャン画像のうち 1 枚(左)とそのセットのマスク(右)

なお、画像は正方形である必要はありませんが、マスクを含めたすべての画像の寸法が同一である必要があります。

Example of input folder with mask
11 枚のスキャンデータとマスクを含む入力フォルダーの例。マスクファイルには「mask」の文字が含まれている必要がある。

この記事をお楽しみいただけたら幸いです。また、ArtEngine の Chrome Ball を使ったフォトメトリックステレオ法で作成された素晴らしいマテリアルにお目にかかることも楽しみにしています。

私たちの Discord チャンネルで開かれている、コミュニティでのディスカッションや Q&A にもぜひご参加ください。この技術に磨きをかけるためのご提案もお待ちしています。

まだ ArtEngine をお持ちでない方は、こちらのページからライセンスを入手してください。

2021年12月2日 カテゴリ: Engine & platform | 12 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック