응애맘마조

Ambient, Diffuse, Specular 본문

공부/3D과제

Ambient, Diffuse, Specular

TH.Wert 2023. 6. 7. 20:26

주의 : 해당 게시물에서 작성될 내용은 과제를 해결하기 위해 출처의 내용을 그대로 작성한 부분이 많으며 일절 광고나 수익 창출 목적으로 쓰인 것이 아님을 밝힙니다.

Ambient, Diffuse, Specular, Combined

위의 이미지 순서대로 곱해지면서 물체에서의 광원을 비추면서 보이는 부분과 비치지 않으면서 검은색으로 보이는 부분이 나타나게 됩니다.


Ambient

어두운 상태에서도 World 어딘가엔 조명이 있습니다. (월광이나 멀리 떨어져 있는 조명이 해당됩니다.) 그렇기 때문에 오브젝트는 완전히 어두워지지 않고 희미하게 비칩니다. 하나의 광원에서 오는 것이 아니고 직접적으로 보이지 않더라고 주변에 퍼져있는 광원에서 온다고 볼 수 있습니다. 그래서 반사가 될 때 여러 방향으로 퍼지게 됩니다. 코드로는 빛의 색상을 정하고 이를 작은 상수 ambient요소와 곱하고 오브젝트 색상과 곱하여 이 값을 사용합니다.


Diffuse

모든 물체마다 표면이 다르고 표면이 다르기에 반사도 다릅니다. 따라서 표면 재질이 거칠다면 물체를 비추는 빛은 여러 방향으로 불규칙하게 반사됩니다. 그렇지만 현실에서 일어나는 이 현상을 모두 렌더링 하는 것은 불가능하며 근사치로 모델을 사용합니다. 모든 방향에 균일하고 같은 세기로 비춘다고 가정하고 광원과 표면에서 의 법선 벡터의 사이각 θ에 대한 cos값으로 빛의 세기를 결정합니다. 0˚에 가까울수록 1이 되고 90˚에 가까울수록 0이 되며 90˚를 넘어간다면 음수가 됩니다. 음수가 나오는 값은 RGB에서 검은색으로 처리합니다.


Specular

Diffuse 이후에 플레이어가 바라보는 방향이 됩니다. 법선 주위 벡터로 빛의 방향을 반사하면서 반사 벡터를 계산하고 그 벡터와 바라보는 View 방향 사이의 거리를 계산합니다. 그러면 두 벡터 사이의 각이 가까울수록 Specular의 강도는 강해지고 멀수록 약해집니다. 오브젝트를 통해 반사된 빛의 방향을 보면서 하이라이트를 보는 것이 목적이 됩니다.

읽어주셔서 감사합니다.

'공부 > 3D과제' 카테고리의 다른 글

맵 매핑  (0) 2023.06.13
박스와 맵 출력하기  (0) 2023.06.11
레이 캐스팅, 레이 트레이싱, 레이 인터섹트  (0) 2023.06.01
캐릭터 만들기  (0) 2023.05.31
함수 포인터  (0) 2023.05.25
Comments