[转]Texture Projection 和 Texture Map

转贴自: http://lerler-loves-xsi.spaces.live....AGgQ!155.entry

感谢作者lerler


在 XSI 中,我们发现 Get > Property 菜单的头两项很类似,一项是 Texture Projection - 纹理投射 菜单组[参见 图1],另一项是 Texture Map - 纹理映射属性 菜单组[参见 图2]。初学者会感到困惑,这两组菜单中的命令有何区别呢?下文将对这一问题做简要的阐述。


图1

图2

Texture Projection 属性 - 纹理投射属性 Texture Map 属性 - 纹理映射属性 常常是服务于 纹理 这样一个概念的(具体怎样服务于纹理,见下文)。而 纹理 这一概念又是隶属于Maps - 映射图 这么一个概念的。那么,要弄清 Texture Projection Texture Map 这两类属性的区别,最好先让我们来认识一下 Maps - 映射图 在 XSI 里面有很多种 Maps - 映射图,用途和特点各有不同,但大致可以分这么五类 Maps - 映射图。这五类 Maps - 映射图 本质上都用来表达或记录 3D 物体表面(或 3D 物体的组成部分)的某种信息(颜色、透明度、某一数值的强度等),因而有着很多内在的联系。这五类 Maps 分别是:
  1. Texture Maps - 纹理映射图,在很多场合也叫做 纹理贴图 或者简单的称为 纹理,用于控制颜色、透明度、Bump - 凹凸Displacement - 分形位移 等属性,例如物体表面、粒子发射时的颜色、毛发的颜色等等。

    我个人认为,习惯上,Texture Maps - 纹理映射图 用于控制颜色时才应该称呼为 纹理贴图 或者 纹理

    还要注意:尽管"纹理映射"和"纹理映射属性"使用了同一个英文词组(Textur
    e Map(s)),但在使用过程中请注意区分:

    翻译为"纹理映射图"的Texture Map是泛指通常所说的"纹理贴图",这就是此刻我们谈论的所谓第一类 Maps。它其实是一个在计算机图形学中比较通用的术语,可以很粗略的认为其指代一张图片;

    而翻译为"纹理映射属性"的Texture Map则特别指代XSI这款软件当中几何体所拥有的Texture Map类属性节点。是我们下文要谈论的话题,也是我们在文章开头提问和例图中涉及的那个概念。

  2. Weight Maps - 权重(音:仲),权重图记录的是数据,用以表征三维物体表面的属性,比如,可以用一张图片来控制 Push 操作的作用范围及强度,这时候,很显然,权重图记录的数据就用来控制 Push 操作的幅度,使得在同一物体的表面的各个地方受到 Push 程度各不相同。

  3. Envelope Weight Maps - 蒙皮权重(音:仲) ,事实上,蒙皮权重图可以看作是一般的权重图的特例,它专门用于记录蒙皮物体(Polygon、Curve、Surface甚至任何物体)和控制物体(骨骼、Implicit、Null甚至任何物体)之间的关联信息。更明白地说,就是记录控制物体以多大的程度去控制设为蒙皮的物体。

  4. Shadow Maps - 阴影分布图,Shadow Map 仅当有一盏或多盏灯光启用了Shadow Map 算法,并且渲染选项中开启了Shadow Map 阴影算法开关时,才可用。Shadow Maps 用于记录 Shadow Map 算法得出的阴影在各个物体表面的分布情况。

  5. Photon Maps - 光子分布图Final Gather Maps - FG 强度分布图,这两种 Map 某种意义上也可以看作是 Weight Map,因为记录的也是数据。它们记录的是"间接光照"的强度系数值。

