本文主要是介绍第094封“情书”:变量20190312PDGForDesignWorkPt1-TheBasics<Entagma>Houdini 2019,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
▉ 如果命运待你不公,不要去抱怨。努力去改变。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】
█ “ 在这善变的人世间,只有变化才是永恒的”
前言不搭后语
人在这个社会中,注定有些东西是抵死都无法改变的,那我们就改变能改变的。
❖我是geo流程图❖
❖我是vex代码❖
//----创建4个分量,告诉copy如何定向----
//--1 使copy的x轴指向点的法线方向--dihedral(a, b)旋转矩阵或四元数,将向量a旋转到向量b上
vector4 o = dihedral({1,0,0},@N);
//--2 三个分量
float rotx = radians(chf("Rotate_X"));
float roty = radians(chf("Rotate_Y"));
float rotz = radians(chf("Rotate_Z"));
//--3 单个角度可以创建一个向量
vector angles = set(rotx,roty,rotz);
//--7 创建滑动条,然后指向参数接口,再转换成开关
if(chi("Ramp_Over_Points")){
angles *= chramp("Ramp_angle",f@curveu);
}
//--4 使用四元函数来转换,0=原始方向
vector4 rot = eulertoquaternion(angles,0);
//--5 用点法线*新的旋转矢量
o = qmultiply(rot,o);
//--6 输出属性
p@orient = o;
小节
提要
01
01 拷贝阵列
02
02 P驱动点的朝向
03
03 创建PDG
04
04 输出渲染PDG
部分
⚪ PDG全称:Procedural Dependency Graph-程序依赖关系图。
----------(传统)-----------
⚪ 在houdini中一个典型的设置,我们通常按顺序执行这些步骤:
1)初始值设置。
2)烟雾模拟。
3)模拟驱动实例。
4)渲染引擎。
⚪ 对于三个不同的初始值,我们需要一个接一个地遍历这三个结果变体。
○ 接下来,让我们假设我们的烟雾模拟运行5帧,然后我们可以驱动实例,我们必须等待这五帧结束以后。
---------(PDG程序依赖关系图)-----------
⚪ 这是一种确定“设置中某部分”由“设置中其他部分”控制的方法
⚪ 这会非常方便,尤其是如果我们的场景中的一部分是可并行化的。
⚪ 类似于实例,一旦找到它们各自的驱动pyro sim值,就可以并行运行这些实例。
○ 渲染引擎的多个实例正在运行,渲染引擎可以并行启动。
○ 这个过程中,最关键的是后台需要一些自动机制,它能够探测出场景中那一部分是由另一部分决定。它们是如何进行分支,如何互相影响,以及决定houdini何时在设置中开始工作。
⚪ 这中级书对于pipline和一些大的场景是最相关的,也有一些简洁的技巧,可以适应小范围的工作流程。
部分
⚪ 节点 ⚪
❖ 小目标 ❖
创建“抽象的形状”然后由几个参数来驱动
❖ 操作 ❖
A)搭建一个拷贝到点几何阵列 geo命名“sails”
A1)圆:circle:
Polygon;Division=24;
Arc Type=Open Arc;Arc Angles=0 * 180;
A2)复制:Copy and Transform:
Total Number = 40;Rotate = 1.5*-3.5*5;
Uniform Scale=1.02
A3)蒙皮:skin1
A4)细分:subdivide1:Depth=2
A5)法线:normal1
A6)旋转:transform1
A7)圆:circle
Polygon;Division=3;
Orientation=ZX
A8)拷贝到点:copytopoints
○ 节点 ○
❖ 小目标 ❖
copy的orient放到point上,可以单独旋转copy
? 解决方案 ?
A9)增加curveu属性:resample1
a)curveu从第1个点~最后1个点值的范围:0~1。
A10)从中心指向外的法线:pointwrangle
v@N=normalize(v@P);
A11)只保留点:add
A12)创建四元数:pointwrangle
//----创建4个分量,告诉copy如何定向----
//--1 使copy的x轴指向点的法线方向--dihedral(a, b)旋转矩阵或四元数,将向量a旋转到向量b上
vector4 o = dihedral({1,0,0},@N);
//--2 三个分量
float rotx = radians(chf("Rotate_X"));
float roty = radians(chf("Rotate_Y"));
float rotz = radians(chf("Rotate_Z"));
a)设置xyz的取值范围
b)radiance函数是使用弧度而非角度
//--3 单个角度可以创建一个向量
vector angles = set(rotx,roty,rotz);
❖ 小目标 A1 ❖
“点的位置P”来决定“copy旋转”
?解决方案 ?
使用前面创建的curveu属性
//--7 创建滑动条,然后指向参数接口,再转换成开关
if(chi("Ramp_Over_Points")){
angles *= chramp("Ramp_angle",f@curveu); }
这里是抽象物主要驱动力之一
//--4 使用四元函数来转换,0=原始方向
vector4 rot = eulertoquaternion(angles,0);
//--5 用点法线*新的旋转矢量
o = qmultiply(rot,o);
//--6 输出属性
p@orient = o;
在copytopoint复制orient和实例中,使用四元数不是最简单的方法,但是更加安全。
03 创建PDG
○ 节点 ○
❖ 改变拷贝物形态 ❖
A2)复制:Copy and Transform:
❖ 小目标 ❖
让Copy中的旋转等参数动起来
? 解决方案 ?
在给定范围找出这些参数可能的排列
B)topnet:
B1) localscheduler:
○ 它是一个驱动PDG和本地调度程序中分配工作负载。工作负载就在本地分发。
○ Working Directory设置为当前hip文件
B2)wedge1:它会产生一个或多个属性的变体。
○ Wedge Count = 2;
○ 增加一个rxwedge,x轴旋转。
○ Start/End: -15~15;
a)-15~15范围细分进“Wedge Count=2”
b)这些值传递给创建的属性“rxwedge”
c)复制“rxwedge”
○ 或者改变Wedge Type类型:value输入值
○ 或改变Wedge Type类型:value list列表
❖ 小目标a ❖
创建属性rxwedge驱动copy的旋转
? 解决方案 ?
A02)把属性拷贝进x轴: copy
B03)复制wedge1:wedge2: 改name=rywedge
B04)复制wedge2:wedge3: 改name=rzwedge
A02)把对应的属性拷贝进xyz轴通道: copy
❖ 小目标b ❖
创建属性驱动copy的shear参数
? 解决方案 ?
B05)设置shearx属性: wedge4
A02)拷进shearxwedge属性:copy
B05)wedge4
a)右键清理&重置node:
b)产生新图标,绿色点=两个任务
c)两个绿色点中键:
B02)右键清理&重置node:wedge1 :快捷键:shift+V
a)右键清理&重置node:有4个任务
b)点击wedge4的绿点,会出现黄色连线
c)绿色点中键:可以看到shear与rx进行排列组合
d)几种组合方式:
04 输出渲染PDG
○ 节点 ○
❖ 小目标 ❖
兑现PDG的结果
? 解决方案 ?
B06) ropgeometry1:
a)SOP Path:输入geo层级下的null输出
b)使用wedge id替换当前帧;`wedgeindex`替换“$F”
c)Shift+V输出PDG;
❖ 小目标 ❖
渲染PDG
? 解决方案 ?
B)topnet层级
B06) 复制输出路径:ropgeometry1
A14) 粘贴输出路径:file1
○ 关联复制,相对引用ropgeometry的文件路径
○创建Camera。
B)topnet层级
B07) rop mantra render节点
a)设置非常低质量:
b)@wedgeindex 替换index:
c)SHIFT+V :渲染
完
公众号:微信号
这篇关于第094封“情书”:变量20190312PDGForDesignWorkPt1-TheBasics<Entagma>Houdini 2019的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!