Что такое 3D текстуры?

31

Google подвел меня, я не смог найти ничего информативного. Так что, возможно, GameDev может :).

  • Что такое 3D текстуры?
  • Когда они используются?
  • Производительность стоит?
  • Как они хранятся?

У меня много смутных идей, но нет «окончательного» определения.

Любые ссылки на примеры или учебные пособия приветствуются, особенно при рендеринге систем частиц с помощью трехмерных текстур.

deceleratedcaviar
источник
Я не уверен, что вы спрашиваете, вещь. Вы имеете в виду нормальное и рельефное картирование для имитации изменения поверхности на «плоских» участках?
Coderanger
2
Я думаю, что он имеет в виду больше похоже на GL_TEXTURE_3D и т. Д.
Luker
1
Также посмотрите на этот вопрос: как работает UVW текстурное наложение? (и его ответы).
Джордж Дакетт

Ответы:

34

3D текстура работает как обычная текстура. Но это действительно 3D. 2D текстуры имеют UV координаты, 3D имеют UVW (вы должны были использовать их, вероятно). Координаты текстуры - это единичный куб (0 - 1, 0 - 1, 0 - 1).

Возможное использование :

  • объемные эффекты в играх (огонь, дым, лучи света, реалистичный туман)
  • свет кэширования для глобального освещения в реальном времени ( например, CryEngine )
  • научные (МРТ, КТ сохраняются в томах)

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

Может читаться как точка или использовать линейную выборку (собственная трилинейная интерполяция. Уравнение билинейной интерполяции в 2D текстуре).

Они хранятся в памяти как массив 2D текстур.

Mipmapping на 3D текстуре:
введите описание изображения здесь

NotaBene
источник
14

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

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

Дым Nvidia в коробке - отличный пример:

http://www.youtube.com/watch?v=9AS4xV-CK14

Кроме того, рендеринг рассеивания света легче, если у вас есть объем для рендеринга

Лютер
источник
7

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

Вместо выборки растрового слоя в трехмерном пространстве вы получаете отдельное значение для каждой точки в трехмерном пространстве с помощью базового алгоритма, который в основном дает вам бесконечное разрешение текстур и никаких проблем с растянутыми текстурами на угловых полигонах. Это 3D "текстуры" или точнее затенение поверхности для меня ^^

Я на самом деле очень устал от всех нюансов растровых текстур в разработке игр, когда я хочу испачкать космический корабль, я хочу применить несколько слоев формул шума и не нужно рисовать растровое изображение с ограниченным разрешением. Старый 3D-бафф может мечтать, не так ли;)

Прямо сейчас, предварительная выпечка этих милых, старых школьных 3D-решений для обработки поверхностей в цветных, обычных и зеркальных УФ-изображениях - это единственное развлечение, которое я испытываю, и это досадно ограничивает. Демо-сцена (как всегда) имеет тенденцию (предварительно) генерировать текстуры процедурно для 3D в реальном времени, но трудно найти хорошие инструменты для поддержки этого рабочего процесса от проектирования до выполнения. Большинство процедурных подходов разработчиков игр, похоже, касаются генерации мешей. Интересно, насколько шейдерный конвейер с помощью карты глубины / отложенного рендеринга может обрабатывать старые шумовые 3D-алгоритмы?

... вместо того, чтобы пытаться выяснить, как параметрически отобразить текстурное изображение на поверхность вашей фигуры, объемная природа текстур на основе шума позволяет вам просто оценивать их в (x, y, z) местах в вашем пикселе шейдер. Таким образом, вы эффективно вырезаете свою текстуру из твердого материала, что зачастую гораздо проще, чем пытаться разработать разумное неискаженное параметрическое отображение.

Эти виды процедурных текстур на основе объемного шума долгое время были основой художественных фильмов, где шейдеры не требуют производительности в реальном времени ... во всех фильмах со спецэффектами сегодня широко используются процедурные шейдеры на основе шума ... это сильно зависит о широком использовании функции шума в пиксельных шейдерах, написанных на таких языках, как Pixar RenderMan. С хорошей реализацией функции шума, доступной для использования в режиме реального времени в графических процессорах, я с нетерпением жду возможности увидеть некоторые из захватывающих визуальных идей из художественных фильмов, включенных в следующее поколение интерактивных развлечений на настольном компьютере и консоли. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html

Оскар Дювеборн
источник
Очень интересно читать! У меня проблемы с визуализацией того, что вы имеете в виду во втором абзаце.
замедленная
Возможно, я мог бы сделать диаграмму. Я имею в виду, что вместо выборки растрового изображения цвет (или что вы хотите) просто определяется алгоритмом шума. Таким образом, нет необходимости в интерполяции между пикселями растрового изображения (поскольку вы должны выполнять выборку не в идеальной позиции 1x1 пикселя), и в теории разрешение становится бесконечным. Это немного похоже на фактический расчет процентов по конкретной процентной ставке вместо использования предварительно рассчитанной таблицы поиска, где есть определенные шаги / интервалы (= разрешение растрового изображения).
Оскар Дюверборн
После прочтения всей статьи ссылка на. У меня намного лучшее понимание, но я думаю реф. изображения принесут пользу обеим сторонам: неуверенным и т. д. :)
замедленная
0

Шаблоны трехмерных текстур применяются к вокселям объемного тела почти так же, как шаблоны двухмерных текстур применяются к пикселям 2D-многоугольника. Вот пример трехмерной объемной текстуры в JavaScript (требуется WebGL):

http://kirox.de/test/Surface.html

нажмите [v], поверните тело и измените градиент сгенерированной текстуры с помощью колеса мыши

oyophant
источник