OGRE 纹理单元

以下是你可以在.material脚本的'texture_unit'部分使用的属性:

可用的纹理层属性

  • texture_alias
  • texture
  • anim_texture
  • cubic_texture
  • tex_coord_set
  • tex_address_mode
  • tex_border_colour
  • filtering
  • max_anisotropy
  • mipmap_bias
  • colour_op
  • colour_op_ex
  • colour_op_multipass_fallback
  • alpha_op_ex
  • env_map
  • scroll
  • scroll_anim
  • rotate
  • rotate_anim
  • scale
  • wave_xform
  • transform
  • binding_type
  • content_type

为了使用作为纹理数据源的特殊扩展,你也可以使用嵌套的'texture_source'部分,详见6. 外部纹理源部分。

属性描述

纹理别名texture_alias

设置此纹理单元的别名。

格式: texture_alias <纹理别名> 示例: texture_alias NormalMap

如果此材质被其他材质复制且在新材质中只有纹理会被改变,这种情况下,设置别名是很有用处的。

默认:如果一个纹理单元有名字,那么此纹理单元的别名默认就是这个名字。
纹理texture

设置这一层要使用的静态纹理图像的名字。

格式: texture <texturename> [<type>] [unlimited | numMipMaps] [alpha] [<PixelFormat>] 示例: texture funkywall.jpg

这个设置与anim_texture属性是互斥的。注意纹理文件不能包含空格。喜欢在文件名里用空格的Windows用户们,请不要使用空格,而使用下划线替代。

参数type允许你指定创建的纹理类型——默认值是'2d',但是你可以改变;下面给出了全部列表:

1d
1维纹理;即仅有1像素高的纹理。这种纹理可以用于在纹理内(也可能在片断程序内)编码一个功能和使用它来进行简单查找。当你用一维纹理坐标的片断程序时这个设置是很重要的,因为GL要求你使用相匹配的纹理类型。(虽然D3D会让你通过,但是为了跨平台考虑,还是要注意这一点。)为了有最好的兼容性和显示效果,纹理宽度仍然需要是2的整数次幂,并且有深度。
2d
如果你省略type参数,则假设2d为默认值。纹理的宽度和高度都最好是2的整数次幂,使之成为一个正方形,因为这样的设置在大多数硬件上表现最好。可以由2D纹理坐标指向。
3d
三维纹理,例如volume纹理。这类纹理有2的整数次幂的宽和高,且有深度。可由3D纹理坐标指向,例如通过像素渲染器(pixel shader)。
cubic
这类纹理由贴在立方体内侧的6个2D纹理组成。可由3D纹理坐标指向,并且对于立方体反射映射(cubic reflection maps)和标准映射(normal maps)很有用。

'numMipMaps'选项允许你指定这个纹理的mipmap数量。默认值无限('unlimited')意味着mips的大小生成下限到1x1。你可以随意指定一个固定的数(甚至是0)。注意,如果你在多个材质脚本中使用相同的纹理,生成的mipmap数量将与装载纹理的第一个纹理单元中指定的数量一致——所以务必保持你的使用一致。

'alpha'选项允许你指定一个单独的通道(透明的)纹理作为alpha装载,而不是默认的载入红色通道。这有助于在固定功能的管线中使用只有alpha的纹理。默认值:none

<PixelFormat>选项允许你指定想要创建的像素格式,可能不同于装载的纹理文件的像素格式。应当牢记于心的是最终的像素格式会受到硬件能力的限制,所以你可能得不到完全符合你的要求的格式。可用选项如下:

