第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

相关文章

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据