Я работаю с XNA над 3D-игрой и пытаюсь создать подходящую и приятную обстановку. Я фактически следовал учебнику, чтобы создать ландшафт из карты высот. Чтобы текстурировать его, я просто накладываю на него текстуру травы и накладываю ее на плитки несколько раз.
Но я хочу иметь действительно реалистичное текстурирование, а также генерировать его автоматически (например, если я хочу использовать шум Перлина для создания рельефа, а затем текстурировать его).
Я уже узнал о мультитекстурировании, загрузке файла карты с разными цветами для разных текстур, но я не думаю, что это действительно эффективно, например, для скал или очень крутых участков, текстура будет плохо наложена, так как это вид из Вверх. (Кроме того, я не знаю, как я буду рисовать дороги или грязные дорожки с этим.)
Я ищу эффективное решение для реалистичного наложения текстур сгенерированной процедурой местности.
Ответы:
Я предполагаю, что вас не волнуют карты наложения или разбрызгивание текстуры (так как это не зависит от вашего UV-отображения). Так как вы специально просили минимизировать искажения, вызванные отображением, вы можете обратиться к разделу 1.5 этой статьи о Gems из GPU:
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
Это может работать даже на процедурно сгенерированной местности. Концепция также известна как «трипланарное текстурирование» .
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: я проверил технику в моем собственном рендерере ландшафта, не используя предварительно вычисленные uvs для отображения. Все, что вам нужно сделать, это вычислить 3 набора UV для 3 различных плоскостей проекции (XY, YZ и ZX). Это может быть достигнуто с помощью простых фрагментов вершинных и фрагментных шейдеров:
VShader:
FShader:
источник
Вы можете определить набор текстур (трава, грязь, камень) и использовать их. Допустим, используя эти три слоя (камень внизу, грязь сверху и трава сверху), вы можете определить три альфа-канала, чтобы определить, какая часть каждой текстуры видима. Начните с простой карты шума для ваших альфа-каналов и, возможно, примите во внимание наклон местности. Чем больше склон, тем больше камней будет просвечивать. Насколько я помню, это техника под названием «Texture Splatting». Вот несколько ссылок, с которых можно начать. Усовершенствованная текстура сплаттинга (гамасутра)
TextureSplatting (charlesbloom, тот, который я использовал, чтобы начать работу с этой темой)
Вы должны быть в состоянии получить хорошие результаты довольно быстро, очень полезная тема
источник