另:
XSI 中还有 Render Maps 属性 - 渲染信息图属性 这么一个概念。简单的说,就是先为一个物体定义一个或多个 渲染信息图属性,然后通过 渲染到渲染信息图 这一功能把渲染的结果 Bake(Bake 意为"烘焙(音:备)",这里理解为把信息记录下来)到该物体的某个 渲染信息图属性 里面。之后,由于这个 渲染信息图属性 记录了这次渲染的结果的某些信息或完整信息(例如,利用 Pass 功能,可以让某个 渲染信息图 仅仅记录物体表面对周围环境反射得到的影像),因而我们可以将其(渲染结果信息)象使用普通的纹理贴图那样"贴"在这个物体的表面,从而避免在今后的渲染中重复计算这类信息(例如这里的反射信息)。很显然,为了正确的"贴"上这一预先渲染好的结果,应该选用和生成该 渲染信息图 时相一致的 Texture Projection。从这一应用角度看,我个人认为可以把 Render Maps 属性 - 渲染信息图属性 看成是 Texture Maps - 纹理映射图(或纹理贴图)的特例或延伸,用作材质层面的纹理。

其它的 Maps,诸如Vertex Color Maps - 顶点色彩分布图、和Normal Maps - 法线信息图 等等,均和上述五类常用Map有类似之处,或者算是纹理的推广与扩展,或者兼有纹理和权重图的一些性质,但都不外乎是记录物体表面的一些特定的信息,构成一张"图",因而,均可参照前面一类Map的概念进行理解。限于篇幅在此就不一一介绍了。

好,我们认识了 XSI 中的一些 Maps,但后面的四大类 Maps 都不是我们这里所关心的重点,姑且不作进一步讨论。现在我们专门来考察 Texture Maps - 纹理映射图 (也就是所谓 纹理贴图)这一类。

首先,Texture Maps - 纹理映射图 可用于定义物体表面的颜色(花饰、纹理、色泽),也可以用来定义物体表面 Bump - 凹凸 或者 Displacement - 分形位移 程度。这时候,Texture Maps - 纹理映射图 被用于材质设计层面,它们是作为 Render Tree 里面的一个节点出现的,例如 Image 节点、CheckerBoard 节点、Fractal 节点等等。
而将设计好的 2D 纹理随同整个材质赋予一个或多个 3D 物体时,会遇到这样一个问题:怎样才能把平面的纹理(图片、动画、过程纹理等)正确的按照艺术家(也就是我们自己)的要求"贴"到或者说"包裹"到一个立体的物体的表面呢?这时候,我们就要借助这个(这些) 3D 物体自几的一种属性,也就是本文真正要讨论的主要概念之一 --Texture Projection 属性 - 纹理投射属性
每当设计好一个带有纹理或者凹凸贴图的材质,并把这个材质赋给一个或多个 3D 物体时,必须为每一个 3D 物体分别 创建或找到 至少一个 纹理空间
所谓 纹理空间,就是指容纳一个纹理的抽象的数学空间,2D 纹理需要 2D 纹理空间来容纳,相应的,3D 纹理需要 3D 的纹理空间来容纳。
我们知道,通常描述一种空间的数学方法是定义坐标,相对应的,XSI (事实上是整个计算机图形学领域)中有一个叫 纹理坐标 的概念,用来量化地描述容纳一张张 纹理 的一个个 纹理空间纹理坐标 即通常所说的 UV 坐标(或 UVW 坐标,其中 W 表示容纳 3D 纹理 的纹理空间的第三个维度,在此我们暂不讨论)。 一个 3D 物体要使用一个纹理空间(也可以粗略的理解为要使用一张贴图),具体作法是:在这个纹理空间内,为该 3D 物体的每一个 Vertex - 顶点 确定一个 纹理坐标值(UV 坐标),以使得这个 3D 物体的每一个 Vertex - 顶点 都能和这个纹理空间所容纳的纹理图片上的信息(通常当然是颜色或透明信息)一一对应,这样一来,材质中所带的纹理贴图,借助这个纹理空间(即借助这套 UV 坐标 信息),就可以正确的对应到 3D 物体的表面。为每个 Vertex - 顶点 定义 UV 坐标 的这一过程,就叫做 Texture Mapping - 进行纹理映射,而定义好的 UV 坐标 信息保存在哪里呢?它们正是保存在我们的Texture Projection 属性 - 纹理投射属性 里面。

