Computer Graphics

Chapter13. 조명과 음영

CodeJB 2021. 6. 8. 19:56

빛과 그림자

  • "Let there be Light" 조물주가 세상을 만들 때 가장먼저 빛을 만들었다.
  • 빛이 없으면 사물을 보는 것이 불가능하다
  • 사물의 색상은 빛이 물체에 흡수/반사됨을 통해 만들어진다
  • 빛이 물체에 비췰 때 그림자가 생성된다
  • 조명에 따라 물체에 음영이 발생한다

빛의 종류

  • 빛은 스스로 빛을 발산하는 광원(태양, 빛, 형광등 등..)으로부터 나옴
  • 그리고 다른 물체에서 반사되어서 나오는 빛.
  • 그래픽스에서는? 전역 조명지역 조명으로 나뉜다.
  • 전역 조명 : 모든 곳에서 빛이 존재한다. 다른 물체에서 반사되어서 나오는 빛을 일일히 계산하기 어려워 만든 빛이다. 아무리 구석으로 들어가도, 문을 닫아도 빛은 존재한다.
  • 지역 조명 : 광원에서 직접적으로 입사되는 빛

광원

  • 광원은 스스로 빛을 발하는 물체이다.
  • 이 광원은 면적 광원점 광원으로 존재한다.
  • 면적 광원 : 실제의 광원은 면적으로 존재한다(태양, 전구 등..)
  • 점 광원 : 면적 단위의 광원에서 나오는 빛의 효과를 계산하기는 어렵다. 그래서, 그래픽스에서는 점으로 근사화하여 사용한다.

  • 분산 점 광원 : 면적이 넓은 경우에는 여러 개의 점으로 근사화하여 사용한다.

광원의 종류

  • 위치성 광원 : 광원을 중심으로 모든 방향으로 확산된다.
  • 방향성 광원 : 빛이 물체면을 향하여 일정한 방향으로 진행한다.(원거리 광원)

  • 스포트라이트 : 광원을 중심으로 한 방향으로 향하나, 일정 범위각을 벗어나지 않음(무대 조명 등)

조명관련 벡터

  • 물체의 색 : RGB별로 빛의 세기를 별도 추적하여 계산하고, 최종적으로 합성한다. 망냑에 물체로 들어가는 빛은 백색광(꼭 아니어도 됨) 즉, 모든 색깔을 포함하고 있는 빛이다. 물체는 이 백색광 대부분을 흡수하고 파란색만 내보낸다면 청색광이 반사되고 우리 눈에 들어오게 된다. 

  • 벡터 : 광원벡터와 표면법선벡터의 각도(입사각)에 따라 반사광벡터의 방향이 결정된다. 그리고 사람이 실제로 그 물체를 관찰하고 있는 시점 벡터에 따라서, 빛이 매우 눈부실 수도 있고 음영이 보일 수도 있다.

주변광, 경면광, 확산광

  • Specular Reflection : 경면(거울) 반사(거울처럼 반사되는 빛이다. 이 경면광은 물체가 광을 그대로 흡수해버려서 물체의 색이 반사되지 않고 광의 색깔이 100% 반사되어 버린다.)
  • Diffuse Reflection : 확산 반사(경면광으로부터 주변광까지 서서히 확산되는 빛)
  • Ambient Reflection : 주변 반사(주변으로 부터 반사되어 들어오는 빛으로 높으면 높을 수록 빛이 비치지 않은 곳에서도 보이게됨)
  • 물체에 부딪힌 빛이 반사되어 여러 방향으로 진행한다.
  • 시선에 들어오는 반사광에 의해 물체 각 위치의 밝기가 달라진다.

주변반사(Ambient Reflection)

  • 광원에 직접 노출되지 않은 면에 밝기를 부여하는 것
  • 면마다 상수 크기의 밝기를 설정한다(마치, 전역 조명모델 효과와 유사하다)

- 주변광 계수 변화

  • 주변광만 부여한 경우

  • 주변광과 반사광을 함께 사용한 경우

확산 반사(Diffuse Reflection)

  • 난반사의 일종이다.
  • 빛의 확산 방향에 시점이 있는 경우 물체가 더욱 밝게 보여야 한다.
  • 실제는 복잡한 물체 표면의 방향, 재질 등에 따라 확산 방향이 달라진다. 하지만, 이를 다 계산하기에는 무리이다..
  • 따라서, 그래픽 처리시에는 완벽 확산체(모든 방향으로 확산됨)를 가정한다.

  • 하지만, 확산광의 세기는 고려를 해주어야 한다. 세기는 물체면이 서있는 방향에 따라 달라진다.(각도에 따라 달리잔다.)
  • 람베르트의 법칙 : 면의 밝기는 입사각의 코사인에 정비례하다. 

- 확산광의 효과

  • 면이 서있는 방향에 따라 차등적 밝기 부여
  • 입체감을 부여한다.

- 광원의 색과 물체의 색

  • 최종적으로 물체가 가지는 색상 = 빛의 색상 + 물체의 원 색상

경면 반사(Specular Reflection)

  • 반질반질한 표면에서 광원의 색을 그대로 반사하는 빛
  • 입사각과 반사각이 동일한 곳이다.

  • 시점이 정확히 반사광과 일치할 때 보인다.(시점을 기준으로 반대방향에서 입사한 빛만 보인다.)

확산계수, 경면계수, 광택계수

거리에 따른 빛의 약화

  • 약한 조명의 경우(촛불), 빛의 세기를 거리에 따라 다르게 조정하면 사실적인 효과가 가능하다(거리 제곱의 반비례 등..)

지역 조명 계산

  • 모든 광원(빨간 빛, 파란빛 등등 여러개의 빛)에서 나오는 빛을 모두 합산한다.
  • RGB에 대해서 각각 적용한다
  • 광원 특성과 물체특성의 값을 각각 곱하여 합산한다. 이렇게 반사되어 나오는 빛이 우리 눈에 보이게된다.

음영(Shading)

  • 실제로 우리의 얼굴은 하나의 면으로 이루어져 있지만,
  • 그래픽스 세계에서 우리의 얼굴은 여러 다각형(면)이 합쳐져서 만들어진다. 이 음영은 이 다양한 면에 색을 부여하는 것이다.
  • 플랫 Shading(Flat Shading) : 하나의 다각형을 하나의 색으로 칠한다. 빠르고 간단하다(가장 기본적이다)

  • 구로 Shading(Gouraud Shading) : 정점의 색을 보간하여 다각형 내부를 서로 다른 색으로 채운다. 경면광은 고려 안한다.

정점으로 보간하다보니까 아직 경계선들이 더 밝게 보이는 등의 문제가 생김

  • 퐁 Shading(Phong Shading) : 정점의 법선벡터를 보간하여 다각형 내부를 여러 색으로 채움. 경면광을 부여할 수 있음
  •                                                  : 음영을 적절히 줌으로서 3차원 물체 모델의 정밀도가 낮아도 부드러운 렌더링이 가능하다.

  • 미세면 모델링 : 블린, 쿡/토렌스 Shading 등...
    • 거친 면들에 대해 음영을 처리하는 Shading, 거친 면에 따라 확산광을 적절히 조절한다.