污浊Shader
污浊着色可以让你将另外一张纹理混合到你的基础材质上,使用同一个DrawCall操作而不需要去额外去贴一张Decal。这张混合的纹理需要有一个透明通道,并且通过你的模型shader属性里的顶点的透明度来控制混合量。此外你可以为这张污浊纹理指定Tiling和alpha。由于污浊纹理与基础材质的Diffuse纹理使用同样的UV值,你可以通过Tiling参数消除纹理重复带来的效果。
在3ds Max中设置
在3ds Max下可以可视化调整两张纹理的混合与UV布局。这里有DirectX Dirt Shader你可以使用,DirectX Dirt Shader会复制了CryEngine中Dirt Shader,这个shader遵循Max并且不会被期望导出到CryEngine中。所以这里有一个Max的脚本可以方便的帮你将基础的材质转换成临时的Max下的DirectX Dirt Shader。
工作流程
你的对象的模型和纹理必须是标准的材质和Diffuse texture
转换标准Max材质成DirectX Dirt shader
创建并污浊纹理到你的DirectX Dirt Shader中
在你的模型上应用顶点透明来创建于其的混合效果
切换回你的标准Max材质
导出你的对象到CryEngine中
在CryEngine中建立Dirt Shader的材质。
所需文件
DirectX Dirt Shader: Main\Tools\maxscrit\fx\cryBlendShader.fx
MaxScript: Main\Tools\maxscript\CryMakeBlendShader.ms
1. 拷贝DiffuseBumpBlend.fx文件到yourproject\tools\maxscript\fx目录。
2. 拷贝CryMakeBlendShader.ms文件到yourproject\tools\maxscript目录
使用CryMakeBlendShader.ms
这个脚本需要你选择一个对象并为它创建一个复合材质(有多种子材质)。为每一个自材质使用DirectX Dirt shader(新材质将会在材质编辑器里创建出两个子对象)。它会自动分配原始的Diffuse与Normal贴图纹理,但shader中的污浊纹理将是空的,你必须手动为每个材质选择污浊纹理。
1. 运行脚本——打开一个小对象化框
2. 选择你的对象
3. 按下按钮在脚本对话框里创建混合Shader
4. 材质编辑器将会被打开
选择框1包含你的原始材质
选择框2将包含新的DirectX材质(还没有分配到你ide对象上)
5. 指定新的材质到你的对象上(从插槽2上)
6. 不要删除或覆盖插槽1中的原始材质,否则它会丢失
7. 对于每个子材质选择期望的污浊纹理使用DiffuseMap2
参见下面Max中DirectX Dirt shader 参数的描述。并且控制对象上污浊的表现
注意:当使用一个DirectX Dirt Shader的多重材质时,子材质ID不能标准材质那样”wrap”,子材质必须拥有正确的ID号,否则在你应用了Direct Dirt Shader材质后你的物体会变成线框模式。这可能是因为那些面使用的子材质ID在正确的ID范围之外。
在3dSMax中创建DirectX Dirt Shader
创建一个新的DirectX材质,在DirectX Shader标签下加载DiffuseBumpBlend.fx文件。
DiffuseMap1: 加载基础纹理
DiffuseMap2: 加载污浊纹理
NormalMap: 加载基础纹理的NormalMap
DirtTint: 允许你对污浊纹理着色
DirtStrength: 允许你设置污浊纹理整体的不透明度
Dirt Map Alpha:允许你启动或禁用污浊纹理的透明通道
Dirt Tiling: 允许你调整贴图的重复参数——使用这个值调整基础纹理的UV
请记住,你可以为你的多重材质物体创建一个字材质的Dirt Shader,办切忌要在导出你的模型前把它们转化回CryTek shader。
在物体上应用污浊效果
为了使用Shader需要为你的模型添加一个VertexPaintiugai其,并且设置它的通道为Vertex Alpha。你可以绘制那些区域受污浊的影响。褐色代表你的污浊层的不透明度为%100,是污浊完全可见,白色不限是任何污垢。身前不同的灰色将会与基础贴图进行混合。你可以选择一组顶点给他们设定一个Alpha值。当顶点被选择时Alpha值可以在Vertex Properties的选项卡下进行设置。
为了能在视口内看到顶点的透明度,右击你的物体,选择顶点通道显示,将它设为VertexAlpha。
在CryEngine中使用
Dirt Shader目前只能在IIIum Shader下应用。首先在Shader自定义插槽内加载你的Dirt Texture。然后检查Shader Generation Param下的污浊层启动Dirt Shader Parameters。你可以手动为每一个Dirt Shader设置与Max下的DirectX Dirt shader匹配的参数。
Dirt Tint 允许你对纹理着色,白色代表不着色
Dirt Strenth 允许你设置污浊纹理的不透明度。
Dirt Gloss 允许你设置污浊纹理的发光度
Dirt Tiling 允许你设置污浊纹理的映射缩放。
使用污浊纹理
通过Dirt Shader可以子啊不带来性能负担的前提下增加物体细节。但只限于针对小的tiling纹理和少数材质中,Dirtshader允许你在不添加更多纹理的情况下让物体看齐来更多样化 。通过使用Vertex Alpha可以确保你在仍然能使用顶点颜色对Mesh添加额外的着色信息。
每个污浊纹理应该在其他资源上是可以被重复使用的。你的目标应该是建立一个纹理库来为所有基础材质处理污浊效果。
裁剪绘制(Clipped Paint)
下面是一个256x256为基础的混凝土贴图块。这个污浊纹理本身是一种带透明通道的白色混凝土质地的图,它在透明通道的掩码用来创建”Clipped Paint”效果。512x512的污浊纹理是为了保持掩码的清晰度,通过白色作为基础色。
你可以轻松的通过对污浊纹理着色通过shader中的tint属性。通过添加边和修改顶点透明(Vertex alpha)。你可以指定你喜欢的纹理进行混合。
墙和其他物体
在下面你可以看到不同类型的材质使用了相同的污浊掩盖效果。
为基础对象添加差异效果
在某些情况下创建一个统一的污浊纹理会比单独的一片污浊纹理更有效。
例如,在下面的例子里有金属板用来创建建筑屋顶。这意味着这些物体会是经常被使用并需要非常好的效果。为了做到这一点,你应该的为这些金属板定义形状。为了使用更多的纹理,确保他们使用的纹理空间是得到最大程度利用的。软后创建掩码效果,指定哪些金属板会被着色(以何种方式)并预先定义建立的物体片。
大多数DirtShader都适用的
从使用一个基础纹理块开始,为基础纹理块创建一个有趣的污浊纹理。使用顶点色添加微妙的颜色变化和环境闭塞效果。请务必尽可能使用这三个步骤。
重用污浊纹理
如果你有一个良好的基础纹理和NormalMap。在创建一个新的污浊纹理之前,尝试重复使用已有的污浊纹理和掩码效果在你的材质上是非常值得的。通常你可以实现与现有shader中纹理和着色功能相同的效果,这样可以节省纹理内存和时间。