FBX 텍스쳐 매핑
- FBX 텍스쳐 매핑은 FBX를 로드할 때 불러온 UV값과 텍스쳐를 통해 매핑된다.
- 이 작업을 할 때 특정 FBX 파일은 잘 읽어오는데 지금 사용해야하는 FBX는 제대로 읽어오지 못하는 버그가 있었다.
- 확인한 사항
1. 텍스쳐는 제대로 지정되어있었나? (O)
2. 그렇다면 그래픽스 디버깅에서 픽셀 셰이더에 SRV가 잘 매핑되었는가? (O)
3. 그렇다면 UV값이 정상적으로 매핑되었는가? (X)
- 이 헤딩하는 과정을 통해 현재 Deferred Rendering에 의해 저장되는 Position, Normal, Color가 제대로 들어가는지와 해당 구간에 BP를 거는 등의 디테일한 작업을 몸소 익힐 수 있었다.
때문에 컬러값이 아래와 같이 하나의 색상으로 찍히고 있었다.
- 이런 문제가 발생한 이유는 uv를 가져오는 코드가 잘못됐기 때문이었다.
FbxVector2 uv = _pMesh->GetElementUV()->GetDirectArray().GetAt(_vertexCount);
- 위 코드를 아래와 같이 변경했더니 깔끔하게 해결되었다.
FbxGeometryElementUV* pUV = _pMesh->GetElementUV(0);
FbxVector2 uv = pUV->GetDirectArray().GetAt(_index);
Toon Shading
- 툰 셰이딩은 은비로운 개발일기(https://agh2o.tistory.com/21)에서 학습한 내용을 토대로 하였다.
- 빛이 물체에 닿아 적용되는 Diffuse 값은 람베르트 코사인법칙에 의해 빛의 휘도는 입사벡터와 해당 정점의 법선벡터의 내적을 통해 구할 수 있다.
- 여기서 결정되는 색상을 특정 구간별로 지정해놓으면 마치 만화에서 사용되는 음영을 적용시킬 수 있다.
ex)
0.0~0.3 -> 0.3
0.3~0.6 -> 0.6
0.6~0.9 -> 0.9
- Diffuse가 0~1 사이의 값이니 3을 곱하면 0~3 사이의 값이 된다.
- 여기서 구해진 값에 올림을 하게 되면 1~3 사이의 값을 구할 수 있는데 이걸 다시 3으로 나누게 되면
우리가 원하는 구간별로 구별되는 색상을 구할 수 있다.
float toonRatio = (ceil(diffuseRatio * 5) / 5.f);
color.diffuse = g_light[lightIndex].color.diffuse * toonRatio * distanceRatio;
color.ambient = g_light[lightIndex].color.ambient * distanceRatio;
color.specular = g_light[lightIndex].color.specular * specularRatio * distanceRatio;
-빛을 계산하는 부분에서 이렇게 세팅해주었다.
'게임 개발 > [D3D_Portfolio] DirectX3D 팀 포트폴리오 작업일지' 카테고리의 다른 글
8. Assimp 라이브러리 적용 (0) | 2023.08.04 |
---|---|
7. 충돌 구현 (0) | 2023.07.25 |
5. FBX 로드 (0) | 2023.07.20 |
4. Bloom 구현 (0) | 2023.07.19 |
3. Particle System 구현 및 Bloom 구현 중 (0) | 2023.07.18 |
댓글