www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
трава, ландшафт, большие пространства

 
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 496


СообщениеДобавлено: Ср Окт 19, 2016 21:00    Заголовок сообщения: трава, ландшафт, большие пространства Ответить с цитатой

Впилил намедни в двигло, кроме прочего, фруструм куллинг и лоды (да, я тормоз, знаю, не пинайте ногами). Сцена сразу забегала в 60фпс с прекрасной детализацией ближнего плана. Это я про деревья и прочие крупные объекты.
А вот с травой - проблема, и не одна.
Видяха-то успевает ее нарисовать на разумную дистанцию перед камерой. А вот процессор подготовить данные - нет, в итоге фпс падает на пол.
Понятно, что анализировать надо не всю карту распределения травы а только часть около камеры, но я что-то недогоняю как вычислить требуемый кусок, т.е. область в карте по положению камеры.
Вторая головная боль - большие дельты по высоте в ландшафте: если делать меш травы большим куском (чтобы не умереть на ДИПах инстансов), выходит так что квадратный-плоский кусок травы лежит на наклонном ландшафте, что, понятно, ни в какие ворота не лезет((
"Мельчить" куски не получается и по другой причине - размерность ячейки сетки ландшафта и ячейки карты распределения сильно больше, чем адекватный размер блока травы.
Ну и сверху, есть опасение что разгрузив процессор, так или иначе нагружу больше видяху, и воз останется на том же месте.
Так что не помешали бы какие-нибудь соображения на этот счет. И да, "длинные" решения не подходят ибо заточка под 64к и раздувать код не хотелось бы.
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikle



Зарегистрирован: 02.12.2008
Сообщения: 416
Откуда: Туапсе

СообщениеДобавлено: Ср Окт 19, 2016 21:07    Заголовок сообщения: Ответить с цитатой

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

QTree или OcTree, в зависимости от заполненности направления "вверх".
Цитата:
квадратный-плоский кусок травы лежит на наклонном ландшафте, что, понятно, ни в какие ворота не лезет

Можно применять к блоку травы трансформацию "сдвиг", чтобы плоскость совпала с наклоном ландшафта. Не "поворот" потому, что при повороте вертикальные стебли станут наклонными, а при сдвиге этого не произойдёт.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 496


СообщениеДобавлено: Ср Окт 19, 2016 21:12    Заголовок сообщения: Ответить с цитатой

Mikle, а можно ссылочку на QTree? гугл выдает что-то не относящееся к теме(((
И еще вопрос, если делать "сдвиг" - то по двум осям. Как описать его, учитывая некоммутативность 3д-преобразований, в матрице?
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikle



Зарегистрирован: 02.12.2008
Сообщения: 416
Откуда: Туапсе

СообщениеДобавлено: Ср Окт 19, 2016 21:31    Заголовок сообщения: Ответить с цитатой

Цитата:
можно ссылочку на QTree? гугл выдает что-то не относящееся к теме(((

QuadTree попробуй, находит сразу.
Цитата:
если делать "сдвиг" - то по двум осям. Как описать его, учитывая некоммутативность 3д-преобразований, в матрице?

Можно в матрице, а можно ещё проще, сдвиг нужен вдоль оси Y, это примерно так:
yRes = (x - x0) * kx + (z - z0) * kz + y
x, y, z - исходные координаты вертекса,
x0, z0 - координаты, на которых сдвиг нулевой, например, центр куска.
kx и kz - два коэффициента, наклоны по соответствующим осям.
То есть в вертексный шейдер нужно передавать 4 флоата - x0, z0, kx, kz, их вполне можно впихнуть в один 4D вектор, а матрица - это целых 16 флоатов, и вычислений с ней больше.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 496


СообщениеДобавлено: Ср Окт 19, 2016 22:39    Заголовок сообщения: Ответить с цитатой

У меня так и так данные из скаттера попадают в инстансер, в котором объект допиливается матрицами, так что лучше через них.
Идея с наклоном выглядит здраво, попробую реализовать - сам рельеф пока без лодов, но выглядит для моих задач неплохо (возможно попробую еще с меш репроекцией, но это уже детали).
Почитал по quadtree, понял о чем ты, но кажется это не тот случай. У меня алгоритм такой:
на гпу строится карта расположения (2д), скаттер ее читает (есть ключ, зона ошибки, джиттеры, вобщем все что надо), и выдает наружу массив координат (строится 1 раз).
затем рисуются инстансы, принимая координаты из этого массива. если бокс объекта не проходит фруструм куллинг - отрисовка не выполняется. Но точки всегда перебираются все.
пачки инстансов рисуются в несколько проходов (по числу лодов) с отсечением near/far (отсечка внутри фруструм куллинга) от ближних к дальним, так что переключение вертекс-буфера происходит 1 раз на каждый уровень лода. В принципе можно сделать аддитивный лод (добавлять детали а не менять буфер), но это ситуацию не меняет в целом.
Для деревьев работает неплохо - инстансов не запредельно много, зона видимости большая, среднее отношение проверок к отрисовкам примерно 3/1.

Поскольку есть карта распределения, я так понимаю что можно брать информацию из xz позиции камеры, и далее читать квадрат или окружность определенного радиуса, но не совсем догоняю как из матрицы камеры (при работе в редакторе - он ничего не знает о pos/lookat, есть только рабочая вью матрица) получить эти самые xy и затем перевести в пространство карты, чтобы заново построить массив координат. Нужно ли учитывать масштабирование? Как учитывать удаление от поверхности?
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Ized
shader killer


Зарегистрирован: 28.12.2007
Сообщения: 128


СообщениеДобавлено: Пт Окт 21, 2016 12:08    Заголовок сообщения: Ответить с цитатой

Rendering Countless Blades of Waving Grass

Если у тебя CPU bound, то нагружай сильней видяху - переноси все, что можно на GPU. И надеюсь, ты используешь хардварный инстансинг?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 496


СообщениеДобавлено: Пт Окт 21, 2016 14:24    Заголовок сообщения: Ответить с цитатой

Ized, спасибо, читаю...
Инстансинг... говно у меня инстансинг. Но я исправлюсь)

upd: технику эту знаю, уже попробовал, все норм,заморочка не в этом.
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах