可用的纹理层属性
为了使用作为纹理数据源的特殊扩展,你也可以使用嵌套的'texture_source'部分,详见6. 外部纹理源部分。
属性描述
设置此纹理单元的别名。
格式: texture_alias <纹理别名> 示例: texture_alias NormalMap
如果此材质被其他材质复制且在新材质中只有纹理会被改变,这种情况下,设置别名是很有用处的。
默认:如果一个纹理单元有名字,那么此纹理单元的别名默认就是这个名字。
设置这一层要使用的静态纹理图像的名字。
格式: texture <texturename> [<type>] [unlimited | numMipMaps] [alpha] [<PixelFormat>] 示例: texture funkywall.jpg
这个设置与anim_texture属性是互斥的。注意纹理文件不能包含空格。喜欢在文件名里用空格的Windows用户们,请不要使用空格,而使用下划线替代。
参数type允许你指定创建的纹理类型——默认值是'2d',但是你可以改变;下面给出了全部列表:
'numMipMaps'选项允许你指定这个纹理的mipmap数量。默认值无限('unlimited')意味着mips的大小生成下限到1x1。你可以随意指定一个固定的数(甚至是0)。注意,如果你在多个材质脚本中使用相同的纹理,生成的mipmap数量将与装载纹理的第一个纹理单元中指定的数量一致——所以务必保持你的使用一致。
'alpha'选项允许你指定一个单独的通道(透明的)纹理作为alpha装载,而不是默认的载入红色通道。这有助于在固定功能的管线中使用只有alpha的纹理。默认值:none
<PixelFormat>选项允许你指定想要创建的像素格式,可能不同于装载的纹理文件的像素格式。应当牢记于心的是最终的像素格式会受到硬件能力的限制,所以你可能得不到完全符合你的要求的格式。可用选项如下:
设置用于活动纹理层的图像。这种情况下的活动纹理指的是有多幅画面,而每一幅画面都是单独的一个图像文件。有两种格式,一种是隐式的决定图像名,一种是显式的命名。
格式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个单独命名的图像文件组成的。第一种格式更简单,之所以给出第二种格式是为了解决图像不能统一命名的情况。
默认: 无
设置在立方体纹理内使用的图像。由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纹理(见下面)。
两种格式中,最后一个参数的意思如下:
默认: 无
告诉这个纹理单元是绑定到片断处理单元还是绑定到顶点处理单元(3.1.10 顶点纹理拾取(Vertex Texture Fetch))。
格式: binding_type <vertex|fragment> 默认: binding_type fragment
告诉这个纹理单元从哪里取得它的内容,默认是从用texture,cubic_texture,anim_texture属性定义的一个命名纹理中取得内容。但是,你也可以从其他自动化的来源获取。选项如下:
格式: content_type <named|shadow> 默认: content_type named
格式: tex_coord_set <set_num> 示例: tex_coord_set 2 默认: tex_coord_set 0
简单格式: tex_address_mode <uvw_mode> 扩展格式: tex_address_mode <u_mode> <v_mode> [<w_mode>]
默认: tex_address_mode wrap
格式: 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 <none|bilinear|trilinear|anisotropic> 默认: filtering bilinear
这种格式,你只需要提供如下的一个参数:
Format: filtering <minification> <magnification> <mip> Default: filtering linear linear point
格式: max_anisotropy <value> 默认: max_anisotropy 1
设置用于mipmap计算的偏向值,因此允许你决定哪一级的纹理细节用于哪个距离。在规定的距离计算之后应用偏向值,对每一个偏向单元做出1级mipmap级别调整。负的偏向值强制增大使用的mip级别,正的偏向值减小使用的mip级别。偏向是符点数,所以你可以使用所有的数值进行调整。
为了使用这个属性,你的硬件必须支持mipmap偏向(通过渲染系统能力暴露出来),而且你的缩小过滤必须被设置成point或linear。
格式: mipmap_bias <value> 默认: mipmap_bias 0
决定这个纹理层的颜色如何与它下面的一层叠加复合起来(或者如果它是第一层的话,如何将它与光照效果复合起来)。
格式: colour_op <replace|add|modulate|alpha_blend>
这个方法是混合纹理层最简单的方法,因为它只需要一个参数,给你最普通的混合类型,并且自动建立两种混合方法:一种是针对单渲染通路多纹理硬件可用时的混合;另一种是针对单渲染通路多纹理硬件不可用时通过多渲染通路完成混合。然而,这是相当受限的,并且无法使用更加灵活的多纹理操作,简单地因为这些在多渲染通路回撤模式下不能被自动地支持,或者你需要使用colour_op_multipass_fallback显式地设置一个回撤点。
默认: colour_op modulate
这是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
看下面有关使用这个方法在多渲染通路和多纹理之间可能出现的问题。纹理颜色操作决定了渲染后最终平面出现的颜色。纹理单元被用来从各种不同的源中混合颜色值(例如,将通过光源计算的表面四散光与纹理的颜色叠加复合到一起)。这种方法允许你指定使用的“操作”,例如用“加”还是“乘”计算,以及用什么值作参数,是固定值还是以前算好的值。
例如'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_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属性,你不需要调用属性,因为系统为你创建了后撤操作。
行为方式与colour_op_ex如出一辙,只不过它是决定alpha值如何在纹理层之间复合,而不是colour值。唯一的区别是colour_op_ex最后是两个颜色值,而alpha_op_ex是一个浮点值。
打开/关闭纹理坐标效果,以决定这一层能否环境映射。
格式: env_map <off|spherical|planar|cubic_reflection|cubic_normal>
环境映射依靠使用基于物体的顶点或法线与观察着眼睛之间的关系自动生成的纹理坐标使得物体看起来是有反射效果的。
默认: env_map off
给纹理设置一个固定的滚动偏移量。
格式: scroll <x> <y>
此方法给纹理的偏移在这一层设定了一个固定的量。对于不改变纹理坐标模式的小调整很有用。但是如果你想要一个动态的滚动效果,详见scroll_anim属性。
给纹理层设置一个动态的滚动。对于在纹理层上创建固定速度的滚动效果很有用(对于不同的滚动速度,详见wave_xform属性)。
格式: scroll_anim <xspeed> <yspeed>
将一个纹理旋转一个固定的角度。
这个属性只将纹理方向旋转一个固定的角度,对于固定的调整比较有用。如果你想要动态调整,详见rotate_anim。
格式: rotate <angle>
参数<angle>是逆时针旋转的角的度数。
为这一层创建动态旋转效果。对于创建固定速度的旋转动作比较有用(对于变速的情况,详见wave_xform)。
格式: rotate_anim <revs_per_second>
参数<revs_per_second>是每秒逆时针旋转的次数。
调整这个纹理层应用的比例系数。用于调整纹理的大小,不改变几何体。这是一个固定的比例系数,如果你想要动态的比例系数,详见wave_xform。
格式: scale <x_scale> <y_scale>
比例的有效值要大于0,比例系数如果为2,就表示在那一维上的纹理有2倍那么大。
建立一个基于波功能的动态改变形式。用于更高级的纹理层改变效果。你可以在一个纹理层中随意添加多个此属性的实例。
格式: wave_xform <xform_type> <wave_type> <base> <frequency> <phase> <amplitude> 示例: wave_xform scale_x sine 1.0 0.2 0.0 5.0
波的输出范围在{base, base+amplitude}。所以,以在x方向调整纹理为例,沿正弦波方向从1(标准值)调整到5,即表示每5秒一个周期(每秒0.2个波)。
这个属性允许你为纹理单元指定一个4x4变换矩阵,因而取代上述的滚动、旋转、比例属性。
格式: transform m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32 m33
上面4x4矩阵中的数值序号为m<row><col>,前面一个为行号,后面一个为列号。