我们在为每一个 3D 物体赋材质时,都要为该 3D 物体指明这个材质中包含的纹理贴图应该怎样"包裹"到这个物体的表面,也就是要说明 3D 物体表面的哪一个 Vertex - 顶点 具体应该对应到纹理上的哪一个像素(注意,事实上过程纹理并没有像素)的颜色(或透明度)上。关键就是要建立这个一一对应的关系,而这个过程就叫"进行贴图"。并且 3D 物体的 Vertex - 顶点 与纹理上的点的对应信息就被保存在每个 3D 物体各自的一种属性里面,而这个属性正式我们的 Texture Projection 属性 - 纹理投射属性把最后这句话反过来说就是:

一个 3D 物体的一个 Texture Projection 属性 - 纹理投射属性 保存了该 3D 物体所获得的材质中包含的纹理应该如何"贴"到自己表面的相关信息。

并且注意,每个 3D 物体都可以有不止一个 纹理空间 供自己使用。


例如,要为一个女子肖像模型进行贴图,一张漂亮的小月亮图片可以贴在脸颊上,而另外几张小星星的图片则可以贴在这个模型的额头上。
那么,贴月亮的时候,要定义和记录月亮图片和这个肖像模型的对应关系,好让女子肖像模型中除脸颊外的所有 Vertex - 顶点 都在月亮图片的范围外。这个对应信息就保存在这个女子肖像模型的一个 Texture Projection 属性 内。 同样的,女子肖像模型还要分别建立另外几种对应关系,以便那几张小星星的图片也能正确到对应到这个女子的额头的正确的位置。
尽管有可能把某些读者搞糊涂,我还是要强调,纹理空间 不能等同于 纹理,因而,准确地说法和上述通俗说法有小的差别。我们应该说纹理映射过程(贴图过程)是将 3D 物体的 Vertex - 顶点 对应到纹理空间中(也即找到这些顶点的 UV 坐标);而不应该说纹理映射过程是将 3D 物体的 Vertex - 顶点 对应到纹理图片上。在刚才的为女子肖像模型进行贴图的例子中,如果纹理空间都已经定义好了,也就是这个女子肖像模型的若干个Texture Projection 属性 都建立了之后,如果我们把月亮的图片和其中一个小星星的图片对调,那么这个女子的脸颊上将出现一颗小星星,而她的额头则是几颗星星和一个小月亮。很显然,Texture Projection 属性 记录的不是 Vertex - 顶点 与某一张图片的对应关系,而仅仅是记录了一组纹理坐标,或者说,记录了一种贴图的方法,一种任意一张图片或者过程纹理在贴到这个模型表面时都可以使用的"贴"法。

一句话,一个 3D 物体的每个Texture Projection 都定义了一种贴图的方式,以供这个 3D 物体自己选用。

