|
12.07.2010, 23:27
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Bombers3d - генерация меша уровня
Что-то опять появилась ностальгия по Mine Bombers... и захотелось оживить заброшенный проект Bombers3D средствами Unity3d. Первое с чего-бы хотел начать - это с генерации сетки уровня.
Как это было реализовано раньше на Blitz3d (как работает можно в игре посмотреть на F8 - F10, точно не помню): - Сетка уровня была разбита на вертикальные полосы
- При уничтожении любой клетки полосы или при изменении ее текстуры происходила перегенерация сетки всей полосы.
- На сетку накладывалась одна большая текстура, содержащая в себе все необходимые тайлы.
- Анимация текстур уровня (в той версии которая на сайте ее нету, анимаци восновном использовалась для тумана войны и оружия - "биомасса", которая кроме анимации еще и заполняла все свободное пространство) была выполнена путем отрисовки в эту большую текстуру новых кадров анимации на свои места.
- Генерация сетки полосы выполнялась очисткой меша и созданием заново нужных вершин, нормалей и индексов.
- Для тумана войны генерировалась более упрощенная сетка, т.к. он имел одинаковую текстуру.
Как это реализовать в юнити: - Первое от чего хочется отказаться - это единая текстура. Хочется больше универсальности по изменению ресурсов в игре.
- Так же хочется отказаться от рендеринга в текстуру для создания анимированных тайлов. (Хочется чтобы игру можно было скомпилировать на бесплатной версии Юнити).
- Хочется добиться минимального переключения текстур при визуализации уровня. Возможно для этого придется генерировать меши для каждого материала отдельно.
- Стоит ли сохранить линейчатую структуру генерации стеки?
- Хочется использовать карты нормалей для лучшего освещения (ну с этим проблем думаю не возникнет).
- По результатам хочется создать редактор для уровней игры.
Хотелось бы выслушать мнение форумчан по этому поводу. Может у кого есть более интересные идеи по этому поводу?
|
(Offline)
|
|
13.07.2010, 02:53
|
#2
|
Разработчик
Регистрация: 06.08.2007
Сообщений: 473
Написано 131 полезных сообщений (для 257 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
так непонятно ничего, треба ссылочку на проект
|
(Offline)
|
|
13.07.2010, 08:56
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Сообщение от Illidan
так непонятно ничего, треба ссылочку на проект
|
Первый пост, на слове "Bombers3D"
|
(Offline)
|
|
13.07.2010, 10:18
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
*Мысли в слух*
Если не задумываться о генерации уровня, а ставить префабы в нужные места с полной геометрией куба без нижней части, то при уровне размером 100х60 получается 6000 объектов и порядка 60000 полигонов/120000 вершин. Если принять во внимание что для одинаковых блоков уровня будет использоваться инстансинг, то на современных машинах все будет летать... но так делать не хочется, а хочется сделать оптимально.
UPD: Другим подходом может быть создание вершинного буфера на весь уровень, а при регенерации сетки создавать только индексые буфферы для каждого из материалов. Такой вариант возможно будет одним из оптимальных вариантов - создать для каждого материала динамические списки индексов и пересоздавать их при необходимости. Таким образом возможно получится минимизировать число переключений текстур и повысить скорость рендеринга.
|
(Offline)
|
|
13.07.2010, 13:08
|
#5
|
|
Ответ: Bombers3d - генерация меша уровня
чет ты усложняешь самое примитивное, у тебя там сетка 10000 * 10000 и в каждой клетке уникальная модель по 5 тыс поликов ? нет ! не парься зря, или юнити настолько тормознутое ?
|
|
|
Сообщение было полезно следующим пользователям:
|
|
13.07.2010, 13:26
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Т.е. просто расставлять заготовленные префабы блоков уровня? Юнити то не тормознутое, вспоминается тормознутость блитца Плюс хочется максимально оптимизировать производительность... может я и заморачиваюсь, в общем будет видно после тестов.
UPD: С другой стороны, если принять во внимание то, что каждый блок может иметь до пяти текстур, то не ясно как поведет себя рендер юнити... будем пробовать
|
(Offline)
|
|
13.07.2010, 20:46
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Эксперимент с генерацией единого меша для всего уровня не удался, т.к. Юнити не поддерживает сетки с более чем 65к вершин. Будем разбивать.
UPD: для использования какрт нормалей нужно генерить так же тангенты, что мне лень )) Буду генерировать поле с помощью готовых блоков. Посмотрю на производительность.
UPD2: Сгенерированное поле 100х60 с одним материалом дало не очень привлекательную производительность в редакторе на моем ноуте. Всетаки буду пытаться генерировать поле. Подготовлю заранее тангенты.
Последний раз редактировалось pax, 13.07.2010 в 22:55.
|
(Offline)
|
|
13.07.2010, 23:00
|
#8
|
|
Ответ: Bombers3d - генерация меша уровня
pax
Юнити не поддерживает сетки с более чем 65к вершин.
|
а там вообще нет 4 байтовых индексов ? мм страшно уж могли бы сами сделать абстракцию для разбиения
для использования какрт нормалей нужно генерить так же тангенты
|
там точно нету TBN генератора ? зачем тогда такой двиг ?
|
|
|
14.07.2010, 00:51
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Сообщение от jimon
а там вообще нет 4 байтовых индексов ? мм страшно уж могли бы сами сделать абстракцию для разбиения
|
Вероятно это сделано для поддержки старых видеокарт. При импорте скорее всего большие сетки разбиваются. Не пробовал такие модели импортировать.
Сообщение от jimon
там точно нету TBN генератора ? зачем тогда такой двиг ?
|
Тангенты можно сгенерировать при импорте модели. Для расчета при ручном создании меша нет, почему-то не сделали такую возможность. Нашел исходник расчета тангентов, что-то он нормально не работает. Подобрал вручную... слава богу для боксов это было просто )
|
(Offline)
|
|
14.07.2010, 10:16
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Генерация уровня на основе готовых блоков не подошла из-за своей артефактности. В стыках блоков проявляются линии, вспоминается, что тоже самое было и в блице. Остается генерация сетки налету. В связи с оптимизацией по материалам я принял решение генерировать сетку полинейно (как и было), но группировать рядом стоящие линии для меньшего количества дравколов. Например по две - четыре линии. Это в 2-4 раза снизит количество переключений текстур при отрисовке меша уровня.
|
(Offline)
|
|
14.07.2010, 12:50
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Первый сгенерированный уровень пока с одной текстурой, но уже предусмотрено любое их количество и даже анимацию текстур на уровне будет легко сделать. Меш уровня разбит на части, каждая шириной по четыре линии (это настраивается). Во вьюпорте выбрана первая.
UPD: Тесты показали, что регенерация сетки одной части меша, состоящей из четырех полос занимает менее миллисекунды машинного времени даже на моем ноуте, чему я рад, т.к. большие взрывы некоторых предполагаемых видов оружия будут вызывать перегенерацию сетки всего уровня
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
14.07.2010, 18:04
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Добавлена возможность вращать любую грань на 90, 180 и 270 градусов. Будем экономить текстуры!
Чтобы не сложно было делать дизайн уровней будет заготовлено много вариантов блоков игрового уровня и на их основе будет построен редактор.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.07.2010, 19:27
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Тестирование системы наложения материалов.
На скрине рандомно сгенерированный уровень из предустановленных восьми блоков.
UPD: Добавил скрин уровня со скосом, который говорит о том, что можно создавать не только прямоугольные уровни )
Последний раз редактировалось pax, 14.07.2010 в 20:35.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
16.07.2010, 21:28
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Появились зачатки редактора уровней. Демо по следующей ссылке:
http://shgames.ru/bombers_ed.html
Описание:
Clear Level Data - очистка всего уровня (по умолчанию сгенерирована билиберда, так что надо будет на нее нажать)
Floor - "рисование" пола
Block - "рисование" блоков
Clear - удаление данных ячейки
Кнопка Change меняет текущую кисть для "рисования"
В аттаче скрин созданного уровня "Аля Бомбермен"
UPD: Сетка уровня теперь разделена на блоки 10х10, уровень будет всегда размером 100х100 (думаю такого размера хватит за глаза), сетка создается только для используемых блоков.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
18.07.2010, 00:33
|
#15
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Bombers3d - генерация меша уровня
Запилил резиновую рамку для редактора не смотря на жару. Ссылка та же (пост #14). Активировать рамку можно нажав кнопку "Rect".
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:32.
|