2019の12/3の記事です。2019鍋の裏とは、異方性反射とはたかが鍋の裏、されど鍋の裏。Pipeline(HDRP)で可能になりました。異方性反射とは、ライティングの反射光を上下左右に細長く変形させるテクニックで、アニソトロピー(Anisotropy)と呼ばれます。分かりやすい例を挙げると、鍋の裏やCDといった筋の入った金属表現です。上のサンプルだと、質感が全然ちがいますよね?プリレンダリングのCGソフトでは割とメジャーなライティング表現でした。Unity向けのテクスチャの作成方法がいまいち文章化されていなかったので、この記事を書きます。AnisotropyMapはただのマスクマップUnityのアニソトロピーマップは、レッド(R)成分を採用するマスクマップでしかありません。変化させたい部分をRで描き、マスクしたい部分は黒で塗りつぶします。このようなマップを描いたとすると、ライティングはこんな感じになります。インスペクター内のスライダーで調整するスケールは、引き延ばす方向に左右します。-1でV方向、1でU方向に作用します。ワールドやローカルにおけるxyz軸には関係がありません。メッシュのUV座標を基準とします。TangentMapで反射方向をコントロールする異方性反射ライティングを行う上でもう一つ大切なマップがあります。それがタンジェントマップです。これはメッシュの接線方向を定義するために使用します。モデルを形成するポリゴンの法線は各々一つしか持ちえませんが、ポリゴンの接線は必ず一つとは限りません。普段意識することがないのは、値を設定しないかぎり、テクスチャ座標上のU方向を接線ベクトルとして扱っているからです。タンジェントマップでは、その接線ベクトルを設定することができます。それはU方向に偏りがあると、反射光を引き延ばす方向にも偏りが出るためです。簡単な例として、さきほどのメッシュを回転させてみます。反射光が引き延ばされる角度と引き延ばされない角度があることがわかります。サンプルはアニソトロピースケールを-1でライティングしています。(スケールが-1、つまりV方向に引き延ばしているということです。アニソトロピーライティングの簡単な図解を見てみます。リアルタイムレンダリングでは、メッシュへの入射角に対してその反射角方向に映るキューブマップをライティングに加算します。キューブマップとは、上下左右前後ろの6枚をあらかじめレンダリングしておき、疑似的な反射光として利用するテクスチャの一種です。Unityではリフレクションプルーブという名前で使われます。Unityの異方性反射では、この反射角度を回転させることで、キューブマップをずらし、あたかも反射が歪んでいるかのようにライティングしているわけです。正確にはキューブマップを動かしているのではなく、本来取るべきキューブマップのテクスチャ座標をずらしている、ということです。以下の図説は座標軸もわかりやすく傾けていますが、法線や従法線が実際に傾いているわけではありません。先ほどのサンプルでは、タンジェントマップを設定せずにアニソトロピースケールを-1に設定しました。V方向にずらしています。上の図説のように従法線が上向いた状態となります。従法線方向が奥行になる視点からメッシュをレンダリングすると、反射光が歪んで見えます。一方で、接線方向が奥行になる視点からでは、まったく歪みが現れません。接線が上向いているわけではないからです。逆に、アニソトロピースケールを1に設定すると、接線が上向いた状態となり、反射光がU方向にずれたライティングになります。以上のことをまとめると、タンジェントマップの役割は、反射角度のヨーを担っているといえます。インスペクターのスケール調整スライダーはロールとピッチを担っているということになります。ノーマルマップとは違って、異方性反射は法線を動かしません。どの角度から見ても凹んでいるようには見せずに反射光を曲げたライティングができる、ということがノーマルマップとの最大の違いになります。タンジェントマップの作り方タンジェントマップではベクトルのxがレッド(R)成分、yがグリーン(G)成分に相当します。ベクトルを書き込むツールはペイントソフトには搭載されていないので、法線軸の回転(オイラー角)を白黒のグラデーションで書き込み、のちにベクトルに変換します。ここでは黒を回転角度0、白を回転角度360として扱っており、グラデーションマップで色変換を行っています。グラデーションマップはgithubにて配布しますので、ご自由にお使いください(ダウンロードはこちら)。グラデーションのかけ方やグラデーションマップの適用方法は割愛します。何個かテクスチャを作ってみてわかったことですが、円形に循環するようにタンジェントを組んであげる方がルックを強力にできます。円形にすることで、必ずビュー方向に向くタンジェントが存在するようになり、反射光の拡散が常にライティングされるためです。以下のサンプルだと、左よりも右のタンジェントマップのほうが異方性拡散を視認しやすくなります。アニソトロピーマップの使用例アニソトロピーマップというよりタンジェントマップの活用例といった方が正しいかもしれません。できるだけ効果を視認しやすいマテリアルを選びました。パールメッキ亜鉛メッキウロコスピン円形紋様トライアングルアニソトロピーマップを使う上での注意点スムーズネスを1に設定した場合、アニソトロピーマップが無視されて完全反射になります。アニソトロピーマップを使用する際は、スムーズネスを0.99以下に設定してください。スケールはマイナス方向に動かした方が、ルックがそれっぽくなります。経験則からすると、スムーズネスを0.7、アニソトロピースケールを-0.3にすると、一番映える気がします。複雑なアルベドマップを作らない方が色味の変化を視認しやすくなります。色を塗る場合は単色で塗るほうが良いです。まとめUnityの異方性反射ライティングは、アニソトロピーマップが難しいのではなく、タンジェントマップがややこしいです。ノーマルマップに比べると、効果が地味な部分もありますが、異方性反射にしかできない質感があります。HDRPでプロジェクトを進めるなら、一度触ってみてください。おまけサンプルをアセットストアに出品しました。アニソトロピー表現を詰め込んだマテリアル集となっております。手早くアニソトロピーを体験したい方は、どうぞお買い求めください。Packまた、上のアセットをストアに出品した手順を記事にし、同日別のアドベントカレンダーで公開しました。アセットストア出品に興味のある方はご覧になってください。requestStockLike16湯乃田@yarikomivr_comUnityとBlender界隈に生息しています。CG制作をメインに活動しています。upLoginユーザーは見つかりませんでした。