리버티게임:도움방/자바스크립트 엔진 구상

리버티게임, 모두가 만들어가는 자유로운 게임
참고: 이 주제는 162일동안 편집되지 않았으므로 이 주제는 보존된 것으로 간주됩니다. 정말로 답변이 필요한 주제가 아니라면 추가하지 마세요.

발의

초기 계획(취소 및 대체됨)

네, 자바스크립트 엔진인 가칭 LibertyDevelop의 개발에 관한 도움방입니다.

현재 GDevelop의 IDE를 포크한 Github 저장소가 열려있는 상황입니다. 해당 IDE는 Node.JS에 React를 써서 구현된 것으로 확인되었습니다. 포크를 취소하고 바닥부터 쌓아올리는 것으로 개발 방향을 바꾸었습니다. Xash3D 청사진으로 대체되었습니다. 아래 3단계 단락을 참조해주세요.

언리얼 엔진을 만져보고 3D 슈팅게임 프레임워크를 짜고 있는 입장에서 어떤 기능이 자바스크립트 게임엔진에 필요할지 감은 들지만 정확히 어떤 요소가 들어가야 할지는 다양한 게임 엔진의 기능을 뜯어봐야 알 것 같습니다. 그리고 그 결과물을 Xash3D에 이식할 예정입니다.

그리고 WYSIWYG(What You See Is What You Get, 해석하자면 보이는 대로 만들어진다 정도 되겠습니다)이 가능한 게임 에디터를 상기 저장소를 기반으로 만들고자 합니다. 다만 백엔드로 UI를 구현하기 때문에 이걸 프론트엔드 기반으로 갈아엎는 과정에서 어마어마한 시간이 소요되거나 아니면 아예 별도의 호스팅을 하는 웹앱으로 분리독립할 수 있습니다.

게임 엔진 제작 중 필수적 기능임에도 제가 놓친 기능이 있다면 어떤 요소가 추가되어야 할지 여기서 말해주세요. 일단 2D, (제한적으로)3D 게임 모두 구현해내는 것이 목표입니다.

엔진 개발에 직접 도움을 주고 싶은 분은 제게 Github 아이디가 되는 이메일을 주시면 상기 저장소 협업자 리스트에 추가해드립니다. --Senouis (토론) 2020년 12월 24일 (목) 11:06 (KST)답변[답변]

추가로 대부분의 요소는 Web API들을 구현해내는 데에 중점을 두겠지만 그 요소들을 조합할 프로그래밍 모델에 관해서는 제가 개발중인 Xen2K의 프로그래밍 모델을 사용하고자 합니다. 난해한 프로그래밍 언어인 Java2K를 결정적으로 동작하도록 개조한 녀석이라 문법이 백괴스럽지만, IDE 구상중 WYSIWYG을 구현해 낼 비주얼 스크립팅에는 적합한 모델이라 생각되어 해당 언어의 구조를 채용하겠습니다.
그리고 로고 개조할 분이 필요해서 디자인 및 드로잉 관련해서 필수 한 분 모집합니다. 제가 로고를 직접 만들면 공돌이 감성이 충만할 것 같습니다. --Senouis(토론장, 기여)2021년 8월 20일 (금) 11:55 (KST)답변[답변]

Xash3D 청사진으로의 대체 알림

Crystal multimedia.png 현재 이 프로젝트는 Xash3D를 포팅하는 것으로 대체되었으며, 소스 엔진용 모델을 가져오기 위해 VTFLibemscripten 컴파일이 가능한 libsquish로 개조해 가져오는 작업을 기획 중입니다.

대체 작업은 취소되었습니다. 아마 별도의 엔진 제작을 계속할 것 같습니다.

한편 제가 지금 Rust 프로그래밍 언어를 공부하기 시작했는데 rustup으로 웹어셈블리 모듈을 사용 가능한 것이 확인되어 이쪽을 활용해 프론트엔드 게임 에디터를 작성하는 방법을 생각하고 있습니다. 기존의 Parse Tree 기반 에디터는 이해가 어려울 것 같아, 그냥 언리얼 에디터처럼 Syntax Diagram 구성 방식의 비주얼 스크립팅으로 변경할 것입니다(이러면 언리얼 에디터 코드를 참고 자료로 사용하는 것도 가능합니다) 마침 독립 서버로 오기도 해서, 아예 리버티게임 전용 확장 기능으로 만드는 것도 가능하고요. 다만 일단은 레퍼런스 게임 제작이 선행되어야 하기에 Phase 2~3 이후로 확정적으로 미뤄두었을 뿐입니다. --Senouis(토론장, 기여) 2023년 7월 15일 (토) 08:44 (KST)답변[답변]

