第094封“情书”:变量20190312PDGForDesignWorkPt1-TheBasics<Entagma>Houdini 2019

本文主要是介绍第094封“情书”:变量20190312PDGForDesignWorkPt1-TheBasics<Entagma>Houdini 2019,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

▉ 如果命运待你不公,不要去抱怨。努力去改— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】

72变

+e17cb.jpg

█ “ 在这善变的人世间,只有变化才是永恒的”

前言不搭后语

人在这个社会中,注定有些东西是抵死都无法改的,那我们就改能改的。


本节内容 
PDG的基础篇:创建&输出 


本节要实现效果
.....






20190312 PDG For Design Work Pt. 1 - The Basics1.png

今天是42岁
067周一

94
这是写给Houdini的第094封“情书”


❖我是geo流程图❖ 

image.png


❖我是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;

小节
提要

A

01

01 拷贝阵列  

B

02

02 P驱动点的朝向

C

03

03 创建PDG 

B

04

04 输出渲染PDG


原理
部分
使用软件:houdini17.5
原理
PDG应用原因/优势

⚪ PDG全称:Procedural Dependency Graph-程序依赖关系图。


----------(传统)-----------

⚪ 在houdini中一个典型的设置,我们通常按顺序执行这些步骤:

    1)初始值设置。

    2)烟雾模拟。

    3)模拟驱动实例。

    4)渲染引擎。 

image.png

⚪ 对于三个不同的初始值,我们需要一个接一个地遍历这三个结果变体。

    ○ 接下来,让我们假设我们的烟雾模拟运行5帧,然后我们可以驱动实例,我们必须等待这五帧结束以后。


---------(PDG程序依赖关系图)-----------

image.png⚪  这是一种确定“设置中某部分”由“设置中其他部分”控制的方法

⚪ 这会非常方便,尤其是如果我们的场景中的一部分是可并行化的。

⚪ 类似于实例,一旦找到它们各自的驱动pyro sim值,就可以并行运行这些实例。

    ○ 渲染引擎的多个实例正在运行,渲染引擎可以并行启动。

    ○ 这个过程中,最关键的是后台需要一些自动机制,它能够探测出场景中那一部分是由另一部分决定。它们是如何进行分支,如何互相影响,以及决定houdini何时在设置中开始工作。

⚪ 这中级书对于pipline和一些大的场景是最相关的,也有一些简洁的技巧,可以适应小范围的工作流程。


制作
部分
使用软件:houdini17.5


01  拷贝阵列


 ⚪ 节点 ⚪ 

image.png


❖  小目标  ❖

创建“抽象的形状”然后由几个参数来驱动

❖ 操作 ❖

obj层级

    A)搭建一个拷贝到点几何阵列 geo命名“sails” 

geo层级

    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

image.png

    A3)蒙皮:skin1

    A4)细分:subdivide1:Depth=2

    A5)法线:normal1

    A6)旋转:transform1 

    A7)圆:circle 

       Polygon;Division=3;

       Orientation=ZX 

    A8)拷贝到点:copytopoints  

image.png

02 P驱动点的朝向 


○ 节点 ○

image.png


❖  小目标  ❖

copy的orient放到point上,可以单独旋转copy

? 解决方案 ?

  A9)增加curveu属性:resample1

image.png

    a)curveu从第1个点~最后1个点值的范围:0~1。

  A10从中心指向外的法线:pointwrangle

v@N=normalize(v@P);

image.png

  A11)只保留点:add 

image.png

接下来驱动orientation

  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的取值范围

image.png        b)radiance函数是使用弧度而非角度

//--3 单个角度可以创建一个向量

vector angles = set(rotx,roty,rotz);

❖ 小目标 A1 ❖

“点的位置P”来决定“copy旋转”

?解决方案 ?

使用前面创建的curveu属性

//--7 创建滑动条,然后指向参数接口,再转换成开关

if(chi("Ramp_Over_Points")){

image.png

    angles *= chramp("Ramp_angle",f@curveu);       }

image.png

这里是抽象物主要驱动力之一

//--4 使用四元函数来转换,0=原始方向

vector4 rot = eulertoquaternion(angles,0);

//--5 用点法线*新的旋转矢量

o = qmultiply(rot,o);

//--6 输出属性

p@orient = o;

在copytopoint复制orient和实例中,使用四元数不是最简单的方法,但是更加安全。  



03 创建PDG 



○ 节点 ○

image.png



