Giter VIP home page Giter VIP logo

markerdungeongeneration's Introduction

Генерация трехмерных подземелий с учетом маркеров в пространстве

Данная работа является генератором подземелий в трехмерном пространстве. Основной особенностью генератора является использование маркеров, расставленных в пространстве и использующихся при создании комнат и коридоров. Генерация подразумевает следующие этапы: ручная расстановка маркеров, генерация комнат, триангуляция связей на основе центров комнат, выбор подгафа при помощи генетического алгоритма и построение путей алгоритмом А*.

Проект является частью магистерской выпускной квалификационной работы по образовательной программе "Технологии разработки компьютерных игр" Школы разработки видеоигр Университета ИТМО. Вся работа написана на языке C# в игровом движке UNITY.

Обзор

Скриншот ниже представляет пример результата работы генератора. Для примера использовалось подземелье с шириной и глубиной в 30 ячеек, а высотой в 10 ячеек, что дает суммарный объем в 9.000 ячеек. Также, вручную были размещены пять изначальных комнат – входа, выхода, босса, комната с ключом и, соответствующая ей, закрытая комната. Была добавлена обязательная связь комнаты босса с выходом, а также целью являлась минимизация количества коридоров и разветвленности подземелья.

Темносерым отмечена область работы генератора. Белыми параллелограммами – комнаты, среди которых определенные типы отмечены специальными значками-маркерами. Красными линиями отмечены первичные связи комнат, а черными – оставшиеся после минимизации их числа. Синим построены коридоры между комнат.

Generation result screenshot

Запуск и использование

Работа является проектом, разработанным в Unity. Для запуска достаточно скачать репозиторий и открыть его через Unity Hub. Собранная тестовая сцена находится по пути Assets/Scenes/SampleScene.unity и содержит настройки из Обзора.

Основные компоненты

Генерация запускается через метод StartGeneration компонента Generator. В этом же компоненте можно выставить размеры используемого пространства. Компонент Rooms Spawner содержит настройки генерации комнат. Параметр Show Debug позволяет включить отображение ячеек, "занятых" ядрами комнат.

Для тестирования генератора предоставлен компонент Generation Repeater, который функционирует в 2х режимах:

  • Предпросмотр (Demo Mode = On) – генерация одного подземелья, включая его отображение на сцене
  • Тестирование (Demo Mode = Off) – множественная генерация Total Generations подземелий с выводом логов каждые Step Count подземелий. НЕ отрисовывает подземелья на сцене. Также можно указать Типы анализаторов, которые выведут результаты в соответствующие CSV файлы

Main Components

Настройки маркеров

Для добавления маркеров комнат нужно добавить компонент RoomNode на новый GameObject или же можно использовать префаб Assets/Prefabs/RoomNode.prefab. Настройки доступные для маркеров:

  • Позиция – определяется позицией GameObject-a
  • Room Size – желаемый размер комнаты
  • Room Type – тип комнаты, генерируемой маркером
  • Room – настройки комнаты, которые зависят от выбранного типа
  • Pre Setup Actions – действия генерации, вызывающиеся перед этапом создания комнат
  • Pre Tree Build Actions – действия генерации, вызывающиеся перед построением подграфа связей комнат
  • Post Gen Validate Actions – действия генерации, вызывающиеся после работы генератора

Marker Component

Функции оценки генератора связей

У компонента Generator можно указать объекты-оценщики, которые будут влиять на отбор ребер в полученом после триангуляции Делоне графе. Оценщики могут быть "обязательными" – не пропускающими решение, если оно не подходит, и "взвешенными" – оказывающими установленное влияние на конечный результат. Доступные оценщики:

  • Graph Component Rater – устанавливает обязательным условием достижимость всех комнат
  • Key Locks Rater – устанавливает обязательным условием возможность открыть все закрытые комнаты
  • Edges Count Rater – устанавливает взвешенное условие для процентного количества дополнительных коридоров
  • Edges Length Rater – устанавливает взвешенное условие для средней относительной длины коридоров
  • Slope Rater – устанавливает взвешенное условие для среднего относительного наклона коридоров
  • Branching Rater – устанавливает взвешенное условие для разветвленности подземелья

Genetic Raters

Дополнительно

Автор: Боев Ярослав
Полный текст работы можно найти на GitHub

Кодстайл для языка С# соответствует таковому указанному на сайте Microsoft

markerdungeongeneration's People

Contributors

yahimab avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

itmogamedev

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.