Making Tera

たまに書く不定期ブログ

PBRShader for UnityTerrain

結論から言うと恐らく現状ではPBR対応のサーフェイスシェーダーをTerrainのCustomShaderとして利用することはできない

http://forum.unity3d.com/threads/terrain-pbr.276734/

Unity Technologiesによると公式にて近日中に対応予定。とのこと。

 

PBRに拘らなければCustomShaderを適用したMaterialをTerrainの設定画面から指定することができた。

以下は角度によってテクスチャを自動で切り替えるシェーダーを適用した例

 

f:id:makingT:20160207023810j:plain

ただしTangentVectorが取得できない等Terrain特有の癖が分かるまではUnity上で細かくデバッグしながら作成したほうが良さそう。

 

シェーダーからTerrainのInspector内の PaintTexture にアクセスしたい場合は以下を記述する。

(4つのテクスチャが登録されていると過程)

プロパティ内

[HideInInspector] _Splat3("Layer 3 (A)", 2D) = "white" {}

[HideInInspector] _Splat2("Layer 2 (B)", 2D) = "white" {}

[HideInInspector] _Splat1("Layer 1 (G)", 2D) = "white" {}

[HideInInspector] _Splat0("Layer 0 (R)", 2D) = "white" {}

[HideInInspector] _Normal3("Normal 3 (A)", 2D) = "bump" {}

[HideInInspector] _Normal2("Normal 2 (B)", 2D) = "bump" {}

[HideInInspector] _Normal1("Normal 1 (G)", 2D) = "bump" {}

[HideInInspector] _Normal0("Normal 0 (R)", 2D) = "bump" {}

 

入力部分の構造体の例

struct Input {

float2 uv_Sample;

float2 uv_Main : TEXCOORD0;

float2 uv_Splat0 : TEXCOORD1;

float2 uv_Splat1 : TEXCOORD2;

float2 uv_Splat2 : TEXCOORD3;

float2 uv_Splat3 : TEXCOORD4;

};

 

変数宣言部でサンプラーを利用できるようにする

uniform sampler2D _Splat0,_Splat1,_Splat2,_Splat3;

 

サーフェイスシェーダー内部でのアクセス方法

tex2D(_Splat0, IN.uv_Splat0)

 

 

グーグル上で資料が増えたこともあって、シェーダーまわりの知りたいことは一通り調査が終わった!

次はずっとしたかったのにできなかったSubstanceDesignerとPainterのアップデートをやっていこうと思う~