PF_L8
8位像素格式,所有位表示luminace。
PF_L16
16位像素格式,所有位表示luminace。
PF_A8
8位像素格式,所有位表示alpha。
PF_A4L4
8位像素格式,4位alpha,4位luminace。
PF_BYTE_LA
2字节像素格式,1字节luminace,1字节alpha。
PF_R5G6B5
16位像素格式,5位红,6位绿,5位蓝。
PF_B5G6R5
16位像素格式,5位蓝,6位绿,5位红。
PF_R3G3B2
8位像素格式,3位红,3位绿,2位蓝。
PF_A4R4G4B4
16位像素格式,alpha、红、绿、蓝各4位。
PF_A1R5G5B5
16位像素格式,1位alpha,红、绿、蓝各5位。
PF_R8G8B8
24位像素格式,红、绿、蓝各8位。
PF_B8G8R8
24位像素格式,蓝、绿、红各8位。
PF_A8R8G8B8
32位像素格式,alpha、红、绿、蓝各8位。
PF_A8B8G8R8
32位像素格式,alpha、蓝、绿、红各8位。
PF_B8G8R8A8
32位像素格式,蓝、绿、红、alpha各8位。
PF_R8G8B8A8
32位像素格式,红、绿、蓝、alpha各8位。
PF_X8R8G8B8
32位像素格式,8位红,8位绿,8位蓝,与PF_A8R8G8B8一样,不过去掉了alpha。
PF_X8B8G8R8
32位像素格式,8位蓝,8位绿,8位红,与PF_A8B8G8R8一样,不过去掉了alpha。
PF_A2R10G10B10
32位像素格式,2位alpha,红、绿、蓝各10位。
PF_A2B10G10R10
32位像素格式,2位alpha,蓝、绿、红各10位。
PF_FLOAT16_R
16位像素格式,16位符点数红
PF_FLOAT16_RGB
48位像素格式,16位符点数红,16位符点数绿,16位符点数蓝。
PF_FLOAT16_RGBA
64位像素格式,16位符点数红,16位符点数绿,16位符点数蓝,16位符点数alpha。
PF_FLOAT32_R
32位像素格式,32位符点数红。
PF_FLOAT32_RGB
96位像素格式,32位符点数红,32位符点数绿,32位符点数蓝。
PF_FLOAT32_RGBA
128位像素格式,32位符点数红,32位符点数绿,32位符点数蓝,32位符点数alpha。
PF_SHORT_RGBA
64位像素格式,16位红、绿、蓝、alpha。
活动纹理anim_texture

设置用于活动纹理层的图像。这种情况下的活动纹理指的是有多幅画面,而每一幅画面都是单独的一个图像文件。有两种格式,一种是隐式的决定图像名,一种是显式的命名。

格式1 (短格式): anim_texture <base_name> <num_frames> <duration> 示例: anim_texture flame.jpg 5 2.5

上面格式1的例子建立了一个有5幅画面组成的活动纹理层,分别被命名为flame_0.jpg,flame_1.jpg,flame_2.jpg等等,长度2.5秒(2fps)。如果延时(duration)设置为0,那么不发生自动转换,需要在代码中手动改变。

格式2 (长格式): anim_texture <frame1> <frame2> ... <duration> 示例: anim_texture flamestart.jpg flamemore.png flameagain.jpg moreflame.jpg lastflame.tga 2.5

上面格式2的例子也建立了与格式1的例子一样延时的动画,只不过这次是由5个单独命名的图像文件组成的。第一种格式更简单,之所以给出第二种格式是为了解决图像不能统一命名的情况。

默认: 无
立方体纹理cubic_texture

设置在立方体纹理内使用的图像。由6个独立的图像组成一个立方体的6个面。如果硬件支持的话,这类纹理常被用在反射映射(reflection maps)或者天空盒(skyboxes)中。共有两种格式,一种是简短格式,图像名按一定特殊格式命名;另一种格式虽然更灵活,可以任意取名,但是长度也相应更长。

格式1 (短格式): cubic_texture <base_name> <combinedUVW|separateUV>

格式1这种格式的基础名如'skybox.jpg',系统会希望你提供的各面图像名为skybox_fr.jpg,skybox_bk.jpg,skybox_up.jpg,skybox_dn.jpg,skybox_lf.jpg,and skybox_rt.jpg。

格式2 (长格式): cubic_texture <front> <back> <left> <right> <up> <down> separateUV

格式2这种格式,每一面都显式地指定,以防如果没办法按一致的标准命名。你可以使用带separateUV参数的格式2,因为combinedUVW需要一个单独的纹理名赋值给复合3D纹理(见下面)。

两种格式中,最后一个参数的意思如下:

