Notice
Recent Posts
Recent Comments
Link
스토리지
[5.4] 금속의 울퉁불퉁함을 표현 - Shader Normal 본문
금속 재질들의 Asset들을 받아보면 이상하게 생긴 텍스쳐들을 볼 수 있다. 그것들의 공통점은 이름에 Normal이 들어간다는 것이다.
이 텍스쳐는 금속의 울퉁불퉁함을 표현하는 텍스쳐이고 데이터로 보면 된다.
이 데이터는 SurfaceOutputStandard 구조체의 멤버인 Normal에 대입함으로서 데이터를 삽입할 수 있다.
라이브러리에 UnpackNormal(fixed4) 함수로 구현이 가능하다.
*UnpackNormal 함수 구현 부
더보기
inline fixed3 UnpackNormal(fixed4 packednormal)
{
#if defined(UNITY_NO_DXT5nm)
return packednormal.xyz * 2 - 1;
#else
return UnpackNormalmapRGorAG(packednormal);
#endif
}
fixed3 UnpackNormalmapRGorAG(fixed4 packednormal)
{
// This do the trick
packednormal.x *= packednormal.w;
fixed3 normal;
normal.xy = packednormal.xy * 2 - 1;
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
return normal;
}
- 텍스쳐 구멍을 하나 뚫어놓는다. 기본값은 "bump" (기존,일반 텍스쳐는 "white")
- 변수 선언 및 UV 데이터 받아오기.
- Normal 텍스쳐를 SurfaceOutputStandard.Normal 변수에 넣음.
Shader "Custom/Test"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_BumpMap ("Albedo (RGB)", 2D) = "bump" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
sampler2D _BumpMap;
half _Glossiness;
half _Metallic;
struct Input
{
float2 uv_MainTex;
float2 uv_BumpMap;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
fixed4 n = tex2D (_BumpMap, IN.uv_BumpMap); //기존 텍스쳐의 굴곡을 표현하는 데이터들이 담겨져있음. →풀어서 사용해야됨 (unpack_normal)
o.Normal = UnpackNormal(n);
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
'Unity > Shader' 카테고리의 다른 글
[5.4] Shader 2 (0) | 2021.05.04 |
---|---|
[5.4] Ambient Occlusion (0) | 2021.05.04 |
[5.4] PolyBrush & Vertex Color을 이용해서 특정 영역 색칠 후 텍스쳐 삽입 (0) | 2021.05.04 |
[5.4] 색깔 영역에 각각 다른 텍스쳐 삽입 (0) | 2021.05.04 |
[5.4] Shader 복습 1 (0) | 2021.05.04 |
Comments