본문 바로가기

게임 개발101

11. Prefab 기능 구현 및 맵 제작 계획 수립 Prefab 기능 구현 - Prefab는 미리 만들어놓은 오브젝트 템플릿이다. - 이 기능은 사실 툴과 같이 개발되는게 가장 베스트이지만, 이번 프로젝트에서는 툴을 제외하고 그 시간에 다른 부분들에 시간을 투자하자는 전략을 세웠기 때문에 코드상에서 프리펩을 활용할 수 있도록 구현했다. - 내 엔진에선 특정 오브젝트의 상태를 저장하고, 그 오브젝트를 깊은 복사를 통해 불러와서 씬에 추가하는 용도이다. - 신경써서 작업한 부분은 모든 컴포넌트와 스크립트들에 Clone이라는 함수를 정의해서 내부적으로 얕은 복사가 일어나지 않게끔 처리해주는 부분이었다. - 이 기능이 유용하게 쓰이는 부분은 맵에 오브젝트를 배치할 때인데, 충돌체와 화면에 그려지는 FBX를 정렬하기 위해 Transform에서 회전이나 이동값을 미.. 2023. 8. 10.
10. Mesh와 Material 구조 변경 Mesh와 Material 구조 변경- 메쉬 구조의 경우도 이번에 FBX를 로드하면서 바꿔야겠다는 생각이 들었다. - 파일 하나에 여러 개의 메쉬가 존재하는 FBX 파일 특성 상 게임 오브젝트 하나당 하나의 정점 버퍼와 매칭되는 여러 개의 인덱스 버퍼를 가지고 있었던 기존 구조로 소화하기 어려웠다. - 기존 구조에서 이를 구현한다면 하나의 FBX파일을 로드하면 여러 개의 게임 오브젝트가 만들어져야 했기 때문이다. - 때문에 정점 버퍼와 그와 매칭되는 다수의 인덱스 버퍼를 하나의 MeshContainer라는 구조체로 두고, 이 구조체의 배열을 메쉬 클래스에서 관리하고, 렌더링할 때 가진 정점 버퍼와 인덱스 버퍼를 세팅해서 모두 렌더링해주는 방식으로 구현했다. struct IndexBufferInfo { C.. 2023. 8. 6.
9. Instancing 구현 Instancing이란? - 3D 공간상의 물체를 화면에 그리기 위해서 렌더링 파이프라인을 거쳐야 한다. - 같은 메쉬와 같은 머티리얼을 가진 물체가 여러 개 존재한다면, 각 물체들의 행렬값만 가져올 수 있으면 Input Assembler 단계를 거치지 않고 나머지 단계를 이어서 수행할 수 있지 않을까? - Instancing의 원리는 Input Assembler 단계에서 Vertex Buffer를 넘길 때 물체들의 행렬값을 담은 Instancing용 버퍼를 같이 넘겨서 그 버퍼를 통해 다른 물체들을 그리는 것이다. https://dev-treadmill.tistory.com/132 28. Instancing 붓 그리기로 치면, 전체적인 그림을 알고 있으면 빨간 붓을 들었을 때 이 참에 빨간 색이 들어간.. 2023. 8. 5.
8. Assimp 라이브러리 적용 Assimp 라이브러리 적용 - Assimp는 3D 메쉬 로드를 도와주는 오픈 소스 라이브러리이며, FBX말고도 OBJ와 같은 다른 확장자도 지원한다. - FBX SDK로 3D 메쉬를 로드할 수 있는데 굳이 Assimp를 추가한 이유는 하나의 씬을 불러올 때 각각의 메쉬의 월드좌표를 가져와야 하는데 마음처럼 잘 되지 않았다. - 노드를 탐색할 때 트리 구조로 탐색하는데, 부모의 행렬을 자식노드에게 넘겨줌으로써 월드행렬을 구해서 제자리에 위치시키려 했는데, 분명 같은 FBX파일임에도 Assimp로 불러왔을때의 값과 FBX SDK로 불러왔을 때의 값이 달랐다. - 더 시간을 들이면 FBX SDK에서도 해당 기능을 구현할 수 있었겠지만 공부할 것도 많고 당장 다음 주 월요일부터 맵 작업에 들어갈 예정이라 구현.. 2023. 8. 4.