概括
当为Mari编写自定义着色器、图层或节点 XML 时,有时将自定义 GLSL 函数包含在单独的文件中会更方便。如果您选择将这些函数保存在单独的文件中,则需要使用立方体贴图纹理查找,它允许函数运行自己的特殊处理。
本文介绍了如何在Mari中进行原始纹理查找调用,以便相同的调用能够在不同的着色器模式以及Mari的未来版本之间一致地工作。
更多信息
虽然这不被认为是Mari的官方功能,但在开发 Custom Shader 时,以前可以从自定义节点的 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() 和 mriTextureLod() 函数可用于查找实际纹理值,例如:
#version 150
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken token, vec3 coords, float lod)
{
return mriTextureLod(token, coords, lod);
}
我们很遗憾听到
请告诉我们