8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[UE4]Anisotropy(異方性反射)の使い方とそのTangentについて

Last updated at Posted at 2021-03-09

Aniso_2_comp.gif
Unreal Engine 4.26から正式にマテリアルにAnisotropyが追加され、簡単に異方性反射を表現できるようになりました。
本記事では、そのAnisotropyについて、特にTangentの入力について紹介します。

公式ドキュメントでは、こちらにAnisotropyについての記載があります。

使い方と各インプットについて

4.26からは、デフォルトでマテリアルのインプットにAnisotropyTangentが追加されています。
こちらに値やテクスチャを入力することで使用することができます。
ちなみに4.25の時点では、まだベータなので、「プロジェクトの設定」で「Use anisotropic BRDF (Beta) (異方性 BRDF を使用)」にチェックを入れる必要があります。

◆ Anisotropy Input

こちらは、[-1 ~ 1]の範囲でスカラー値を入力することができます。
・0では、等方性反射で変化はしません。
・正の値では、Tanget(接線方向)に沿ったハイライトになります。
・負の値では、Binormal方向に沿います。(Tangent, Binormalについては後述します。)
下記の画像は、UVのU方向にTangentが向いているときの例です。
image.png

◆Tangent Input

まず、こちらのインプットが何のTangentのことを指しているかというと、サーフェスの頂点の法線ベクトルからサーフェイスに沿って、90度の角度にあるTangent(接線)ベクトルのことを指します。
Binormal(従法線)は、Tanegntに垂直なベクトルになります。
ちなみにこれはTangent Spaceでの話になります。

UE4内でもStaic MeshのツールバーからNormal、Tangent、Binormalを確認することができます。
緑がNormal、赤がTangent、青がBinormalの方向を示してます。

◇Tangent Inputに入力がない場合

マテリアルのTangent inputに入力がない場合は、サーフェスの頂点のTangent(法線方向)を使用します。
そのため、各頂点のTangentが意図した方向に向いている(向かせている)場合は、Tangent inputに入力がなくても使用することができます。

Tangentは、基本的に頂点座標、法線、UVの値を元に計算されますが、メッシュのインポート時に**「Normal Import Method」**でTangentをそのままインポートするか、UE4側で再計算するかを指定することができます。
image.png

しかし、意図した方向にTangentが向いていない(向かせるのが難しい)場合がほとんどです。
そこで、Tangent InputにTangent(とBinormal)の向きを入力することで反射の方向を制御することができます。

◇Tangent Inputに入力する値とテクスチャ

では、Tangent Inputにはどのような値を入れれば良いでしょうか。
ここでは、以下の3つの方法を紹介します。

  • RGBのAnisotropy Angle Mapを使う
  • グレースケールのAngle Mapを使う
  • UE4内で計算する

▼ RGBのAnisotropy Angle Map

下記の画像のような
R:Tangent, G: Binormal, B:Normalの方向を格納したテクスチャを使用する方法です。
方向のみを使用するため、ベクトルの大きさは必要ありません。
また、基本的にはTangent Spaceで計算したマップを使用します。
下記、例の画像は、Textures.comからお借りした画像ですが、Tangent Inputにそのまま繋ぐだけで使用することができます。
aniso_1-2.jpg

Binormalは、NormalとTangentが決まれば、それらの外積で求まりますが、アーティストがこのマップを簡単に作成できるソフトはなかなかないため、簡単な方法としては次のグレースケールのAngle Mapを使うやり方です。

▼グレースケールのAngle Map

T_Angle2.jpg

2つ目の方法としては、上記のようなマップを使う方法です。
こちらはSubstance PainterなどでもAngle Mapとして作成することができます。
Substance PainterのサンプルシーンのPreview Sphereでも使用されています。
sp2.jpg

このマップは以下のようにノードを組むことで使用することができます。
angle.jpg

注意点として、UE4.26時点では、32bitのマップでないと以下のようなアーチファクトが発生してしまうので、注意してください。
また、なるべく大きな解像度のテクスチャを使用した方が、滑らかなハイライトが得られます。
artifact.jpg

▼UE4内で計算する

TangentとBinormal方向をテクスチャを使わずに計算するのも一つの手です。
以下の画像は記事冒頭のgif画像のような円方向のTangentを計算した例です。
UV から (0.5, 0.5) を引くと中心が (0,0) になり、すべての点が中心から外側を指すベクトルになります。
Radial.jpg

この方法もTexCoordを使用しているので、UVベースなことに気を付けてください。
この方法を用いる場合は、カラーテクスチャなどを使用するためのUVとは別に、Anisotropyを使用したい面のノーマル方向からプロジェクションしたUVを作成しておくと良いかもしれません。

Anisotoropyの対応状況と注意点(UE4.26時点)

4.26では、以下のライトや反射に対応しています。

  • Spot Light
  • Directional Light
  • Point Light
  • Sky Light
  • Reflection Capture
  • Ray Tracing Reflection

Rect Lightなど上記以外のライトは対応しておらず、等方性反射になります。

また、マテリアルエディタで「Tangent Space Normal」のチェックを外すと、ノーマルの入力がWorld Spaceになりますが、Tangentの入力もWorld Spaceになってしまうのでお気を付けください。


異方性反射を使用する機会はそこまで多くはないと思いますが、知っておくと表現の幅が広がるので、ぜひお試しください!

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?