forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на Unity (http://forum.boolean.name/forumdisplay.php?f=147)
-   -   Bombers3d - генерация меша уровня (http://forum.boolean.name/showthread.php?t=12905)

pax 12.07.2010 23:27

Bombers3d - генерация меша уровня
 
Что-то опять появилась ностальгия по Mine Bombers... и захотелось оживить заброшенный проект Bombers3D средствами Unity3d. Первое с чего-бы хотел начать - это с генерации сетки уровня.

Как это было реализовано раньше на Blitz3d (как работает можно в игре посмотреть на F8 - F10, точно не помню):
  1. Сетка уровня была разбита на вертикальные полосы
  2. При уничтожении любой клетки полосы или при изменении ее текстуры происходила перегенерация сетки всей полосы.
  3. На сетку накладывалась одна большая текстура, содержащая в себе все необходимые тайлы.
  4. Анимация текстур уровня (в той версии которая на сайте ее нету, анимаци восновном использовалась для тумана войны и оружия - "биомасса", которая кроме анимации еще и заполняла все свободное пространство) была выполнена путем отрисовки в эту большую текстуру новых кадров анимации на свои места.
  5. Генерация сетки полосы выполнялась очисткой меша и созданием заново нужных вершин, нормалей и индексов.
  6. Для тумана войны генерировалась более упрощенная сетка, т.к. он имел одинаковую текстуру.

Как это реализовать в юнити:
  1. Первое от чего хочется отказаться - это единая текстура. Хочется больше универсальности по изменению ресурсов в игре.
  2. Так же хочется отказаться от рендеринга в текстуру для создания анимированных тайлов. (Хочется чтобы игру можно было скомпилировать на бесплатной версии Юнити).
  3. Хочется добиться минимального переключения текстур при визуализации уровня. Возможно для этого придется генерировать меши для каждого материала отдельно.
  4. Стоит ли сохранить линейчатую структуру генерации стеки?
  5. Хочется использовать карты нормалей для лучшего освещения (ну с этим проблем думаю не возникнет).
  6. По результатам хочется создать редактор для уровней игры.

Хотелось бы выслушать мнение форумчан по этому поводу. Может у кого есть более интересные идеи по этому поводу?

Illidan 13.07.2010 02:53

Ответ: Bombers3d - генерация меша уровня
 
так непонятно ничего, треба ссылочку на проект

pax 13.07.2010 08:56

Ответ: Bombers3d - генерация меша уровня
 
Цитата:

Сообщение от Illidan (Сообщение 154499)
так непонятно ничего, треба ссылочку на проект

Первый пост, на слове "Bombers3D" ;)

pax 13.07.2010 10:18

Ответ: Bombers3d - генерация меша уровня
 
*Мысли в слух*
Если не задумываться о генерации уровня, а ставить префабы в нужные места с полной геометрией куба без нижней части, то при уровне размером 100х60 получается 6000 объектов и порядка 60000 полигонов/120000 вершин. Если принять во внимание что для одинаковых блоков уровня будет использоваться инстансинг, то на современных машинах все будет летать... но так делать не хочется, а хочется сделать оптимально.

UPD: Другим подходом может быть создание вершинного буфера на весь уровень, а при регенерации сетки создавать только индексые буфферы для каждого из материалов. Такой вариант возможно будет одним из оптимальных вариантов - создать для каждого материала динамические списки индексов и пересоздавать их при необходимости. Таким образом возможно получится минимизировать число переключений текстур и повысить скорость рендеринга.

jimon 13.07.2010 13:08

Ответ: Bombers3d - генерация меша уровня
 
чет ты усложняешь самое примитивное, у тебя там сетка 10000 * 10000 и в каждой клетке уникальная модель по 5 тыс поликов ? нет ! не парься зря, или юнити настолько тормознутое ?

pax 13.07.2010 13:26

Ответ: Bombers3d - генерация меша уровня
 
Т.е. просто расставлять заготовленные префабы блоков уровня? Юнити то не тормознутое, вспоминается тормознутость блитца :) Плюс хочется максимально оптимизировать производительность... может я и заморачиваюсь, в общем будет видно после тестов.

UPD: С другой стороны, если принять во внимание то, что каждый блок может иметь до пяти текстур, то не ясно как поведет себя рендер юнити... будем пробовать :)

pax 13.07.2010 20:46

Ответ: Bombers3d - генерация меша уровня
 
Эксперимент с генерацией единого меша для всего уровня не удался, т.к. Юнити не поддерживает сетки с более чем 65к вершин. Будем разбивать.