❖ 改变拷贝物形态 ❖

  A2)复制:Copy and Transform: 

image.png

❖ 小目标 ❖

让Copy中的旋转等参数动起来

? 解决方案 ?

在给定范围找出这些参数可能的排列

A)obj层级

     B)topnet: 

B)topnet层级

  B1) localscheduler: 

    ○ 它是一个驱动PDG和本地调度程序中分配工作负载。工作负载就在本地分发。

    ○ Working Directory设置为当前hip文件

  B2)wedge1:它会产生一个或多个属性的变体。

 ○ Wedge Count = 2;

    ○ 增加一个rxwedge,x轴旋转。

    ○ Start/End: -15~15;

image.png

        a)-15~15范围细分进“Wedge Count=2”

        b)这些值传递给创建的属性“rxwedge”

        c)复制“rxwedge”

  ○ 或者改变Wedge Type类型:value输入值

image.png

    ○ 或改变Wedge Type类型:value list列表

image.png

❖ 小目标a ❖

创建属性rxwedge驱动copy的旋转

? 解决方案 ?

A)geo层级

 A02)把属性拷贝进x轴: copy

image.png

B)topnet层级

 B03)复制wedge1:wedge2: 改name=rywedge

image.png

 B04)复制wedge2:wedge3: 改name=rzwedge

image.png

A)geo层级

 A02把对应的属性拷贝进xyz轴通道: copy

image.png

❖ 小目标b ❖

创建属性驱动copy的shear参数

? 解决方案 ? 

B)topnet层级

 B05)设置shearx属性: wedge4 

image.png

A)geo层级

 A02)拷进shearxwedge属性:copy 

image.png

B)topnet层级

B05)wedge4

    a)右键清理&重置node:

image.png

b)产生新图标,绿色点=两个任务

image.png

    c)两个绿色点中键:

image.png

B02)右键清理&重置node:wedge1 :快捷键:shift+V

     a)右键清理&重置node:有4个任务

image.png

b)点击wedge4的绿点,会出现黄色连线 image.png

     c)绿色点中键:可以看到shear与rx进行排列组合

image.png d)几种组合方式:

image.png


04 输出渲染PDG 


○ 节点 ○

image.png

❖  小目标  ❖

兑现PDG的结果

? 解决方案 ? 

B)topnet层级

    B06) ropgeometry1:

a)SOP Path:输入geo层级下的null输出

b)使用wedge id替换当前帧;`wedgeindex`替换“$F”

image.png

c)Shift+V输出PDG;

image.png


image.png

❖  小目标  ❖

渲染PDG

? 解决方案 ? 

A)geo层级引用PDG文件

B)topnet层级

    B06) 复制输出路径:ropgeometry1

A)GEO层级

   A14) 粘贴输出路径:file1

     ○ 关联复制,相对引用ropgeometry的文件路径

image.png


B)相机设置

        ○创建Camera。

B)topnet层级

 B07) rop mantra render节点


a)设置非常低质量:

image.png

b)@wedgeindex 替换index:

image.png

c)SHIFT+V :渲染

image.png


封面图片7.jpg
教程翻译自entagma的网络教程
下一节:: 
电子邮箱:oneinchtime@126.com

公众号:微信图片_20190607085947.jpg微信号


这篇关于第094封“情书”:变量20190312PDGForDesignWorkPt1-TheBasics<Entagma>Houdini 2019的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/531720

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。

Python学习1--变量和简单数据

经过这一段时间的学习,将Python相关的知识点记录下来,好记性不如烂笔头嘛。 本文主要参考了《Python编程从入门到实践》以及唐宇迪老师的教程《Python快速入门视频课程》,然后在博主http://www.cnblogs.com/liubinsh/p/6937409.html的基础上总结而成,特此感谢! 第二章 变量和简单数据类型 什么是变量 这里的message就是变量,

配置JAVA环境的时候,环境变量中administrator的用户变量和系统变量的区别?

迁移项目到新的服务器上: 需要Java运行环境时,经常要配置环境变量,如图所示 这里有administrator的用户变量(U),和系统变量(S), 那么,它们之间有什么区别呢? 简单的说,一个是当前用户使用,你用其它用户登陆,这个环境变量就不起作用了。 系统变量,是对所有用户都可使用的。 简单的说: 系统变量:不管以哪个用户名登陆到计算机都能使

不设临时变量交换a,b的值

常规的做法: int tmp = a; a = b; b = tmp; 不设中间变量的方法: a = a + b; b = a - b; a = a - b;