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와 직접적인 연동을 통해서 브레이크 포인트 걸고 디버깅 까지 가능하도록 제작할 예정입니다.
감사합니다!