Добавлен: 11.03.2026
Просмотров: 85
Скачиваний: 0
Правительство Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего образования
"Национальный исследовательский университет "Высшая школа экономики"
Факультет компьютерных наук
Департамент программной инженерии
Выпускная квалификационная работа
на тему "Набор средств разработки 3D-игр"
по направлению подготовки 09.03.04 "Программная инженерия"
М.М. Кумсков
Москва 2018
Реферат
Игровая индустрия растет с каждым годом, и сотни игр с годами разработки и миллионами долларов бюджета выпускаются каждый год. В данной работе рассматривается создание набора средств разработки трехмерных игр. Можно выделить два основных модуля, необходимых для создания игры - редактор сцен и приложение для воспроизведения созданных сцен.
В ходе разработке каждого из модулей встречается множество проблем, таких, как взаимодейтсвие игрока с объектами на сцене, управление трехмерными объектами на основании пользовательских действий и зараннее настроенной логики, отрисовка игровой сцены в реальном времени, а также разработка архитектуры хранения игровых ресурсов.
В результате разработки создана программа, позволяющая при помощи трехмерных моделей и скриптов на языке Lua создавать игровые уровни. Для отрисовки интерфейса и игровых сцен используются библиотеки Qt и OpenGL.
Помимо описания основных структур данных, разработанных для организации работы приложений, будет также приведен обзор и обоснование некоторых решений, принятых и реализованных в результате разработки программы.
Ключевые слова: игры, 3D, OpenGL, разработка
Abstract
Game industry is growing with each passing year, with hundreds of games with years of development and multi-million dollar budgets released every year. This paper goes over the development of a 3D game development toolkit. Two distinct parts of a game development software can be distinguished - a scene editor and a program to load and play the created scenes.
During the development of each part of the software multiple problems are encountered, such as player interaction with objects on the scenes, 3d model control according to user input and game logic, level rendering in real time and developing the architecture of storing all resources.
As a result of the development a program for creating game scenes with 3D models and scripts was created, as well a program that allows playing created scenes. OpenGL and Qt frameworks were used for interface and scene rendering.
Aside from the process of creating all necessary data structures needed for the correct work of the program this paper describes the overview of some of the solutions implemented in this toolkit.
The paper contains 50 pages, 3 chapters, 36 illustrations, 4 appendices.
Keywords: Gamed, 3D, OpenGL, Development
Основные определения, термины и сокращения
Сцена - Набор трехмерных моделей.
Рендеринг - Процесс вывода (отрисовки) сцены на экран.
Игровой движок - Набор средств (редактор и программа для исполнения) для создания трехмерных игр.
Игра, Компьютерная игра - интерактивная развлекательная программа
Коллизия - соприкосновение трехмерных моделей друг с другом
Примитив - встроенная в редактор сцен трехмерная модель т. н. "примитивного" объекта - куба, конуса, цилиндра и т. д.
Оглавление
Введение
Глава 1. Обзор предметной области и анализ существующих решений
1.1 Наборы инструментов и библиотек с открытым исходным кодом
Глава 2. Алгоритмы и структуры данных разработанного решения
2.1 Структура данных
2.2 Алгоритмы
2.3 Априорный и апостериорный расчёт коллизий
Глава 3. Технические особенности реализации
3.1 Выбор библиотек
3.2 Функционирование программы
Заключение
Список использованных источников
Введение
Большинство существующих коммерческих и свободно доступных игровых движков предоставляют широкий спектр инструментов и возможностей для разработки компьютерных игр любых видов и жанров. Для исследования процесса создания игры было решено разработать собственный набор средств для создания трехмерных компьютерных игр. В результате разработки при помощи созданного решения пользователь сможет создавать трехмерные сцены из трехмерных моделей, а также иметь возможность воспроизвести сцены ("сыграть" в них).
Один из основных недостатков большинства существующих инструментариев для разработки трехмерных игр - это перегруженность функционалом. Несмотря на то, что подобные решения предоставляют широкий набор встроенных функций для создания игр, они также имеют высокий порог вхождения для новичка в области создания игр. Также существует проблема недоступности определенных инструментов на различных платформах. Так, например, библиотека DirectX (включающая в себя графическую библиотеку Direct3D) доступна только для использования в операционной системе Windows, из-за чего некоторые игровые движки и игры, разработанные с их помощью, не доступны на некоторых платформах.
Целью данной работы является разработка двух модулей: модуль создания трехмерных сцен и модуль воспроизведения созданных сцен.
Задачами выпускной квалификационной работы является:
1) Изучить предметную область.
2) Проанализировать существующие решения данной задачи.
3) Изучить технологию исполнения стороннего кода (скриптов Lua) при исполнении программы.
4) Освоить работу с OpenGL для рендеринга изображений в реальном времени.
5) Разработать структур данных игровых ресурсов, а также алгоритмов взаимодействия с ними.
6) Разработать архитектуру модуля редактирования сцен
7) Разработать и протестировать модуль редактирования сцен
8) Разработать архитектуру модуля для загрузки и исполнения действий, установленных на сцене.
9) Разработать и протестировать модуль загрузки и исполнения сцен
10) Оформить техническую документацию.
Работа состоит из трех глав. В первой главе описывается предметная область и различные аналоги, существующие на рынке. На основе данных описаний обосновывается необходимость создания программного продукта.
Во второй главе описывается разработанная архитектура приложения, а также описываются основные задачи, вставшие при разработке приложения. Для каждой задачи приводятся несколько вариантов решения и обосновывается принятое решение.
Третья глава описывает технические средства, использованные при разработке выпускной квалификационной работы, описывается разработанное решение. программа трехмерный игровой
Приложение содержит техническую документацию к проекту: техническое задание, программа и методика испытаний, руководство оператора, текст программы.
Глава 1. Обзор предметной области и анализ существующих решений
В данной главе приводится обзор предметной области, а также анализ существующих решений, как в области полноценных наборов инструментов, так и в виде разрозненных инструментов. В заключение приводится постановка задачи на разработку программного.
Предметная область
Предметная область данного проекта - разработка игр. В ходе создания игры пользователю (создателю игры) необходимо иметь возможность редактировать сцены и настраивать объекты, находящиеся на сцене. Также пользователю необходимо иметь возможность воспроизвести сцену - "сыграть" в созданные сцены.
Редактор сцен
Рисунок 1 - Редактор сцен коммерческого продукта Unreal Engine
Редактор сцен - это основной инструмент разработки игры. При помощи данного инструмента пользователь имеет возможность создавать уровни, а так же добавлять на каждый уровень объекты для взаимодействия с пользователем, будь то препятствие или игровой персонаж. Обычно редактор сцен содержит обзор текущей сцены и набор полей для взаимодейтсвия с пользователем - разработчиком игры. Одна из основных задач редактора сцен - заполнение уровня трехмерными моделями и настройка взаимодействия пользователя с ними. Также необходима возможность сохранения созданных сцен для дальнейшего воспроизведения. Ниже на рис.1 представлен пример существующего редактора сцен.
На данной иллюстрации демонстрируется редактор сцен Unreal Engine (Разработан компанией Unreal, https://www.unrealengine.com). Созданная сцена отображена в центре окна, и она окружена панелями инструментов. Так, например, слева от сцены находится список примитивов и специальных объектов сцены, таких, как источник света. В нижней части экрана отображен список директорий с данными, содержащимися на сцене, в то время, как справа находится список объектов сцены и управление параментрами объекта сцены (данная панель не отображена на скриншоте, так как ни один объект не выделен). В панели над областью отрисовки сцены находятся кнопки управления сценой - сохранение, воспроизведение и т.д.
Программа воспроизведения созданных сцен
В результате работы с редактором сцен получается набор сцен-уровней, которые необходимо "воспроизвести" - сыграть в них. В данном случае термин "воспроизвести" используется вместо термина "играть", поскольку также существуют жанры игр "визуальные новеллы" и "интерактивное кино", где интеракция с пользователем практически не происходит. Однако даже такие игры содержат набор сцен и объектов, которые взаимодействуют между собой.
Каждый игровой движок имеет свой уникальный формат хранения данных о созданных сценах, и соответственно каждый имеет свою уникальную программу для чтения и воспроизведения созданных сцен. Таким образом этот инструмент образует вторую необходимую состовляющую часть набора инструментов для создания игр.
Существующие решения
Существует множество как свободных решений с открытым исходным кодом, так и проприетарных, коммерческих наборов инструментов для создания трехмерных компьютерных игр. В данной секции рассматриваются оба вида инструментов.
Проприетарные продукты
Проприетарная программа - программа с закрытым исходным кодом и ограниченной лицензией на использование. В частности, три наиболее известных игровых движка - Unreal Engine, Unity3D (разработан Unity Technologies, https://unity3d.com) и CryEngine (разработан Crytek, https://www.cryengine.com/) позволяют свободное некоммерческое использование, но требуют покупку лицензии для возможности продажи игр, созданных на их базе. Также проприетарные продукты могут не позволять запуск на различных операционных системах. Так, например, редактор сцен Unity3D для ОС на базе ядра Linux все еще находится в тестировании, в то время, как CryEngine поддерживает работу только с OS Windows.
Также из-за конкуренции за рынок средств разработки игр каждый из коммерческих продуктов стремится иметь как можно более широкий функционал, тем самым повышая порог вхождения нового разработчика. В то же время зачастую из-за введения новых функций благодаря развитию технического оснащения современных персональных компьютеров данные продукта становится невозможно запустить на более старых ПК.
Помимо полноценных пакетов продуктов также существуют проприетарные библиотеки, рассчитанные на работу с определенной комплектацией компьютера разработчика или пользователя. Так, например, существует библиотека NVidia PhysX (разработка компании NVidia, https://developer.nvidia.com/physx-sdk), предоставляющая качественную физическую симуляцию нетвердых тел. Однако данная поддерживается только компьютерами с видеокартами NVidia 8 серии и выше. Аналогичные библиотеки предоставляет и компания AMD (https://www.amd.com/en/technologies/tressfx). Также на рынке существует коммерческая библиотека физической симуляции Havok (разработан компанией Havok, https://www.havok.com/), которая, однако, из-за высокой ценовой категории не позволяет энтузиастам использовать его в играх.
1.1 Наборы инструментов и библиотек с открытым исходным кодом
Существует множество различных реализаций инструментов, созданных энтузиастами. Зачастую основной задачей разработки такого инструмента стоит разработка библиотеки, позволяющей программисту включить ее в свою игру. Такими библиотеками являются Bullet Physics (http://bulletphysics.org/wordpress/) - свободная библиотека симуляции физических свойств объектов, или же SDL (https://www.libsdl.org/) - библиотека работы с пользовательским вводом, а также с выводом изображений и звука. Несмотря на широкий предоставляемый функционал, эти библиотеки требуют уже имеющихся наработок со стороны. Также существуют уже готовые инструменты для создания игр, однако из-за отсутствия коммерческой составляющей зачастую они являются нестабильными.
Анализ существующих решений
Основной недостаток коммерческих игровых движков, по мнению автора - это цена. Так, например, CryEngine и Unreal требуют 5% отчислений, в то время, как Unity требует подписки на использование Unreal Engine для возможности коммерческого распространения разработанных продуктов. Также CryEngine и Unity не имеют версий инструментов для ОС Mac OS X и Linux (стабильной версии в случае Unity), что является большим недостатком для пользователей данных ОС (коим является автор данной ВКР).
Unreal Engine позволяет создавать игровую логику как при помощи языков программирования (C++), так и с помощью встроенной системы "Blueprints" (рис. 2).
Система Blueprints предоставляет интерактивный интерфейс для создания игровой логики. Так, например, каждый блок является событием сцены либо объектом на сцене, где каждая точка внутри блока - это переменная либо метод. Связи между точками блока означают передачу данных (либо выходных значений метода) в другой метод, либо присваивание переменной. Как можно заметить, данная система дублирует объекты библиотеки Unreal при программировании логики на C++. Несмотря на визуальную нотацию и удобство использования, Blueprints требуют большего количества времени на создание алгоритмов логики, и, так же, как и библиотека Unreal для C++, страдает от избытка функций и объектов. Таким образом образуется высокий порог вхождения, где до того, как пользователь сможет создать собственную логику, ему необходимо изучить большое количество документации. Это явялется большим минусом.