게임엔진

DirectX)Lighting #1

PJNull 2022. 1. 5. 12:21
728x90
반응형

게임제작은 영화 제작과 매우 유사한 부분이 많다. 그 중에서 조명은 분위기나 상황등을 나타낼수 있는 중요한 요소중 하나이다. 어떤 물체라도 우리 모니터에 랜더링되어 나온 결과물 자체는 2차원이지만 3차원 느낌이 나는 이유는 조명에 의한 원근법과 명암 차이가 보이기 때문이다. 엔진에서는 대표적인 3가지 조명이 존재한다.

Directional Light

디렉셔널라이트는 직선의 일정한 방향으로 빛을 비추는 조명이다. 태양광과 같은 역할을 수행하며 보통 한 Scence당 1개의 디렉셔널라이트를 원칙으로 한다.

Point Light

포인트 라이트는 구와 같은 정해진 범위까지만 빛을 작용하는 원리이다. 보통 횃불이나 전구같이 한정된 빛을 발산하는 조명을 표현할때 쓰인다. 

SpotLight

스포트라이트는 무대의 스포트라이트와 같은 원리로 원뿔모양의 조명을 의미한다. 주로 무대의 스포트라이트나 손전등과 같은 조명을 표현할때 사용된다.

빛 구현

이러한 각각의 조명들이 내보내는 빛을 구현해야된다. 여기서 빛을 구현한다는 의미는 빛의 영향에 의해 오브젝트들의 각각의 픽셀들의 색의 변화를 의미한다. 하지만 현실적으로 게임에서 정확하게 입자단위의 빛을 계산한다는 것은 불가능에 가깝다. 그렇기에 빛에 근접하는 기법들을 이용하여 빛을 표현한다.

diffuse (난반사광)

diffuse는 빛과 물체의 normal Vector와의 각도에 따른 빛의 정도를 나타내는 기법이다. 이를 람베르트 코사인법칙이라고한다. 

즉, diffuse는 빛과 normal Vector간의 각도를 θ라고 했을때, cosθ만큼의 영향을 받는다.

 

ambient (환경광)

ambient는 빛을 보장해주는 기법이다. 물체가 빛을 받지 못하더라도 특정 수치에 따라 최소한의 빛을 보장해주는 역할을 한다.

 

specualr (정반사광)

specular는 반사광과 카메라간의 각도에 의한 빛의 강도를 나타낸것이다.

 

728x90
반응형