概括
在为Mari编写自定义着色器、图层或节点 XML 时,有时将自定义 GLSL 函数放在单独的文件中会更方便。如果选择将这些函数放在单独的文件中,则需要使用立方体贴图纹理查找功能,该功能允许函数运行其自身的特殊处理。
本文解释了如何在Mari中进行原始纹理查找调用,以便相同的调用能够在不同的着色器模式和Mari的未来版本之间保持一致。
更多信息
虽然这并非Mari的官方功能,但在开发自定义着色器时,以前可以从自定义节点的 imagecube 属性获取 samplerCube。在早期的Mari版本中,用户可以由此创建一个利用 GLSL 的 texture() 函数的原始纹理查找表。
在Mari 3.4v1 和 4.1v1 中, Mari的着色器系统的内部改进意味着Mari现在使用间接变量进行纹理查找。
你需要做什么
为了应对这些变化并创建原始纹理查找表,您需要:
- 在你的 XML 文件中包含Texture.glslh 文件。
- 将纹理采样器声明为cubemapToken
- 使用
mriTexture()或mriTextureLod()来进行纹理查找,其方式与 GLSL 中texture()和textureLod()用法相同。
开发者示例
在调用方的节点 XML 文件中,可以按如下方式调用自定义 GLSL 函数:
...
<Attribute Name="Cubemap" PrettyName="Image" Type="imagecube"></Attribute>
...
textureSampleColor = customCubemapLookup( $Cubemap, coords, lod );
然后,在 GLSL 头文件中,可以像这样声明接受cubemapToken参数的自定义函数:
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken cubemapTexture, vec3 dir, float lod);
除此之外,在 GLSL 源代码文件中,还可以定义接受 cubemapToken 参数的自定义函数。mriTexture mriTexture()和mriTextureLod()函数可用于查找实际的纹理值,例如:
#version 150
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken token, vec3 coords, float lod)
{
return mriTextureLod(token, coords, lod);
}
更多帮助
如果您遇到任何问题,请创建支持工单并向我们提供本文中要求的信息:
Q100090:报告Mari问题时需要发送给支持团队的信息
如需了解如何提交支持工单,请参阅本文:
Q100064:如何提交支持工单
我们很遗憾听到
请告诉我们