`
projectanarchy
  • 浏览: 13665 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Vision引擎中着色器属性介绍

阅读更多
设置单个着色器通路的着色器属性可能是着色器创建过程中最复杂的步骤,因为所有着色器状态属性都在此显示。 要编辑单个着色器通路的着色器属性,在着色器列表中左键单击该着色器。 着色器属性面板会显示所有着色器属性,按状态分组,例如混合就是一组:

Description(描述): 对该着色器通路的描述。 被引擎忽略。
TargetPlatform(目标平台): 定义该着色器编译位元码的目标平台。
CompileFlags(编译标记):[DX9、DX10、DX11、Xbox 360、PS3] 顶点、几何体或像素着色器的额外编译提示。 更多信息请见下文对编译器选项的介绍。
RenderFlags(渲染器标记):[所有平台] 一个位元蒙版,定义该通路是否应在特定渲染上下文中渲染。 仅当该标记和渲染器上下文着色器的 AND 运算不为零时,该渲染器才会被渲染。
TrackingMask(嵌入蒙版):[所有平台] 定义引擎将哪些附加信息嵌入常数注册器。 常数表格可在着色器库工具栏找到。

StreamMask(流蒙版):[所有平台] 定义引擎为相应几何体设置哪些顶点流。 几何网格缓存渲染不需要该选项。
OverwritesGlobalConstants(覆盖全局常数):[DX9、DX10、DX11、Xbox 360、PS3] 如启用,引擎会在卸下该着色器时恢复全局常数表格。
PerPrimitiveCallback(逐基元回调): 指定回调注册所属的回调函数名称。
CompiledClass(已编译类):[所有平台] 指定已编译着色器实例的类名称。 可在此指定派生自 VCompiledShaderPass 的自定义类。
 
编译器选项
在某些情况下,有必要为特定着色器使用特定的编译器选项。 例如,着色器必须在编译时加入调试信息,让 Pix 等外部工具也能获取附加信息。 着色器工具通过以下机制实现该目的:
 
   逐像素编译标记:
可为每个着色器设定不同的编译器标记。 这些标记映射至相应平台上的特定编译器选项。 请注意,此功能并不涵盖所有标记,仅支持大部分平台上的重要标记。

   全局编译器标记:
同样的标记也可为所有编译器进行全局设置:

全局和逐着色器标记的应用是叠加式的。 全局标记可用来快速切换库中所有重新保存的着色器的调试和非调试版本。 但对于游戏的零售版本,发布时不能带调试信息,并且要将标记设定到最佳优化状态。这点非常重要。
 
   平台专用选项:
可通过写死在着色器源代码中的定义植入更多选项。 如果该定义能在源代码中找到,它将被添加到着色器编译器的命令行。 定义名称取决于平台,也与着色器类型有关(vertex-、pixel-、… shader)。 以下是 PS3 附加顶点着色器编译器选项的示例:
 
#define CompilerOptionsPS3VS -my -additional -options
后缀 PS3 可被其他平台名替代(Xbox 360、DX9、DX11、…),后缀 VS 可以是任何其他着色器类型(PS、GS、DS、HS、CS)。 下面是使用该功能的一些重要说明:
定义名称对大小写敏感(所以 compileroptionsPS3VS 是无效的名称)
搜索该定义的方式为简单实现法:
    无法将它放入任何包含文件,因为该文件的解析要以后才进行
    将它放入 #ifdef/#endif 作用域是无效的(#ifdefs 不是预解析代码)
    不管它在代码中的哪个位置,都始终会被应用
目前,PS3 是唯一支持该附加命令行参数的平台
 
  着色器选项
着色器属性面板的下方区域为附加着色器类型选项,每个对应类型为代码入口点、最小化着色器模型和纹理采样器提供多种属性。

   整理编辑器对话框
多种着色器属性需要您为特定集合添加值。 例如在选择像素着色器纹理采样器,或为某个效果定义用户参数时。 无论集合为何种类型,该编辑器的执行方式都不变。

首先,您需要添加新的成员属性,该属性会被填入整理编辑器属性,并根据集合类型决定相关选项。

Add(添加): 添加新成员数据条目。
Remove(移除): 移除一个条目。
Properties(属性): 属性面板的内容取决于集合类型,会有所不同。
 
  着色器采样器
 
一条通路的每一个着色器都有采样器。 采样器是绑定纹理的单元,让着色器可以读取这些纹理。 Vision 引擎可自动把特定纹理类型绑定到采样器上。 例如散射纹理、法线贴图或某个 G-Buffer 切片。 采样器也有一系列选项,例如纹理过滤,您也许想为您的着色器调整这些选项。
 
要编辑某个着色器的采样器,首先选择通路,然后选择您想要编辑的采样器所属的着色器选项卡,随后打开采样器编辑器:

然后您可以使用该编辑器:

利用添加和移除按钮,您可以从着色器中添加和移除采样器。
  注:请注意,窗口最左侧的索引号要和您在着色器源代码中定义的采样器索引号匹配。
 
   从左侧选择采样器后,您可以在右侧修改其属性:
 
   采样器绑定
用于绑定该采样器的所有属性
SamplerName(采样器名称): 可选的采样器名称,将该采样器与指定名称的已编译采样器绑定起来。 如留空,则使用采样器索引号。 
 
TextureSizeConstantName(纹理尺寸常数名称): 着色器常数名称,用于传入绑定到该采样器的纹理的尺寸。 如果一个 1D 或 2D 纹理被绑定到采样器,则如下内容将被传递到着色器:float4(宽、高、1/宽、1/高)。 如果一个 3D 纹理被绑定到采样器,则如下内容将被传递到着色器:float4(宽、高、深、0)。
 
   纹理类型
负责定义绑定哪个纹理的所有属性
 
TextureType(纹理类型): 哪个预定义纹理应被绑定到该着色器
  Base_Texture(基底纹理): 被渲染的模型的基底(散射)纹理
    Lightmap(光照贴图): 被渲染的模型的光照贴图纹理
  Shadowmap(阴影贴图): 当前活动光照的阴影蒙版
  Auxiliary_Texture(辅助纹理): 用户可为某个材质提供的辅助纹理之一。 该纹理将使用TextureIndex(纹理索引)作为索引。
  Custom_Texture(自定义纹理): 将从 CustomTextureFilename(自定义纹理文件名)载入的纹理。 如果 CustomTextureFilename 为空,则不绑定任何纹理。
  Cubemap(立方体贴图): 将从 CustomTextureFilename 载入的立方体纹理。 如果 CustomTextureFilename 为空,则不绑定任何纹理。
  Texture3D(纹理 3D): 将从 CustomTextureFilename 载入的 3D 纹理。 如果 CustomTextureFilename 为空,则不绑定任何纹理。
  Specularmap(高光贴图): 当前被渲染的模型的高光贴图纹理。
  Normalmap(法线贴图): 当前被渲染的模型的法线贴图纹理。
  AccumulationBuffer(累积缓存): 当前使用渲染器节点的累积缓存。
  DiffuseBuffer(散射缓存): 当前使用渲染器节点的散射缓存。 (仅限延迟渲染)
  NormalBuffer(法线缓存): 当前使用渲染器节点的法线缓存。 (仅限延迟渲染)
  DepthBuffer(深度缓存): 当前使用渲染器节点的深度缓存。
  Texture2DArray(纹理 2D 数组): 将从 CustomTextureFilename 载入的纹理 2D 数组。 如果 CustomTextureFilename 为空,则不绑定任何纹理。 
CustomTextureFilename(自定义纹理文件名): 部分纹理类型使用的纹理的路径。 
 
TextureIndex(纹理索引):部分纹理类型的纹理索引。
 
纹理过滤和细节层次
PredefinedFilterMode(预定义过滤器模式): 最常用的预定义过滤器模式。 如果您改变该选项,所有其他过滤选项将会相应变化。
  Nearest(最近): 最近内插法,纹理之间没有任何插补。
  Bilinear(双线性): 双线性内插法
  Trilinear(三线性): 三线性内插法
  Anisotropic(各向异性): 各向异性内插法。 各向异性内插最大值可通过 MaxAnisotropy 指定
  Custom(自定义): 用户定义内插法 
 
FilterMode(过滤器模式): 要使用的硬件过滤器模式。 选择预定义过滤器模式时,该选项通常设为自动。 
 
MaxAnisotropy(最大各向异性): 该采样器允许的各向异性过滤最大量。 
 
LodBias(LOD 偏移): 纹理的 LOD 偏移 - 用于纹理 mip-level 选取。 该值小于 0 会令纹理更清晰(通常会降低性能),大于 0 会令纹理更模糊(通常会提高性能)。 
 
ComparisonFunction(比较函数): 仅限 DX11,用于在着色器中比较采样的纹理比较函数。 仅限 Shader Model 4.0 及以上版本。
 
  纹理夹取
TextureAddressModeU(纹理地址模式 U): 纹理坐标 U 通道的纹理地址模式。
  Wrap(重叠): 纹理被重复
  Mirror(镜像): 纹理被镜像重复
  Clamp(夹取): 纹理边缘像素被重复
  Border(边界): 纹理未被重复,0-1 范围外的区域使用边界色
  Mirror_Once(镜像一次): 纹理被镜像重复一次。 
 
TextureAddressModeV(纹理地址模式 V): 纹理坐标 V 通道的纹理地址模式。
 
TextureAddressModeW(纹理地址模式 W): 纹理坐标 W 通道的纹理地址模式。  
 
BorderColor(边界色): 边界纹理地址模式的边界色。 
 
各种通路属性
众多其他通路属性可在着色器属性选项卡中修改:
 
    混合选项
    深度和模板
    光栅器
    镶嵌
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics