For me
[DirectX12] 14) Normal Mapping 본문
Normal Mapping (Bump Mapping)
Normal Mapping을 사용하지 않을 때
Vertex Shader에서 정해준 각 정점의 값의 법선벡터로 내부의 점의 노말값을 보간
Normal Mapping을 사용하지 않고 Vertex 값을 무수히 늘릴 때
다양한 색 처리가 가능해짐. 하지만 프로그램 실행속도가 현저하게 느려지고, 연산량도 기하급수적으로 늘어남
Normal Texture
u,v 좌표에 해당하는 각각의 픽셀에 Normal 값을 전달해주는 역할
Normal Texture은 local 좌표계를 사용하지 않고, 별도의 좌표계를 사용함.
그 이유는 Mesh 자체는 local 기준으로 지속적으로 변화하고, Normal Texture은 tangent Space(접하는 평면)을 사용
좌표 자체를 tangent Space로 만들었기 때문에 노말벡터인 N 으로 나타나기 때문에 파란색으로 보임.
Shader
더보기
float3 viewNormal = input.viewNormal;
if (g_tex_on_1)
{
// [0,255] 범위에서 [0,1]로 변환
float3 tangentSpaceNormal = g_tex_1.Sample(g_sam_0, input.uv).xyz;
// [0,1] 범위에서 [-1,1]로 변환
tangentSpaceNormal = (tangentSpaceNormal - 0.5f) * 2.f;
float3x3 matTBN = { input.viewTangent, input.viewBinormal, input.viewNormal };
viewNormal = normalize(mul(tangentSpaceNormal, matTBN));
}
'DirectX12' 카테고리의 다른 글
[DirectX12] 16) Quaternion (0) | 2023.01.19 |
---|---|
[DirectX12] 15) SkyBox (0) | 2023.01.18 |
[DirectX12] 13) Shadow (0) | 2023.01.17 |
[DirectX12] 12) Light - 2 (0) | 2023.01.17 |
[DirectX12] 11) Light - 1 (이론) (1) | 2023.01.17 |