DOT3ライティングとは何ですか?
-
19-09-2019 - |
質問
の の編集1
iPhone関連情報が大幅に高く評価されている。
解決
DOT3-照明はしばしばピクセル単位の照明と呼ばれています。頂点は、照明を点灯して、すべての頂点で計算され、得られた照明は、三角形の上に補間されます。名前が示すようにピクセル単位のライティングでは、オブジェクトは、画素毎に照明を計算することである。
iPhoneはいわゆるレジスタコンバイナであるとして、これは固定機能ハードウェア上で実行される方法。名前DOT3このレンダリング状態から来ます:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
ヴォルフガングのこののブログのエントリを見てくださいまさにこれを設定する方法の詳細はエンゲルスのブログます。
ピクセル単位のライティングを行う場合、それはまた、いわゆる法線マップを利用するために人気があります。これは、オブジェクト上のすべての点の法線が特殊なテクスチャマップ、法線マップに格納されていることを意味します。これはかなりの低ポリゴンモデルが使用されるIDソフトウェアではなく、高解像度の法線マップとゲームDOOM 3に普及しました。この技術を使用する理由は、眼の形状の変化よりも、照明の変化に対してより敏感であることである。
私はこれを思いついた理由は、あなたが頂点データのメモリフットプリントを削減したいということだったことを、あなたの他の質問で見ました。これは、代わりに全ての頂点に通常のための3つのコンポーネントを格納する、あなただけの法線マップにテクスチャ座標のための2つのコンポーネントを格納する必要があり、真実です。アドバイスがしようとすると見ているいつものように、私は、これはネットの勝利になりますかはわからないもののピクセル単位のライティングを有効にすると、パフォーマンスコストが付属しています。
最後点における拡散照明の強度は、表面法線と光の方向との間の角度の余弦に比例します。 2つのベクターは、内積には、 のように定義される:
a dot b = |a||b| cos(theta)
|a|
と|b|
は、それぞれベクトルa
とb
の長さであり、theta
は、それらの間の角度です。長さが1に等しい場合、|a|
と|b|
は単位ベクトルと呼ばれ、式に簡略化されます。
a dot b = cos(theta)
これは、拡散照明の強度は面法線と光の方向との間のドット積によって与えられることを意味します。このことは、のすべてのの拡散照明は、名前がピクセル単位の種類を参照するようになってきた場合でも、DOT3-照明の形である。
他のヒント
ここのから:
バンプマッピングは、各テクセルの輝度は、そのテクセルの高さを定義するモデルにテクスチャを入れています。
各テクセルの高さは、表面を横切って照明を摂動するために使用されます。
通常のマッピングは、各テクセルの色が実際にその表面の点の位置の方向を定義する3つの値であり、モデルにテクスチャを入れています。
のカラー(255、0、0)は、例えば、その位置で表面が正のX軸を下向きことを意味する可能性があります。
言い換えれば、各テクセルが正常である。
DOT3名は、あなたが実際にこれらの法線と何から来ています。
あなたはあなたの光源点の方向を指すベクトルを持っているとしましょう。そして、あなたはどの方向テクセルポイントことを示していますあなたのモデル上の特定のテクセルで正常なベクトルを持っているとしましょう。
あなたがそうのようなこれら二つの法線ベクトルの「内積」と呼ばれる簡単な数学の方程式を、行う場合:
ドット= N1x のN2X + N1Y のN2y + N1z * N2z
次いで、得られた値は、これら二つのベクトルが同じ方向を指してどのくらいを示しています番号です。
値が-1の場合、、その後、彼らは実際テクセル光源を指しており、光源がテクセルを指しているので、テクセルが点灯されるべきであることを意味し、反対の方向を指す。
値が1の場合、、それらはテクセルは、光源から離れる指している意味と同じ方向を指します。
、値が、その後、他方に対して90度ベクトル点の一つ0である場合。すなわち:あなたが楽しみにして地面に立っている場合は、ビューベクトルは上向きの地面の法線に対して90度です。