[유니티 쉐이더 스타트업] Part 09 | Lambert(램버트) Blinn Phong(블린 퐁)

jungizz_·2023년 2월 16일
0

Unity Shader StartUp

목록 보기
9/17
post-thumbnail

1. 유니티에 내장된 라이팅 구조

Standard Shader vs Legacy Shader

  • Standard Shader
    :물리 기반 쉐이더 라이트를 가지기 때문에 모바일과 같은 저 사양 기기에서 구동하기에는 다소 무겁다.
  • Legacy Shader
    : 유니티4 이전의 라이트 구조이며 물리 기반 쉐이더보다 품질은 떨어질 수 있지만 상대적으로 가볍다. 가볍게 처리해야하는 모바일 프로젝트에 적합하다.
  • 하지만 최근에는 하드웨어 성능이 높아지면서 물리 기반 쉐이더가 모바일에서도 표준이 되고 있다.
  • 물리 기반 쉐이더의 구조 (Standard Shader)
struct SurfaceOutputStandard
{
  fixed3 Albedo; //물체의 기본 색상
  fixed3 Normal; //NormalMap
  fixed3 Emission; //빛의 영향을 받지 않는 색상 
  half Metallic; //재질이 금속인가 아닌가?
  half Smoothness; //재질이 거친가 매끈한가?
  half Occlusion; //차폐되어 어둡게 되는 강도 
  half Alpha; //알파
};
  • 물리 기반 쉐이더 이전의 쉐이더 구조 (Lambert, Blinn Phong)
struct SurfaceOutput
{
  half3 Albedo; //물체의 기본 색상
  half3 Normal; //NormalMap
  half3 smission; //빛의 영향을 받지 않는 색상
  half Specular; //Specular의 넓이. 얼마나 넓은 하이라이트가 나오는가. 수치가 높으면 하이라이트가 작아진다.
  half Gloss; //Specular의 강도 순수한 Specular의 Opacily 같은 느낌 
  half Alpha; //알파
}

☑️즉, 유니티에 내장된 라이팅은 총 3가지

  • Lambert
    : Specular 공식이 없고 단지 빛에 의한 밝고 어두움 구현
  • Blinn Phong
    : 가벼운 Specular 공식을 가지고 있기 때문에 보는 각도와 조명 각도에 따라 계산된 특정 색의 하이라이트 동그라미로 표현됨
  • Standard
    : 물리 기반 쉐이더

2. Lambert 라이팅

  • Standard 라이팅 대신 Lambert 라이팅을 사용하기 위해 라이팅 함수 이름을 바꿔주고, 라이팅 함수의 구조체도 구형 구조체 SurfaceOutput으로 바꿔준다.
  • 겉보기에 큰 차이는 없지만 가장 가벼운 라이팅 구조이다.
  • o.Emissiono.Normal을 그대로 사용할 수 있다.


3. Blinn-Phong 라이팅

  • 위와 동일하게 BlinnPhong 라이팅 함수 이름으로 바꾸고, 라이팅 함수의 구조체도 구형 구조체를 사용한다.
  • 또한, Specular를 가동하기 위해 추가적으로 데이터를 입력한다.
    • o.Gloss: Specular의 강도 (0이면 둔탁한 재질, 1이면 매끄러운 재질)
    • o.Specular: Specular의 크기

  • _MainTex에 어두운 텍스쳐를 넣거나, o.Albedo에 색이 어둡게 들어가도록 강제로 만들어 주어서 하이라이트를 확인한다.

☑️ BlinnPhong 공식의 특이한 예외

Properties
{
  _MainTex("Albedo (RGB)", 2D) = "white" {}
  _SpecColor("Specular Color", Color) = (1, 1, 1, 1)
}
float4 _SpecColor; //에러 !!
  • 위와 같이 _SpecColor를 받는 float4 _SpecColor;를 선언하면 에러가 발생한다.
  • _SpecColor는 BlinnPhong 공식이 구현된 내부 코드안에서 받고있는 예약어이며 절대로 코드 내부에서 받아서는 안되고 다른 이름을 써서도 안된다.
profile
( •̀ .̫ •́ )✧

0개의 댓글

관련 채용 정보