Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 14.11.2013, 00:15   #1
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Генерация и представление гексагональной решетки

Здравствуйте. Написал небольшой скрипт для создания гексагональной решетки с заданным по вертикали и горизонтали количеством гексов. Сейчас у меня каждый гекс - это отдельный gameObject(точнее инстанциированный префаб). Но мне кажется такой подход не самый лучший с точки зрения производительности. При сторонах решетки 1000x1000 уже получается миллион gameObject'ов, а ещё, насколько я понял, есть ограничение на количество меш коллаидеров, хотя gameObject'ам удобно назначать материал и проверять клики по ним.

Я планирую генерировать карту, назначая каждому гексу текстуру определенного типа местности по какому-нибудь алгоритму.

Хочу узнать, можно ли их сделать одним объектом на котором была бы возможность склеить тот же условный миллион текстур(как если бы я назначил текстуру каждому gameobject'у)

Помимо этого планирую каждому гексу назначать определенные атрибуты вроде занят/не занят и т. п. Хранить их хочу, например 64-битным числом, каждый бит которого соответствует какому-нибудь атрибуту.
Так же сделать двумерный массив, где будут храниться все гексы.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Andvrok (14.11.2013)
Старый 14.11.2013, 07:58   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Генерация и представление гексагональной решетки

Ну так что мешает сгенерировать Mesh для поля, пускай не один, а поделить поле например на части 100х100 (какие будут приемлемы)? Как хранить - сам ответил на вопрос - массив.

Ограничение для колайдеров 65к штук, тут надо использовать математику а не колайдеры для каждого гекса.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 01:57   #3
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Ответ: Генерация и представление гексагональной решетки

Спасибо за ответ, так и сделал. Создаю меши в виде гексового поля. Программа теперь сама определяет на сколько мешей поделить карту, в зависимости от указанной длины и ширины карты(в гексах) и максимального количества гексов в одном меше, а также правильно стыкует соседние меши.
Сделал 2 способа наложения текстуры.
В первом случае используется алтас и для каждых 6 вершин гексов в меше задется uv(пока что тайлы гексов из атласа выбираются наугад). Получается много мешей, на которых одна и та же текстура атласа, но разные uv.
А во втором случае берется все тот же атлас и на его основе создается новая текстура(тоже тайлы наугад), которая накладывается на меш грубо говоря 1 в 1. Получается много мешей, каждый со своей уникальной текстурой.

Вопрос, какой из способов посоветуете оставить, или может есть лучшие варианты?
Пока склоняюсь ко второму, т.к. мне кажется миникарту будет делать проще. Но есть вопросы, какой максимальный размер генерируемой текстуры лучше выставить (пока 1024x1024) и какой оптимальный размер на ваш взгляд для одного тайла в атласе). Да и производительность лучше в первом случае.

Генерирую типы местности(трава, вода, песок и т. д.) для гексов и храню их в массиве. Далее исходя из типа местности выбираю из атласа нужный тайл местности или тайл перехода.
Большие трудности вызывает алгоритм для генерации типов местности, а вернее его отстутствие)) А еще большие - создание правильных переходов. Поделитесь, пожалуйста, опытом или статьями.

Интереснее всего узнать о построении береговой линии. В цивилизации 5 она очень красива, при этом, насколько я помню, карты там тоже генерируются.

Если делать анимацию воды, то всю воду стоит разнести в отдельные меши?
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 15:08   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Генерация и представление гексагональной решетки

Чем меньше текстур тем лучше. Атлас лучше всего с одним материалом и генерацией меша с нужными uv. Вода сложный вопрос, я наверное пока ничего не посоветую по этому поводу.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 17:01   #5
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Ответ: Генерация и представление гексагональной решетки

Ок. А если в атласе все не поместится? Сейчас размер атласа 1024x1024, а одного тайла 128x128. Получается вмещается всего 64 варианта. С учетом всех типов местности и переходов между ними может не хватить одного.
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 17:05   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Генерация и представление гексагональной решетки

А не получится переход делать шейдером с маской?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.11.2013, 18:25   #7
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Ответ: Генерация и представление гексагональной решетки

Если жизнь заставит, то, конечно, получится) А вообще планировалось их рисовать вручную и вносить в атлас(ы)(если имелся в виду типа такого шейдер http://habrahabr.ru/post/180743/ ).

Последний раз редактировалось maewyn, 28.11.2013 в 21:29.
(Offline)
 
Ответить с цитированием
Старый 16.01.2014, 04:19   #8
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Ответ: Генерация и представление гексагональной решетки

Появился еще вопрос по поводу визуализации сетки поверх меша из гексов. Сделал с помощью gl quads(чтобы толщину обводки гекса можно было задавать), но число вершин увеличилось в 2 раза и соответственно drawcalls тоже, fps упало до 20)) Как быть?)

Вот картинка, что я имею в виду

(Offline)
 
Ответить с цитированием
Старый 16.01.2014, 07:44   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Генерация и представление гексагональной решетки

Используй не GL, а генерируй Mesh на группу хексов сразу. Тогда ты снизишь количество дравколов. Либо рисуй хексы более сложным шейдером с текстурой обводки
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.01.2014, 00:43   #10
maewyn
AnyKey`щик
 
Регистрация: 13.11.2013
Сообщений: 9
Написано 2 полезных сообщений
(для 12 пользователей)
Ответ: Генерация и представление гексагональной решетки

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

А что, если вместо редактора будет ландшафт с неровностями и и деревьями?
(Offline)
 
Ответить с цитированием
Старый 17.01.2014, 08:01   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Генерация и представление гексагональной решетки

Второй текстурой или декалью, повторяющей геометрию тогда. Скорее всего декалью.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com