예전에 웹에서 멀티코어 기반 게임을 만들어보고 싶다는 글을 올린 적이 있고, 이어서 직접 개발 중인 키위엔진도 소개했었습니다.
https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=192721
저는 주로 웹 베이스로 게임을 만드는 편입니다. TypeScript로 개발하며, Pixi.js와 Matter.js라는 라이브러리를 주로 사용합니다.지금 구상하고 있는게 있어서 공유해보고자 합니다. 현실성이 떨어질 수도
gall.dcinside.com
https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=193760
안녕하세요? 개인적인 목적으로 개발중이던 TypeScript 기반 2D 웹 게임 엔진을 오픈소스로 공개했습니다.웹 사이트http:// kiwiengine.github.io/ko(띄어쓰기를 지워주세요, 이 갤러리에 //
gall.dcinside.com
최근에는 캐릭터 1천 개가 뭉칠 때 물리엔진에서 렉이 발생한다는 문제를 겪으면서 고민을 했는데요, 이 문제를 해결하고자 Hydra 엔진이라는 새로운 실험을 해보았습니다.
https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=193515
고작 1천개 캐릭터에 물리 엔진을 적용해도 렉이 나는군요.시연https://examples-kiwiengine.pages.dev/simple-battle결국 유니티로 바꾸었다지만, 초기 뱀파이어 서바이버는 Phaser
gall.dcinside.com
Hydra는 이름처럼 머리가 여럿 달린 구조를 지향합니다.
- 로직 처리
- 물리엔진 처리
- 트랜스폼 변환
- 렌더링 처리
이 네 가지를 각각 웹워커(Web Worker)로 분리해서 동작시키고, SharedA.rrayBuffer를 적극 활용하여 워커 간 데이터 복제가 일어나지 않도록 설계했습니다.
데모는 다음과 같습니다.
https://hydraengine.pages.dev/examples/simple-battle
실험 결과, 캐릭터가 뭉칠 때 Physics나 로직 쪽에서는 다소 프레임이 떨어지긴 하지만, 렌더링 워커는 안정적으로 120FPS를 유지하는 것을 확인했습니다.
웹 환경에서 멀티코어를 적극적으로 활용하는 사례가 드문데, Hydra는 이런 엣지한 니즈를 충족시킬 수 있는 도구가 될 것 같습니다.
키위엔진과 마찬가지로 Hydra 엔진도 오픈소스로 공개했습니다.
https://github.com/hydra-engine/hydra
Contribute to hydra-engine/hydra development by creating an account on GitHub.
github.com
필요하신 분들께 도움이 되길 바랍니다.
읽어주셔서 감사합니다.
헤일하이드라
웹은 가볍고 접근성이 좋은 플랫폼이 장점인데, 위처럼 멀티코어까지 활용하며 구동하는건 장점을 깍아먹는 본말전도 아닐깡? 게다가 브라우저 특성 상 방치하다보면 브라우저에서 자체 절전 등을 시키기도 하고, rAF등으로 매 프레임마다 연산시키는게 아니라 사용자에겐 체감가지 않는 정도인 0.5초 내외로 각 개체별 계산을 시키면 싱글코어로도 큰 부하없이 다수 엔티티 활용 가능함
의견 남겨주셔서 감사합니다. 말씀하신 것이 맞고, 그것이 본문에서 엣지케이스의 니즈를 충족시키는 도구라고 언급한 이유입니다. 굳이 키위엔진과 별도로 제작한 이유이기도 하고요. 그리고 프로덕션 단계에선 말씀하신 최적화를 수행하면 되겠습니다. 성능 테스트를 위해서 일부러 부하를 주었습니다.