디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

게임엔진 개발기 1,2,3 - 왜 또 새로운 엔진을 만드는가?

에렌갤로그로 이동합니다. 2025.05.20 09:10:02
조회 11650 추천 25 댓글 96

안녕하세요 게임 엔진을 만들고 있는 에렌입니다.


게임 엔진을 만들면서 나중에 지나온 길들도 기억할 겸 개발기를 남겨볼까 합니다.


오늘은 첫번째 글로, 왜 또 새로운 엔진을 만드는가에 대한 글입니다.


사실 게임 개발을 한다고 하면 요즘은 닥치고 유니티잖아요?


문서도 잘되어있고 자료도 많고 성능도 잘나오고 에셋 찾기도 쉽고...


사실상 만능이지 않습니까?


저도 유니티를 많이 썼습니다. 근데 뭔가 가슴속 깊숙히 뭔지모를 찝찝함과 싫음이 있었어요


최근에 왜 그런지 고민을 많이 해봤는데, 결론은 두가지더라고요.


1. 진성 코딩 덕후로써 에디터 기반의 도구 자체가 마음에 안든다 (코드로 다 할 수 있어야 함)


2. C#이 마음에 안든다 (언리얼의 C++은 더 마음에 안든다...)


이건 그냥 제 취향이더라고요.


그래서 게임 엔진을 만들어보기로 했습니다.


마치 여러분들 중 자신이 만족할만한 게임을 만들기 위해 인디 게임을 개발하는 것 처럼요.


어떻게 보면 바퀴의 재발명, 쓸데없는 짓거리고 어떻게 보면 힙스터 감성이죠.


그냥 다들 하고싶은거 하면서 사는거고, 또 누군가 저처럼 느끼고 필요한 사람이 생길수도 있으니까요.


그리고 지금도 중국 게임에서 간간히 쓰이는 Cocos 시리즈처럼,


국산 엔진 하나쯤 나와도 괜찮겠단 생각도 들어요. 뭐 게임 개발에 국적이 어딨겠습니까만은...ㅋㅋ


최근에는 ai가 널리 쓰이고 있는 만큼, ai를 적극적으로 활용할 수 있는 녀석이면 더 좋겠죠.


말 나온김에 ai로 로고나 한번 만들어봤습니다.



7fec8174bc8a61fe37f1dca511f11a393f9a50656de2ad6d



즥이네요.


아무튼 그렇습니다. 다음 편은 2D와 3D, 그리고 프로그래밍 언어 선택에 대한 내용입니다.


읽어주셔서 고맙습니다.


게임 엔진 개발기 2 - 2D와 3D, 그리고 프로그래밍 언어 선택


https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=184979&page=1


 





안녕하세요 오늘은 지난 글에 이어서 게임 엔진 개발기를 이어나가볼까 합니다.


엔진 개발에서 먼저 고려했던 부분은 2D와 3D를 통합하는 부분이었는데요,


생각보다 2D 게임을 만들다가 3D로 전환되면서 코드를 전부 갈아엎던 과정이 몇차례 생기더라고요.


그때마다 엔진 설계를 2D 3D를 명확히 나누지 말고 조금만 수정해도 2D <-> 3D 전환히 쉽게 되겐 할 수 없었을까 생각을 많이 했더랬죠.


아시다시피 여러 엔진들에서 2D용 클래스와 3D용 클래스를 전부 나눠서 제공하잖아요.


근데 엔진을 직접 설계를 해보니까, 그게 다 이유가 있더라고요.


여러가지 이유가 있지만 일단 가장 중요한건 화면을 처리하는 방식 그 자체에서 오는 차이더라고요.


물론 Orthographic 카메라를 사용하면 되긴 합니다만, 제가 생각하는 자연스러운 전환은 Perspective 카메라를 적용한 실제 3d 환경에서도 코드의 일부 조작을 통해 2d로 전환하는 거였거든요



24b0d121e09c28a8699fe8b115ef046c63f42c4b9f



예를 들면 z값을 0으로 만들면 평면에서 그려진다던지요.