Texture Maps - 纹理映射图 还有另一类用途,系用来定义各种由颜色控制的参数。典型的,可以用一张纹理图来定义毛发物体的颜色,使得头皮各个地方生长出的毛发不相同,以模拟挑染头发的效果。还可以用来控制粒子发射器发射粒子的初始颜色,这样,粒子发射器各个部分发射的粒子颜色各不相同,五彩斑斓。
那么,这里显然也有一个纹理需要对应 3D 物体表面的问题,只不过,在这一种情况下,纹理按要求对应到 3D 物体的表面之后,不是用来控制物体的颜色信息、透明度信息或者凹凸信息,而是用来控制非材质属性的某种数据属性。
在这种情况下,我们也需要一个类似 Texture Projection 属性 的东西,来记录该 3D 物体的 Vertex - 顶点 与在这些用于非材质层面的纹理(图片、动画或过程纹理等)的对应关系。这个东西就是 Texture Maps - 纹理映射图属性
综上所述,不论Texture Maps - 纹理映射图(图片、动画或过程纹理或是Render Maps)是用于设计材质(表达色彩、凹凸),还是用于控制参数(控制粒子、毛发),都有一个公共的问题,就是都需要将二维的纹理和三维的物体的表面对应起来,即都要记录 Vertex - 顶点UV 坐标 信息。而在 XSI 中,针对这两类不同的场合,纹理空间的 UV 坐标 分别记录在不同的属性中:
  • 对于 材质层面 的应用,UV 坐标 信息保存在该 3D 物体的 Texture Projection 属性
  • 对于 非材质层面 的应用,UV 坐标 信息保存在该 3D 物体的 Texture Map 属性

至于为什么要在这两种场合分别采用不同的属性来记录 UV 坐标,答案很简单:

材质是可以通用的,同一个材质可以应用到多个不同的 3D 物体上,如果这个材质带有贴图,那么每一个使用该材质的 3D 物体都需要各自确定这个材质中包含的贴图如何对应到自己的表面。

还要提醒您,材质以及材质包含的贴图是公用的,但贴图的方法却是每个物体各自拥有的。


而用于控制某个 3D 物体的非材质层面的属性时,由于受控制的属性是这个3D 物体私有的,不可以被共享,因而在 XSI 中需要和材质对象区别对待。

还要补充说明一下 Texture Support - 纹理投射支持对象

Texture Support - 纹理投射支持对象 用来方便直观地对一个或多个 3D 物体的 Texture Projection 属性 Texture Map 属性 进行控制,并且使得纹理的动画更加容易。 Texture Projection 属性Texture Map 属性 常常以 Texture Support - 纹理投射支持对象 为载体,至少在前二者刚被创建时是这样。但 Texture_Support 对象仅仅是一个辅助物体,因而在不需要使用它们时,完全可以让 3D 物体的 Texture Projection 属性Texture Map 属性 脱离 Texture Support 对象而单独存在,例如,你可以冻结(Freeze)几何体的构造历史或仅仅冻结其纹理坐标编辑操作历史,这时,Texture Support 对象就会被删除。
显然,每个 Texture Support - 纹理投射支持对象 都可以同时控制一个或多个 Texture Projection 属性Texture Map 属性
最后简单说明一下其它的 Maps 在"贴"到 3D 物体表面时的情形:对于 Weight Map - 权重Envelope Weight Map - 蒙皮权重图Photon Map - 光子分布图Final Gather Map - FG 强度分布图, 由于使用时并不需要将二维对象和三维对象建立对应关系,即没有一个从二维到三维的转化过程,因而不必为这类 Map 定义纹理空间,这类 Map 都可以叫做 3D Map。显然,将它们对应到三维几何体的表面,既不需要借助该物体的任何 Texture Projection 属性,也不需要借助该物体的任何 Texture Map 属性。



posted on 2007-08-29 12:05 XiaoLi 阅读(1836) 评论(1)  编辑  收藏 所属分类: GIS

评论

# re: [转]Texture Projection 和 Texture Map 2007-11-28 12:49 sonai

http://www.bar5.cn
做个连接吧  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告


文章发布许可

本站作品均采用知识共享署名-非
商业性使用-禁止演绎 2.5 中国大
陆许可协议
进行许可。

Books I've Translated

《精通Nginx(第二版)》

精通Nginx(第二版)
《云计算:原理与范式》

 云计算:原理与范式

《SQL技术手册(第三版)》
SQL技术手册(第三版)
《MySQL核心技术手册(第二版)》
MySQL核心技术手册(第2版)
《RESTful Web Services中文版》
RESTful Web Services中文版

导航

留言簿(2)

随笔分类

搜索

最新评论