본문 바로가기
Unity

[Unity] Lim 라이트와 Fresnel 공식 (쉐이더 스타트업)

by 소리쿤 2023. 2. 12.

둘의 상관관계는 Fresnel 공식으로 Lim 라이트를 구현할 수 있음이고,
Fresnel 공식의 근간은 물체가 기울 수록 반사가 잘 된다임
 
원래는 금속, 비금속에 따라서 반사율이 좀 달라진 것까지 반영한다고 하는데, 그거는 잘 모름
암튼 아래 Lim 라이트 구현에 사용하는 이유는, 물체가 기울 수록 밝아진다. (반사가 잘 된다) 임
 
Lim 라이트가 뭐냐면
 

쉽게 말하면 후광, 역광인 듯

사진 출처:http://rapapa.net/?p=2381 

Rim Light in Unity / 림라이트 – Rapapa Dev Story

캐릭터가 배경과 살짝 구분되게 라이팅을 먹여주는 셰이더를 만들 수 없을까? 뒷쪽에서 비치는 빛을 구현해주면 캐릭터의 외곽 라인이 빛나면서 배경과는 돋보이게 할 수 있지 않을까? 림라이

rapapa.net

 
어떻게 구현하냐면...
 
물체 to 카메라 벡터(V), 노말 벡터(N) 일 때,
V ㅇ N 을 하이라이트 정도로 취급하면 됨
 
그러면 카메라에 가까운 쪽은 밝고, 먼 쪽은 어두운데, 이걸 뒤집으면 
가까운 쪽은 어둡고, 먼 쪽은 하얗게 되는 그런 효과...

void surf(Input IN, inout SurfaceOutput o)
{
	fixed4 d = tex2D(_MainTex, IN.uv_MainTex);
    o.Albedo = d.rgb;
    o.Alpha = d.a;
    
    o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
    
    float rimVal = dot(IN.viewDir, o.Normal);
    float invRimVal = 1 - rimVal;
    float3 rimVec = pow(invRimVal, _RimPower) * float3(1, 0, 0);
    
    o.Emission = rimVec;
}

요렇게 구현하면 댐