반응형
RIM 라이트 (겉에 붙는 라이트)
반사율을 적용하는 공식 Franel 공식
---
먼저 한장만 받는 걸 만들고. 환경광을 없애준다
라이트는 스탠다드가 아닌 램버트로 바꾸고 알베도를 0으로 해서 검정색으로 만든다
---
Input 구조체에 ViewDir 바라 보는 방향
Unity - Manual: Writing Surface Shaders (unity3d.com)
카메라 벡터라고도 부르고, 뷰벡터라고도 부른다.
카메라 벡터로 실제로 연상될때는 반대로 나온다. 라이트처럼 (연산할때 편하기 위해서)
viewDir 는 IN 에 있는 것
★float3 viewDir;
플롯 3로 받기 !
pow는 제곱이라는 뜻
--
rim 도 dot 연산을 해줘야한다.
1 - rim (림이 반대로 나와서 1- 해서 반전 시킴)
핵심 RIM 공식은 이것임
float rim = dot(o.Normal, IN.viewDir);
림이 약해보여서
제곱을 해준다.
o.Emission = pow (1 - rim, 3);.
----
색을 조절할 수 있게 해보자
프로퍼티를 뚫어서 값을 변화할 수 있게 한다.
Shader "Custom/Test"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_RimColor ("Color", Color) = (1,1,1,1)
_RimPow("Pow", Range(1,10)) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert noambient
#pragma target 3.0
sampler2D _MainTex;
float4 _RimColor;
float _RimPow;
struct Input
{
float2 uv_MainTex;
float3 viewDir;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = 0;
float rim = dot(o.Normal, IN.viewDir);
o.Emission = pow(1- rim, _RimPow) * _RimColor.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
o.Emission = pow(1- rim, _RimPow) * _RimColor.rgb;
컬러와 파워를 넣어준다.
----
나머지 맵을 넣어준다.
Shader "Custom/Test"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Normal ("Normal", 2D) = "white" {}
_RimColor ("Color", Color) = (1,1,1,1)
_RimPow("Pow", Range(1,10)) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
float4 _RimColor;
float _RimPow;
sampler2D _Normal;
struct Input
{
float2 uv_MainTex;
float2 uv_Normal;
float3 viewDir;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
fixed3 n = UnpackNormal(tex2D (_Normal, IN.uv_Normal));
o.Albedo = c.rgb;
o.Normal = n;
float rim = saturate (dot(o.Normal, IN.viewDir));
o.Emission = pow(1- rim, _RimPow) * _RimColor.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
---
게임에서 사용하는 예시
발로란트
반응형
'Unity > 그래픽스프로그래밍' 카테고리의 다른 글
0506_ Lambert에서 BlinnPhong 스펙큘러 만들기 (0) | 2021.05.06 |
---|---|
0506_ 홀로그램 만들기 (0) | 2021.05.06 |
0506_유니티 그래픽스 라이트 연산에 대하여 (0) | 2021.05.06 |
0504 _ 라이트에 따른 쉐이더 // 노멀 및 여러맵 넣었을 때 차이점 (0) | 2021.05.04 |
0504_ 버텍스컬러 찍은 부분만 텍스쳐링 나오게하기 (0) | 2021.05.04 |