Making Tera

たまに書く不定期ブログ

Unity5のサーフェイスシェーダー

昨日の続きでUnity5のサーフェイスシェーダー内部を覗いてみた。

 

PBRに対応するため内部で面倒なことをしていると思い込んでいたら、まるごとすっきりとリメイクされている模様。

よってほとんど説明する内容が無い・・・。

 

Shader "Custom/NewShader" {

Properties {

_Color ("Color", Color) = (1,1,1,1)

_MainTex ("Albedo (RGB)", 2D) = "white" {}

_Glossiness ("Smoothness", Range(0,1)) = 0.5

_Metallic ("Metallic", Range(0,1)) = 0.0

}

SubShader {

Tags { "RenderType"="Opaque" }

LOD 200

 

CGPROGRAM

// Physically based Standard lighting model, and enable shadows on all light types

#pragma surface surf Standard fullforwardshadows

 

// Use shader model 3.0 target, to get nicer looking lighting

#pragma target 3.0

 

sampler2D _MainTex;

 

struct Input {

float2 uv_MainTex;

};

 

half _Glossiness;

half _Metallic;

fixed4 _Color;

 

void surf (Input IN, inout SurfaceOutputStandard o) {

// Albedo comes from a texture tinted by color

fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;

o.Albedo = c.rgb;

// Metallic and smoothness come from slider variables

o.Metallic = _Metallic;

o.Smoothness = _Glossiness;

o.Alpha = c.a;

}

ENDCG

}

FallBack "Diffuse"

}

 

Vertex/FragmentシェーダーをPBRで書く必要が無い限りは物理ベースの計算を隠蔽したままコーディングができそうな気配!

これはありがたい・・・。