자체 엔진 개발 재개

기존의 Xash3D 및 퀘이크 엔진의 클라이언트 위주로 엔진 구조를 분석한 다음 장기 계획으로 다시 시도하겠습니다. 고도 엔진이 각종 커뮤니티와 조직의 지원을 받으며 쓸 만한 수준인 버전 3까지 오는데 무려 17년(2001~2018)이 걸렸기 때문에, 잡다한 기능을 다 쳐내고 3D 렌더링 위주로 극도로 제한해야겠습니다. 다음 방법으로 기간을 단축해보려고 합니다. 이런 작업이 가능한 분들은 사용자 토론으로 연락 주세요. --Senouis(토론장, 기여) 2024년 6월 2일 (일) 15:36 (KST)답변[답변]

  • 3D 뷰포트만 지원(2D 게임은 고도 3 이용 권장)
  • JavaScript API와 C++ (or Rust) API를 모두 지원
  • Simple Directmedia Layer(SDL) 및 파생 라이브러리들(SDL_image, SDL_mixer, SDL_net, SDL_ttf, SDL_gui)을 사용해 프론트엔드 구현
    • 프론트엔드는 백엔드가 모든 인 게임 요소에 대한 정보(게임 메타데이터, 엔티티의 종류 및 모델링 데이터 위치, 사운드 파일 URL 목록 등)를 보내면 단순히 그 정보를 저장 후 정해진 방법대로 화면 상에 그리거나 음악을 재생함.
    • 이쪽을 수정할 수 있는 개발자를 구하기 어려울 것으로 보여 클라이언트 쪽 UI 모딩은 지원하지 않음 장기 계획으로 별도의 스크립트 언어를 통해 렌더링 통합
    • C++로 개발하며, Emscripten으로 웹 게임으로 내보내어 WebGL 래퍼와 같이 작동하거나, Windows/Linux를 위해 VS/GCC로 컴파일한 후 별도의 Vulkan 렌더러 라이브러리와 함께 작동
    • 렌더러만 자바스크립트 + WebGL로 따로 구현하고, Emscripten에서 지원하는 C++ <=> 자바스크립트 연결 규약을 사용해 API 호출
  • 백엔드는 Node.js 사용하여 Javascript로만 작성하며, 독립 실행 가능하게 함
    • 현재 백괴포트리스의 코드를 정리하여 몇 개의 함수만 수정하면 바로 백엔드 작성이 가능한 구조로 개편 중: GitHub Repo
  • 맵 파일이 되는 JSON 문서를 raw action으로 불러오도록 리버티게임 사이트에 문서 형태로 저장
  • 프론트엔드 및 백엔드 구현이 끝나면 소도구로 맵 에디터 및 로직 작성 UI만 추가 개발, 이식성을 위해 PluginX 사용 예정.

토론

발제 후 토론 진행이 아예 안 되고 있네요... --Malgok2 (토론) 2023년 5월 31일 (수) 20:14 (KST)답변[답변]
이건 청사진 Phase 2에서 본격적으로 다루어질 내용이라 지금은 달 단위로 의견을 업로드해도 괜찮을 겁니다. --Senouis(토론장, 기여) 2023년 7월 15일 (토) 08:44 (KST)답변[답변]
변경된 계획을 올렸습니다. 쓸 만한 수준까지 개발하는 것은 단독 개발 기준 못해도 2028년 이후로 생각하고 있습니다(기술 스택이 일치하는 협력자를 구하면 조금 단축될 수 있습니다). 그 전까지 리버티게임에서는 고도 엔진 3과 4, 언리얼 엔진 4를 사용하도록 장려할 계획입니다. --Senouis(토론장, 기여) 2024년 6월 2일 (일) 15:36 (KST)답변[답변]