3

Продолжение поста «Как я создавал ландшафт в unity по реальным геоданным»

Вобщем настало время все это безобразие покрыть текстурами. Идея в том, что надо как-то покрывать все это разными текстурами, а если точнее, то делать привязку по высотам (для начала) . И вот тут я решил, что надо сразу заложить оптимизацию, ибо множество текстур для разных высот да плюс еще карты нормалей и все такое, вобщем надо чтобы не тормозило. Было приято решение передавать в шейдер не отдельные текстуры а массивы текстур. Итак, первая проблема, надо написать механизм который создаст карту слоев, на основании настроек привязки к высотам. Я решил, что буду делать одну большую текстуру и передавать в нее данные смещения для текселей и размер области выборки тайла. Это позволит передать в шейдер сразу всю карту. Так, значит скрипт в Unity генерирует текстуру R8, т.е. это одноканальное изображение с 255 значениями на пиксел, что по моей задумке будет указателем на индекс текстуры в массиве. Ну или проще говоря, мы будем делать семпл каждого текселя в слое с индексом взятым из карты слоев.

Аналогичным образом, очевидно надо строить и карту смешивания, потому что без смешивания мы видим резкие переходы. Тут меня ждал небольшой сюрприз. Дело в том, что мне надо как-то передать в шейдер, где "заканчивается" область одного слоя, и начинается область другого. Пока я остановился на том, что буду так-же генерировать еще одноканальную R8 текстуру (карту смешивания) которая будет содержать данные о "силе" пикселя, наверное это просто аналог альфа-канала. Значит, я делаю семпл для конкретного текселя из карты смешивания, и если значение больше 0, то делаю интерполяцию с нижним слоем... Ну это в теории, на практике пока это все еще не заработало

Все эти сложности и хитрости, мною задуманы исключительно ради оптимизации семплов, потому что я к примеру пробовал делать подобное на стандартном Terrain от Unity, и тормоза выхвали не слабые)

АААААА, точно, я ж еще и стохастическое семплирование прикрутил, так что это еще +3 семпла на тексель для текстуры и карты нормалей. так что думаю я еще отказаться от интерполяции между слоями, в пользу дезеринга ( https://ru.wikipedia.org/wiki/Дизеринг )

Это позволит экономит один-два семпла...поглядим

ну и вот видео-отчет:

https://youtu.be/w3Fqocu-6zw?si=lEOOGZ64jFp_SH9w

https://rutube.ru/video/e47009a893ea36a1d091ab538ab52686/

https://vkvideo.ru/video-227321118_456239036

Показать полностью 3
3

Продолжение поста «Как я создавал ландшафт в unity по реальным геоданным»

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

Напомню, что в качестве исходных данных взята область карты высот из геоданных, которая по сути является матрицей значений int16. В предыдущих моих постах я описывал проблемы и решения связанные с конвертацией и обработкой данных. Сейчас же я пришел к тому, что строю сетку ландшафта динамически, по этим данным. Как очередной этап разработки этой системы я решил что надо строить ландшафт через динамическою загрузку только части карты высот. Итак сейчас моя система именно это и делает, система строит ландшафт плиточным методом, центр это всегда 9 плиток, они образуют некий буфер высокой детализации, а за ними система уже упрощает уровни детализации сеток по экспоненте. В настройках можно указать количество LOD уровней, размер семпла карты высот, и на какое расстояние (размер плитки) натягивать этот семпл. Итак система умеет перестраивать плитки по мере движения игрока, асинхронно удаляя, создавая или меняя детализацию. Таким образом, эта система может принимать сколь угодно долго семплы карты высот, что позволяет построить практически бесконечный мир.

И вот тут всплыл мой старый, любимый момент с ограничением современных систем - в какой-то момент, размер координат положения игрока становится столь большой, что координатам не хватает точности дробной части, и это приводит к забавному "дрожанию" игрока, ведь его "положение" немного обрезается. И для этого мне пришлось пойти на довольно распространенный фокус - смещать весь мир обратно к нулю координат. Т.е. при превышении некоего порога удаления, все, включая игрока просто теоепртируется назад. Это относительно дешевая операция, но есть "нюанс", игрок и ландшафт телепортируются не 100% синхронно. Это проявляется в виде одного-пары кадров "затекстурного" мира. Конечно я в тестах использовал очень большую скорость игрока, и конечно же, порог смещения можно поставить на предел для Unity - 10000 что уже будет вызывать сдвиг крайне редко, но все-же будет, и потому надо будет придумать что-то. Не знаю, Может у вас есть идеи???

https://youtu.be/uV_f93gNWiA?si=A9ysDKUTTAHnRtTg

https://vkvideo.ru/video-227321118_456239034?list=8b1ba63606...

https://rutube.ru/video/fd1336085de844c1ba767c034e44fafb/?r=...

На видео можно посмотреть некоторые результаты. Плюс я привел пример "дрожания игрока" котjрое проявляется на старой реалbзизации моей системы ландшафта

Показать полностью 3
1

Продолжение поста «Как я создавал ландшафт в unity по реальным геоданным»

Так, а вот и продолжение.
https://youtu.be/MT5p7hHkt1M?si=cor5tih_7m3Brvx7

https://vkvideo.ru/video-227321118_456239032

https://rutube.ru/video/d0dbe910706ae7939c9318e310330524/?r=...

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


Как я создавал ландшафт в unity по реальным геоданным

Как всегда, по причине творческого чесания своих тентаклей, и явного желания сделать что-то, о чем меня никто не просил, я решил попробовать создать ландшафт в unity, на основе реальных данных нашей матушки Земли.
Я и понятия не имел, в какие дебри меня это заведет, и потому, одним постом описать такое не получится. Следовательно я начну серию постов, где просто буду без всяких прекрас, монтажа и прочего описывать рабочий поток.
Вот первые наработки и результаты
https://vkvideo.ru/video-227321118_456239031

https://rutube.ru/video/3997af68f19ed2c6e52344afbb1f3042/?r=...

https://youtu.be/uryblbDUj84?si=gPpyfdvQF99UUfQz

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

ВИДЕО НЕ СОБЕРЖИТ УРОКОВ, ОПИСАНИЯ ТЕХНИК, ПОДСКАЗОК И ПРОЧЕГО МАТЕРИАЛА ВОСПРИНИМАЕМОГО КАК ПОСОБИЕ ДЛЯ РЕАЛИЗАЦИИ МЕХАНИЗМОВ И ИГРОВЫХ МЕХАНИК. ОНО ПРИЗВАНО ПОКАЗАТЬ ХОД МЫСЛЕЙ И ИХ РЕАЛИЗАЦИЮ. ЭТО ДЛИТЕЛЬНЫЙ И НАПОЛНЕННЫЙ МАЛОПОНЯТНЫМИ ТЕХНИЧЕСКИМИ МОМЕНТАМИ МАТЕРИАЛ, КОТОРЫЙ ВОЗМОЖНО ПОКАЖЕТ ВАМ ПУТЬ, НО НЕ ДАСТ ОТВЕТЫ

Показать полностью
Отличная работа, все прочитано!