UPD: для использования какрт нормалей нужно генерить так же тангенты, что мне лень )) Буду генерировать поле с помощью готовых блоков. Посмотрю на производительность.

UPD2: Сгенерированное поле 100х60 с одним материалом дало не очень привлекательную производительность в редакторе на моем ноуте. Всетаки буду пытаться генерировать поле. Подготовлю заранее тангенты.

jimon 13.07.2010 23:00

Ответ: Bombers3d - генерация меша уровня
 
pax
Цитата:

Юнити не поддерживает сетки с более чем 65к вершин.
а там вообще нет 4 байтовых индексов ? мм страшно :) уж могли бы сами сделать абстракцию для разбиения

Цитата:

для использования какрт нормалей нужно генерить так же тангенты
там точно нету TBN генератора ? зачем тогда такой двиг ?

pax 14.07.2010 00:51

Ответ: Bombers3d - генерация меша уровня
 
Цитата:

Сообщение от jimon (Сообщение 154601)
а там вообще нет 4 байтовых индексов ? мм страшно :) уж могли бы сами сделать абстракцию для разбиения

Вероятно это сделано для поддержки старых видеокарт. При импорте скорее всего большие сетки разбиваются. Не пробовал такие модели импортировать.

Цитата:

Сообщение от jimon (Сообщение 154601)
там точно нету TBN генератора ? зачем тогда такой двиг ?

Тангенты можно сгенерировать при импорте модели. Для расчета при ручном создании меша нет, почему-то не сделали такую возможность. Нашел исходник расчета тангентов, что-то он нормально не работает. Подобрал вручную... слава богу для боксов это было просто )

pax 14.07.2010 10:16

Ответ: Bombers3d - генерация меша уровня
 
Генерация уровня на основе готовых блоков не подошла из-за своей артефактности. В стыках блоков проявляются линии, вспоминается, что тоже самое было и в блице. Остается генерация сетки налету. В связи с оптимизацией по материалам я принял решение генерировать сетку полинейно (как и было), но группировать рядом стоящие линии для меньшего количества дравколов. Например по две - четыре линии. Это в 2-4 раза снизит количество переключений текстур при отрисовке меша уровня.

pax 14.07.2010 12:50

Ответ: Bombers3d - генерация меша уровня
 
Вложений: 1
Первый сгенерированный уровень пока с одной текстурой, но уже предусмотрено любое их количество и даже анимацию текстур на уровне будет легко сделать. Меш уровня разбит на части, каждая шириной по четыре линии (это настраивается). Во вьюпорте выбрана первая.
UPD: Тесты показали, что регенерация сетки одной части меша, состоящей из четырех полос занимает менее миллисекунды машинного времени даже на моем ноуте, чему я рад, т.к. большие взрывы некоторых предполагаемых видов оружия будут вызывать перегенерацию сетки всего уровня :)

pax 14.07.2010 18:04

Ответ: Bombers3d - генерация меша уровня
 
Вложений: 1
Добавлена возможность вращать любую грань на 90, 180 и 270 градусов. Будем экономить текстуры!

Чтобы не сложно было делать дизайн уровней будет заготовлено много вариантов блоков игрового уровня и на их основе будет построен редактор.

pax 14.07.2010 19:27

Ответ: Bombers3d - генерация меша уровня
 
Вложений: 2
Тестирование системы наложения материалов.

На скрине рандомно сгенерированный уровень из предустановленных восьми блоков.

UPD: Добавил скрин уровня со скосом, который говорит о том, что можно создавать не только прямоугольные уровни )

pax 16.07.2010 21:28

Ответ: Bombers3d - генерация меша уровня
 
Вложений: 1
Появились зачатки редактора уровней. Демо по следующей ссылке:
http://shgames.ru/bombers_ed.html

Описание:
Clear Level Data - очистка всего уровня (по умолчанию сгенерирована билиберда, так что надо будет на нее нажать)
Floor - "рисование" пола
Block - "рисование" блоков
Clear - удаление данных ячейки
Кнопка Change меняет текущую кисть для "рисования"

В аттаче скрин созданного уровня "Аля Бомбермен" :)

UPD: Сетка уровня теперь разделена на блоки 10х10, уровень будет всегда размером 100х100 (думаю такого размера хватит за глаза), сетка создается только для используемых блоков.

pax 18.07.2010 00:33

Ответ: Bombers3d - генерация меша уровня
 
Запилил резиновую рамку для редактора не смотря на жару. Ссылка та же (пост #14). Активировать рамку можно нажав кнопку "Rect".


Часовой пояс GMT +4, время: 22:53.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot