Unity 5 Standard Shader 구조해석 시작. 특별한건 없고 텍스쳐 한장으로 Metallic과 Smoothness 그리고 Occlusion까지 처리한다. GI를 위한 Skybox의 Reflection 처리도 잘 되는걸 확인.
슬슬 미루어 두었던 작업 시작
사족을 좀 달면 Standard의 경우 Lambert와 같이 별도의 조명 설계도 output 선언도 Gi를 위한 선언도 필요없다. (PBS.cginc 파일 열어보면 구조체가 나온다) 이말인즉 standard shader 기반(PBS custom) 조명설계에선 이건 해야 한다 소리... 뭐 그건 천천히 다듬어 나가기로 하고...
Properties{
_MainTex("Texture", 2D) = "white" {}
_BumpMap("Bump", 2D) = "bump" {}
_SpecTex("Specular Map (R)", 2D) = "white" {}
_SmoothnessIntensity("Smoothness Intensity(R)", Range(0,1)) = 0
_MetallicIntensity("Metallic Intensity(G)", Range(0,1)) = 0
_OcclusionIntensity("Occlusion Intensity(B)", Range(0,1)) = 0
}
SubShader{
Tags{ "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Standard
#include "UnityCG.cginc"
#include "UnityShaderVariables.cginc"
#include "UnityStandardConfig.cginc"
#include "UnityPBSLighting.cginc"
#include "UnityStandardUtils.cginc"
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _SpecTex;
fixed _MetallicIntensity;
fixed _RoughnessIntensity;
fixed _OcclusionIntensity;
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
INTERNAL_DATA
};
void surf(Input IN, inout SurfaceOutputStandard o) {
fixed3 c = tex2D(_MainTex, IN.uv_MainTex);
fixed3 bm = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
fixed3 spc = tex2D(_SpecTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Normal = bm;
o.Smoothness = spc.r * _RoughnessIntensity;
o.Metallic = spc.g * _MetallicIntensity;
o.Occlusion = spc.b * _OcclusionIntensity;
}
ENDCG
}
Fallback "Diffuse"
}
'Technical Report > Unity Shader' 카테고리의 다른 글
Unity Built-in shader variables (0) | 2015.11.24 |
---|---|
Unity shader Toggle 제어 (0) | 2015.11.09 |
Unity 셰이더 Variants 최적화 (0) | 2015.09.08 |
Unity Surface shader Lighting model (0) | 2015.08.05 |
external lightmap shader 2nd UV (0) | 2015.08.04 |