[유니티 쉐이더 스타트업] Part10 | 디지털 라이트 이론

jungizz_·2023년 2월 19일
0

Unity Shader StartUp

목록 보기
10/17
post-thumbnail

1. 디지털 라이트

  1. 디렉셔널 라이트 (Directional Light)
    • 직진성을 가지며 '방향'정보만을 가진다.
    • 가장 가벼운 라이트
  2. 포인트 라이트 (Point Light)
    • 점 모양의 광원이며 사방으로 뻗어나간다.
    • 둥근 모양의 라이트 혹은 일정 범위의 국지적 분위기 표현
  3. 스팟 라이트 (Spot Light)
    • 특정 부분 강조, 표현 시 사용


2. 디지털 라이트의 원리

  • '물체에 빛을 비추면 밝아진다.'라는 것을 수학으로 구현
  • 빛이 Plane을 향할 때 가장 밝다
    -> 빛의 방향과 Plane의 앞 방향이 마주볼 때 가장 밝다
    -> 두 방향의 각도가 90도가 되면 가장 어둡다.


3. 벡터

  • 조명 벡터노멀 벡터가 서로 마주보고 있을 때 그면은 가장 밝다.

4. 벡터의 특성

  1. 벡터의 위치는 의미가 없다.
  2. 벡터의 표시 -> ex) float2(0.5, 0.5)
  3. 벡터를 음수로 바꾸면 뒤집어진다.
  • XYZ는 RGB와 동일
    - float3(1, 0, 0)은 빨간색을 나타내기도 하면서 X쪽으로 길이가 1인 화살표를 나타낸다.
    -이것이 화살표 색상의 의미이다

5. 노멀 벡터 (Normal Vector)

  • 노멀 벡터가 면에 있으면 부드러운 라이팅을 구현할 수 없으므로 요즘에는 노멀 벡터가 버텍스에 있다.
  • 만약 각진 형태(Hard Edge)를 만들고 싶다면 한 버텍스에 노멀이 3-4개가 필요하며, 각 노멀은 각 면의 밝기를 나타내는 연산을 한다. (버텍스를 복사하여 같은자리에 표현한다.)

☑️ 최근에는 각진 형태를 표현하면 오히려 버텍스의 양이 더 늘어난다!

6. 벡터의 연산

  • 벡터의 내적 (Dot)
    - 두 벡터의 각도 차이를 숫자로 표현한 것
    - 단위 벡터 기준으로 두 벡터 사이 각도의 cos 값
    - 두 벡터 각도 차이가 0이면 1, 90도이면 0, 180도이면 -1 (수직일 때 0이다.)
    - float3(a, b, c) • float3(x, y, z) = ax + by + cz

7. 벡터 연산을 이용한 디지털 조명 연산

  • 가장 밝은 경우를 내적 연산하면 -1 (cos180 = -1)
  • 가장 밝은 경우인데 -1이면 곤란하므로 뒤집힌 상태의 조명벡터를 사용하는 것이 일반적이다. 유니티에서도 조명벡터를 뒤집힌 채로 받아온다. (cos0 = 1)
  • 구(Spere)가 디렉셔널 라이트를 받을 때 각 버텍스 위치별 내적 값
profile
( •̀ .̫ •́ )✧

0개의 댓글

관련 채용 정보