Войти
ПрограммированиеФорумГрафика

Мультитекстурирование ландшафта большим количеством текстур (2 стр)

Страницы: 1 2
#15
13:14, 13 сен. 2021

MikeNew
вот формула nearest filter по которой считает textureLod:

ivec2 index = floor(uv * size);

#16
13:45, 13 сен. 2021

Задавал через градации серого, где определённый диапазон соответствовал слою. От 0 до 16 - первый слой, от 16 до 32 - второй слой, итд.
Дальше эта карта превращалась в несколько текстур RGBA, где каждому каналу соответствовал вес наложения того или иного слоя.
Правда на практике выяснилось, что почти никому не нужно более 5-6 слоёв. Таких, чтобы использовались достаточно активно. А если какие-то мелочи, их проще декалью наложить.

#17
16:06, 13 сен. 2021

HolyDel
> передавай uv из фрагментного шейдера в вершинный вторым аттрибутом с flat для
> получения id квада.
> Для текстурирования передавай с обычной интерполяцией.
Я это уже пробовал, это было первое что мне в голову пришло.
Вот такое выходит:

Изображение
#18
16:17, 13 сен. 2021

MikeNew
> Я это уже пробовал, это было первое что мне в голову пришло.
> Вот такое выходит:

Хм. А ты вот так генерируй квады:
QuadGen2 | Мультитекстурирование ландшафта большим количеством текстур
, чтобы ProvokingVertex был одинаковым у обоих треугольников квада.

#19
18:08, 13 сен. 2021

HolyDel
> Хм. А ты вот так генерируй квады:
> QuadGen2 | Мультитекстурирование ландшафта большим количеством текстур
> , чтобы ProvokingVertex был одинаковым у обоих треугольников квада.
Это понял, только вот сделал, вот результат(видны границы):

Изображение

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

Изображение

#20
19:01, 13 сен. 2021

HolyDel
> чтобы ProvokingVertex был одинаковым у обоих треугольников квада.
Хотя, похоже, это у меня ошибка, поскольку теоретически все должно работать если так сделать.

#21
19:08, 13 сен. 2021

MikeNew
> Вот такое выходит:
Ты сам посмотри этож баги.

MikeNew
> Это понял, только вот сделал, вот результат(видны границы):
Эээ чё? Ничё такого невидно 2 одинаковых скрина.

#22
(Правка: 19:44) 19:42, 13 сен. 2021

MikeNew
> Хотя, похоже, это у меня ошибка, поскольку теоретически все должно работать если так сделать.
Покажи весь фрагментный шейдер. Вот у тебя на первом рисунке как-раз квады и видно. Но как ты хотел, если у тебя каждому кваду соответствует 1 тексель с индексом текстуры? Никак не могу понять, чего же ты хочешь и какие у тебя текстуры.

#23
(Правка: 6:29) 5:55, 14 сен. 2021

samrrr
> Ты сам посмотри этож баги.
Да, это бы мой баг, в другом месте, не в шейдере.
samrrr
> Эээ чё? Ничё такого невидно 2 одинаковых скрина.
Видно, посмотри внимательней на нижнюю часть рисунка (ровно посередине). На первом рисунке четко видна граница между текстурами. На втором рисунке - плавный переход.

#24
(Правка: 6:27) 6:15, 14 сен. 2021

HolyDel
> Покажи весь фрагментный шейдер.
Проблема найдена, была не в шейдере.
HolyDel
> Никак не могу понять, чего же ты хочешь и какие у тебя текстуры.
Подробно распишу, и в чем была проблема тоже, на случай если тебе интересно.
Мне был нужен плавный переход из одной текстуры в другую.
Используется одна четырехканальная восьмибитная текстура одновременно для определения процента присутствия текстуры на террайне и для номеров этих текстур:

1. красный канал - вес первой текстуры
2. зеленый канал - вес второй текстур
3. красный канал - младшие четыре бита - номер первой текстуры
4. красный канал - старшие четыре бита - номер второй текстуры
5. альфа канал - младшие четыре бита - номер третьей текстуры

Такой способ позволяет смешивать одновременно три текстуры, с возможность выбора номера каждой текстуры из 16 штук. И еще четыре бита свободные остаются( или можно сделать выбор из 32 штук и останется один свободный бит). Хотя при таком способе надо внимательно раскидывать текстуры по каналам чтобы смешивание работало правильно, на такова цена за компактность.

Для раскрашивания террайна использую "спрайт-маску" с кисточкой из фотошопа.
На рисунке красные кружки - это веса текстур (красный и зеленый канал).

Изображение

Так вот, оказалось недостаточно взять и просто наложить маску кисти на карту весов и номеров текстур. Нужна еще дополнительная "каемка" из номеров текстур (синий и альфа каналы). На рисунке показана зелеными кружками. И я пока не понял почему. Что-то где то упускаю при наложении кисти. Но, главное, что с шейдером теперь все в порядке и я узнал легкий способ передачи координат квада в шейдер.

Несколько косноязычно объяснил, ну как сумел.

#25
(Правка: 6:29) 6:25, 14 сен. 2021

g-cont
> Правда на практике выяснилось, что почти никому не нужно более 5-6 слоёв.
Я вот сейчас тоже прикидываю, нужно мне больше пяти текстур на террайн, учитывая какой геморой может возникнуть при раскраске когда меняются номера тестур.
Поскольку, если текстур всего пять одновременно - то номера текстур передавать не надо.
Например.:

1. Песок
2. Земля
3. Трава
4. Дорога из камней
5. Скала

Уже получается неплохой достаточный набор для какого-нибудь биома леса.
А при переходе в снежный биом можно, например, менять текстуру травы на текстуру снега.
Но тогда, вроде, возникнут проблем на границе биома леса и снежного биома.
И так и так проблемы могут вылезти.
Проверять надо, я пока такое еще не делал.

#26
9:38, 14 сен. 2021

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

#27
10:04, 14 сен. 2021

Panzerschrek[CN]
> дающий хороший результат.
Этот вариант не даёт возможности плавного перехода между 2 текстурами.

#28
11:28, 14 сен. 2021

Panzerschrek[CN]
> Сколько терзаний. Лишь бы не делать проверенный вариант, дающий хороший
> результат.
Тебя не затруднит скинуть скрин как оно выглядит?

#29
(Правка: 12:19) 12:17, 14 сен. 2021

MikeNew
> Тебя не затруднит скинуть скрин как оно выглядит?
https://gamedev.ru/projects/forum/?id=198179&page=32&m=3801600#m467
https://gamedev.ru/projects/forum/?id=198179&page=45&m=3821963#m668

Страницы: 1 2
ПрограммированиеФорумГрафика