V-Ray 5, update 2で白髪シェーディングが改良された話

V-Ray 5, update 2のヘアシェーダーで、明るく白いヘアーシェーディングの表現改善に取り組みました。実はとても難しいこの課題をどのように克服したかを解説します。


この記事はChaos社 Mayaデベロップメントチーム Alexander Yolov氏による解説記事を日本語訳したものです。

生理的に正しいヘアシェーディング

Chaos社は、ユーザーが抱えるコンピュータグラフィックスの問題を解決するのが大好きです。また、ユーザーに直感的なワークフローを提供することを自社製品の哲学としています。物理的に正しいヘアシェーディングはVFXアーティストにとって常に課題であり、現在のV-Rayには VRayHairNextマテリアルを導入して、実際の髪の生理機能に基づいた使いやすいコントロールを備えたソリューションを導入しました。

このVRayHairNextヘアシェーダーにはさらに改良が加えられています。たとえば、V-Ray Next、update1でグリントとグリッターを追加した他、V-Ray 5, update2 では、非常に明るいヘアカラーのレンダリングのリアリズムが向上しています。これは現在V-Ray for MayaとV-Ray for 3ds Max、V-Ray 5 for Houdiniでのみ利用可能でその他のV-Rayで間もなく利用可能になります。


Rayをトレースしましょう

メインの改良話に飛び込む前に、問題と解決策をよりよく理解できるように、いくつかの一般的な概念を見てみましょう。

レイトレーシングは、カメラからシーンに一次光線と呼ばれるものを撮影し、Rayが遭遇するものに関する情報を収集し、これを使用して画像内のすべてのピクセルの最終的な色の値を決定することによって機能します。Rayがサーフェスに当たると、反射、屈折、または終了する可能性があります。

反射および屈折イベントは、一般にバウンスと呼ばれます。跳ね返る毎に”Shadow Ray”がライトに向けて投影され、サーフェスが直接照らされているのか、別のオブジェクトの影になっているのかを判断します。簡単に言うと:

・Shadow Rayが光源に当たった場合、サンプリングされた表面が影になっていない事がわかります。
・Shadow Rayが不透明なオブジェクトに当たると、サーフェスが影になっている事がわかります。
・Shadow Rayが半透明の表面に当たる場合は、それに応じてピクセルの色に対するRayの寄与を減衰させる必要があります。
・簡単にする為に、コースティクスやその他の影響は無視します。


なぜヘアーのシェーディングは難しいのか?

ヘアーのシェーディングも同じアプローチを利用しますが、ヘアーをシェーディングすることにはいくつかの課題があります。

Rayが髪の毛で跳ね返り始めると、ジオメトリ密度が高い為、跳ね返りの最大制限(V-Rayデフォルトでは10)にすぐに到達します。これにより、ライトに当たって髪の色に寄与する前にRayのトレースが終了します。ユーザーはバウンスの数を増やすことができますが、これによりレンダリングが大幅に遅くなる可能性があります。

各バウンスはシャドウレイを投影しますが、同じ密度の関係でライトに当たる可能性は非常に低くなります。つまりオブジェクト(毛)が多すぎる事になります。

問題は、毛が多いほど Rayが毛から「逃れて」ライトに到達する可能性が低くなるため、髪の正しい照明と陰影を計算できなくなる事です。言い換えれば、ヘアーはシーン内の光エネルギーを十分に活用することができず「エネルギーを失う」と言えます。最終的な結果として、毛の量が最も多い領域は、通常、予想よりも暗く(見た目が黒くなる)なります。


白髪の何が特別なのか?

上記のようなライトへのRay到達不足による非現実的な「黒ずみ」は、黒、茶色、またはその他の暗いヘアーカラーでは簡単に見られません。「黒ずみ」はそこにありますが、髪の毛がすでに暗くなっているため、あまりはっきりしていないだけです。一方、明るいヘアーカラーの場合、特にメラニンの設定が0.2以下の場合、本来よりも暗く見える可能性が高くなります。

解決策

これまでこの明るいヘアーの黒ずみを消す為の典型的な解決策は、ヘアーのバウンス(反射)の数をデフォルトの10から30または50の値に上げることでした。これはレンダリングに時間がかかり、必ずしも真にリアルな結果を生成するとは限りませんでした。それを改善する方法はあったことを意味しますが、それはあまり好ましくありません。

Chaosでは時間をかけて、これを解くためにさまざまなアプローチを試みてきました。このエネルギー損失を補うが、それでも異常な量のRayの跳ね返りを追跡することによるパフォーマンスへの影響を最小限に抑える実用的な解決策が見つかるまで、私たちは落ち着きませんでした。

最後のバウンス(V-RayHairNextシェーダーのBouncesパラメーターによって制御される)でRayを終了する代わりに、髪を透明として扱う事ができると考えました。これによりRayが髪から逃げ出し、ヘアーの色に寄与する可能性のあるライトを見つける可能性が高くなります。これは後で私たちのテストで確認され、うまくいきました。

この新しい動作をオンまたはオフに切り替えるために、V-Ray 5, Update 2では、V-RayHairNextマテリアルに新しい「エネルギーの補正(Compensate energy)」オプションが導入されています。この設定は、明るいヘアーカラーの表現を大幅に改善しながら、ヘアーのRayバウンスの数を低く保つ事ができます。以下が素晴らしい例です:

まとめ

V-Ray 5 for Maya, Update2では、V-RayHairNextマテリアルにアップデートを加えています。これにより、適度な量のヘアバウンスを使用しながら、非常に明るいヘアカラーをシェーディングする際のリアリズムが大幅に向上しています。新しい「Compensate Energy」オプションは、シェーダーアトリビュートの「Advanced」ロールアウトの下にあり、V-Ray 5 for Maya、V-Ray 5 for 3ds Max、およびV-Ray 5 for Houdiniの最新ビルドで利用できます。

メラニン設定が0.2以下の場合、または他のパラメータを使用してヘアーカラーを非常に明るくする場合は、このオプションを有効にすることをお勧めします。