0504 쉐이더 커스텀 라이트 Lambert, BlinnPhong, Standard
2021. 5. 4. 16:46ㆍunity/쉐이더
램버트 : 스페큘러 공식이 없고, 밝고 어두움만 표현된다.
가볍고 저사양 기계에서도 잘 돌아간다.
더보기
Shader "Custom/lambert"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
//SurfaceOutput에서 받는 요소들
여기서 램버트는 스페큘러를 받지 않는다.
struct SurfaceOutput
{
fixed3 Albedo; // diffuse color
fixed3 Normal; // tangent space normal, if written
fixed3 Emission;
half Specular; // specular power in 0..1 range
fixed Gloss; // specular intensity
fixed Alpha; // alpha for transparencies
};
블린퐁: 스페큘러의 계산을 더 단순화한 구조
보는 각도와 조명 각도에 따라 계산된 특정 색의 라이트를 원으로 표시 함
더보기
Shader "Custom/blinnphong"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_SpecColor("Specular Color",Color)=(1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf BlinnPhong
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Gloss = 1.0;
o.Specular = 0.5;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
o.Specular 값이 1에 가까울 수록 빛의 세기가 낮아진다. (0~1)
//SurfaceOutput에서 받는 요소들
블린퐁은 스페큘러를 받는다.
struct SurfaceOutput
{
fixed3 Albedo; // diffuse color
fixed3 Normal; // tangent space normal, if written
fixed3 Emission;
half Specular; // specular power in 0..1 range
fixed Gloss; // specular intensity
fixed Alpha; // alpha for transparencies
};
스탠다드 : 물리 기반 쉐이터, 주변 환경을 반사해서 스페큘러 표현
더보기
Shader "Custom/standard"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
struct SurfaceOutputStandard
{
fixed3 Albedo; // base (diffuse or specular) color
fixed3 Normal; // tangent space normal, if written
half3 Emission;
half Metallic; // 0=non-metal, 1=metal
half Smoothness; // 0=rough, 1=smooth
half Occlusion; // occlusion (default 1)
fixed Alpha; // alpha for transparencies
};
'unity > 쉐이더' 카테고리의 다른 글
0506 쉐이더 Rim Light + Hologram (0) | 2021.05.06 |
---|---|
0506 쉐이더 라이트닝 연산 (0) | 2021.05.06 |
0504 쉐이더 특정 부분만 반짝거리게 하기 (0) | 2021.05.04 |
0504 버텍스에 컬러 입히고 다중 텍스쳐 반영하기 (0) | 2021.05.04 |
0503 쉐이더를 이용해서 불 이펙트 만들기 (0) | 2021.05.03 |