게임만 만들때는 아무 생각이 없어서 단순히 그렇게 안될까? 생각했지만 실제로는 x y값에 따라서도 보여지는게 달라지기 때문에, 그렇게는 수학적으로 안되는 거더군요.



24b0d121e09c28a8699fe8b115ef046c66f92e4c



누군가에겐 기본적인 지식이었겠지만 저는 그런것도 몰랐습니다. 모르니까 용감했던거죠ㅋㅋ


아무튼, 그래서 2d와 3d 모듈을 결국 분리하기로 했습니다.




다음으로는 프로그래밍 언어에 관한 내용인데요,


엔진의 기반 언어를 무엇으로 할지에 대해서 많은 고민과 리서치를 했습니다.


많은 분들이 유니티를 사용하시니 C#을 선호하시죠. 그리고 기업에서 일하시거나 인디에서도 종종 언리얼을 쓰시니 그럴 땐 C++를 쓰고요.


물론 저도 둘 다 써야할 땐 씁니다만, 원래 제가 웹개발자였어서 그런지 웹 개발할때의 그 가벼움이나 편리함이 참 그립더군요.


특히 cli 중심의 각종 도구들을 이용할 수 있는게 무척 편하고 그리웠습니다.


아무래도 웹 개발자 출신이다보니, typescript가 가장 익숙하고 편한데요.


과거 js도 개발하기에 가볍고 좋았지만 자유로운 타입으로 발생하는 버그가 걱정이 많이 됐죠


언어도 결국 도구이고 개발자의 실수를 줄여주는게 좋지 않겠습니까? 그래서 ts가 인기가 많은 것 같아요.


이제 웹 개발이나 node.js기반 서버 개발은 거의 다 ts를 기반으로 하니까요.


그런데, 개발자들이 가장 사랑하는 언어는 사실 따로 있었습니다.


그건 바로 rust인데요




24b0d121e09c28a8699fe8b115ef046c62f42a469d



메모리 이슈가 발생하지 않으면서도 성능 타협이 없는 언어라니, 이거 완전 꿈의 언어잖아요.


저도 당연히 rust에 관심이 많았고 종종 서버쪽 일부는 rust로 작업하기도 했습니다.


이렇듯 많은 개발자들이 좋아하는 언어이다보니 게임 게발에도 rust를 사용하려는 시도가 있어왔고,


지난 글에서도 많은 분들이 rust 기반 게임엔진인 bevy를 언급해주셨어요.



24b0d121e09c28a8699fe8b115ef046b656b9434



저도 bevy를 리서치했고 샘플 게임도 만들면서 새로운 개발 방식과 고성능을 만끽하기도 했죠.


그런데 개인적으로 생각하는 bevy의 가장 큰 문제는, 바로 ECS 개발 방식을 강제한다는 것인데요,


ECS가 반드시 필요한 게임 장르도 있고 이걸로 못 만들 게임도 없다지만,


개인적으로는 모든 게임 장르에 ECS방식을 강제하는 것은 좀 불편하더라고요.


저는 게임의 성능만큼 개발 생산성도 중요하게 생각하는데, OOP방식에 비해 ECS는 생산성이 너무나 저하되더라고요.


(물론 고수님들은 그럴일이 없으실테니... 그냥 쓰시면 되고요... ㅋㅋㅋ)


개인적으로는 게임만큼 oop가 적합한 제품도 없다고 생각하는데, 이는 상당히 아쉬운 부분이었습니다.


rust에 아무리 클래스나 상속이 없다고 하더라도 충분히 다형성 등 객체지향적으로 개발할 수 있음에도 불구하고 말이에요





그래서 이제 결론을 말씀드리자면,


제가 만드는 엔진은 2d모듈과 3d모듈을 별개로, 또 ts모듈과 rust모듈을 별개로 해서 총 4개의 모듈로 이루어질 예정입니다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


(rust는 oop방식)


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea1fd28c0a114c2d1971e9e5cf71aad26fc6cecd2e4abdb9b95617cfa6dbd5f0d9e340d678d979f06




