Що таке 3D текстури?


31

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

  • Що таке 3D текстури?
  • Коли вони використовуються?
  • Витрати на продуктивність?
  • Як вони зберігаються?

У мене багато нечітких ідей, але жодного «остаточного» визначення.

Будь-які посилання на приклади чи підручники високо оцінені, особливо у візуалізації систем частинок за допомогою 3D-текстур.


Я не впевнений, що ви запитуєте. Ви маєте на увазі нормальне та нерівне картографування для імітації зміни поверхні на «плоских» ділянках?
кодеранж

2
Я думаю, що він має на увазі більше схожий на GL_TEXTURE_3D тощо.
Luker

1
Також дивіться це питання: Як працює відображення текстур UVW? (та її відповіді).
Джордж Дакетт

Відповіді:


34

3D текстура працює як звичайна текстура. Але це справді 3D. 2D текстури мають ультрафіолетові координати, у 3D є UVW (вам довелося використовувати їх широко). Текстурні координати - це одиничний куб (0 - 1, 0 - 1, 0 - 1).

Можливе використання :

  • об'ємні ефекти в іграх (вогонь, дим, світлові промені, реалістичний туман)
  • кешування світла для глобального освітлення в режимі реального часу (наприклад, CryEngine )
  • наукові (МРТ, КТ зберігаються в томах)

Продуктивність :
Те саме, що звичайна текстура - супер швидкий (найшвидший доступ до пам'яті в gpu). Кешовано для потоків і оптимізовано для ситуації, коли поблизу потоків (піксельних шейдерів) шукають близькі значення.

Можна читати як точковий або використаний лінійний відбір проб (нативна трилінійна інтерполяція. Еквівалентна дволінійна інтерполяція у двовимірній текстурі).

Вони зберігаються в пам'яті, як масив двовимірних текстур.

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


14

3D текстури або "Об'ємні текстури" - це ряд нормальних текстур, розташованих як фрагменти, як колода карт. Вони використовуються в об'ємній візуалізації, яка часто бере дані реального світу, такі як КТ, а потім ними маніпулює. В іграх та графіці іноді виникають об'ємні ефекти, як дим, де ви торгуєте гнучкістю системи частинок за фіксованою вартістю та легким (і легко паралельним) розрахунком об'ємної текстури. За фактом об’ємної текстури знайти найближчих сусідів дуже просто, але це може бути проблемою - це більш традиційна система частинок, що складається з пухких точок.

Також деякі складні об'єкти виграють від використання об'ємних текстур, таких як трава:

Дим Nvidia в коробці - прекрасний приклад:

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

Крім того, відображення розсіювання світла простіше, коли у вас є гучність для візуалізації


7

Окрім існуючих відповідей, мені подобається, як 3D-текстури можуть бути створені також процедурно (насправді це має більше сенсу, ніж 2D-процедура текстури), як шум і фрактали, які забезпечать хороші та недеформовані деталі текстури на будь-яких кутових поверхнях, не маючи вибрати модель проекції (УФ, площинна, циліндрична, сферична тощо).

Замість вибірки шару растрових зображень у тривимірному просторі ви отримуєте чітке значення для кожної точки в просторі 3D за допомогою базового алгоритму - який в основному дає вам нескінченну роздільну здатність текстури і не має проблем з розтягнутими текстурами на кутових багатокутниках. Це 3D "текстури" або, скоріше, для мене затінення поверхні ^^

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

Наразі попереднє випікання цих солодких 3D-рішень для кінофільму в кольорові, звичайні та дзеркальні ультрафіолетові ранки - це єдине задоволення, яке я отримую, і це дратує обмеженість. Демо-сцена (як завжди), як правило, (попередньо) генерує текстури процедурно для 3D-режиму реального часу, але важко знайти хороші інструменти для підтримки цього робочого процесу від дизайну до часу виконання. Більшість процедурних підходів до розробки ігор, як видається, стосуються створення сітки. Цікаво, скільки шейдерних трубопроводів за допомогою карти глибини / відкладеної візуалізації може обробити старі шкільні 3D шумові знаки?

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

Ці різновиди об'ємних шумових процедурних текстур довгий час були основою художніх фільмів, де шейдери не вимагають виконання в режимі реального часу ... усі фільми зі спецефектами сьогодні широко використовують шумові процедурні шейдери ... сильно залежать про широке використання функції шуму в піксельних шейдерах, написаних на таких мовах, як Pixar's RenderMan. З гарною реалізацією функції шуму, доступної для використання в режимі реального часу в графічних процесорах, я з нетерпінням чекаю на захоплюючі на робочому столі та консолі деякі захоплюючі візуальні ідеї з художніх фільмів, включених у інтерактивну розвагу нового покоління. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


Дуже цікаво читати! У мене виникають проблеми з уявленням того, що ви маєте на увазі у другому абзаці.
deceleratedcaviar

Можливо, я міг би скласти схему. Я маю на увазі те, що замість вибірки растрової карти колір (або все, що ви хочете) просто визначається алгоритмом шуму. Таким чином, не потрібна інтерполяція між потрібними пікселями растрових зображень (оскільки ви маєте вибірку не в ідеальному положенні 1x1 пікселів), і роздільна здатність стає теоретично нескінченною. Це трохи схоже на фактичне обчислення відсотків за конкретною процентною ставкою, а не за допомогою попередньо розрахованої таблиці пошуку, де є певні кроки / інтервали (= роздільна здатність растрової карти).
Оскар Дувеборн

Прочитавши всю статтю, на яку посилався. Я набагато краще розумію, але думаю, що реф. образи виграють обидві сторони: невпевнений і tl; dr. :)
deceleratedcaviar

0

3D візерунки текстур застосовуються до вокселів об'ємного тіла майже так само, як і двовимірні текстурні візерунки застосовуються до пікселів 2D багатокутника. Ось приклад 3D-об'ємної текстури в JavaScript (вимагає WebGL):

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

натисніть [v], поверніть корпус і змініть градієнт створеної текстури за допомогою колеса миші

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.