什么是3D纹理?


31

Google让我失败了,我找不到任何有用的信息。所以也许GameDev可以:)。

  • 什么是3D纹理?
  • 什么时候使用?
  • 绩效成本?
  • 它们如何存储?

我有很多模糊的想法,但没有“确定的”定义。

任何对示例或教程的引用都将受到赞赏,尤其是在通过3D纹理渲染粒子系统中。


我不确定你在问什么。您是指法线贴图和凹凸贴图来模拟“平坦”区域上的表面变化吗?
coderanger 2011年

2
我认为他的意思更像是GL_TEXTURE_3D等。–
Luker

1
另外,请参见以下问题:UVW纹理贴图如何工作?(及其答案)。
乔治·达基特

Answers:


34

3D纹理的工作方式类似于常规纹理。但这确实是3D。2D纹理具有UV坐标,3D纹理具有UVW(必须适当使用它们)。纹理坐标是单位立方(0-1,0-1,0-1)。

可能的用法

  • 游戏中的体积效应(火,烟,光线,逼真的雾)
  • 缓存灯光以进行实时全局照明(例如CryEngine
  • 科学的(MRI,CT扫描被保存为卷)

性能
与常规纹理相同-超快(gpu中最快的内存访问)。为线程缓存并针对近线程(像素着色器)寻找近值时的情况进行了优化。

可以读取为点或使用线性采样(本机三线性插值。2D纹理中的双线性插值)。

它们像二维纹理数组一样存储在内存中。

在3D纹理上进行贴图:
在此处输入图片说明


14

3D纹理或“体积纹理”是一系列按切片排列的普通纹理,就像一副纸牌。这些用于体积渲染,该渲染通常获取真实世界的数据(例如CT扫描),然后对其进行处理。在游戏和图形中,有时会产生诸如烟雾之类的体积效果,在此您需要将粒子系统的灵活性换为固定成本并轻松(且易于并行化)体积纹理的计算。在体积纹理中找到最近的邻居真的很容易,但这可能是一个问题,因为较传统的粒子系统由松散的点组成。

同样,一些复杂的对象也可以从使用体积纹理中受益,例如草:

英伟达盒子里的烟是一个很好的例子:

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

另外,当您有足够的体积可以渲染时,渲染光散射更容易


7

除了现有的答案外,我还喜欢如何在程序上创建3D纹理(实际上比2D程序纹理更有意义),例如噪点和分形,它将为任何角度的曲面提供良好且不变形的纹理细节,而无需选择投影模型(UV,平面,圆柱,球形等)。

无需在3D空间中对位图图层进行采样,而是可以使用基本算法为3D空间中的每个点获取一个不同的值-该算法基本上可以为您提供无限的纹理分辨率,并且在倾斜的多边形上拉伸纹理没有问题。这对我来说是3D“纹理”或表面阴影^^

我实际上对游戏开发中的所有位图纹理都感到厌倦,当我想弄脏一艘太空飞船时,我想应用几层噪声公式,而不必绘制有限分辨率的位图。一个古老的3D爱好者可以做梦,不是吗;)

现在,将这些甜美的老式3D电影表面解决方案预先烘焙为彩色,法线和镜面UV位图是我获得的唯一乐趣,而且感觉很烦人。演示场景(一如既往)倾向于按程序为实时3D生成(预)纹理,但是很难找到从设计到运行时都支持该工作流程的良好工具。大多数游戏开发人员的程序方法似乎都与网格生成有关。想知道在深度图/延迟渲染的帮助下,着色器管道可以处理多少旧式3D噪声算法?

...而不是试图弄清楚如何将纹理图像参数地映射到形状的表面上,基于噪声的纹理的体积性质使您可以简单地在像素的(x,y,z)位置上对其进行评估着色器。通过这种方式,您可以有效地从固体材料中雕刻出纹理,这通常比尝试制定合理的未失真参数映射要简单得多。

这些基于体积的基于噪波的程序纹理长期以来一直是功能电影的支柱,那里的着色器不需要实时性能...如今,所有特效电影都大量使用基于噪声的程序着色器...高度依赖关于在以Pixar的RenderMan之类的语言编写的像素着色器中噪声函数的广泛使用。借助可在GPU中实时使用的噪声功能的良好实现,我期待从故事片中看到一些令人兴奋的视觉创意,这些故事片已整合到台式机和控制台上的下一代交互式娱乐中。 http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


非常有趣的阅读!我无法想象第二段中的意思。
deceleratedcaviar

也许我可以画一个图。我的意思是,不是对位图进行采样,而是由噪声算法简单地确定颜色(或您追求的颜色)。这样一来,就不需要在位图像素之间进行插值(因为您注定不是在理想的1x1像素位置上进行采样),并且分辨率在理论上变得无限大。这有点像实际计算特定利率的利息,而不是使用存在一定步长/间隔(=位图分辨率)的预先计算的查找表。
奥斯卡·杜夫伯恩

阅读完全文后再引用。我有一个更好的理解,但我认为参考。图像对双方都有利:不确定和tl; dr。:)
deceleratedcaviar

0

与将2D纹理图案应用于2D多边形的像素非常相似,将3D纹理图案应用于体积体的体素。这是JavaScript中3D立体纹理的示例(需要WebGL):

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

按下[v],旋转身体并使用鼠标滚轮更改生成的纹理的渐变

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.