Блог 3DWorld: https://3dworldgen.blogspot.com
3DWorld — это кроссплатформенный 3D-игровой движок на базе OpenGL, над которым я работаю с тех пор, как прошел курс компьютерной графики CS184 в Калифорнийском университете в Беркли в 2001 году. Он имеет следующие функции:
Функции, классы и оболочки 3D-графики вокруг OpenGL
Генератор/процессор шейдеров с горячей перезагрузкой
Процедурная генерация контента для ландшафта, растительности, городов, интерьеров и экстерьеров зданий и т. д.
Процедурный генератор вселенной с галактиками, звездами, планетами, лунами и т. д.
Процедурное воксельное 3D-генерирование ландшафта с возможностью редактирования пользователем в реальном времени.
Генератор ландшафта, включая различные функции шума, эрозию, пользовательское редактирование в реальном времени, чтение/запись карты высот.
Процедурное здание (интерьер и экстерьер), генерация дорог и городов
Физическое моделирование для типов примитивных объектов и других (> 10 тыс. динамических объектов)
Цикл дня/ночи в реальном времени с погодой (дождь, снег, град, ветер, молния)
Физически обоснованные материалы с отражением и преломлением.
Динамические тени, фоновая окклюзия, до 1024 динамических источников света, эффекты постобработки.
Скелетная анимация и процедурная анимация.
Встроенный шутер от первого лица «смайлик-убийца».
Встроенный космический корабль + игра о колонизации планет
Создание коллекции предметов открытого мира и режима игры с зомби.
Компьютерный искусственный интеллект для игроков в шутере от первого лица, построения игрового процесса и кораблей во вселенной
Импортер для объектных файлов Lightwave, форматов 3DS и Assimp для других форматов файлов.
Поддержка чтения текстур: JPEG, PNG, BMP, TIFF, TGA, DDS.
Оптимизирован для быстрой загрузки и рендеринга в реальном времени больших моделей (> 1 ГБ данных вершин/текстур).
Я преобразовал проект из svn в git при коммите 6607. Большая часть кода написана на C++ с использованием GLSL для шейдеров. Предполагается, что это будет кроссплатформенный проект. Включены файлы проекта Microsoft Visual Studio 2022. Также включен make-файл linux/gcc, но он более экспериментальный. Дополнительную информацию см. в README.linux. Проект должен быть построен под GCC на Linux с некоторой доработкой, но я уже давно это не пробовал. У меня есть старый make-файл, который устарел, но, возможно, его исправление и исправление не займут много времени.
Имейте в виду, это большой репозиторий, его размер на данный момент составляет около 1 ГБ. Я включил исходный код, файлы конфигурации, текстуры, звуки, небольшие модели, файлы освещения, данные сцены, карты высот и файлы проекта. Этот репозиторий не содержит больших файлов моделей, используемых в некоторых сценах, их придется загружать отдельно. Это означает, что некоторые файлы конфигурации сцены не будут работать, поскольку они не могут найти данные, на которые они ссылаются. Текущий список зависимостей:
OpenGL 4.5 (должен поставляться с новейшими графическими драйверами для Windows 8/10/11)
OpenAL 1.1 (необязательно) (Установка системы: https://www.openal.org/downloads/ или вы можете попробовать более новую версию openal-soft: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (текущая версия 3.0, вероятно, работает: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (необязательно) (одна версия находится здесь: https://github.com/vancegroup/freealut)
zlib-1.2.11 (более новую версию можно скачать здесь: https://zlib.net/)
glew-2.0.0 (вероятно, 2.1.0 тоже подойдет: http://glew.sourceforge.net/)
gli (последняя версия: https://github.com/g-truc/gli/только заголовок, включен в каталог зависимостей)
glm-0.9.9.0 (последняя версия: https://glm.g-truc.net/0.9.9/index.html или https://github.com/g-truc/glm/только заголовок, включен в каталог зависимостей )
libpng-1.2.20 (необязательно) (Моя версия очень старая; Последняя версия: https://libpng.sourceforge.io/index.html); В большинстве случаев можно заменить на stb_image, за исключением экспорта изображения карты.)
libtiff-4.3.0 (необязательно) (Последняя версия: http://www.simplesystems.org/libtiff/)
Assimp (необязательно) (см. инструкции по сборке по адресу https://github.com/assimp/assimp/blob/master/Build.md; инструкции по сборке vcpkg, вероятно, самые простые.)
libtarga (исходный код включен)
Заголовки STB: stb_image, stb_image_write, stb_dxt (исходный код включен)
Я включил урезанные версии большинства этих библиотек в каталог зависимостей. Я удалил все большие файлы, которые не нужны 3DWorld, в некоторых случаях даже примеры/тесты/документацию. Они были созданы с помощью сообщества MS Visual Studio 2022 в Windows 11. Если вы хотите их использовать, вам необходимо скопировать каталоги в корневой каталог и пересобрать все библиотеки, необходимые для других версий Windows или Visual Studio. Если вы клонируете/устанавливаете vcpkg, он должен находиться на том же уровне, что и каталог 3DWorld.
Обратите внимание, что многие из этих зависимостей устарели и могут быть заменены более новыми библиотеками. Я сосредоточился на добавлении контента, и меня это не слишком интересует. Freeglut, вероятно, следует заменить на SDL, а библиотеки изображений — на STB или DevIL. (STB используется в качестве запасного варианта, но не поддерживает все используемые изображения.)
Если вы хотите собрать 3DWorld, вы можете использовать проекты в папке Dependency/ или загрузить и собрать их самостоятельно и изменить настройки проекта, чтобы использовать их. В настоящее время я использую цель сборки x64 MS Visual Studio 2022 Community для 3DWorld, но цель сборки win32 также работает. Проект MSVS 2019 3DWorld_msvs2019.vcxproj в настоящее время устарел, но, возможно, его можно заставить работать. Он должен скомпилироваться и запуститься в 32-битном режиме, если вы скопируете библиотеки DLL из папки lib64/ в корень репозитория и внесете некоторые другие изменения в настройки проекта.
Если у вас Linux, вы можете попробовать собрать его, используя предоставленный make-файл. Файл README.linux должен оказаться полезным. Я собрал 3DWorld и в основном запускаю его на Ubuntu 18.04 с gcc 7 и Ubuntu 20.04 с gcc 9.
3DWorld принимает имя файла конфигурации в командной строке. Если он не найден, он читает defaults.txt и использует любые файлы конфигурации, перечисленные там. Некоторые из этих файлов конфигурации включают такие модели, как Sponza Atrium, Stanford Dragon, спортивный автомобиль и т. д. Эти файлы слишком велики для хранения в репозитории git. Я попытался заставить 3DWorld генерировать нефатальные ошибки, если модели не могут быть найдены. Многие из более крупных моделей можно найти в Архиве компьютерной графики McGuire: http://casual-effects.com/data/.
Я упаковал 3D-модели, которые слишком велики для репозитория GitHub, и поместил их на Google Диск здесь (сейчас до версии 6): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing Некоторые из этих моделей хранятся во внутреннем формате 3DWorld и не должны использоваться повторно в других проектах. Другие приходят с таких сайтов, как Mixamo. Существует также каталог текстур с дополнительными текстурами, используемыми в интерьерах зданий, которые можно объединить с каталогом текстур проекта.
Системные требования:
Windows 8/10/11; Linux при использовании make-файла с gcc.
Microsoft Visual Studio 2019 или 2022. Для поддержки OpenMP необходима профессиональная или общественная версия. Вы также можете попробовать использовать gcc в Linux.
Относительно новое поколение графических процессоров Nvidia или AMD (работает на моем ноутбуке с графикой Intel, но со скоростью 12-20 кадров в секунду)
Не менее 8 ГБ системной памяти для больших сцен.
Не менее 4 ГБ памяти графического процессора для больших сцен; Мой графический процессор имеет 12 ГБ памяти.
Устранение неполадок: похоже, что некоторым системам (в частности, картам AMD) требуется основной контекст OpenGL. Это можно выбрать, добавив «use_core_context 1» в файл конфигурации. Это также можно включить в файле Scene_config/config_post.txt, который применяется после чтения всех других файлов конфигурации верхнего уровня. В некоторых ситуациях (некоторые карты Nvidia) использование основного контекста может быть медленнее, поэтому он не включен по умолчанию.
Полезные клавиши (более подробную информацию о привязках клавиш см. в файле readme-keys.txt):
a,s,d,w: Движение
q,e: Сменить оружие (режим игрового процесса)
«пространство»: прыжок/огонь
'esc': Выйти
«tab»: экранное меню (перемещайтесь с помощью клавиш со стрелками и «X» для переключения меню)
б: Включить объекты/физику/ИИ (для игрового режима на земле и в режиме вселенной)
F1: переключение между режимами земли/вселенной/плиточного ландшафта.
F2: переключить режим игры.
m: переключить полноэкранный режим.
h: переключить перемещение полета
v: изменить режим камеры (хрустальный шар/орбита против вида от первого лица)
V: переключить вид мыши
K: переключить режим карты сверху.
х: Пауза
Мышь влево: поворот/действие
Мышь вправо: огонь
В настоящее время у меня есть этот репозиторий для образовательных целей под лицензией GPLv3. Некоторые подмодули доступны с другими лицензиями, совместимыми с коммерческим использованием, в моей учетной записи GitHub. Это не коммерческий инструмент, и я не пытаюсь здесь зарабатывать деньги. На данном этапе я также не ищу других для работы над проектом, хотя принимаю отзывы, сообщения об ошибках и предложения. Возможно, что-то изменится, если я решу сделать из этого настоящую игру. Если вы хотите использовать что-то здесь для своего проекта, пожалуйста, дайте мне знать.
Дополнительной документации по 3DWorld нет. Однако у меня есть блог, в котором есть описания алгоритмов и множество скриншотов: https://3dworldgen.blogspot.com.
Вот несколько скриншотов из моего блога:
Вот торговая зона здания со стеллажами и полками. Здания могут содержать десятки тысяч интерактивных объектов, которые игрок может брать и носить с собой. (config_heightmap.txt)
Камеры, расположенные в других комнатах, показывают видео в реальном времени на мониторах безопасности. (config_heightmap.txt)
Зомби (с поиском пути и другими функциями искусственного интеллекта) ходят вокруг и падают в крытый бассейн. Водная поверхность воды имеет рябь, брызги, отражения и преломления. (config_heightmap.txt)
Гараж с припаркованными автомобилями и спринклерными трубами, проложенными по потолку. (config_heightmap.txt)
Процедурный подвал здания с людьми, непрямым освещением и трубами, проложенными вдоль потолка. (config_heightmap.txt)
Процедурный жилой район с офисными зданиями на заднем плане. Машины и люди есть как на тротуарах, так и внутри зданий. (config_heightmap.txt)
Интерьер процедурного здания — библиотека с процедурно генерируемыми книгами. (config_heightmap.txt)
Процедурно генерируемые дома и офисные здания с полными интерьерами. (config_heightmap.txt)
Отражающие (металл), преломляющие (стекло), излучающие и полупрозрачные сферы в ночной сцене с непрямым освещением. Нарисовано в реальном времени; сферы можно перемещать интерактивно. (config_white_plane.txt)
Процедурный город со зданиями, дорогами, машинами и пешеходами. (config_heightmap.txt)
Процедурный город ночью с мостом на переднем плане. (config_heightmap.txt)
Ранний процедурный город с соснами.
Ранний процедурный город.
Ландшафт с использованием доменного шума деформации и моделирования гидравлической эрозии до размещения города. (config_heightmap.txt)
Режим плиточного ландшафта с рекой, деревьями, травой и т. д. (config_t.txt)
Интерактивная симуляция разрушительного огня/дыма в реальном времени с участием деревьев, растений и травы. (config_trees.txt)
Процедурная вселенная солнечной системы с поясом астероидов. (вселенная/config_universe.txt)
Сцена атриума Crytek Sponza с динамическим источником света, отбрасывающим тени, и непрямым освещением. (спонза/config_sponza2.txt)
10 000 экземпляров высокодетализированной музейной модели, помещенной в мозаичный режим местности (карта высот Пьюджет-Саунд) и нарисованной в реальном времени с тенями и непрямым освещением. (config_museum_tt_model.txt)
Атриум Crytek Sponza с отражающими полами и 200 динамическими точечными источниками света в реальном времени. (спонза/config_sponza2.txt)
Множество отражающих/преломляющих сфер и кубов с ослаблением света в зависимости от плотности во дворе офисного здания. (карта/config_mapx.txt)
Сцена Сан-Мигеля с динамическим снегопадом и картой снежного покрова с трассировкой пути, визуализированная с помощью специального шейдера. (config_san_miguel.txt)
Сцена Сан-Мигеля визуализируется в реальном времени с прорисованным путем, предварительно рассчитанным непрямым освещением, картами нормалей и отражающими поверхностями, нанесенными на карту куба. (config_san_miguel.txt)
2 миллиона процедурно сгенерированных + размещенных сосен (видимых 500 тысяч), нарисованных в реальном времени в режиме мозаичного ландшафта с использованием экземпляров рекламных щитов. (config_t.txt)
Интерактивное штабелирование 10 000 динамических блоков в сцене Mapx. Стеки можно перемещать и опрокидывать, а сцену можно сохранять, перезагружать и редактировать. (карта/config_mapx.txt)
Процедурно сгенерированная планета с кольцами, содержащими небольшие астероиды. (вселенная/config_universe.txt)
Пояс астероидов с 10 000 динамических (вращающихся и вращающихся по орбитам) астероидов, 100 000 точечных частиц-спрайтов и объемными рекламными щитами для пыли. (вселенная/config_universe.txt)
Режим плиточного ландшафта, показывающий различные формы процедурно созданной растительности, включая траву, цветы, сосны, пальмы и лиственные деревья. На самом деле это полигональные модели, отбрасывающие тени. (config_t.txt)
Динамичный свет в реальном времени проникает сквозь шумовой объемный дым в сцене Crytek Sponza. (спонза/config_sponza2.txt)
Светоотражающие металлические полы в сцене Crytek Sponza с непрямым освещением от солнца и неба. (спонза/config_sponza2.txt)
Отражающие сферы, тор и куб, нарисованные в реальном времени в динамической сцене с использованием текстур отражения карты куба в вестибюле офисного здания. Материалы представляют собой смесь металлов и диэлектриков с использованием физически обоснованных моделей. (карта/config_mapx.txt)
Сцена в музее с непрямым освещением, отражающими поверхностями и картой теней. Эта модель процедурно текстурирована. (config_museum.txt)
Сцена заснеженного дома, созданная путем падения миллиарда частиц снега и накопления снега. Снег предварительно рассчитывается, но может быть визуализирован в реальном времени. (дом/config_house_winter.txt)
Моделирование и рендеринг дождя, включая обнаружение столкновений для каждой капли дождя и мокрых/отражающих поверхностей. (дом/config_house.txt)
Непрямое освещение и тени от перекрывающихся прожекторов, применяемые к динамическим объектам. (карта/config_mapx.txt)
Моделирование воды с волнами с использованием аппаратной тесселяции в режиме мозаичного ландшафта. (config_t.txt)
Процедурно сгенерированные 3D-воксельные ледяные пещеры с непрямым освещением. Эту местность можно редактировать в реальном времени с помощью кистей и огня из оружия. (config_ice_caves.txt)
Процедурно сгенерированная планета, полностью нарисованная во фрагментном шейдере, без текстур. Сюда входит создание местности (лед, снег, скалы, лес, пустыня, грязь), воды, облаков и атмосферы. (вселенная/config_universe.txt)