게임개발/게임 그래픽 프로그래밍
MatCap _Nolight
pudding81
2024. 2. 26. 11:29
Shader "Custom/matcap"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MatcapTex("MatcapTex",2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf _Nolight noambient
#pragma target 3.0
sampler2D _MainTex;
sampler2D _MatcapTex;
struct Input
{
float2 uv_MainTex;
float3 worldNormal;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
//월드노멀을 뷰노멀로 바꿈
float3 viewNormal =mul((float3x3)UNITY_MATRIX_V,IN.worldNormal.rgb );
float2 uv = viewNormal.xy*0.5+0.5;
// matcap 컬러
float4 matcapColor =tex2D(_MatcapTex,uv);
o.Emission = c.rgb * matcapColor.rgb;
o.Alpha = c.a;
}
//커스텀라이트
float4 Lighting_Nolight(SurfaceOutput s,float3 lightDir, float atten)
{
return float4(0,0,0,s.Alpha);
}
ENDCG
}
FallBack "Diffuse"
}
NormalMap
Shader "Custom/matcap"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MatcapTex("MatcapTex",2D) = "white" {}
_Bump("NormalMap",2D)= "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf _Nolight noambient
#pragma target 3.0
sampler2D _MainTex;
sampler2D _MatcapTex;
sampler2D _Bump;
struct Input
{
float2 uv_MainTex;
float3 worldNormal; INTERNAL_DATA
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
//노멀맵 적용
o.Normal = UnpackNormal(tex2D(_Bump, IN.uv_MainTex));
// o.Emission = WorldNormalVector(IN, o.Normal).rgb; //노멀맵
//월드노멀을 뷰노멀로 바꿈
// float3 viewNormal =mul((float3x3)UNITY_MATRIX_V,IN.worldNormal.rgb );
// float2 uv = viewNormal.xy*0.5+0.5;
//노멀맵 적용
float4 matcapColor =tex2D(_MatcapTex,WorldNormalVector(IN, o.Normal));
o.Emission = c.rgb * matcapColor.rgb;
o.Alpha = c.a;
}
//커스텀라이트
float4 Lighting_Nolight(SurfaceOutput s,float3 lightDir, float atten)
{
return float4(0,0,0,s.Alpha);
}
ENDCG
}
FallBack "Diffuse"
}