Cocos Creator 3.0のPBRに基づく物理レンダリングの詳細説明

Cocos Creator 3.0 のリリース後、Cocos Creator は最終的に、2D および 3D ゲーム開発に適した真新しい 2D/3D ゲーム エンジンにアップグレードされました。3D ゲームでは、画像効果とレンダリング パイプラインのカスタマイズに対する需要が高くなります。PBR アート ワークフローこれは何世代にもわたって主流のセカンダリ ソリューションです。今日は、Cocos Creator に基づいた PBR 物理レンダリングを詳細に分析します。

1: コンピューターの色の表示方法

 この問題を議論するために、まず人間の目が世界をどのように見ているかを分析しましょう。人間の目は物体の色を見るとき、物体の自己照明と反射した周囲光の重ね合わせを見ます。物体の自己発光とは、電気スタンドや信号機など、物体自体が自ら発光する光のことです。一般に、自然界の物体は自ら発光することはほとんどなく、すべて光源(太陽光、照明)からの光を反射しています。たとえば、暗い部屋(光源なし)に本がありますが、私たちは本を見ることができません。電気をつけると、本が目に光を反射し、網膜に像を描くため、本を見ることができます。 。人間の目で見る物体が光源 (太陽光など) からの光を反射し、ある物体は赤く見え、ある物体は青く見えるのはなぜですか? これは、さまざまな物体の表面の材質が一部のスペクトルを吸収する可能性があるためです。たとえば、赤い物体は青と緑の光を吸収し、赤い光を反射します。緑の物体は赤と青を吸収します。オブジェクトの「真の色」と呼ばれる緑色の光を反射します (baseColor/Diffuse/albedo)。図に示すように、物体が光源からの光を反射することを直接反射といい、他の物体の表面から反射した光を反射することを間接反射といいます。

自然が現実である理由は、それが非常に複雑な反射で構成されているためです。

3D ゲーム エンジンはカメラへのカラー イメージングをどのように処理しますか? 実際、これは現実世界をシミュレートし、いくつかのトレードオフを行います。

  1. オブジェクトの自己照明のシミュレーション。これにより、通常、自己照明の色または自己照明マップが得られます。
  2. オブジェクトの真の色のシミュレーションは、オブジェクトの真の色のマップ (BaseColor、Diffuse、または Albedot) です。
  3. 物体反射のシミュレーションは、光源からの反射光(直接反射)のみをシミュレートしており、間接反射は考慮していません。
  4. 遮断された光の反射 (ボトルの底が光を反射して遮断される) をシミュレートするには、アンビエント オクルージョン マップ (オクルージョン) を使用します。

コンピュータに表示される色は、このプロセスを経て計算された色の値になります。

2: 経験的モデルと PBR 物理レンダリングに基づく

  次に、上記4つの処理のうち、(1)(2)(4)はすべて決定されますが、(3)の反射光だけが最も難しく、レンダリング効果に最も影響を与えるものであり、コンピュータグラフィックスの最も重要な部分でもあります。内部の研究の焦点。光の反射には図のように鏡面反射と拡散反射の2種類があります。

光の反射をシミュレートするには、主流のゲーム開発には 2 つの方向があります。1 つは経験的モデルに基づくもの、もう 1 つは物理 PBR に基づくものです。まず経験モデルについてお話しますが、実は反射を扱う際には照明の色を計算する計算式が使われており、この計算式は経験に基づいています。拡散反射を処理したい場合は、Lambert 照明モデル (公式) を使用できます。Feng モデルと Brynvon モデルは、鏡面反射光の処理に使用できます (これはインタビューでもよく質問されます。たとえば、カスタマイズされた漫画レンダリング スタイルのレンダリング パイプラインでは、多くの場合、物理 PBR の代わりに経験的モデルが使用されます)。PBR に基づく物理レンダリングは、主に現実世界の光の反射、双方向反射分布関数 (BRDF)、およびエネルギー保存への準拠をシミュレートする物理原理に基づいており、レンダリングされたオブジェクトの効果は現実世界に近いものになります。同時に、これらのアルゴリズムは比較的成熟しており、学習する必要はなく、シェーダーを作成するときに式を組み込むだけです。

