Josh Petrie가 말한 것처럼 :
" 여기에 세워지지 않은 증후군 ;"
나는 또한 내 자신의 엔진을 작성하고 있으며 그 이유는 모든 개발자마다 그 이유가 다를 것이라고 생각하지만 실제로는 일반적으로 다른 사람들의 코드에서 일하는 것을 좋아하지 않습니다. 나는 내가 스스로 그것을 만들 수 있다고 생각한다면, 다른 어떤 것에도 정착 할 필요가 없다는 점에서 강박 적입니다 .
Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre 등 다양한 유형의 게임 엔진, 렌더링 API 등을 테스트했습니다. 더 많은 ... 게임을 시작하고 싶었습니다. 잘 문서화 된 진입 점 ...
그러나 내 문제는 당시 엔진 아래에서 무슨 일이 일어나고 있는지 전혀 몰랐습니다. 나는 좋은 통제력을 원했고 내 손등과 같은 프레임 워크를 원했습니다. "HEY! 내가 어떻게 작동하는지 배우고 이해할 수 있는 유일한 방법 은 내 엔진을 완전히 처음부터 완전히 구축 하는 것 입니다. 내 프로그래밍 역사의 대부분은 웹과 프로세싱 솔루션을 사용했습니다. -이것은 완전히 새로운 공 게임이었습니다.
내가 끝낸 것입니다.
그래서 이미 C #을 알고 XNA를 설정하기로 결정했으며 시작 방법 또는 위치에 대해 생각하기 시작했습니다. 아이디어가 필요했습니다.
무엇을하든 3D로 바로 들어가기 로 결정했습니다 .
아래로 기초를 얻는 것은 시원했다 - 스프라이트 배치 물건,하지만 진행으로 나는 새로운 장벽과 장애물을 발견하고 결국 -되는 첫 진짜 배치 제한 . 저의 목표는 언제든지 뷰 프러스 텀에서 최소 10000 개의 개체를 렌더링 할 수있는 게임을 구축하는 것이 었습니다.
Shader Based Instancing을 구현하는 새로운 여정에 착수했습니다 (그리고 HLSL을 배우는 동안 배웠습니다). 대신 XNA의 Model and Effect 객체를 사용하여 대체품을 작성했습니다. 처음에는 VBO 스트림을 이해하는 데 어려움이있었습니다. 나는 일을 망쳤습니다. 온라인에서 인스턴스화에 관한 질문을하고 GPU가 무엇을하는지 마침내 이해할 때까지 계속 유지했습니다. 그것은 지불했다; 이제 며칠 동안 PIX (dxsdk)로 VBO를 디버깅 한 후 뷰포트에서 2 만 개가 넘는 테스트 엔터티가 확대되었습니다.
이제 파이프 라인 렌더링 방식에 대한 "일부"아이디어가 있었지만 아직 완료되지 않았습니다. 결국 자체 게임 상태, 카메라, 포스트 효과 및 엔터티 오브젝트를 생성하고 XNA 컨텐츠 파이프 라인에서 자신 만의 고유 한 빌드를 생성했습니다. 로더 (XNB에 대한 개인적 싫어함)는 복잡한 깊이 정렬 및 혼합 상태로 분리 된 지오메트리 체인을 만들었으며, 스프라이트와 텍스트를 모두 게임 장면에 투영했습니다.
나는 거의 일년 내내 이것을 지속적으로 추가, 수정, 변경 및 실험했습니다. 결국, 그것은 꽤 나왔다. 나는 이제 내 아기를 창조했기 때문에 후드 아래에서 무슨 일이 일어나고 있는지 이해했습니다.
이제 내 엔진은 대부분 안정적이었고 거의 완성되었습니다. 완벽하지는 않습니다. 스크립팅이 불분명하고 GUI가 전혀 좋지 않았습니다. 그러나 나는 여전히 그것을 좋아했습니다. 수천 줄의 코드, 자산 및 미디어-개인 2GB git 저장소에 구멍이 뚫려 있었고 이전에는 결코 해 보지 못한 유형의 개발을 시도하는 데 어려움을 겪었습니다. 내가 극복 한 모든 장애물은 교훈과 구호였습니다.
나는 내가 원하는 거의 모든 것을 꺼내었다.
그러나 결국-나는 그녀를 내려 놓을 시간이라고 결정했습니다.
많이 나 자신이 인터넷에서 조언을 자신에 의해 이러한 거대한 엔진을 쓰는 만족 및 기타 gamedev 친구, 나는 내가 모든 것을 다시 그것을 할거야 결정으로 - 더 나은 그것을 - 지금이 시간 내가 있기 때문에 대부분 알고 내가하고있는 것.
그 프로젝트는 여전히 내 GIT 저장소에 자리 잡고 있습니다.
새로운 엔진 (이번 MonoGame)을 작성하는 두 번째 과정은 잘 진행되고 있습니다. 문제가 발생하면 해결하기가 더 쉽습니다. 덜 혼란. 나는 내 코드에 조금 '너무'붙어있는 경향이 있기 때문에 올해 내 게임을 공개적으로 보여줄 수 있기를 바랍니다.
결국 내 엔진을 작성하는 방법은 어떻게 '어떻게'배웠는지, 모든 구성 요소의 역할과 작동 방식을 정확히 알고 이해한다고 말할 수 있습니다. 실제로 다른 사람들의 코드, 특히 대규모 문서화되지 않은 프로젝트를 읽는 것을 싫어합니다. 나는 내가 사용하는 모든 것이 나에 의해 만들어지기를 바란다.
그래도 이건 나야 나는 미리 만들어진 엔진을 사용하지 않을 것입니다. 아마도 다른 사람의 코드를 완전히 다루고 앉아 처리하는 것보다 내 프레임 워크를 작성하는 것이 더 재미 있다고 생각하기 때문일 것입니다.