Webgl мозаичные неповторяющиеся текстуры - PullRequest
1 голос
/ 25 февраля 2012

Есть ли метод, который я могу использовать в WebGL (используя Three.js от MrDoob), который будет охватывать большую площадь, например каменная стена или мощеный пол со случайной текстурой, которая не выглядит повторяющейся? У меня есть пример на http://www.timeref.com/webgl_house_test2.html. Могу ли я использовать шейдер для этого?

1 Ответ

3 голосов
/ 26 февраля 2012

Во-первых, хорошая демонстрация!

Относительно вашего вопроса: это то, что не давало программистам работать по ночам с незапамятных времен.:)

Есть несколько вещей, которые вы можете сделать, чтобы уменьшить видимость повторяющихся текстур.Первое и самое очевидное - просто не использовать повторяющуюся текстуру!Названный виртуальным текстурированием, это немного сложно сделать в общем случае (Megatexture RAGE - одна из единственных коммерческих реализаций, которые я знаю), но если у вас есть более ограниченное использование, такое как текстурирование ландшафта, это можно сделать немного проще.Однако я бы предположил, что такой подход является избыточным для большинства потребностей.

Однако есть несколько более простых методов, чтобы помочь в этой ситуации.Если вы хотите пойти по пути генерации деталей поверхности целиком в шейдере (что может быть дорого), вы можете получить много пробега от применения различных фракталов к вашему выводу.(Подумайте о чем-то похожем на набор Мандельброта), но художнику обычно труднее его контролировать.Есть интересных ресурсов о способах смешивания повторяющихся текстур таким образом, чтобы они выглядели менее повторяющимися, но они имеют тенденцию искажать текстуры с очень упорядоченными узорами (такими как кирпичи или плитки).

Вероятно, самый удобный для художника маршрут, о котором я знаю, - это использование текстур деталей.Они могут работать двумя способами: они могут добавить мелкозернистые детали к большему повторяющемуся образцу или могут добавить больший дисперсионный слой поверх повторяющегося образца, чтобы разрушить монотонность,(Это то, что вы хотели бы.) В обоих случаях смесь очень проста и не вызывает большого количества попаданий во время выполнения.

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

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

...