Ogre参考手册(三)3.1.3 纹理单元TextureUnit

3.1.3 Texture Units 纹理单元

纹理单元通过.material脚本中的texture_unit段设定

texture_alias

设置纹理单元别名,例:

                   texture_unit Diffuse //纹理单元名称

                   {

                         texture_alias           DiffuseMap //别名

                         tex_address_mode  clamp

                   }

texture

设置纹理层使用的静态纹理图

格式:texture <texturefile> [<type>[unlimited | numMipMaps][alpha][<PixelFormat>][gamma]

此设置与anim_texture(动画纹理)互斥。注:纹理文件名texturefile参数不能含空格.

type 默认为’2d’,包括以下几种类型:

1d  一维的纹理,即纹理图仅一个像素高。最有可能在片段着色器中使用,用于将函数编码为一维纹理实现简单查找。如果着色器使用一维纹理坐标,你需要使用此类型,GL要求纹理纹理类型与坐标匹配(D3D不需要)。基于性能和兼容性考虑,纹理宽应为2的指数倍

2d 默认类型,纹理宽高最好都为2的指数倍,采用正方形在大多数硬件上表现最好

3d 三维纹理即体纹理,纹理包含宽、高、深三个坐标

cubic 立方体,由6副2d纹理贴在立方体内表面组成。可以通过3d纹理坐标访问,对立方体映射图和法线图很有用。

numMipMaps 选项用于定义纹理生成的mipmaps数量。默认的unlimited表示一直生成到1*1大小。注:如果你在多个材质中使用相同的纹理,产生的mipmaps数量依据第一次解析到的texture设置

alpha选项用于标明将单通道(亮度luminance)纹理作为alpha通道加载,而不是默认的红色通道(channel)。适用于固定管线中使用仅包含alpha值的纹理

PixelFormat选项用于指定纹理的像素格式,该格式可以与文件中加载的像素格式不同。最终的像素格式可能受硬件兼容性的限制。可用的选项包括:

PF_L8 8位亮度, PF_L16 16位亮度,  PF_A8 8位alpha, PF_DXT1 DDS DXT1格式等等…

gamma选项表示希望图形硬件采样时对纹理值进行gamma校正,仅在纹理存在8位颜色通道时可用(比如:PF_R8G8B8)。通常,每通道8bit的纹理总是存储于gamma空间以增加暗色的精度,但这会导致混合和过滤计算问题,因为这些假定了线性颜色空间。为了最好的着色质量,需要在纹理采样时硬件自动将纹理值转换到线性空间,然后在管线中做可靠的线性计算。当渲染到8bit通道显示时,再转回gamma空间,这可以在着色器中处理(by raising to the power 1/2.2)或者通过启用渲染纹理或渲染窗口的gamma校正。注:gamma选项仅使用第一次加载时的设置,多个地方共用时注意保持一致。

anim_texture

设置图像为动态纹理层。动态纹理层意味含有多个帧,每帧为不同的图片文件。选项有两种格式,一种直接指定图片名,一种隐含文件名。

格式1:anim_texture <frame1> <frame2>…<duration>

指定多个图片名和总的持续时间,duration为0表示不自动切换帧,需要代码手动控制

格式2:anim_texture <base_name> <num_frames> <duration>

例:anim_texture flame.jpg 5 2.5

将自动加载五帧,对应文件名为 flame_0.jpg, flame_1.jpg,… flame_4.jpg,持续时间2.5秒(2fps).

cubic_texture

设置立方体纹理使用的图片。即6个独立的面组成的立方体。可用于反射图(如果硬件支持立方体映射)或天空盒。有两种格式,一种隐含文件名,一种直接指定6个图片名

格式1:cubic_texture <base_name> <combinedUVW | separateUV>

如果base_name为’skybox.jpg', 则自动加载skybox_fr.jpg, skybox_bk.jpg, skybox_up.jpg, skybox_dn.jpg, skybox_lf.jpg, 和 skybox_rt.jpg (前后上下左右)六个文件。

格式2:cubic_texture前 后 上 下 左 右 spearateUV

直接指定前后上下左右六个纹理图片文件名,且只能使用separateUV选项

combinedUVW 6个纹理组成单一的立方体纹理,并通过u v w 3d纹理坐标访问。作为反射图时必须使用此选项。注:并不是所有的图形卡支持立方体纹理

separateUV 6个纹理仍互相分离,每次仅有一个纹理图激活(setCurrentFrame),仍采用2d纹理坐标索引。比较适合天空盒,因为一次仅渲染一个面,在老的图形卡上可用。

注:纹理通过TextureUnitState::setCurrentFrame引用,天空盒实际复制了6份材质,每个材质绑定不同的纹理帧。

binding_type

设置纹理单元绑定到顶点或像素着色器

格式:binding_type <vertex|fragment> , 默认fragment

content_type

指定纹理单元获取数据方式,默认根据名称(典型为文件名)加载。也可设置从自动数据源获取

格式: content_type <named|shadow|compositor> [<Ref Compositor Name>] [<Ref Texture Name>] [<Referenced MRT Index>] , 默认named,

说明:

named 默认方式,依据文件或者手工指定名称

shadow 使用阴影纹理,用于使用自定义顺序的纹理阴影时。纹理依据顺序对应最近的灯光阴影图(同一通道第一个纹理引用最近的灯光阴影,第二个为第二近灯光..),或者根据通道迭代或light_start选项设置的起始灯光顺序递推。不同通道索引重置为0,以支持纹理多次使用(比如分离的specular/gloss通道)。使用此选项时,如果是固定管线,灯光投影矩阵会自动设置;如果使用着色器,可通过texture_viewproj_matrix自动参数获取。

compositor 引用合成器纹理,仅在合成器渲染序列中有效:通过合成器的render_scene指令,或者连接到合成器的视口中的普通通道。需要注意纹理阴影并不改变渲染顺序,因此要确保合理的引用顺序(纹理的共用可能导致其引用时已被改写)。附加参数均用于此选项:

      compositorName 所引用合成器名

      textureName     所引用纹理名

      mrt index    纹理索引,用于MRT(多渲染目标,multiple render targets),可选

示例:content_type compositor DepthCompositor OutputTexture

tex_coord_set

设置所使用纹理坐标集。mesh网格可定义多组纹理坐标

格式:tex_coord_set <int>, 默认0

tex_address_mode

定义纹理坐标超过1.0时的寻址方式。你可以用一个参数指定相同的方式,或者使用三个不同的值

格式:text_address_mode <uvw_mode> 或 <u_mode> <v_mode> [<w_mode>]

模式参数说明:

wrap 重叠,超过1.0后回到0,纹理反复平铺,默认方式

clamp 夹紧,超过1.0作为1.0处理。用于需要精确的0-1.0纹理坐标时,避免wrap模式过滤产生模糊的边界

mirror   镜像模式

border   超过0-1.0部分采用边框色,参考tex_border_colour

tex_border_colour

设置纹理边界色

格式:tex_border_colour <red > <green> <blue> [<alpha>]

filtering

设置纹理放大缩小时的过滤方式,有两种格式,一种是预定义的单参数格式,另一种分别指定放大、缩小和mip过滤方式

格式1:filtering <minification> <magnification> <mip>, 默认 filtering linear linear point

      none 仅用于mip参数,用于关掉mipmap。放大缩小最低配置为point

      point 用于放大缩小表示选择最近的像素,用于mip时表示选择最匹配的mipmap

      linear    2*2箱式过滤。用于mip时表示使用相邻的两个mipmap过滤

anisotropic 各向异性,仅放大缩小使用,基于相机空间的坡度对过滤进行补偿(倾斜方向采用更多的像素)。避免倾斜视角时过于模糊,注:需要同时设置max_anisotropy

格式2:filtering <none|bilinear|trilinear|anisotropic>, 默认 bilinear,即linear linear point

      none 无过滤,不使用mipmap。等价于'filtering point point none'

      bilinear 双线性过滤,最近mipmap。等价于'filtering linear linear point'.

      trilinear 三线性过滤,等价于'filtering linear linear linear’.

      anisotropic 各向异性,等价于'filtering anisotropic anisotropic linear’

max_anisotropy

设置filtering在放大缩小使用anisotropic时所使用的最大补偿倍数。各向异性倍数指的是屏幕空间上的高度可见纹理片段除以宽度可见个数,角度越斜倍数越大(如果你垂直看一面墙倍数为1:1)。设置为大于1以实现补偿。最大值由硬件决定,一般为8或16.

格式:max_anisotropy <int>, 默认 1

mipmap_bias

设置mipmap计算时的偏移量。需要硬件支持mipmap偏移。

格式:mipmap_bias <float>, 默认0

colour_op

定义当前纹理层与上一纹理层混合方式(如果是第一个纹理层,则表示与光照混合方式,即第一个纹理层与顶点色混合的方式。所有纹理层混合后的结果再使用pass设置和已有渲染场景混合)。用于固定渲染管线

格式:colour_op <replace|add|modulate|alpha_blend>, 默认modulate

设置预定义的几种方式,这种方式可自动设置两种混合方式:一种用于支持单通道多纹理的硬件,一种用于不支持单通道多纹理硬件的多通道退化渲染设置(Ogre自动实现)。采用更精细的colour_op_ex可获得更好的效果,但如果不确定硬件是否支持单通道多纹理,就需要手动设置colour_op_multipass_fallback控制退化的多通道渲染方式

注:colour_op仅设置颜色混合方式,alpha默认按modulate方式混合,修改alpha混合方式需采用alpha_op_ex

colour_op_ex

多纹理颜色混合设置的扩展版本,支持多纹理混合的硬件可以实现比多通道混合更复杂的混合操作,但支持的纹理单元数量受硬件限制。用于固定渲染管线

用法:colour_op_ex <operation> <source1> <source2> [<manual_alpha>] [<manual_colour1>] [<manual_colour2>]

operation 混合方式:

      source1\source2, 采用source1或、source2,相当于通道的scene_blend one zero或zero one

      例:colour_op_ex source2 src_texture src_current //采用当前值(不更新)

      modulate\molulate_x2\modulate_x4 乘积方式,source1*source2,因为默认的两个纹理modulate会变暗场景(不同于alpha混合),所以提供_x2\_x4两种加亮方式(当混合结果偏暗时采用),表示source1*source2*2或者source1*source2*4, (_x2\_x4方式无对应的多通道退化实现)

      例:colour_op_ex modulate_x2 src_texture src_current //采用混合的2倍作为最终结果

source1 混合源1,

     

add 累加和

addsigned 累加和-0.5  例:colour_op_ex add_signed  src_texture src_current

      add_smooth 累加和-乘积

 substract 减: source1-source2

blend_diffuse_alpha 利用顶点alpha混合(diffuse.a * source1 + (1- diffuse.a)*source2)

blend_diffuse_colour利用颜色混合(类似于pass color_blend)

blend_texture_alpha 利用纹理alpha混合

blend_current_alpha      利用当前alpha值混合(上一纹理阶段的alpha值,对于第一个纹理层,结果与blend_diffuse_alpha相同)

例:colour_op_ex blend_texture_alpha src_texture src_current

blend_manual 与blend_diffuse_alpha类似,区别在于使用manual_alpha参数指定的alpha值

例:colour_op_ex blend_manual src_texture src_current 0.9 //将当前纹理按alpha值0.9与之前混合

dotproduct 点积?(the dot product of source1 and source2)

Source1\Source2 混合来源:

      src_current 之前的纹理阶段混合颜色(对于第一个纹理层,相当于src_diffuse)

      src_texture 当前的纹理

      src_diffuse  顶点颜色

      src_specular      顶点镜面颜色

      src_manual 手动指定颜色

      例:colour_op_ex add src_current src_manual 0 1 0 //将之前的混合结果加上绿色(r g  b)

      (注:不存在同时设置两个src_manual颜色值,当然本身也没有意义)

      注:使用src_texture时应将其设为第一个参数,如:colour_op_ex add src_texture src_current,不应使用colour_op_ex add src_current src_texture,以避免某些API(Direct3D)不支持

     

利用colour_op_ex和alpha_op_ex可以在不使用着色器的情况下实现很强大的混合效果,这些效果超出多通道渲染支持的功能,当硬件不支持多纹理或者纹理数过多时,需要通过colour_op_multipass_fallback设置退化的多通道渲染方式(效果差、速度慢)。

在采用modulate方式混合时,因为颜色范围为(0-1),乘积会使结果更暗,所有modulate_x2\_x4是很常用的方法。

colour_op_ex仅设置颜色混合方式,alpha默认按modulate方式混合,修改alpha混合方式需采用alpha_op_ex。

colour_op_multipass_fallback

采用colour_op_ex设置的多纹理混合方式,无法自动退化为多通道渲染,不清楚硬件是否能支持多纹理渲染的情况下需要用此语句设置比较接近的多通道渲染方式。

用法: colour_op_multipass_fallback <src_factor> <dest_factor>

类似于scene_blend, 例:colour_op_multipass_fallback one one_minus_dest_alpha

alpha_op_ex

多纹理alpha混合方式设置

用法:alpha_op_ex <operation> <source1> <source2> [<manual_factor>] [<manual_alpha1>] [<manual_ alpha2>]

与colour_op_ex类似,区别在于manual_colour为一组三个浮点数,manual_alpha为单个浮点数

例:alpha_op_ex modulate_x4 src_texture src_current //透明度按4倍modulate混合

env_map

打开/关闭纹理环境贴图效果

格式:env_map <off|spherical|planar|cubic_reflection|cubic_normal>,默认off,关闭环境贴图

环境贴图根据对象顶点、法线和视点的相对关系自动生成纹理坐标,以使物体看上去反光。

spherical  球面环境贴图。需要使用鱼眼镜头反射场景制作的单一的纹理,或者其它看上去适合球面贴图的纹理(光滑高亮的纹理特别适合汽车仿真)。效果依赖于视角和物体的顶点法线,在物体有很多平滑的法线时效果最好,即曲面物体

planar   平面贴图。与spherical类似,区别是效果基于视口中的顶点位置而不是顶点法线。效果适合平面的几何体(球面环境贴图不适应这种情况,因为法线相同)或者没有法线的情况。

cubic_refection 使用六个纹理实现立方体反射贴图,在各种情况下效果都很好,但相比球面贴图需要更高的硬件支持。需要在cubic_texture配置中使用combinedUVW选项。

cubic_normal 依据通过顶点法线信息计算的相机空间法线生成3D纹理坐标

scroll

设置纹理偏移。用于固定管线

格式:scroll <x> <y>

用于调整纹理坐标同时避免更改模型纹理坐标。如果需要动态滚动效果,使用scroll_anim

scroll_anim

设置固定速度滚动效果(变化速度使用wave_xform)

格式:scroll_anim <xspeed> <yspeed>

rotate

将纹理旋转指定的角度

格式:rotate <angle>, angle为逆时针度数

rotate_anim

设置每秒旋转角度

格式:rotate_anim <angle>

scale

缩放

scale <x_scale> <y_scale>

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,scroll_y,rotate,scale_x,scale_y

wave_type  波形:sine 正弦, triangle 三角,square 方形,sawtooth 锯齿,inverse_sawtooth反锯齿

base 基值,amplitude>0时表示最小值,amplitude<0时为最大值

frequency 频率

phase   波形起始偏移

amplitude 幅度(可负)

transform

通过4*4矩阵设置纹理变换,取代上面提到的scroll\rotate\scale等属性

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

原文地址:https://www.cnblogs.com/wiki3d/p/OgreManual03.html