3:ノーマルとノーマルマップ、ハイトマップ

法線は非常に重要なデータであり、図に示すように光の反射の計算に使用する必要があります。

3D モデルは三角形の面、面は線、線は頂点で構成されており、各頂点には座標に加えて法線もあります。図に示すように:

色を付けるときは、法線を使用して光を反射します。上の図に示すように、三角形の表面上のすべての点は光を反射する必要があり、すべての点に法線が必要です。ただし、法線があるのはモデル内の頂点のみです。表面上の任意の点の法線はどのようにして得られるのでしょうか? 以下に示すように、補間を使用してこれを行うことができます。

黄色の法線は 2 つの青色の法線から補間され、青色の法線は緑色の頂点法線から補間されます。このようにして、表面上の各点の法線が出てきます。ハイポリとローポリについてもう一度話しましょう。オブジェクトのディテールをより良く表現するために、モデリング時に使用する面の数が多いほど、ディテールがより良く表現され、照明がより繊細になります。しかし、面の数が増えると計算量が増えてパフォーマンスが低下するため、面の数を増やさずに、より良いライティングのディテールを得るにはどうすればよいでしょうか? 一般的に使用される手法は法線マッピングです。アーティストは高精度のモデルを構築します。元の三角形面内で、上位モデルに三角形面が多ければ多いほど、頂点の法線も多くなります。これらの法線データは保存されます。テクスチャ マップでは、ローポリゴンの三角形の各点を取得して法線を取得する場合、補間を使用する必要はありませんが、法線データはハイポリゴンの法線マップから取得されるため、より良いライティングの詳細を取得できます。 . . 法線マッピング技術も次世代の標準です。法線に加えて、詳細をより階層化するために、同様の原理を備えた高さマップもあります。下の図は、同じモデルの法線マップと高さマップの比較です。

左:ノーマル、中(ノーマルマップ)右(ノーマルマップ+ハイトマップ)

4: アンビエントオクルージョンマップ

環境オクルージョンとは何かを例に挙げると理解できると思いますが、下の写真に陶器の瓶がありますが、瓶の口から見下ろしますと、瓶の口が小さいため、反射の一部が遮られてしまいます。上から下に向かって見ると、底が少しぼやけているはずですが、底がついていないほうがよりリアルな感じがします(左右の写真で瓶の底を比べてみると、右は底が見えません)側面は左側よりも現実的です)。

下の写真は、このボトルのアンビエント オクルージョン マップです。

5: PBRに基づくアートワークフロー

たくさんの準備を経て、ようやく PBR のアート ワークフローを説明できます。PBRのアルゴリズムはアルゴリズム+データ=効果と決まっているので、あとはデータを調整するだけです。以上の伏線を踏まえて、PBR調整効果のいくつかの部分のデータを見てみましょう。

(1) 自己照明。このコントロールは発光色または自己照明マップです。

(2) オブジェクトの真の色、元の色または真のカラー マップ (アルベド/拡散反射光)。

(3) 反射、鏡面反射 + 拡散反射制御を含む。

(4) 環境オクルージョン。環境オクルージョン マップを使用します。

(5) ノーマルマップとハイトマップを使用したディテールの強調。

