Shader "Custom/toon3"
{
Properties
{
_MainTex("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf _Toon
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf(Input IN, inout SurfaceOutput o)
{
}
float4 Lighting_Toon(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten) {
float4 final; // 최종 색상 값을 담을 변수
// 노멀과 광원 방향 사이의 각도를 기반으로 한 단계화된 조명 계산을 수행
float ndotl = dot(s.Normal, lightDir) * 0.5 + 0.5; // 노멀과 광원 방향의 내적을 0에서 1 사이의 값으로 조정
ndotl *= 5; // 값을 확대하여 단계를 생성
ndotl = ceil(ndotl) / 5; // 단계화된 값을 생성
// 림라이팅 효과를 계산, 뷰 방향과 노멀 사이의 각도가 일정 기준 이상이면 하이라이트를 적용
float rim = dot(s.Normal, viewDir);
if (rim > 0.3) rim = 1; // 림라이트 효과의 임계값을 설정
// 최종 색상 값에 조명과 림라이트 효과를 적용
final.rgb = rim * ndotl; // 조명과 림라이트 효과를 결합
final.a = 1; // 알파 값을 1로 설정
return final; // 최종 색상 값을 반환
}
ENDCG
}
FallBack "Diffuse"
}
'산대특 > 게임 그래픽 프로그래밍' 카테고리의 다른 글
[LearnShader] Ramp Texture로 로봇 눈 깜박이게 만들기 (0) | 2024.02.23 |
---|---|
[LearnShader] 알파 블렌드(Alpha blend) (0) | 2024.02.23 |
[LearnShader] NPR 렌더링 - 외곽선의 두께와 색깔을 조절해보기 (0) | 2024.02.21 |
[LearnShader] NPR 렌더링 - 2Pass로 외곽선 그리기 (0) | 2024.02.21 |
[LearnShader] 스켈레톤에 버텍스 컬러 및 홀로그램 적용 연습해보기 (0) | 2024.02.21 |