다음 글은 렌더링 라이브러리에 관련된 내용을 써보겠습니다.


아참, 참고로 제가 만드는 엔진은 오픈소스 엔진이고, 아래에 소스코드를 모두 공개할 예정입니다!!


https://github.com/erenengine/eren


 







그냥 일기같은 글이에요. 감사합니다.


게임 엔진 개발기 3 - 렌더링 라이브러리 선택


https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=185006&exception_mode=recommend&page=1

 




안녕하세요 게임 엔진을 깎고있는 에렌입니다.


오늘은 지난 글에 이어서 렌더링 라이브러리를 선택하는 과정에 대해서 공유해볼까 합니다.


우선 글 작성에 앞서, 제가 이런 작업을 하는 것은 그냥 제가 하고싶어서 하는 것임을 밝힙니다.


뭐 유니티나 언리얼처럼 거창한 성공을 하려거나 아니면 무슨 남들에게 대단해보이고 싶어서 하려는게 결코 아님을 밝힙니다.


그리고 저는 실력이 매우 미천합니다. 큰 산에 올라보려는 산악 초심자가 경험한 것을 공유하는 정도로 귀엽게(?) 봐주시면 좋겠습니다.


그럼 시작합니다.




앞선 글에서 밝혔듯이 에렌 엔진이 2d와 3d, 그리고 웹 환경과 rust 기반 네이티브 환경을 지원하기 때문에 렌더링 환경이 무척 다양한 편입니다.


특히 네이티브는 open gl, metal, vulkan, direct-x 등등 정말 많은 저수준 api를 지원해야 하기 때문에 이를 모두 다룬다는 것은 현실적으로 불가능합니다.


엔진 개발 자체가 이미 바퀴의 재발명이라는 비판에서 자유로울수는 없겠으나, 잘 만들어진 저수준 api를 지원하는 라이브러리들을 놔두고


이 또한 새롭게 개발하는 것은 바퀴의 재발명 수준이 아니라 바퀴를 이루는 재료들마저 재발명하는 정도의 수준이라고 생각합니다.


그래서 적당한 렌더링 라이브러리를 선택하는게 중요한데요,


우선 웹에서는 과거 canvas 태그로 2d 드로잉 컨텍스트를 지원하는 것을 시작으로, 이후 open gl을 바탕으로 만들어진 webgl, 그리고 최근의 webgpu까지의 많은 발전이 있었습니다.


https://theinnovators.zone/archives/4223


 




그런데 재밌게도, rust 기반으로도 webgpu api를 지원하는 wgpu라는 라이브러리가 존재하는 것을 아시나요?


https://wgpu.rs/


 



이를 이용하면 webgpu api를 통해서도 네이티브 환경에서의 각종 저수준 그래픽 api를 모두 사용할 수 있게됩니다!!


즉 한번만 코드를 짜게되면 온갖 os에서도 다 돌아간단 거죠.


(참고로 이건 지난 글에서도 소개한 rust에서 널리 알려진 게임 엔진인 bevy엔진에서도 사용중인 라이브러리입니다.)


그래서 웹과 rust 기반 네이티브 환경을 모두 지원한다는 목표를 갖고 있는 만큼, webgpu api를 적극적으로 활용하면 가장 좋겠습니다.


그런데 여기에는 함정카드가 있습니다.



24b0d121e09c28a8699fe8b115ef046b6a6b9033



현대의 많은 기기들에 설치된 웹 브라우저들은 대부분 webgl까지는 기본적으로 지원하지만, webgpu는 아직 지원하지 않는 곳이 많습니다. 특히 모바일 환경에서는 더욱 그렇습니다.


https://caniuse.com/webgpu


 


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea1fd28c1a114c2d1971e9eba1f3126b8a7b751b10fb25cb2cdd8dabd139471e18780b36986156dd97725989999


(뭔가 처참한 수준의 지원 상황...)



