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相关推荐

  1. Houdini JoyOfVex 教程01

    原英文系列教程地址:在这里 文档翻译教程:PB_zz 01 houdini 中的 vex 语言,是一种类似于c/c++的强类型语言,执行效率高,具体帮助文档位于houdini菜单栏help-Conte ...

  2. Houdini JoyOfVex 教程02

    02 还是01中的话,本文有很多内容来自PB_zz翻译的文档,我有相当一部分其实属于二次创作. 我们在第一节教程里了解了变量,属性,赋值,很显然,第二节就需要运用他们了,而对于编程语言来说,将他们包装 ...

  3. Houdini JoyOfVex 教程04

    04 Chramp(样条映射控制面板/斜坡控制/梯度控制) chramp应该是channel ramp的缩写,不知道该怎么翻译好- -,这里就译为样条控制了,或许叫斜坡控制好点?(PB_zz says ...

  4. Houdini JoyOfVex 教程05

    05 Modulo(取模运算) 每个小学生都明白±*/,但通常没学过编程的人不太用得到%.%是取模计算.相信你在小学就学过除法,除法会得到一个余数.类似的,取模计算的值就是得到一个模数. 你问一个10 ...

  5. Houdini JoyOfVex 教程03

    03 这一节算是对第二节的补充应用 我们首先来回顾一段代码: float d= length(@P); d *= ch('v_scale'); d += @Time; @P.y = sin(d); 我 ...

  6. matlab生成n阶O型方阵,matlab教程 06

    <matlab教程 06>由会员分享,可在线阅读,更多相关<matlab教程 06(27页珍藏版)>请在人人文库网上搜索. 1.第6章 模糊逻辑6.1 隶属函数6.1.1 高斯 ...

  7. ArcGIS二次开发基础教程(06):有关图层的基本操作

    ArcGIS二次开发基础教程(06):有关图层的基本操作 0. PageLayout和MapControl 的同步 void CopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重 ...

  8. 中级Shader教程06 2D火焰粒子

    layout: post title: "中级Shader教程06 2D火焰粒子" date: 2018-03-27 16:09:03 author: Jiepeng Tan ca ...

  9. CCS使用教程06:在线仿真操作

    目录 01  CCS的介绍.下载与安装 1  CCS的介绍 2  下载 3  安装 02  创建一个CCS工程 1  工作空间 2  创建一个新的CCS工程 3  编译与生成 03  工程导入 1  ...

最新文章

  1. GitHub上分享的常用算法和数据结构实现原理可视化系统
  2. 贫困地区农品产销对接行动倡议书-中国农民丰收节交易会
  3. 克制linux启动盘,制作Linux启动盘的四种方法
  4. 计算机三级网络接口,计算机三级网络技术操作系统是怎样的?
  5. WIN7+wampserver2.4+zend stadio10.6.1配置Xdebug
  6. React-Native视频组件react-native-video使用(安卓版)
  7. 教学交流研讨会总结(一)
  8. c语言补全程序,跪求高手解答简单的程序补全题~!
  9. 抖音何以为“抖音”?少不了A/B测试的功劳
  10. java应用中spring自动注入_Spring自动注入的几种方式
  11. 《Python语言程序设计基础》:第2章:Python程序实例解析:程序练习题
  12. epson r1900 清零软件_Epson爱普生me1100清零软件 me1100打印机废墨清零软件
  13. 变更日志 批准的变更请求 收尾流程 原型法 名义小组 习题
  14. java8使用 Comparator.comparing 进行排序
  15. pq分解法matlab程序,基于MATLAB软件的PQ分解法潮流计算
  16. NOI2009 诗人小G
  17. 微信小程序波浪动态效果和背景色渐变(使用动态图,有手就行,但是流动速度固定波浪数目也固定)
  18. js 忽略字母大小写
  19. python实现键盘监听
  20. mysql自定义函数多参数_MySQL数据库高级(二)——自定义函数

热门文章

  1. 扩展卡尔曼滤波新手教程(二)----中文版
  2. X86系列CPU标准寄存器
  3. gerrit管理员快速创建项目的方法
  4. IDS、IPS的阻断方法及绕过方法
  5. Programming Differential Privacy第七章
  6. SpringBatch批处理实战教程
  7. 2019 江苏(盛泽)纤维及纱线展会开展在即
  8. java+Springboot医护人员排班系统vue
  9. rust木炭有用吗_【一点资讯】Rust语言2020调查报告发布:Rust 太难,生命周期更难...
  10. 一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下的问题