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