Четверг, 19 Декабря 2024, 10:53

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Мультитекстурирование 3D ландшафта
Quad69Дата: Суббота, 08 Февраля 2020, 12:48 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Всем привет!

Предположим, есть 4 текстуры(трава, земля, песок и т.д) и ещё одна текстура где красный канал обозначает прозрачность первой текстуры, зеленый канал - прозрачность второй, синий - третей и альфа - четвертой. Дальше через шейдер(которому мы передаем все 5 текстур) рисуем модельку ландшафта.

В итоге у нас получается то что нужно: Где то песок немного смешан с травой, где то просто трава и т.д

А теперь сам вопрос: Что делать, если нужно использовать не 4 текстуры, а 16? 64?
Тут уже количества каналов не хватит...

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


Сообщение отредактировал Quad69 - Суббота, 08 Февраля 2020, 12:51
drcrackДата: Суббота, 08 Февраля 2020, 13:33 | Сообщение # 2
старожил
Сейчас нет на сайте
обычно просто добавляют дополнительные контрольные текстуры
Quad69Дата: Суббота, 08 Февраля 2020, 13:59 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
drcrack, Если нужно например использовать 64 текстуры, то придётся добавить ещё 16. Не много ли получится? Или разницы никакой?
drcrackДата: Суббота, 08 Февраля 2020, 15:15 | Сообщение # 4
старожил
Сейчас нет на сайте
нет, 16 конечно не нужно, одновременно в одном месте ты все равно 64 текстуры никак не смешаешь
если ограничить это число 4, то тебе достаточно 2 управляющие текстуры: в первой хранятся 4 индекса (0-255) текстур с наибольшим весом, а во второй собственно их веса
Quad69Дата: Суббота, 08 Февраля 2020, 17:15 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Хм, хорошо, спасибо.
Ещё один вопрос, можно ли как то передать в шейдер все текстуры как массив? Без массива придётся строчить кучу if else if else if...
drcrackДата: Воскресенье, 09 Февраля 2020, 07:51 | Сообщение # 6
старожил
Сейчас нет на сайте
не можно, а нужно, гугли Texture2DArray

UPD
сразу не заметил что тема про GMS, там может и не поддерживается, но по идее должно, фича нужная и достаточно старая уже
если все же нет — можно просто сгенерировать нужный код (обьявление текстур, if else if else и тд) каким-нибудь скриптом


Сообщение отредактировал drcrack - Воскресенье, 09 Февраля 2020, 07:54
Quad69Дата: Воскресенье, 09 Февраля 2020, 16:43 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
тема про GMS, там может и не поддерживается

Скорее всего. Если в шейдере использовать texture2DArray/sampler2DArray, то он вообще не запускается.
Если писать sampler2D s_Texs[64]; то вроде бы работает, но из самого гамака текстуры не передаются.
martukДата: Воскресенье, 09 Февраля 2020, 18:30 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Quad69, нет, 64 текстуры за один проход - зверство.
Ты можешь сделать по-другому:
Воспринимай глобальную текстуру ландшафта как слоеный пирог (сюрфейс).
И вот на каждую текстуру иметь иметь свою маску. И потом просто можешь лепить этот пирог из (в теории) неограниченного колличества слоев и отрисовывать на сюрфейсе.
Этот способ не ультра быстрый, но вполне рабочий. + Это позволит тебе один раз отрисовать до невозможности сложную текстуру и больше не напрягать видеокарту, т.к. ты по факту рендеришь в сюрфейс для многоразового использования.


Сообщение отредактировал martuk - Воскресенье, 09 Февраля 2020, 18:32
puksus4Дата: Четверг, 20 Февраля 2020, 12:31 | Сообщение # 9
частый гость
Сейчас нет на сайте
Цитата drcrack ()
если ограничить это число 4, то тебе достаточно 2 управляющие текстуры: в первой хранятся 4 индекса (0-255) текстур с наибольшим весом, а во второй собственно их веса

Раз уж зарегался, скажу - текстуру с индексами семплить обычным образом нельзя. Т.к. индексы в отличии от весов не интерполируются корректно (например у пикселя 1 текстуры индекс 1 у пикселя 2 текстуры мндекс 3, в результате мипмапинга получишь усреднённый индекс 2)
Таким образом текстуру надо семплить только первого мип уровня , в результате чего будет кипение на стыках материалов, особенно на дальнем плане

Добавлено (20 Февраля 2020, 12:39)
---------------------------------------------
возможно есть вариант ручками посчитать мип уровни текстуры используя макс фильтр и семплить только целочисленные мипр уровни
Это гемор


Сообщение отредактировал puksus4 - Четверг, 20 Февраля 2020, 12:39
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг