We will entertain your mind, enhance your brain, expand your lifestyle.

ベクトルの計算

15番目のパズルとして、絵柄の一部がライトの光を強く反射し、それをヒントに並び変えるものとした。

シェーダーで絵柄とは別にヒント画像を用意し、これをマテリアルのメタリック値とした。しかし、この実装だと光があたっている所以外も質感の違いでヒント画像が見えてしまう。

ChatGPT

そこでシェーダー内で、ピクセルに対しライトからの光が反射する方向にカメラがあるときだけメタリックを有効にすることとした。これにはピクセルにおける法線ベクトルに対し、ライトの方向ベクトルとカメラの方向ベクトルがほぼ軸対象となっているか判定する必要がある。

この軸対象の判定について、ChatGPTに(Bing経由で)質問すると、正しい(と思われる)答えが返ってき、数式を要求すると Latex形式で返してくれた。

シンプルに

ただ、この数式ではどれだけ軸対象に近いかの計算はできなかった。そこで下図のようにシンプルにベクトルで判定することととした。

対象のピクセルに対する、ライト方向のベクトルとカメラ方向のベクトルを加算し、これと法線ベクトルの距離を測る(減算)。この距離が閾値以下ならメタリックとすることで目的とするシェーダーとなり下のような表現となる。