可以通过不同方式创建 for 循环。您可以创建自定义代码节点。选择“工具”“切换高级模式”进入高级模式,然后选择“硬件明暗器节点”“各种”“自定义代码”。在“特性”面板中,单击“编辑”按钮,以便在显示的“自定义代码编辑器”对话框中输入代码。使用与 DirectX 视口驱动程序兼容的函数。
要创建“For 循环”节点,您还必须启用高级模式。
以下示例说明了如何使用 for 循环对具有不同 UV 偏移的纹理采样三次。采样值相加,然后总和除以三,所得平均值应用到 TraditionalGameSurfaceShader 的“漫反射颜色”通道。
设置 for 循环:
默认情况下,A 的值为 0,C 的值为 1。如果您在循环中使用这些默认值,则无需连接这些属性。
在此示例中,我们设置了 i = 0, i < 3, i++;因此,我们不需要明确设置 A 和 C 值
设置纹理采样:
也可以在“属性”面板中,确保“采样器/U 坐标”和“采样器/V 坐标”属性设定为“WRAP”。
由于对该纹理进行采样偏移,采样可能会超出 0 到 1 的 UV 范围。将这些属性设置为“WRAP”可确保在 UV 范围超出 1.0 时从纹理开始之处对进行像素采样。
计算采样的平均结果:
For 循环将纹理采样的结果添加至“循环结果”变量。
由于“循环结果”是三个采样值的和,必须将它除以三个才能获取其平均值。
迭代棋盘图案的结果(使用 Quicksilver 渲染器渲染)
可以将 ShaderFX 材质导出到明暗器文件并检查明暗器代码,以查看刚创建的 For 循环:
float3 LoopResult = float3(1.0, 1.0, 1.0); for(int i=0; i<3; i+=1) { float2 AddOp = (Array_bphdfiwhhj[i] + IN.map1.xy); float4 Sampler = chessboard_woodjpg.Sample(MMMLWWWSampler, AddOp); LoopResult += Sampler.xyz; }
有关导出到明暗器文件的详细信息,请参见导出到 HLSL、CgFX 和 GLSL。