Lighting1

ㅋㅋ·2022년 7월 22일
0

DirectX12강의

목록 보기
22/39

종류

directinal : 먼 곳에서 일정한 방향으로 균일하게 쏘는 빛

point : 특정한 곳에서 일정 반경까지 쏘는 빛 (멀수록 약해짐)

spot : 일정한 부분만 비추는 빛


특정한 점에 접하는 평면에 수직하는 방향 벡터를 normal 벡터라 한다

평면에 속하는 벡터는 tangent 방향 벡터라 한다.

normal과 tengent에 수직 방향인 벡터를 binormal 벡터라 한다.


픽셀 쉐이더

모든 메시의 모든 픽셀마다 불리게 됨

이 때 빛에 영향을 받은 색상을 결정


특정 좌표의 색상 값 RGB (1, 1, 1)이 있을 때

해당 좌표가 받는 빛에 따라 색상 값이 변하게 됨

=>

변화 시킬 비율을 구하는 것이 관건


빛의 성분

diffuse 난반사

Lambert’s cosine law

=> 물체에 들어오는 빛의 각도에 따라 반사되는 빛의 세기가 달라짐

노말 벡터와 빛의 방향 벡터를 통하여 두 벡터의 끼인 cosθcos\theta를 구함

빛 벡터에 -를 취해 방향을 반대로 바꾸고(노말 벡터와 원점을 동일하게)

두 벡터를 내적

=> 두 벡터 모두 방향 벡터이기 때문에 크기가 1임

=> 내적 값 = cosθcos\theta

ambient 환경

빛이 환경에 따라 반사하며 모든 물체가 조금이나마 빛을 받게 됨

=>

빛이 거리내의 모든 물체가 최소한의 빛을 받는 것을 보장

specular 정반사

빛이 물체에 부딪힌 후 반사 같은 각도로 반사되어 나오는데 이 반사된 빛이 눈부심을 만듬

물체에서 카메라까지의 벡터와 반사된 빛의 벡터의 사이 각에 따라 빛이 세기가 달라짐

노말 벡터와 빛이 들어올 때의 방향 벡터를 통해

빛이 나갈 때의 방향 벡터가 2cosθ2cos\theta만큼 차이난 다는 것을 알 수 있음

카메라의 위치와 물체의 위치를 통해 카메라의 방향 벡터를 알 수 있음

빛이 나갈 때 방향 벡터와 카메라 방향 벡터를 내적하여 cosθcos\theta를 알 수 있음


이미지 출처


directinal
빛의 세기가 모두 일정하며 방향이 같기 때문에 빛 오브젝트의 look 벡터 이용

point
광원의 위치, 광원이 영향을 미치는 거리 필요

spot
광원의 위치, 빛의 방향, 최대 거리, 빛의 각도

광원에서 물체로의 벡터와 빛의 방향 벡터를 내적하면 투영된 벡터의 크기를 얻을 수 있고,

해당 크기가 최대 거리를 넘는다면 빛의 영향을 받지 않음

광원에서 물체로의 방향 벡터를 구하여 투영된 벡터와 내적 후 acrcos를 통하여

각도를 알 수 있고 빛의 영향을 판단할 수 있음


보통 point와 spot은 거리에 따라 빛의 세기가 약해지도록 구현

0개의 댓글