前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >着色器调用

着色器调用

作者头像
南郭先生
发布2022-04-25 13:51:39
4040
发布2022-04-25 13:51:39
举报
文章被收录于专栏:Google DartGoogle Dart

从 Houdini 12.5 开始,VEX 着色器函数可以调用其他着色器函数。 这种技术可以优化大型着色器的 VEX 编译器和优化器性能,因为在着色器或其他着色器中多次调用的代码可以构建一次并多次使用,而无需额外的运行时开销。

导入关键字

import 关键字按名称将另一个着色器函数引入当前着色器。导入的着色器必须可在 houdini 路径中访问才能编译成功 - 如果找不到,着色器编译将失败。因此,在构建调用其它着色器的着色器时,您需要按依赖顺序构建着色器 - 称为着色器,然后是它们的调用者。循环调用是可能的,但您需要在构建第一个调用者后将 import 关键字添加到被调用者。

例如,导入plastic着色器:

代码语言:javascript
复制
import plastic;

着色器可以递归调用自己——在这种情况下,不需要 import 关键字。

调用着色器

着色器按名称调用并传递关键字参数 - string/value对,用于标识要从调用的着色器传递或接收的参数。可以只绑定一些参数,在这种情况下,被调用的着色器将使用它的默认值作为未绑定的参数。此外,只需要绑定来自被调用着色器的导出子集。在这种情况下,VEX 优化器将去除计算不需要的导出的任何死代码,从而提高性能。

例如,此代码调用plastic着色器,请求 Cf 导出并提供 diff 输入:

代码语言:javascript
复制
import plastic;

surface caller(vector diff = {1,0.5,0})
{
    plastic("diff", diff, "Cf", Cf);
}

vcc 将检查所有传递给被调用着色器的可变参数,以确保它们与被调用着色器的参数列表中存在的参数或导出对应 - 如果类型或访问模式不匹配,则会报告错误。

被调用着色器的上下文

着色器目前只能调用具有匹配上下文类型的着色器。对于具有全局变量的上下文,任何未作为关键字参数显式提供给着色器的全局变量都会从调用着色器原封不动地复制到被调用着色器。对于携带额外不透明状态信息的上下文(例如表面上下文,它维护有关撞击表面的状态),此信息也在被调用的着色器中维护,以便调用方法如 getraylevel() 将在调用者和调用者中产生相同的结果被调用者。

例子

被调用的着色器:

代码语言:javascript
复制
cvex callee(export int mval = 0;
        int rval = 0;
        export int wval = 0;
        float castval = 0)
{
    mval *= 2;
    wval = rval;
}

调用着色器:

代码语言:javascript
复制
import callee;

cvex caller()
{
    int mval = 1;
    int rval = 2;
    int wval = 1;
    callee("mval", mval, "rval", rval, "wval", wval, "castval",
            1);
    printf("%d %d %d\n", mval, rval, wval);
}

递归着色器:

代码语言:javascript
复制
cvex fib(int i = 0; export int rval = 0)
{
    if (i >= 2)
    {
        int v1, v2;
        fib("i", i-1, "rval", v1);
        fib("i", i-2, "rval", v2);
        rval = v1 + v2;
    }
    else
        rval = i;
    printf("%d: %d\n", i, rval);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入关键字
  • 调用着色器
  • 被调用着色器的上下文
  • 例子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档