Google подвел меня, я не смог найти ничего информативного. Так что, возможно, GameDev может :).
- Что такое 3D текстуры?
- Когда они используются?
- Производительность стоит?
- Как они хранятся?
У меня много смутных идей, но нет «окончательного» определения.
Любые ссылки на примеры или учебные пособия приветствуются, особенно при рендеринге систем частиц с помощью трехмерных текстур.
Ответы:
3D текстура работает как обычная текстура. Но это действительно 3D. 2D текстуры имеют UV координаты, 3D имеют UVW (вы должны были использовать их, вероятно). Координаты текстуры - это единичный куб (0 - 1, 0 - 1, 0 - 1).
Возможное использование :
Производительность :
та же, что и у обычной текстуры - супер быстрая (самый быстрый доступ к памяти в gpu). Кэшируется для потоков и оптимизируется для ситуации, когда ближние потоки (пиксельные шейдеры) ищут близкие значения.
Может читаться как точка или использовать линейную выборку (собственная трилинейная интерполяция. Уравнение билинейной интерполяции в 2D текстуре).
Они хранятся в памяти как массив 2D текстур.
Mipmapping на 3D текстуре:
источник
3D текстуры или «Объемные текстуры» представляют собой серию нормальных текстур, сгруппированных в виде кусочков, как колода карт. Они используются в объемном рендеринге, который часто берет данные реального мира, такие как компьютерная томография, а затем манипулирует ими. В играх и графике иногда используются объемные эффекты, такие как дым, когда вы торгуете гибкостью системы частиц за фиксированную стоимость и простой (и легко распараллеливаемый) расчет объемной текстуры. В текстуре объема действительно легко найти ближайших соседей, но это может быть проблемой - более традиционная система частиц состоит из свободных точек.
Кроме того, некоторые сложные объекты получают выгоду от использования объемных текстур, таких как трава:
Дым Nvidia в коробке - отличный пример:
http://www.youtube.com/watch?v=9AS4xV-CK14
Кроме того, рендеринг рассеивания света легче, если у вас есть объем для рендеринга
источник
Помимо существующих ответов, мне нравится, как трехмерные текстуры могут создаваться также процедурно (на самом деле это имеет больше смысла, чем двухмерная процедурная текстура), например, шум и фракталы, которые обеспечивают хорошие и недеформированные детали текстуры для любых угловых поверхностей без необходимости выбрать модель проекции (УФ, плоскую, цилиндрическую, сферическую и т. д.).
Вместо выборки растрового слоя в трехмерном пространстве вы получаете отдельное значение для каждой точки в трехмерном пространстве с помощью базового алгоритма, который в основном дает вам бесконечное разрешение текстур и никаких проблем с растянутыми текстурами на угловых полигонах. Это 3D "текстуры" или точнее затенение поверхности для меня ^^
Я на самом деле очень устал от всех нюансов растровых текстур в разработке игр, когда я хочу испачкать космический корабль, я хочу применить несколько слоев формул шума и не нужно рисовать растровое изображение с ограниченным разрешением. Старый 3D-бафф может мечтать, не так ли;)
Прямо сейчас, предварительная выпечка этих милых, старых школьных 3D-решений для обработки поверхностей в цветных, обычных и зеркальных УФ-изображениях - это единственное развлечение, которое я испытываю, и это досадно ограничивает. Демо-сцена (как всегда) имеет тенденцию (предварительно) генерировать текстуры процедурно для 3D в реальном времени, но трудно найти хорошие инструменты для поддержки этого рабочего процесса от проектирования до выполнения. Большинство процедурных подходов разработчиков игр, похоже, касаются генерации мешей. Интересно, насколько шейдерный конвейер с помощью карты глубины / отложенного рендеринга может обрабатывать старые шумовые 3D-алгоритмы?
источник
Шаблоны трехмерных текстур применяются к вокселям объемного тела почти так же, как шаблоны двухмерных текстур применяются к пикселям 2D-многоугольника. Вот пример трехмерной объемной текстуры в JavaScript (требуется WebGL):
http://kirox.de/test/Surface.html
нажмите [v], поверните тело и измените градиент сгенерированной текстуры с помощью колеса мыши
источник