거의 대부분의 웹 브라우저 환경을 지원하는 webgl과 비교하면 더욱 처참한데요,


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea1fd28c1a114c2d1971e9eba1f3126b8a7b751b10fb25cb2cdd8dabb149471e18780b36986156dd870259d072d



이렇기 때문에 오히려 네이티브가 아닌 웹 환경에서 webgpu api를 기반으로 렌더링 엔진을 만드는 것이 더욱 힘든 상황이 되겠습니다;;


먼 미래에 webgpu를 모든 디바이스가 지원하는 그날을 기다리며 webgpu api를 사용할 수도 있겠으나, 당장에 유용한 도구로 만들기 위해서는 webgl을 사용해야 할 것 같습니다.


문제는 같은 코드를 webgpu, webgl 2중으로 만들기에는 너무나 많은 시간이 낭비될 것 같아서, webgl용으로는 이미 만들어진 좋은 라이브러리를 선택해 사용하는게 좋겠습니다.


웹에서는 수많은 개발자가 있는 만큼, 다양한 webgl 라이브러리들이 존재하는데요, 그중 유명한 것들로는 다음과 같은 것들이 있습니다.


https://medevel.com/16-webgl-opensource-frameworks/


 




저는 이중에 가장 범용적인 엔진으로 babylon.js와 pixi.js를 사용하려고 합니다.


왜 두가지를 사용하려 하냐면, 3d 엔진인 babylon.js로도 충분히 2d 게임을 만들 수 있지만, 2d렌더링 성능이 pixi.js 대비 다소 떨어지는 편입니다.


아래 벤치마크 링크를 통해 그런 부분을 확인하실 수 있습니다.


https://shirajuki.js.org/js-game-rendering-benchmark


 



babylon.js 측에서도 이러한 부분을 의식해 babylon과 pixi를 함께 사용하는 방법을 소개할 정도죠.


https://doc.babylonjs.com/communityExtensions/Babylon.js+ExternalLibraries/BabylonJS_and_PixiJS


그리고, babylon.js에서는 spine 애니메이션을 지원하지 않아요. 많은 게임 개발자들이 spine 애니메이션을 사용하는데, 이건 치명적인 문제라고 생각했습니다.




결론적으로는, 웹 환경에서 2d는 pixi.js를 사용하고, 3d는 babylon.js를 사용하려고 합니다.


또 네이티브 환경과 미래의 웹 환경을 대비해, webgpu를 통해 직접 쉐이더 코드를 만들어 렌더링 엔진도 직접 구현합니다. 이건 좀 오래걸릴거 같아요.




이상입니다. 다음 글은 드디어 스프라이트와 메시 드로잉을 통해 화면에 무언가를 띄어보겠습니다!!







감사합니다 . 그럼 다들 좋은 하루 보내시기 바랍니다.




24b0d121e09c28a8699fe8b115ef046b6a6694




출처: 인디 게임 개발 갤러리 [원본 보기]

추천 비추천

25

고정닉 10

