[개발일지] 엔진 툴 제작 시작!

13
Postingan ini belum diterjemahkan ke Bahasa Indonesia. Menampilkan teks asli.
  • 만들어놓은 UI엔진이 1차 완성되어서 엔진툴 제작을 시작했습니다.

  • 저 UI들은 윈도우에서 제공하거나 QT같은 외부 라이브러리를 사용하는 것이 아닌 D3D11로 하나하나 다 직접 픽셀 렌더링을 하고 있는 겁니다.

  • 당연히 인게임 안에서도 그대로 사용 됩니다.

  • 하단 우측에 보이는 '콘솔'창을 로그용으로 처음 만들고 AI API를 만들어서 MCP로 AI에 붙였습니다.

  • 그다음 컨텐츠 브라우저를 만들었습니다. 드래그도 지원하고 마우스 오른쪽 버튼을 통해서 삭제나 이름 바꾸기 등도 현재는 지원합니다.

  • 그후에 프로젝트 시스템을 만들었습니다. 확장자는 .markproject입니다. json구조로 되어있습니다.

  • 프로젝트를 생성하고 열고 저장하는 것까지 만들고 Scene을 구성하기 위해서 언리얼의 아웃라이너 처럼 노드 계층 시스템을 만들었습니다.

  • 제 엔진의 모든 Scene은 기본적으로 Root 노드 하나를 가지고 그 아래에 붙게 되어있습니다. Root Node는 삭제가 불가능합니다.

  • Scene파일은 SceneName.scene.json이라고 되어있는데요. 툴에서는 json 확장자를 쓰지만 최종적으로 게임에 올라갈때는 json확장자가 빠지고 바이너리 파일(SceneName.scene)로 올라갑니다.

  • 바이너리 형태는 fread나 기타 파일IO API들이 단 1번의 로드로 한꺼번에 메모리에 Scene 계층 정보등을 적재 가능하도록 만들었습니다.

  • 그러핟고 Scene내에 존재하는 모든 지오메트리 데이터를 읽지는 않고 계층 정보 및 연결된 파일 명만 읽어옵니다.

  • 이걸 한번에 다 로드할지 백그라운드로(쓰레드)로 부분 로드 할지는 게임의 특성에 맞게 클라이언트에서 정하게 설계할 예정입니다.

  • FBX나 Texture등도 컨텐츠 브라우저에 임포트 시키면 캐시 디렉토리를 만들어서 제 엔진에서 쓰일 최적화된 .model파일이나 Texture는 D3D면 BC 압축된 텍스쳐, iOS나 맥 또는 안드로이드면 ASTC와 같은 압축 텍스쳐로 변형되서 그걸 툴에서 사용하게 했습니다. 게임에 올라가는 데이터도 그것이 올라갑니다.

  • FBX직접 사용은 의도적으로 막습니다. 너무나 비효율적인 구조여서요.

  • 뷰 화면에 툴에서 일반적으로 쓰이는 그리드를 깔았고.. 에디터용 카메라를 설치 했습니다.

  • WSAD와 마우스로 유니티랑 똑같은 방식으로 컨트롤이 현재 가능합니다.

  • 뷰 우측 상단에 카메라 컨트롤시 좌표축이 똑같이 돌아 갑니다. 마찬가지로 유니티처럼 클릭하면 해당 클릭된 좌표축으로 부드럽게 화면이 이동합니다.

  • 내장 오브젝트로 박스 하나 만들어서 올려봤습니다.

  • 이제 본격적인 게임 개발을 위한 툴 제작에 들어갑니다! 유니티나 언리얼처럼 범용적인 엔진은 아닙니다.

  • 저 편하라고 만드는것 입니다.

  • 스크립트는 언리얼은C++ 유니티는 C#을 쓰지만 저는 luau(https://luau.org)를 쓰기로 결정했습니다.

  • luau는 lua를 퍼포먼스 튜닝과 보안을 위한 여러가지 API들이 제거된 커스텀 lua스크립트 엔진인데요..

  • 로블록스가 luau로 만들어졌습니다.

  • luau는 luajit처럼 jit컴파일도 가능하지만 가급적이면 vm에서 돌아가는 그대로 쓰기를 제작자는 유도하고 있습니다.

  • 심지어 vm그대로 돌아가도 jit만큼 빠르도록 튜닝이 충분히 되었다고 설명되어있습니다.

  • 그리고 luau는 로블록스에서 충분히 검증된 엔진이기에.. Visual Script Code와 직접적인 연동을 통해서 브레이크 포인트 걸고 디버깅 까지 가능하도록 제작할 예정입니다.

감사합니다!

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
7.37 ▲ 0.01

2026.10.22 KEB 하나은행 고시회차 887회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!