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

着色器调用

作者头像
南郭先生
发布于 2022-04-25 05:51:39
发布于 2022-04-25 05:51:39
48200
代码可运行
举报
文章被收录于专栏:Google DartGoogle Dart
运行总次数:0
代码可运行

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

导入关键字

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

例如,导入plastic着色器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import plastic;

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

调用着色器

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import plastic;

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

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

被调用着色器的上下文

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

例子

被调用的着色器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cvex callee(export int mval = 0;
        int rval = 0;
        export int wval = 0;
        float castval = 0)
{
    mval *= 2;
    wval = rval;
}

调用着色器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
1 条评论
热度
最新
下载不了了,答主有没有下载好的数据啊,求分享
下载不了了,答主有没有下载好的数据啊,求分享
回复回复点赞举报
推荐阅读
Python - conda 常用命令介绍
本文介绍使用conda管理anaconda Python环境的相关命令。 conda 环境相关命令 创建环境 conda create -n env_name python=3.7 --clone another_env -n:name 表示新环境名称 python:使用python版本 –clone:从现有环境复制而来 删除环境 conda remove -n env_name --all 查看环境 conda env list 或 conda info -e 激活环境 cond
为为为什么
2022/08/04
8200
Anaconda环境迁移
在日常的工作和学习中,可能手头有很多服务器,在一台服务器上搭建了合适的开发环境,如何高效地复制到所有机器上呢?这里主要以目标服务器是否可以联网,介绍了如何方便地迁移虚拟环境。
自学气象人
2022/11/02
3.1K0
Anaconda环境迁移
利用conda移植python环境
conda 常用来执行虚拟环境配置和包管理工作,有时候需要将本地的环境移植到新的离线的机器上,可以使用conda-pack进行conda环境打包和分发。
杜金房
2024/05/30
3752
利用conda移植python环境
python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型
最近趁着有时间,搞了一下 MCP,MCP 中主要使用的python uv 来创建环境。之前只使用过 pip 和 conda,所以把他们三个对比一下,为后续选择打下基础
shengjk1
2025/05/16
5180
Anaconda入门详解
Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学、机器学习、大数据处理和预测分析),Anaconda致力于简化包管理和部署。Anaconda的包使用软件包管理系统Conda进行管理。超过1200万人使用Anaconda发行版本,并且Anaconda拥有超过1400个适用于Windows、Linux和MacOS的数据科学软件包。
py3study
2020/01/03
1.8K0
Conda 完全指南:从环境管理到工具集成
在数据科学、机器学习和 Python 开发领域,环境管理一直是令人头疼的问题。不同项目依赖的库版本冲突、Python 解释器版本不兼容等问题频繁出现,而 Conda 的出现彻底解决了这些痛点。作为目前最流行的跨平台环境管理工具,Conda 通过强大的环境隔离和包管理能力,成为开发者的必备工具。本文将从基础概念到高级应用,全面解析 Conda 的核心功能与实战技巧。
正在走向自律
2025/05/18
5380
Conda 完全指南:从环境管理到工具集成
Conda常用命令
TomatoCool
2023/07/30
3090
Python:requirements.txt, environment.yml简介
最近安装了一些从github上clone下载的开源python软件包,经历了许许多多的酸甜苦辣。在python软件包,通常都会包含requirements.txt, environment.yml, setup.py三者之中某些或者全部,一开始完全不知道都是啥东东,通常都是遵照安装指示傻傻地一步一步走。但是久病成医,查阅了一些网上相关的资源逐渐也(自以为)明白了它们是咋回事。本文做一个简单的总结,不过这些只是小白的入门级的求生指南总结(所以不会包含高级使用相关的内容),如有错漏偏误欢迎指正-
Freedom123
2024/03/29
5120
Python:requirements.txt, environment.yml简介
Conda 为什么越来越慢?
Conda 中包含的软件越来越多,而且软件的不同版本都保留了下来,软件的索引文件越来越大,安装一个新软件时搜索满足环境中所有软件依赖的软件的搜索空间也会越来越大,导致solving environment越来越慢。
章鱼猫先生
2021/10/15
3.5K0
Jupyter Notebook中配置多版本Python
最新 Anaconda 中,默认安装 Python 3.8.3,因为某些原因需要使用 Python 3.7
yiyun
2022/04/01
5K0
Jupyter Notebook中配置多版本Python
python安装虚拟环境步骤_python虚拟环境迁移
http://blog.csdn.net/pipisorry/article/details/47008981
全栈程序员站长
2022/09/27
8.1K0
python安装虚拟环境步骤_python虚拟环境迁移
学会使用虚拟环境
虽然目前使用 bioconda 可以非常方便的管理很多软件,但是由于生物软件的类型实在太多了。完全没有统一的开发平台,因此,即使利用 bioconda 还是会出现一些问题,比如需要使用的软件是基于 python2.7 版本,而安装之后的 python 版本为 3.7。必须切换到 python 2.7才能使用,这个时候就可以使用 bioconda 创建的虚拟环境。
生信喵实验柴
2021/12/21
8150
Windows如何配置和迁移深度学习环境,以及使用Pycharm调试源码?(全网最详细)
本文主要详细介绍了torch_pgu版本的安装,其中包括cuda和cudnn的环境配置图解流程,以及如何使用conda命令进行虚拟环境的创建、删除、使用等操作,列举conda的常用命令集,包括如何实现Windows之间的conda环境的迁移;除以之外,介绍了pycharm断点调试的详细流程和不同的调试方法。
润森
2022/09/22
3.6K0
Windows如何配置和迁移深度学习环境,以及使用Pycharm调试源码?(全网最详细)
Anaconda使用总结
1、Anaconda简介2、Anaconda安装(Linux和Windows)3、Conda的包管理与环境管理
用户7886150
2021/01/26
9200
conda创建虚拟环境怎么删除(anaconda离线创建虚拟环境)
在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。
全栈程序员站长
2022/07/31
4.7K0
管理conda environments
environments作为conda的核心组件,用于封装相互独立的软件环境。通过在不同的environment中安装packages,来实现不同软件的相互独立,通过在不同的environments之间进行切换,从而运行不同的packages。
生信修炼手册
2020/12/24
2.6K0
再见pip & conda!管理Python依赖关系的更好的选择:Poetry
然而,随着项目的扩大,依赖关系的数量也在增加。这可能会使项目的环境难以重现,并且在仅仅依靠pip或conda进行依赖性管理时难以有效地维护它。
数据STUDIO
2023/09/04
3.2K0
再见pip & conda!管理Python依赖关系的更好的选择:Poetry
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
要搞清楚什么是虚拟环境,首先要清楚Python的环境指的是什么。当我们在执行python test.py时,思考如下问题:
全栈程序员站长
2022/09/27
50.8K0
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
如何利用conda管理python环境
conda包管理器可以创建,导出,列出,移除以及更新python环境,而且python环境可以使用不同版本的python,并且安装不同的安装包。在每一个环境之间进行切换称为激活环境。你也可以和别人共享环境文件。
bugsuse
2020/04/21
2K0
软件测试/人工智能|教你掌握 Conda 的基本用法
作为一名技术爱好者或者开发人员,我们可能经常需要管理不同版本的软件包或创建独立的开发环境。Conda 是一个强大的工具,能够帮助我们轻松完成这些任务。接下来,我们将介绍 Conda 的基本概念和常用操作,帮助大家快速上手。
霍格沃兹测试开发Muller老师
2023/12/14
4280
推荐阅读
相关推荐
Python - conda 常用命令介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档