26

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 운이 좋아서 따라다니면 콩고물이라도 떨어질 것 같은 스타는? 운영자 25/06/16 - -
공지 실시간베스트 갤러리 이용 안내 [3652/2] 운영자 21.11.18 12799755 562
339673
썸네일
[싱갤] 살인스텝 시동걸린 굴단 내부폭로자..jpg
[75]
ㅇㅇ갤로그로 이동합니다. 11:15 12323 69
339670
썸네일
[이갤] 티빙이 프로야구 '쇼츠' 영상 금지했다? 확인해보니
[25]
ㅇㅇ갤로그로 이동합니다. 11:05 1161 5
339668
썸네일
[디갤] 디맥디코 공지 떴냐
[77]
LUCID갤로그로 이동합니다. 11:00 17694 120
339667
썸네일
[중갤] mbc) 김건희, vip룸에서 극소수 병간호 받는중.jpg
[160]
ㅇㅇ갤로그로 이동합니다. 10:55 8315 157
339665
썸네일
[잡갤] '대한민국 가계빚',미국•일본•중국 압도...씁쓸한 '세계 최고'
[201]
깐부갤로그로 이동합니다. 10:50 2800 43
339664
썸네일
[싱갤] 오싹오싹 수술을 앞둔 팬에게 한 말
[242]
난징대학살Mk-II갤로그로 이동합니다. 10:45 20627 257
339662
썸네일
[야갤] 학생 200여 명 이상증세...급식서 나온 균 정체가
[66]
마스널갤로그로 이동합니다. 10:40 4429 19
339661
썸네일
[이갤] 미혼남들이 공감하기엔 어려운 애 가지는 꿀팁
[88]
ㅇㅇ(61.97) 10:35 6401 9
339659
썸네일
[디갤] (엑박재업) Zf와 배낭여행) -도쿄 3~5일차 (48장)
[23]
ㅇㅇ갤로그로 이동합니다. 10:30 1092 12
339658
썸네일
[새갤] 美 “트럼프,중동상황 때문에 G7일정 단축..한미정상회담 불발”
[304]
포만한갤로그로 이동합니다. 10:25 4539 99
339656
썸네일
[중갤] 스텔라 블레이드 디렉터 김형태 << 진짜 엉덩이 전문가네
[283]
ㅇㅇ갤로그로 이동합니다. 10:20 13531 178
339655
썸네일
[중갤] 이 대통령, G7 열리는 캐나다 도착…정상외교 첫 일정 시작
[282]
그리핀도르갤로그로 이동합니다. 10:15 4966 22
339652
썸네일
[알갤] 한은 "원화 가치, 당분간 중국 위안화 따라 움직일 것"
[260]
알붕이(175.193) 10:05 8314 117
339650
썸네일
[대갤] 日, 식중독 적발돼 영업정지 기간에도 도시락 팔아... 미슐랭도 못믿어
[46]
난징대파티갤로그로 이동합니다. 10:00 4170 69
339649
썸네일
[야갤] "1만 원짜리 한장으로 부족해" 오르는 외식 물가에 '부담'
[248]
마스널갤로그로 이동합니다. 09:50 8295 35
339647
썸네일
[미갤] 이스라엘, 이란 국영 방송사 본부 공격
[357]
ㅇㅇ갤로그로 이동합니다. 09:40 17171 275
339646
썸네일
[과빵] [금주의 신상] 6월 3주차 신제품 먹거리 모음.jpg
[41]
dd(183.100) 09:31 7904 35
339644
썸네일
[싱갤] 구라구라 이승만을 둘러싼 거짓들
[695]
ㅇㅇ갤로그로 이동합니다. 09:20 19266 337
339642
썸네일
[이갤] 한국 개표방송보고 개충격받은 프랑스인
[156]
ㅇㅇ(194.169) 09:10 17718 22
339640
썸네일
[원갤] 지금 사는 집이야! 구경해줘!
[73]
dndhkdkdkdk갤로그로 이동합니다. 09:00 9101 41
339639
썸네일
[스갤] 뉴질랜드 카드로나 리조트 오픈 소식과 리조트 확장 소식
[29]
MegaTruck갤로그로 이동합니다. 08:50 3625 13
339635
썸네일
[카연] 전 소꿉친구, 미쳐버릴 동거생활 - 10화. 여름맛 악몽
[32]
FD_갤로그로 이동합니다. 08:30 5482 2
339634
썸네일
[싱갤] 싱굴벙굴 다시보는 명작 '굴드보이'
[129]
이진호갤로그로 이동합니다. 08:20 15491 187
339630
썸네일
[몬갤] 신기신기 중국 몬헌의 미사용 몬스터.jpg
[39]
ㅇㅇ갤로그로 이동합니다. 08:00 14253 29
339629
썸네일
[디갤] 거제 통영 차박여행(16p)
[33]
람머스맨갤로그로 이동합니다. 07:50 4581 20
339627
썸네일
[야갤] 육아수당 관련 사람들이 잘 모르는 심각한 문제
[180]
ㅇㅇ(106.101) 07:40 16382 235
339625
썸네일
[싱갤] 의외로 영향력 지리는 캐릭터
[82]
ㅇㅇ갤로그로 이동합니다. 07:30 16124 71
339624
썸네일
[디갤] 흐린날 낙산에서 DDP까지 (17장)
[12]
디붕MK-IV갤로그로 이동합니다. 07:20 3663 6
339622
썸네일
[이갤] 토크쇼에서 무쌍찍는 단타의 신
[80]
ㅇㅇ갤로그로 이동합니다. 07:10 15826 112
339620
썸네일
[더갤] 대북확성기..아, 이렇게 대통령 한마디에 딱 중단이 되는구나 ..jpg
[338]
헬마존잘갤로그로 이동합니다. 07:00 18727 124
339617
썸네일
[야갤] 절박했던 신인 유재석이 먹고싶었던 모둠구이
[310]
구너갤로그로 이동합니다. 01:45 31867 87
339615
썸네일
[이갤] 민주당 왕따였던 내가 대통령이 된 이야기
[947]
ㅇㅇ갤로그로 이동합니다. 01:35 35023 322
339613
썸네일
[이갤] 살면서 제일 멀리해야 할 유형
[395]
ㅇㅇ(103.176) 01:26 43595 124
339611
썸네일
[기갤] 펌) 아나운서들이 프리 왜 하는지 알 것 같은 김대호 출연료
[170]
긷갤러(106.102) 01:15 27102 49
339609
썸네일
[싱갤] 늙은 돌싱남이 유부녀 납치하는 <전설의 고향>
[78]
채널송송송송갤로그로 이동합니다. 01:05 21308 98
339607
썸네일
[일갤] 23년도 하반기 JR패스 그린샤로 5일간 일본 전국 돌기 6편
[17]
업사다갤로그로 이동합니다. 00:55 10820 12
339605
썸네일
[이갤] 약사가 추천하는 상황별 피부 연고
[157]
ㅇㅇ(23.27) 00:45 24505 33
339603
썸네일
[빌갤] 어머.. 불교에 귀의해야하는 이유
[386]
ㅇㅇ(119.199) 00:35 24984 137
339601
썸네일
[마갤] 음식 만들기 20~21편. 흰살생선 뫼니에르, 부야베스
[84]
수장미갤로그로 이동합니다. 00:25 16290 163
339597
썸네일
[이갤] 일본의 투표제도가 미개한 이유
[490]
ㅇㅇ(59.6) 00:05 19228 725
339595
썸네일
[싱갤] ㅅㄱㅂㄱ 일일 벼룩시장.manhwa
[60]
복슬복슬Teemo갤로그로 이동합니다. 06.16 22098 81
339593
썸네일
[중갤] 용산 역사박물관 용산전자상가 전시 관람
[140]
기신고래(진)갤로그로 이동합니다. 06.16 22214 79
339591
썸네일
[야갤] 은근 어렵다는 '유희왕' 종족 맞히기
[82]
ㅇㅇ갤로그로 이동합니다. 06.16 20359 60
339589
썸네일
[디갤] 좋다고 칭찬하니 참을 수가 없네
[56]
a7m2면벽수련갤로그로 이동합니다. 06.16 14337 45
339587
썸네일
[이갤] 40년간 조용히 조금씩 매워진 라면
[411]
ㅇㅇ(62.197) 06.16 33209 122
339585
썸네일
[카연] 주방 개ㅈ같다. -주방장3편-
[60]
코로론바갤로그로 이동합니다. 06.16 12554 53
339583
썸네일
[U갤] 코좀 : "난 모두의 먹잇감이었어..."
[128]
ㅇㅇ갤로그로 이동합니다. 06.16 23473 112
339581
썸네일
[중갤] 이재명을 뽑지 않은 50%라는 과제 - 2030 청년들의 불안함
[798]
묘냥이갤로그로 이동합니다. 06.16 33341 43
339577
썸네일
[기갤] 서양인이 만든 감기에 최고라는 한국음식
[431]
긷갤러(211.36) 06.16 34198 125
뉴스 2025 가요대전 Summer 라인업 확정 디시트렌드 06.16
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2