Можно ли визуализировать сцену с несколькими текстурами за один проход с помощью Xna?
Мне интересно, можно ли визуализировать сцену для нескольких целей рендеринга за один проход (или что-нибудь быстрее, чем рисовать ее несколько раз через клиентский код). Я хочу оптимизировать некоторый код, который отображается для нескольких текстур разных размеров (например, 512 на 512, 256 на 256, 128 на 128 и 64 на 64).
Я понимаю, что могу использовать карты MIP, полученные из исходной цели, но я не хочу смешивать цвета. Я подозреваю, что mip mapping будет в среднем от нескольких текселей, но для моих целей я просто хочу необрабатываемый рендеринг, как это делает видеокарта. Если есть какие-либо настройки для мипмапов, которые позволяют это, то это также значительно в качестве возможного решения.
С другой стороны, кто-нибудь знает, генерируются ли мипмапы на процессоре или графическом процессоре?
Спасибо за прочтение.
2 ответа
Там нет никакого возможного решения для вашего вопроса. МРТ не могут работать с разными разрешениями. Mipmaping не может создавать меньшие текстуры, которые выглядят точно так же, как оригинал. На самом деле, нет никакого способа сделать это AFAIK. С новыми видеокартами, мипмапы генерируются на GPU. Один вопрос: почему вы рендеринг на квадратные цели?
Как говорит Куанг Ан - нет способа сделать именно то, что вы просите. Так чего же вы на самом деле пытаетесь достичь?
Если вас беспокоит смешивание, которое имеет место при уменьшении масштаба для мипмапов, почему бы не взять свою цель рендеринга и отрисовать ее (на "полноэкранном" квадре) в другую цель рендеринга с использованием точечной выборки? (И повторите это для каждого размера, который вы хотите.)
Добавлены следующие комментарии:
Если то, что вы делаете, связано с глубиной (или данными, подобными глубине), и вам необходимо знать максимальную (или минимальную) глубину на пиксель, и вы каждый раз вдвое уменьшаете разрешение вашего изображения:
Вы можете использовать ту же технику масштабирования, визуализируя одну цель рендеринга в другую с точечной выборкой (как описано в моем первоначальном ответе выше). И в образце пиксельного шейдера четыре пикселя, которые станут одним пикселем в выходном изображении. Просто выберите максимальный (или минимальный) значимый пиксель из четырех в качестве выходного.
(Я оставлю математику, необходимую для выстраивания образцов в качестве упражнения.)