물체의 입체감과 부피감을 표현하기 위해 조명(Lighting)과 음영(Shadering)이 중요하다. 일반적으로 조형 모형이 정확할 수록 그 계산의 비용은 크고 영화와 같은 미리 렌더링 해두어도 되는 장면은 게임같은 실시간 렌더링을 해야하는 장면보다 비용이 더 높다.
재질(material)은 빛이 물체의 표면과 상호작용하는 방식을 결정하는 속성들의 집합이라고 할 수 있다. 흡수하는 빛의 색, 표면 아래 재질의 굴절률, 표면의 매끄러운 정도, 투명도 등 ..
광원은 다양한 빛의 색을 낼 수 있고 여러가지 세기(intensity)로 방출한다. 광원에서 나온 빛이 물체와 충돌하면, 그 빛의 일부는 흡수되고 일부는 반사된다.
대부분 게임과 같은 실시간 응용 프로그램이 사용하는 조형 모형은 국소 조명 모형(local illumination model)이다. 국소 모형에서는 각 물체를 다른 물체와는 독립적으로 처리하며, 오직 광원에서 직접 방출된 빛만 다룬다. (장면의 다른 물체에 반사되어서 현재 물체에 도달한 빛은 무시한다. )
1. 법선 벡터
면 법선(face normal)은 다각형의 면한 방향을 나타내는 단위벡터로 다각형의 모든 점에 수직인 단위벡터이다. 표면 법선(surface normal)은 표면의 한 점의 접평명(tangent place)에 수직인 단위벡터이다. 조명 계산을 위해서는 삼각형 메시의 표면의 모든 점에서 표면 법선이 필요하다. 삼각형 정점들의 세 꼭짓점에서만 표면 법선을 지정해도 필요한 모든 표면 법선을 얻을 수 있다. 파이프라인은 래스터화 과정에서 그 세 정점 법선을 보간해서 표면 법선들을 생성한다.
2. 삼각형 법선 벡터 계산
다각형 메시는 미분이 대부분 불가능하여 정점 법선 평균 기법(vertex normal averaging)을 사용한다. 메시의 임의의 정점 v의 정점 법선n을 그 정점을 공유하는 메시의 모든 다각형의 면 법선의 평균을 근사한다.
3. 법선 벡터의 변환
(A)에서 벡터 u와 n은 수직이다. 여기에 비균등 비례변환으로 (B)uA와 nA는 더 이상 수직이 아니다. 변환된 uA에 수직인 nA를 구하기 위해서는 아래와 같은 과정을 거쳐야 한다.
※ 전치 행렬이란 ? 선형대수학에서 전치 행렬은 행과 열을 교환하여 얻는 행렬이다. 즉, 주대각선을 축으로 하는 반사 대칭을 가하여 얻는 행렬이다.
static XMMATRIX InverseTranspose (CMMATRIX M)
{
XMMATRIX A = M;
A.r[3] = XMVectorSet(0.0f, 0.0f, 0.0f, 1.0f);
XMVECTOR det = XMMatrixDetermainant(A);
return XMMatrixTranspose(XMMatrixInverse(&det, A));
}
'🎯 game engine > ◽ directX12' 카테고리의 다른 글
[DirectX12] 큐브맵 만들기 / StructuredBuffer (0) | 2024.11.26 |
---|---|
[DirectX12] 스텐실(stencil) 거울 만들기 (0) | 2024.11.07 |
[DirectX12] 조명의 종류 (0) | 2023.12.19 |
[DirectX12] 원기둥의 정점 찍기/렌더링 과정 이해하기 (1) | 2023.12.12 |
[DirectX12] Direct3D 초기화 과정, 그래픽 프로그래밍의 CPU와 GPU의 상호작용 (1) | 2023.12.06 |
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!