Houdini JoyOfVex 教程06
06
Point wrangle vs prim wrangle(point wrangle节点与prim wrangle节点)
将颜色先变为全黑,然后让R红色值与点距离关联:
float d = length(@P);
d *= ch('scale');
@Cd = 0;
@Cd.r = sin(d);
在wrangle节点的Run Over下拉菜单中,我们将Points改为Primitives:
你能看到平面上的颜色边缘显得更锐利了,就像8bit像素游戏一样的风格。同时,你也能注意到,@Cd属性从spreadsheet面板上消失了!但是不要慌!先喝杯热水压压惊,点击spreadsheet面板上的primitives按钮,你会发现我们调皮的@Cd颜色属性跑到这旮旯来了。
你的小脑瓜现在肯定在想,为啥颜色看起来更锐利了呢?让为师来告诉你其中的奥妙吧。因为点(points)是处于面(primitives,primitives不一定指面,但是这里是指面)上的,一个点可被多个面共享,颜色在面与面之间会自动混合,产生渐变。但是如果我们直接给面着色的话,一个一个面就是单一的颜色,没有那种混合的效果了。
译者注:关于Points,Verts和Prims的区别与联系,详见此教程:https://www.bilibili.com/read/cv761219
那我们把应用类型改为面之后,我们改变@P属性会是啥效果呢?
float d = length(@P);
d *= ch('scale');
@P.y = sin(d);
来回切换点和面模式试试,似乎面模式下,这些代码并不起作用。是哒,它只对点有效。你如果够细心的话,之前看spreadsheet面板的时候就应该注意到了,@P位置属性始终停留在Points面板下,不离不弃,不像@Cd一样,背信弃义,说跑就跑,投奔他人麾下。所以面是不能拥有@P属性的,代码在其上运行自然没啥效果。
译者注:见http://www.sidefx.com/docs/houdini/model/attributes.html的COMMON ATTRIBUTES下的列表。有些属性只能在某一个或两个层级上使用,比如这里P只能存在于point层级上,uv只能存在于vertex或者point上,primitive上是不行的。
等等…看到这你可能已经想到了,为啥之前@ptnum和@Time这些属性能用呢?它们也没写在Points面板下面啊…这是因为它们是伪属性(pseudo-attributes)。Vex有一些像这样的只读(read-only)属性。
译者注:这段感觉作者写的有点迷- -…你只要知道houdini中有points,vertices,primitives,detail这4个不同层级,每个层级都能拥有自己的属性就行了。它们都能在spreadsheet面板上查看。
How to know about attributes like ptnum, P, N numpt etc(从哪得知这些属性呢)
有个简单的查找方法,你可以新建一个vop节点,点进去看看。哇,是不是P, V, Cd, N, ptnum等等属性都在这里,是哒,这些都是houdini中的常用属性,这些属性有其具体的意义,比如Cd就代表颜色值,会体现在模型颜色上。具体的你也可以打开帮助文档自己查。
译者注:VOP就是Vex OPerations,VEX编辑模组。
Other modes on a wrangle, vertex and detail(wrangle节点Run Over下的其它层级,vertex和detail)
类似primitives层级,vertex顶点层级就是让代码作用在每个顶点上。vertex模式基本只用在uvs上,很少用在其他地方。
那么detail层级是个啥玩意呢?简单来说,它意味着“只运行一次”(‘run once’)。在很多情况下这是很方便的,比如说你要计算一个物体的边界框(bounding box),或者在某处设置一个文字变量,你就可以使用这种模式。后面章节我们还会介绍到这货。
你也可以把属性设置在这个detail下,点击spreadsheet面板的detail按钮来查看这些数据。
译者注:还记得我们第一章提过vex是SIMD的吗,它支持多线程和并行运算。简单来说,你在点层级写下代码,实际上是在所有点上同时执行你的代码,这也是vex语言速度快的重要原因之一。当然,像@ptnum这些属性,在第一个点上它的值就被识别为0,第二个上面就是1,第三个是2,也就是spreadsheet面板上每个点拥有的单独的属性值。所以你的代码是跑了好多遍的(有多少个点就执行多少次)。vertex和prim层级同理。而detail层级上代码只执行一次。
Moving beyond P N Cd ptnum(不止是P,N,Cd,ptnum,让我们自定义属性)
我们目前写的所有demo最终都是改变位置或颜色的值来产生视觉效果。如果你只是想把一些数据给存储起来呢?比如你可能想存储每个点到原点的距离,然后等会在另一个wrangle节点用到它?
译者注:还记得我们第一章提到属性和变量的区别吗?属性的好处是数据一直存在着,能被你接下来的操作调用。所以我们可以用属性来存东西。
理所当然地,你可以创造你自己的属性,只要在它前面加上@符号修饰即可:
float d = length(@P);
@mydistance = d;
事实上,我们基本不像这样使用局部变量来过渡,因为你完全可以直接给你的属性赋值并且读取它啊:
@d = length(@P);
@d *= ch('scale');
@Cd = 0;
@Cd.r = sin(@d);
译者注:实际上,自定义属性和定义变量一样,要在名字前加数据类型的,不加就是默认float类型。 比如string @words[],或者i@myinteger(一般用这种写法,这个i代表int)
Houdini JoyOfVex 教程06相关推荐
- Houdini JoyOfVex 教程01
原英文系列教程地址:在这里 文档翻译教程:PB_zz 01 houdini 中的 vex 语言,是一种类似于c/c++的强类型语言,执行效率高,具体帮助文档位于houdini菜单栏help-Conte ...
- Houdini JoyOfVex 教程02
02 还是01中的话,本文有很多内容来自PB_zz翻译的文档,我有相当一部分其实属于二次创作. 我们在第一节教程里了解了变量,属性,赋值,很显然,第二节就需要运用他们了,而对于编程语言来说,将他们包装 ...
- Houdini JoyOfVex 教程04
04 Chramp(样条映射控制面板/斜坡控制/梯度控制) chramp应该是channel ramp的缩写,不知道该怎么翻译好- -,这里就译为样条控制了,或许叫斜坡控制好点?(PB_zz says ...
- Houdini JoyOfVex 教程05
05 Modulo(取模运算) 每个小学生都明白±*/,但通常没学过编程的人不太用得到%.%是取模计算.相信你在小学就学过除法,除法会得到一个余数.类似的,取模计算的值就是得到一个模数. 你问一个10 ...
- Houdini JoyOfVex 教程03
03 这一节算是对第二节的补充应用 我们首先来回顾一段代码: float d= length(@P); d *= ch('v_scale'); d += @Time; @P.y = sin(d); 我 ...
- matlab生成n阶O型方阵,matlab教程 06
<matlab教程 06>由会员分享,可在线阅读,更多相关<matlab教程 06(27页珍藏版)>请在人人文库网上搜索. 1.第6章 模糊逻辑6.1 隶属函数6.1.1 高斯 ...
- ArcGIS二次开发基础教程(06):有关图层的基本操作
ArcGIS二次开发基础教程(06):有关图层的基本操作 0. PageLayout和MapControl 的同步 void CopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重 ...
- 中级Shader教程06 2D火焰粒子
layout: post title: "中级Shader教程06 2D火焰粒子" date: 2018-03-27 16:09:03 author: Jiepeng Tan ca ...
- CCS使用教程06:在线仿真操作
目录 01 CCS的介绍.下载与安装 1 CCS的介绍 2 下载 3 安装 02 创建一个CCS工程 1 工作空间 2 创建一个新的CCS工程 3 编译与生成 03 工程导入 1 ...
最新文章
- GitHub上分享的常用算法和数据结构实现原理可视化系统
- 贫困地区农品产销对接行动倡议书-中国农民丰收节交易会
- 克制linux启动盘,制作Linux启动盘的四种方法
- 计算机三级网络接口,计算机三级网络技术操作系统是怎样的?
- WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
- React-Native视频组件react-native-video使用(安卓版)
- 教学交流研讨会总结(一)
- c语言补全程序,跪求高手解答简单的程序补全题~!
- 抖音何以为“抖音”?少不了A/B测试的功劳
- java应用中spring自动注入_Spring自动注入的几种方式
- 《Python语言程序设计基础》:第2章:Python程序实例解析:程序练习题
- epson r1900 清零软件_Epson爱普生me1100清零软件 me1100打印机废墨清零软件
- 变更日志 批准的变更请求 收尾流程 原型法 名义小组 习题
- java8使用 Comparator.comparing 进行排序
- pq分解法matlab程序,基于MATLAB软件的PQ分解法潮流计算
- NOI2009 诗人小G
- 微信小程序波浪动态效果和背景色渐变(使用动态图,有手就行,但是流动速度固定波浪数目也固定)
- js 忽略字母大小写
- python实现键盘监听
- mysql自定义函数多参数_MySQL数据库高级(二)——自定义函数
热门文章
- 扩展卡尔曼滤波新手教程(二)----中文版
- X86系列CPU标准寄存器
- gerrit管理员快速创建项目的方法
- IDS、IPS的阻断方法及绕过方法
- Programming Differential Privacy第七章
- SpringBatch批处理实战教程
- 2019 江苏(盛泽)纤维及纱线展会开展在即
- java+Springboot医护人员排班系统vue
- rust木炭有用吗_【一点资讯】Rust语言2020调查报告发布:Rust 太难,生命周期更难...
- 一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下的问题