как сказал Джош Петри :
« Не построенный здесь синдром» ;
Я также пишу свой собственный движок, и я полагаю, что причина будет разной для каждого разработчика, но на самом деле - мне вообще не нравится работать над кодом других людей. Я навязчив в том смысле, что если я чувствую, что могу построить это сам, то нет смысла соглашаться на что-то еще .
Я тестировал различные типы игровых движков, API рендеринга и тому подобное, в частности, Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre и т. Д., И многое другое ... Я хотел начать писать игры - я скачал много, ища хороший удобный и хорошо документированная точка входа ...
Моя проблема, однако, была в то время, когда я понятия не имел, что происходит под двигателем. Я хотел хорошего контроля, и я хотел рамки, которые я знаю, как тыльную сторону моей руки. Мне пришла в голову идея «ЭЙ! Я думаю, что единственный способ узнать, как это работает и понять это, - это попытаться создать свой собственный движок целиком и полностью с нуля. Большая часть моей истории программирования была связана с веб-технологиями и решениями для обработки». - это была совершенно новая игра с мячом для меня.
Что я и сделал в итоге.
Поэтому я решил установить XNA, так как я уже знал C #, и начал думать о том, как или с чего мне начать. Мне нужна идея
Я решил, что, несмотря ни на что, я пойду прямо в 3D .
Разобраться с основами было круто - спрайт, но по мере того, как я прогрессировал, я обнаруживал новые барьеры и препятствия - моим первым реальным было ограничение партии . Моя цель состояла в том, чтобы создать игру, которая в любой момент могла бы отображать как минимум 10000 объектов в окне просмотра.
Я приступил к новому пути реализации Шейдерных инстансингов (и изучил HLSL, пока я там занимался), я отказался от встроенных в XNA объектов Model и Effect, чтобы вместо этого написать свои собственные замены. Сначала у меня были проблемы с пониманием потоков VBO; Я ломал вещи - я выходил в интернет, задавая вопросы об инстансинге, и продолжал, пока я, наконец, не понял, что делает GPU. Это окупилось; теперь у меня было более двадцати тысяч тестовых объектов, масштабирующихся в моем окне просмотра после пары дней отладки моего VBO с помощью PIX (dxsdk).
Теперь у меня было «некоторое» представление о том, как работают конвейеры рендеринга, но это еще не было сделано - я закончил тем, что создал свое собственное игровое состояние, камеру, пост-эффекты и объекты-сущности, отодвинув их от XNA Content Pipeline, создав собственный загрузчики (личная неприязнь к объекту XNB), создали сложную цепочку геометрии с сортировкой по глубине и разделенным состояниями, а также имели экземпляры спрайтов и текста, которые проецировались на игровую сцену.
Я продолжал добавлять, исправлять, изменять и экспериментировать с этим непрерывно в течение почти всего года. В итоге получилось неплохо. Теперь у меня было понимание того, что происходит под капотом, потому что я создал это - мой ребенок.
Теперь мой двигатель был в основном стабильным и почти законченным. Он не идеален: скрипты честные, а графический интерфейс совсем не великолепен. Но я все еще любил это. Тысячи строк кода, ресурсов и мультимедиа спрятались в частном git-репозитории объемом 2 ГБ, и все головные боли, которые мне пришлось пережить, пытаясь сделать такой тип разработки, которого я никогда раньше не делал. Каждое препятствие, которое я преодолел, было извлеченным уроком и облегчением.
Я снял почти все, что хотел в нем.
Но в конце концов - я решил, что пришло время унизить ее.
Столько, сколько я удовлетворил себя написанием такого огромного движка самостоятельно, по совету из сети и других приятелей gamedev, я решил, что я сделаю это снова - и сделаю это лучше - потому что теперь на этот раз я в основном знаю что я делаю.
Этот проект все еще находится в моем репозитории GIT.
Мой второй проход по написанию нового движка (на этот раз на MonoGame) проходит хорошо. Когда что-то ломается, это легче исправить. Меньше беспорядка. Я надеюсь публично показать мою игру где-то в этом году, потому что я, как правило, слишком привязан к своему коду.
В конце концов, написание собственного движка - это то, как я научился «как» это делать, и в то же время я могу сказать, что я точно знаю и понимаю, что делает каждый компонент, и как они должны работать. Я на самом деле ненавижу читать чужой код, особенно для больших недокументированных проектов. Я хочу, чтобы все, что я использую, было построено мной.
Это только я, хотя. Я сомневаюсь, что когда-нибудь буду использовать готовый движок, вероятно, потому что я думаю, что для меня просто веселее написать свои собственные фреймворки, чем сидеть и разбираться с чужим кодом - полный контроль.