ݺߣ

ݺߣShare a Scribd company logo
2015 페차쿠차
Rim Light 만들기
쪼꼬두유
2주전의 발표에서...
Rim Light란
림라이트 →
현실
게임
림라이트 →
세븐틴 정한(21)
만든 쉐이더 자랑
Rim Light 공식
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
• half : 중간 정밀도의 부동 소수점 숫자. 일반적으로 16비트, –60000에서
+60000까지 십진수로 3.3 자리의 정밀도
• saturate : value가 0보다 작으면 return 0, 1보다 크면 return 1.
• normal : object의 버텍스에서 수직으로 뻗어나오는 벡터
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
Rim Light 공식
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
• Dot : 닷, (AㆍB) 스칼라곱, 빛의 밝기를 계산하기 위해서 조명벡터와 노말벡터를 곱함
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
[1, 3, −2]·[4, −2, −1] = 1×4 + 3×(−2) + (−2)×(−1) = 0
http://www.gamedevforever.com/228
Rim Light 공식
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
• normalize : 벡터의 크기를 1로 만듦. 방향과 x,y,z 좌표는 똑같지만 크기를 1로
벡터의 크기가 너무 작으면 0으로 만들수도 있다.
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow(rim, _RimPower);
x = 3.0 / 3.742 = 0.802
y = 1.0 / 3.742 = 0.267
z = 2.0 / 3.742 = 0.534
• pow : x^y, 거듭제곱 값을 구함.
Rim Light 공식
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
• viewDir : View Direction, 빛이 object에 반사됐을 때의 벡터
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow(rim, _RimPower);
Shader Forge
Shader Forge
Shader Forge
Diffuse Diffuse
Power
Specular Gloss Normal Emission Tranmission Light
Wrapping
Diffuse
Ambient
Light
Specular
Ambient
Light
Custom
Lighting
Alpha Alpha
Clip
Refraction Outline
Width
Outline
Color
Vertex
Offset
DX11
Displacement
DX11
Tessellation
Shader Forge
Shader Forge
Shader Forge로 만든 쉐이더
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
Shader Forge로 만든 쉐이더
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
Shader Forge로 만든 쉐이더
Tags {"Queue"="Transparent"}
렌더링 순서를 결정하는데 사용하는 태그
1. Background : Skybox 같은 배경을 그릴때 사용
2. Geometry(default) : 대부분의 오브젝트를 그림, Opaque
를 사용하는 쉐이더들은 여기서 그림
3. AlphaTest : 나뭇잎 같은 것을 그릴때 사용
http://docs.unity3d.com/462/Documentation/Manual/SL-SubshaderTags.html
Shader Forge로 만든 쉐이더
Tags {"Queue"="Transparent"}
렌더링 순서를 결정하는데 사용하는 태그
4. Transparent : 반투명 오브젝트를 그릴 때
사용 오브젝트가 반투명하기 때문에 주변환경을 다 그리고
나서 그림
5. Overlay : 화염 같은 것을 그릴 때 사
용. 오버레이 효과를 그림
http://docs.unity3d.com/462/Documentation/Manual/SL-SubshaderTags.html
Shader Forge로 만든 쉐이더
Blend One One
Shader에서 계산한 오브젝트의 색상값과 이미 있는 스크린 버퍼에 있는 색상값을 섞어주는 구문
http://docs.unity3d.com/kr/current/Manual/SL-Blend.html
Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
Blend One One // Additive
Blend OneMinusDstColor One // Soft Additive
Blend DstColor Zero // Multiplicative
Blend DstColor SrcColor // 2x Multiplicative
Blend SrcFactor DstFactor
(Shader연산값 * SrcFactor) + (이미 스크린버퍼에 존재하는 색상값 * DstFactor)
만든 쉐이더 자랑
THANK YOU

More Related Content

2015 데브루키 페차쿠차 "Rim Light(림라이트) 만들기"

  • 1. 2015 페차쿠차 Rim Light 만들기 쪼꼬두유
  • 5. Rim Light 공식 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower); • half : 중간 정밀도의 부동 소수점 숫자. 일반적으로 16비트, –60000에서 +60000까지 십진수로 3.3 자리의 정밀도 • saturate : value가 0보다 작으면 return 0, 1보다 크면 return 1. • normal : object의 버텍스에서 수직으로 뻗어나오는 벡터 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower);
  • 6. Rim Light 공식 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower); • Dot : 닷, (AㆍB) 스칼라곱, 빛의 밝기를 계산하기 위해서 조명벡터와 노말벡터를 곱함 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower); [1, 3, −2]·[4, −2, −1] = 1×4 + 3×(−2) + (−2)×(−1) = 0 http://www.gamedevforever.com/228
  • 7. Rim Light 공식 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower); • normalize : 벡터의 크기를 1로 만듦. 방향과 x,y,z 좌표는 똑같지만 크기를 1로 벡터의 크기가 너무 작으면 0으로 만들수도 있다. half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow(rim, _RimPower); x = 3.0 / 3.742 = 0.802 y = 1.0 / 3.742 = 0.267 z = 2.0 / 3.742 = 0.534 • pow : x^y, 거듭제곱 값을 구함.
  • 8. Rim Light 공식 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower); • viewDir : View Direction, 빛이 object에 반사됐을 때의 벡터 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow(rim, _RimPower);
  • 11. Shader Forge Diffuse Diffuse Power Specular Gloss Normal Emission Tranmission Light Wrapping Diffuse Ambient Light Specular Ambient Light Custom Lighting Alpha Alpha Clip Refraction Outline Width Outline Color Vertex Offset DX11 Displacement DX11 Tessellation
  • 14. Shader Forge로 만든 쉐이더 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower);
  • 15. Shader Forge로 만든 쉐이더 half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); o.Emission = _RimColor.rgb * pow (rim, _RimPower);
  • 16. Shader Forge로 만든 쉐이더 Tags {"Queue"="Transparent"} 렌더링 순서를 결정하는데 사용하는 태그 1. Background : Skybox 같은 배경을 그릴때 사용 2. Geometry(default) : 대부분의 오브젝트를 그림, Opaque 를 사용하는 쉐이더들은 여기서 그림 3. AlphaTest : 나뭇잎 같은 것을 그릴때 사용 http://docs.unity3d.com/462/Documentation/Manual/SL-SubshaderTags.html
  • 17. Shader Forge로 만든 쉐이더 Tags {"Queue"="Transparent"} 렌더링 순서를 결정하는데 사용하는 태그 4. Transparent : 반투명 오브젝트를 그릴 때 사용 오브젝트가 반투명하기 때문에 주변환경을 다 그리고 나서 그림 5. Overlay : 화염 같은 것을 그릴 때 사 용. 오버레이 효과를 그림 http://docs.unity3d.com/462/Documentation/Manual/SL-SubshaderTags.html
  • 18. Shader Forge로 만든 쉐이더 Blend One One Shader에서 계산한 오브젝트의 색상값과 이미 있는 스크린 버퍼에 있는 색상값을 섞어주는 구문 http://docs.unity3d.com/kr/current/Manual/SL-Blend.html Blend SrcAlpha OneMinusSrcAlpha // Alpha blending Blend One One // Additive Blend OneMinusDstColor One // Soft Additive Blend DstColor Zero // Multiplicative Blend DstColor SrcColor // 2x Multiplicative Blend SrcFactor DstFactor (Shader연산값 * SrcFactor) + (이미 스크린버퍼에 존재하는 색상값 * DstFactor)