본문 바로가기

게임 개발/[D3D_Portfolio] DirectX3D 팀 포트폴리오 작업일지19

19. 거울 반사 효과 구현 간혹 특정 맵이나 구간은 재질에 따라 물체가 반사되는 등의 효과를 구현해야 한다. 우리 프로젝트도 그런 구간이 존재했고, 심지어 대부분의 맵의 바닥이 그런 식으로 구현되어 있었다. 다른 작업들에 의해 거울 반사 구현이 뒤로 밀리다가 지금에서야 작업하게 되었다. 알아보니 반사 효과를 구현하기 위해서는 SSR(Screen Space Reflection) 기법과, 반사 행렬을 이용한 방법이 있었는데, SSR 기법은 해당 픽셀의 노말 벡터와 Depth Buffer를 계산해서 반사벡터를 만든 후 반사 벡터를 따라서 충돌된 픽셀의 색을 취하는 방법이라고 한다. 언리얼, 유니티 엔진과 같은 상용 엔진에서 사용하는 기법이라고 하는데, 아무래도 레이를 이용하다 보니 무겁지 않을까 생각하여 다른 방식을 고려해보기로 했다... 2023. 10. 7.
18. 그림자 완성 광원에 의한 그림자는 모두 Depth Map 기반으로 구현하였다. * Depth Map이란 ? 물체의 깊이값을 기록해두는 하나의 텍스쳐를 의미한다. - 물체가 그려지기 전 RenderShadow라는 함수를 통해 그림자를 그려줄 물체의 깊이값을 텍스쳐에 기록해둔 후, 빛을 적용할 때, 그 물체가 다른 물체에 가려져있는지를 Depth Map을 통해 확인해서 가려진 부분의 픽셀을 어둡게 해주는 원리이다. - 이 Depth Map에 깊이를 기록할 때 유념해야 할 것은 빛의 위치에서 물체의 깊이값을 측정해야 하는 것이다. - 빛이 그려질 때 이 카메라의 뷰행렬, 투영행렬을 곱한 VP행렬을 상수버퍼로 GPU로 넘겨주어, 셰이더에서는 Depth Map에 기록된 깊이값과 Vertex Shader로부터 넘겨받은 빛이 적.. 2023. 10. 7.
17. PhysX를 이용한 Mesh Collider 구현 Mesh Collider란? - 현재 우리 엔진은 모든 충돌 처리를 PhysX를 통해 처리하고 있는데, 한 가지 문제점은 구부러진 펜스같은 것들은 표현하기 어렵다는 것이다. - 현재 내가 구현해놓은 Geometry는 박스, 구, 캡슐인데, 플레이어의 접근을 막기 위해서는 펜스의 모양을 흉내낸 여러개의 박스 콜라이더를 잔뜩 붙여야 했다. - 팀원과 회의를 통해 유니티에서 메쉬 콜라이더라는 충돌체를 지원한다는 얘기를 들었고 이 충돌체는 메쉬가 가진 정점과 인덱스를 이용해서 충돌체를 만들어낸다. 이와 비슷한 것을 PhysX에서 TriangleMeshGeometry라는 이름으로 지원한다는 것을 어렴풋이 알고 있었기 때문에 PhysX Docs를 참고해서 기능을 구현할 수 있었다. - 우리 엔진에서 메쉬란 Mesh.. 2023. 9. 12.
16. 불러온 FBX 파일 데이터를 파일입출력을 통해 저장 불러온 FBX 파일 데이터를 파일입출력을 통해 저장 - FBX는 씬, 카메라, 조명과 같은 다양한 정보들을 포함하고 있다. - FBXLoader 클래스는 여기서 메쉬에 해당하는 것들만 추출해서 저장하는 역할을 하는데, 트리를 재귀적으로 탐색하는 구조다보니, 시간이 오래 걸린다는 단점이 있다. - 애니메이션 클립의 경우 최종 행렬을 구하는 로직이 모든 부모 좌표계로 향하는 행렬을 곱해줘서 구하는 구조이기 때문에 이 부분이 특히 시간이 오래 걸린다. - 한 번 불러오고 난 후에는 그냥 불러온 데이터를 파일입출력을 통해 바이너리로 저장하고 다음부턴 그 파일을 다시 불러오는 식으로 구현하면 빠르지 않을까? - 오랜만에 파일 입출력을 사용해서 꽤나 애먹긴 했지만, 그래도 나름 성공적으로 구현했다. void Mes.. 2023. 8. 25.