上記5点のデータは、反射以外はアートワークフローと書き出しがほぼ決まりましたので、次は反射効果を調整する方法を見ていきます 反射は鏡面反射と拡散反射に分けられます PBRには2つの方法があります反射効果を調整するには、金属性 + 粗さに基づいて調整します。1つは反射率と光沢です。これら 2 つの方法のデータは相互に変換することもでき、RGB を使用して色成分に基づいて色を調整したり、YUV を使用して明るさと色の値を調整したりできるのと同じように、調整後にそれらを変換することができます。お互い。

   金属性 + 粗さ制御法は、物体の金属性を記述することで反射率を制御する方法です。一般に、物体の表面が単一の場合、金属性を数値で表現できます。非金属の場合は 0、金属の場合は数値で表現しており、金属性が高いほど反射率が強くなります。

オブジェクトの表面が比較的複雑な場合(キャラクターが金属の鎧を着ている場合)、現時点では数値で表現する方法がなく、表面の金属性をマップ(メタルマップ)に格納する必要があります。 。粗さは、次のようにオブジェクトの表面の滑らかさを制御します。

単一の表面を持つオブジェクトの場合は、粗さを数値にすることもでき、複雑なオブジェクトの表面の粗さもマップに保存されます。

粗さと金属性はどちらも 1 つの値であり、1 つのカラー コンポーネント (RGBA チャネル) のみを使用して保存できます。この方法で、金属性と粗さを 1 つのテクスチャにマージしてメモリを節約できます。

反射 + 光沢ワークフローは、オブジェクト表面の反射と光沢を調整することによって制御されます。これは実際の状況に近いため、制御は柔軟で効果も良好です。

では、ゲーム開発では通常どのモードを使用して制御するのでしょうか? まずは 2 つのモデルの長所と短所を挙げてみましょう(インタビューでよく聞かれる)

金属性 + 粗さのワークフロー

利点: 1. 作成が簡単各テクスチャが独立しています。  

2. テクスチャが占めるメモリの量が少なくなります (単一チャネル、マージ可能)

3. より広く使用される

短所: 1. エッジのアーティファクトがより目立ちます。

反射と光沢のワークフロー

利点: 1. エッジアーチファクトが目立たない

2. 柔軟な制御

短所: 1. 柔軟な制御により、省エネが遵守されなくなり、PBR 原則が破壊される可能性があります。

2. RGB テクスチャが多く、多くのメモリを占有します。

ゲーム開発では主に金属性と粗さのワークフローを使用します。ワークフローが決定したら、データに基づいて最終的な効果をレンダリングするためのシェーダーも実装する必要があります。このシェーダーは自分で作成してカスタマイズすることも、組み込みシェーダー、Unity には 2 つのワークフロー用の組み込みシェーダーがあり、Cocos とUE4 には金属性と粗さのワークフロー用の組み込みシェーダーがあります。

6 Cocos PBR Shaderパラメータの詳細説明

  上記の説明を踏まえると、PBR の物理レンダリングに必要なデータは次のとおりです。

  1. 自己照明と自己照明マップ。
  2. オブジェクトの元の色、baseColor/Diffuse/Albedo マップ
  3. 金属性、粗さの値、およびテクスチャ (オプション)。テクスチャがある場合は、通常、それらを 1 つのテクスチャにマージできます。
  4. ノーマルマップ、ハイトマップ
  5. アンビエント オクルージョン マップ

これを理解した上で、Cocos PBR Shader パラメータを見てみましょう。以下に示すように、非常に簡単です。

ノーマルマップ

オブジェクトの元の色

金属性と粗さのマップ

金属性 + 粗さ + アンビエント オクルージョンを統合したマップ

自発光マップ

アンビエント オクルージョン マップ

オブジェクトの元の色:

咬合係数の調整

金属性と粗さの値

自発光色

最後に公式Shaderで計算したデータの説明図を載せておきます。

アート マッピングを行う場合、この指示に従って対応するテクスチャを作成し、Cocos PBR Shader で開発することができます。同時に、Cocos オープン ソースで PBR Shader の実装方法を学習し、レンダリング パイプラインをカスタマイズするための良い基盤を築くことができます。

おすすめ

転載: blog.csdn.net/Unity_RAIN/article/details/134598333