combinedUVW
6个纹理被合在一个立方体纹理映射中,使用带U,V,W元素的3D纹理坐标。对于反射映射是必要的,因为你永远不知道你将要需要的是哪一个面。需要注意的是,不是所有的显卡都支持立方体环境映射。
separateUV
6个纹理被分开来保存,但是被一个纹理层引用。在任一时刻只有一个纹理处于活动状态(实际上,它们被作为6幅画面保存起来),所以使用2D UV坐标。这种类型适用于天空盒(skyboxes)因为每次只有一面被渲染,而且在更老的显卡上也有硬件支持。
默认: 无
绑定类型binding_type

告诉这个纹理单元是绑定到片断处理单元还是绑定到顶点处理单元(3.1.10 顶点纹理拾取(Vertex Texture Fetch))。

格式: binding_type <vertex|fragment> 默认: binding_type fragment
内容类型content_type

告诉这个纹理单元从哪里取得它的内容,默认是从用texture,cubic_texture,anim_texture属性定义的一个命名纹理中取得内容。但是,你也可以从其他自动化的来源获取。选项如下:

named
默认选项,内容来自一个有名字的纹理,以平常的方式从一个文件或者根据给定的名字手动创建装载。
shadow
这个选项允许你拉入一个阴影纹理,并且只有在你使用纹理阴影和'custom sequence'阴影类型(详见[[文档:手册:1-4-0:7. 阴影|7. 阴影)时才可用。除非你使用基于光源的渲染通路循环或者在同一渲染通路的多个纹理单元中使用light_start选项使得光源从更高的序号开始,否则,讨论中的阴影纹理将会从第n个最近光源产生阴影。当你在同一个渲染通路的多个纹理单元中使用这个选项时,每一个引用下一个阴影纹理。万一你想要在另一个渲染通路里再次使用同一个阴影纹理,阴影纹理序号在下一个渲染通路内被重置(例如:单独的specular/gloss渲染通路)。依靠使用这个选项,正确的光源可视区域投影就被使用固定的方式建立起来了。如果你使用渲染器,只需在渲染器中引用texture_viewproj_matrix auto 参数即可。
格式: content_type <named|shadow> 默认: content_type named
纹理坐标集tex_coord_set
设置这个纹理层要使用的纹理坐标集。一个网格可以定义多个纹理坐标集,此属性设置这个材质使用哪一个坐标集。
格式: tex_coord_set <set_num> 示例: tex_coord_set 2 默认: tex_coord_set 0
纹理寻址模式tex_address_mode
定义在这个纹理层的纹理坐标超过1.0时发生的事情。你可以选择简单格式,一次对全部3个纹理坐标指定寻址模式,或者扩展的格式,使用三分之二的参数每个纹理坐标指定不同的模式。
简单格式: tex_address_mode <uvw_mode> 扩展格式: tex_address_mode <u_mode> <v_mode> [<w_mode>]
wrap
任何超过1.0的值都被置为0.0。纹理被重复一次。
clamp
超过1.0的值被固定为1.0。超过1.0的其它地方的纹理,沿用最后像素的纹理。用于当叠加过滤时,需要从0.0到1.0精确覆盖且没有模糊边界的纹理。
mirror
每到边界处纹理翻转,意思就是每个1.0 u或者v处纹理被镜像翻转。
border
超出[0.0, 1.0]范围的值都被置为边界色,也可以设置tex_border_colour属性。
默认: tex_address_mode wrap
纹理边界色tex_border_colour
设置边界色。(参考tex_address_mode)。
格式: tex_border_colour <red> <green> <blue> [<alpha>] 颜色的数值取值范围在0.0到1.0。 示例: tex_border_colour 0.0 1.0 0.3 默认: tex_border_colour 0.0 0.0 0.0 1.0
过滤filtering
设置当放大或缩小纹理时,使用的纹理过滤形式。这个属性有两种格式,简单格式就是指定预先定义好的过滤选项集的名字;复杂格式,就要你自己分别设定缩小,放大,mip过滤。
简单格式
格式: filtering <none|bilinear|trilinear|anisotropic> 默认: filtering bilinear

这种格式,你只需要提供如下的一个参数:

none
不使用过滤或mipmapping缩放。这相当于复杂格式的'filtering point point none'。
bilinear
当放大或缩小一个纹理时,使用2x2 box过滤,从列表中挑出一个mipmap但是在mipmaps的各级之间不使用过滤。这相当于复杂格式的'filtering linear linear point'。
trilinear
当放大或缩小一个纹理时,使用2x2 box过滤,最近的2个mipmaps被一起过滤。这相当于复杂格式的'filtering linear linear linear'。
anisotropic
除了过滤算法考虑了与镜头相关的三角形坡面而不是一味地简单做一个2x2像素过滤之外,这个属性与'trilinear'相同。这使得三角形的锐角看起来较少失真。相当于复杂格式的'filtering anisotropic anisotropic linear'。注意,要想这个属性有所不同,你还必须设置max_anisotropy属性。
复杂格式
Format: filtering <minification> <magnification> <mip> Default: filtering linear linear point
这个格式给你对于缩小,放大,和mip过滤完全的控制权。参数如下:
none
无——唯一的一个'mip'过滤可用的参数,此参数完全关闭了mipmapping。对于缩小和放大的最低设置是'point'。
point
挑选缩小和放大模式最近的像素。在mip模式中,此选项挑选出最符合mipmap要求的。
linear
围绕最近像素点过滤出一个2x2大小的像素块。在'mip'过滤中,这可以在mipmap各层级之间衔接。
anisotropic
仅针对缩小和放大模式可用,对于三角形的摄像机空间斜坡过滤补偿。注意,要想这个属性有所不同,还必须设置max_anisotropy属性。
最大各向异性max_anisotropy
当过滤纹理时,设置渲染器将要补偿的各项异性的程度。这个度就是纹理在屏幕可见部分的高和宽的比值,就如伸向远方且竖直方向的纹理坐标比水平方向的纹理坐标变化的更快的地平面有比面对着你的墙更高的各向异性(如果你的目光与墙面垂直,则各向异性为1)。为了进行补偿,你需要把max_anisotropy属性设置为比1大的值。最大值由硬件决定,而通常来说设为8或者16。
为了使用这个属性,你必须设置这个纹理的缩小和/或放大过滤。
格式: max_anisotropy <value> 默认: max_anisotropy 1
mipmap_bias

设置用于mipmap计算的偏向值,因此允许你决定哪一级的纹理细节用于哪个距离。在规定的距离计算之后应用偏向值,对每一个偏向单元做出1级mipmap级别调整。负的偏向值强制增大使用的mip级别,正的偏向值减小使用的mip级别。偏向是符点数,所以你可以使用所有的数值进行调整。

为了使用这个属性,你的硬件必须支持mipmap偏向(通过渲染系统能力暴露出来),而且你的缩小过滤必须被设置成point或linear。

格式: mipmap_bias <value> 默认: mipmap_bias 0
colour_op

决定这个纹理层的颜色如何与它下面的一层叠加复合起来(或者如果它是第一层的话,如何将它与光照效果复合起来)。

格式: colour_op <replace|add|modulate|alpha_blend>

这个方法是混合纹理层最简单的方法,因为它只需要一个参数,给你最普通的混合类型,并且自动建立两种混合方法:一种是针对单渲染通路多纹理硬件可用时的混合;另一种是针对单渲染通路多纹理硬件不可用时通过多渲染通路完成混合。然而,这是相当受限的,并且无法使用更加灵活的多纹理操作,简单地因为这些在多渲染通路回撤模式下不能被自动地支持,或者你需要使用colour_op_multipass_fallback显式地设置一个回撤点。

replace
不加调整,用纹理颜色替换所有颜色。
add
加颜色成分。
modulate
乘颜色成分。
alpha_blend
基于纹理alpha混合。
默认: colour_op modulate
colour_op_ex

这是colour_op属性的扩展版,对于在这个纹理层与前面一个纹理层之间应用的混合允许极详细的控制。多纹理硬件可以应用更加复杂的混合操作,但受限于硬件所能用的纹理单元数。

格式: colour_op_ex <operation> <source1> <source2> [<manual_factor>] [<manual_colour1>] [<manual_colour2>] 示例: colour_op_ex add_signed src_manual src_current 0.5

看下面有关使用这个方法在多渲染通路和多纹理之间可能出现的问题。纹理颜色操作决定了渲染后最终平面出现的颜色。纹理单元被用来从各种不同的源中混合颜色值(例如,将通过光源计算的表面四散光与纹理的颜色叠加复合到一起)。这种方法允许你指定使用的“操作”,例如用“加”还是“乘”计算,以及用什么值作参数,是固定值还是以前算好的值。

Operation options
source1
不加任何改变地使用source1。
source2
不加任何改变地使用source2。
modulate
source1乘source2。
modulate_x2
source1乘source2,再乘2 (加亮).
modulate_x4
source1乘source2,再乘4 (加亮).
add
source1加source2。
add_signed
source1加source2,再减0.5.
add_smooth
source1加source2, 再减它们的乘积。
subtract
source1减source2
blend_diffuse_alpha
使用向顶点插入alpha值的方法调整source1,用(1-alpha)调节source2,再把两次调节后的结果相加。
blend_texture_alpha
同blend_diffuse_alpha,但是对纹理使用alpha。
blend_current_alpha
同blend_diffuse_alpha,但是对之前的stages使用当前alpha(对于第一层来说,与blend_diffuse_alpha相同)
blend_manual
同blend_diffuse_alpha,但是使用一个恒量alpha值,这个值在<manual>中指定。
dotproduct
source1点积source2
blend_diffuse_colour
使用向顶点中插入的颜色值调节source1,然后加上用(1-colour)调节过的source2。
Source1 and source2 options
src_current
建立于前面stages的颜色
src_texture
来自被赋值给这一层的纹理的颜色
src_diffuse
来自顶点的插入的四散光颜色(对于第一层来说,与src_current相同)。
src_specular
来自顶点的插入的镜面反射光颜色。
src_manual
在命令尾部手动指定的颜色。

例如'modulate'取用前面纹理层的颜色结果,并且把新的纹理乘到这个结果上。牢记颜色是0.0-1.0的RGB值,所以把它们乘在一起通过做乘法使之着色会得到相同范围的结果。但是要注意连续的乘法一般有加深变暗纹理的效果,因此有像modulate_x2一样的增亮操作。由于某些APIs(包括Direct3D)的限制,'texture'参数只能被用作第一个参数,而不能是第二个参数。

还应注意的是,最后一个参数只有在你决定手动给操作传递数值时,才是必要的。因此,在你使用'blend_manual'操作时,才需要你填充这些参数。

重点: OGRE试图使用多纹理硬件混合纹理层。但是,如果纹理单元数不足(GeForce2是2个,GeForce3是4个),它就不得不退而使用多路渲染,例如用不同纹理多次渲染同一物体。这不仅是低效的而且可供使用的混合操作的范围也小。因此,如果你使用这个方法,你就需要设置colour_op_multipass_fallback属性用来指定在硬件不足时使用哪种效果(默认是'modulate',如果你在此运用了华丽的混合操作,结果肯定不如预期来得好)。如果你希望避免这种情况,使用更简单的colour_op属性,虽没有太多的灵活混合操作,但是可以自动建立多路渲染,因为它只允许有直接多路等价渲染的操作。

默认: none (colour_op modulate)
colour_op_multipass_fallback

在如果使用了colour_op_ex属性且没有足够的多纹理硬件支持时,设置这个纹理层的多路后撤操作。

格式: colour_op_multipass_fallback <src_factor> <dest_factor> 示例: colour_op_mulitpass_fallback one one_minus_dest_alpha

因为你使用colour_op_ex属性创建的一些效果仅在多纹理硬件下支持,如果硬件缺乏,系统不得不后撤为多路渲染,不幸的是有许多效果并不被支持。这个属性就可以让你指定最适合你的后撤操作。

参数与scene_blend属性相同;这是因为多路渲染是有效地场景混合渲染,每一层都在采用了一种令物体透明的技术的前一层之上被渲染,它重复地在同一地方渲染就得到了多纹理效果。如果你使用了更简单的(同时也低灵活性的)colour_op属性,你不需要调用属性,因为系统为你创建了后撤操作。

alpha_op_ex

行为方式与colour_op_ex如出一辙,只不过它是决定alpha值如何在纹理层之间复合,而不是colour值。唯一的区别是colour_op_ex最后是两个颜色值,而alpha_op_ex是一个浮点值。

env_map

打开/关闭纹理坐标效果,以决定这一层能否环境映射。

格式: env_map <off|spherical|planar|cubic_reflection|cubic_normal>

环境映射依靠使用基于物体的顶点或法线与观察着眼睛之间的关系自动生成的纹理坐标使得物体看起来是有反射效果的。

spherical
球面环境映射。需要一个单独的纹理,这个纹理或者是被反射场景的凸透镜视图,或者是其它球面映射的纹理(平滑高亮的纹理是比较好的)。这一效果基于视线和物体顶点法线之间的关系,所以当有大量渐变法线时效果最好,例如:弯曲的物体。
planar
与球面环境映射相似,但是效果基于视口内的顶点位置而不是顶点法线。这一效果也因此用于平面物体(由于法线全都一样,球面env_map表现不好)或者没有法线的物体。
cubic_reflection
一种更高级的反射映射形式,使用一组6个纹理组成一个立方体的内表面,如果沿着场景的坐标轴看其中每一个纹理都是一个视图。在所有情况下工作得都极好,可是比球面映射需要更高规格的显卡。而且需要你绑定cubic_texture到这个纹理单元并且使用'combinedUVW'选项。
cubic_normal
生成三维纹理坐标,其中包括含有顶点数据的法线信息中的摄像机空间法向量。此外,这个特性的完全使用也需要设置'combinedUVW'选项的cubic_texture。
默认: env_map off
scroll

给纹理设置一个固定的滚动偏移量。

格式: scroll <x> <y>

此方法给纹理的偏移在这一层设定了一个固定的量。对于不改变纹理坐标模式的小调整很有用。但是如果你想要一个动态的滚动效果,详见scroll_anim属性。

scroll_anim

给纹理层设置一个动态的滚动。对于在纹理层上创建固定速度的滚动效果很有用(对于不同的滚动速度,详见wave_xform属性)。

格式: scroll_anim <xspeed> <yspeed>
rotate

将一个纹理旋转一个固定的角度。

这个属性只将纹理方向旋转一个固定的角度,对于固定的调整比较有用。如果你想要动态调整,详见rotate_anim。

格式: rotate <angle>

参数<angle>是逆时针旋转的角的度数。

rotate_anim

为这一层创建动态旋转效果。对于创建固定速度的旋转动作比较有用(对于变速的情况,详见wave_xform)。

格式: rotate_anim <revs_per_second>

参数<revs_per_second>是每秒逆时针旋转的次数。

scale

调整这个纹理层应用的比例系数。用于调整纹理的大小,不改变几何体。这是一个固定的比例系数,如果你想要动态的比例系数,详见wave_xform。

格式: scale <x_scale> <y_scale>

比例的有效值要大于0,比例系数如果为2,就表示在那一维上的纹理有2倍那么大。

wave_xform

建立一个基于波功能的动态改变形式。用于更高级的纹理层改变效果。你可以在一个纹理层中随意添加多个此属性的实例。

格式: wave_xform <xform_type> <wave_type> <base> <frequency> <phase> <amplitude> 示例: wave_xform scale_x sine 1.0 0.2 0.0 5.0
xform_type
scroll_x
变动x滚动值
scroll_y
变动y滚动值
rotate
变动旋转值
scale_x
变动x比例值
scale_y
变动y比例值
wave_type
sine
典型的正弦波,在最小值和最大值之间平稳地循环。
triangle
以恒定的速度增加减少的有角度的波,在极值时立即改变。
square
最大是波长的一半,最小是瞬时转换之间的停止时间。
sawtooth
经过一段时间,从最小逐渐持续增加到最大,最后立即回到最小。
inverse_sawtooth
经过一段时间,从最大逐渐持续减少到最小,最后又立即返回最大。:: base
基值,如果amplitude > 0就是指最小值,amplitdue < 0就是指最大值。
frequency
波每秒重复的次数,即速度。
phase
波开始的偏移量。
amplitude
波的大小。

波的输出范围在{base, base+amplitude}。所以,以在x方向调整纹理为例,沿正弦波方向从1(标准值)调整到5,即表示每5秒一个周期(每秒0.2个波)。

transform

这个属性允许你为纹理单元指定一个4x4变换矩阵,因而取代上述的滚动、旋转、比例属性。

格式: transform m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32 m33

上面4x4矩阵中的数值序号为m<row><col>,前面一个为行号,后面一个为列号。

你可能感兴趣的:(活动,float,border,Blend,scroll,binding)