小工具:输出Houdini里节点间参数的差别

2024-09-06 23:08

本文主要是介绍小工具:输出Houdini里节点间参数的差别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

节点的参数影响了节点的行为。因此对于节点使用者来说,比较节点间参数的差异就可以明白其行为的差异了。

然而有些节点的参数数量实在太多,比较其参数间的差异会比较麻烦,在没有工具的情况下只能来回在节点间跳转才能比较出参数的不同。

我想,其实可以使用Houdini的Python模块写代码来自动比较并输出不同,这并不麻烦。最后如果能输出更易于阅读的格式(比如csv表格,或Markdown表格语法)会让比较更高效。

另外,我还假定了被比较的节点的类型都是一样的,因此这让代码更为简单——只需要按顺序访问参数就行了,因为参数的顺序一定是一样的。

比较两个节点参数差别

仅对比两个节点的代码是很简单的。
比如我放了两个box节点,并将缩放参数调整得不一样。

#两个对比的节点:
node1 = hou.node("../box1");
node2 = hou.node("../box2");#节点的参数个数
parmCount = len(node1.parms());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :if(node1.parms()[i].eval() != node2.parms()[i].eval()):message = "";message += node1.parms()[i].description()message += " " + str(node1.parms()[i].eval()) + " " + str(node2.parms()[i].eval())print(message)

则输出:

Uniform Scale 1.0 3.11

多节点比较

当考虑多节点时,就以第0个为参照,其他节点都和它比较,只要有一个节点不一样,就输出这个参数所有节点的值。
比如我放了三个box节点,第二三个各有一个参数和第一个不一样。

#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../box1"));
nodes.append(hou.node("../box2"));
nodes.append(hou.node("../box3"));#节点的参数个数
parmCount = len(nodes[0].parms());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :allsame = True; #参数是否都一样message = "";   #信息,仅在有参数不同时才予以显示message += nodes[0].parms()[i].description()        #参数名message += " " + str(nodes[0].parms()[i].eval())    #参照节点的参数值for j in range(len(nodes)-1):#参数不同,写上值if(nodes[j+1].parms()[i].eval() != nodes[0].parms()[i].eval()): allsame = False;message += " " + str(nodes[j+1].parms()[i].eval())#参数相同:省略值else:message += " -"if not allsame :    #仅在有参数不同时输出信息print(message)

输出:

Size 1.0 - 1.9
Uniform Scale 1.0 3.11 -

输出MarkDown表格语法

MarkDown表格语法也是在CSDN博客中可以使用的。

比如

| Syntax | Description |
| - | - |
| Header | Title |
| Paragraph | Text |

在博客中将会变为:

SyntaxDescription
HeaderTitle
ParagraphText

另外,当前的menu型参数会直接输出数字,可读性较差。
hou模块有接口读到menu:
在这里插入图片描述
当失败时会有异常。可以根据此判断是否是menu。


因此,最终代码修改为:

#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../box1"));
nodes.append(hou.node("../box2"));
nodes.append(hou.node("../box3"));#MarkDown表格前两行:
line1 = "| - | "
line2 = "| - | "
for n in range(len(nodes)):line1 += nodes[n].name() +" |"line2 += "- |"
print(line1)
print(line2)#节点的参数个数
parmCount = len(nodes[0].parms());#获得参数的值,如果是menu则会输出menu的值
def GetParmMessage(p):try:p.menuLabels()except hou.OperationFailed:return str(p.eval())else:if(isinstance(p.eval(),int)):return p.menuLabels()[p.eval()]else:return str(p.eval());#遍历所有参数寻找其中不同的值
for i in range(parmCount) :allsame = True; #参数是否都一样message = "| ";   #信息,仅在有参数不同时才予以显示message += nodes[0].parms()[i].description()                #参数名message += " | " + GetParmMessage(nodes[0].parms()[i]) + " |"   #参照节点的参数值for j in range(len(nodes)-1):#参数不同,写上值if(nodes[j+1].parms()[i].eval() != nodes[0].parms()[i].eval()): allsame = False;message += " " + GetParmMessage(nodes[j+1].parms()[i])+ " |"#参数相同:省略值else:message += " - |"if not allsame :    #仅在有参数不同时输出信息print(message)

将box节点的一个menu型参数修改下。
输出:

| - | box1 |box2 |box3 |
| - | - |- |- |
| Primitive Type | Polygon | - | NURBS |
| Size | 1.0 | - | 1.9 |
| Uniform Scale | 1.0 | 3.11 | - |

将这段直接复制到博客中就会变成:

-box1box2box3
Primitive TypePolygon-NURBS
Size1.0-1.9
Uniform Scale1.03.11-

在一个复杂的例子中尝试

Downloadable fabrics是Houdini官方关于Vellum布料模拟的一些展示性效果
在这里插入图片描述

工程文件可在这里下载。

我建立了一个默认的Vellum布料配置,然后尝试将其与当前的八个布料配置进行比较

#要对比的节点们:(以第0个为参照)
nodes = [];
nodes.append(hou.node("../default"));
nodes.append(hou.node("../vellumcloth6"));#Jersey
nodes.append(hou.node("../vellumcloth3"));#RainCoat
nodes.append(hou.node("../vellumcloth11"));#tulle with embroidery
nodes.append(hou.node("../vellumcloth15"));#Jeans
nodes.append(hou.node("../vellumcloth9"));#Velvet
nodes.append(hou.node("../vellumcloth8"));#Silk
nodes.append(hou.node("../vellumcloth_wool"));#Wool
nodes.append(hou.node("../vellumcloth10"));#Leather...

结果如下:

-defaultvellumcloth6vellumcloth3vellumcloth11vellumcloth15vellumcloth9vellumcloth8vellumcloth_woolvellumcloth10
Density0.10.040.250.040.40.020.040.040.4
ThicknessCalculate UniformCalculate VaryingCalculate VaryingCalculate Varying-Calculate VaryingCalculate VaryingCalculate Varying-
Edge Length Scale0.25-----0.2--
Normal Drag10.040.0-80.0-40.080.080.0-
Tangent Drag0.10.41.00.45.040.00.80.42.0
Stiffness1.0---100000000.0---100000000.0
Damping Ratio0.001---0.0001---0.0001
Stiffness1.00.15---2.0--2000.0
×1e-70.000 011110 0000.000 10.000 1-1
bendstiffnessscalemodeNo Scaling--Scale by Attribute-----
Damping Ratio0.01-0.0075---0.1--
Rest Angle Scale1.0-2.02.0-----
dobendstiffnessfalloff0-1------
Stiffness Dropoff0.085.048.085.055.085.070.085.055.0
bendstiffnessfalloffdirIncreasingDecreasingDecreasingDecreasing-DecreasingDecreasingDecreasing-
dobendstiffnessdropoffmin0-1-1----
Min Stiffness0.0-5e-06-0.0001----
Enable Plasticity011-11-11
Threshold10.00.115.0-35.01.0-0.0053.0
Rate1.00.250.3-5.02.0--6.0
Hardening1.00.3--5.02.0--0.5
Promotion MethodAverage---Use Target---Use Target
Tagdefaultvellumcloth6vellumcloth3vellumcloth11vellumcloth15vellumcloth9vellumcloth8vellumcloth_woolvellumcloth10

通过这个列表,就可以知道哪些参数有改变,即我需要关注哪些参数了。


问题记录:

运行python脚本的时候会有报错:
在这里插入图片描述
这个问题我在Python 排错UnicodeEncodeError ‘ascii’ codec can’t encode character 错误解决方法 - 授客 - 博客园找到了解决方法,即先运行这段代码:

import sysreload(sys)sys.setdefaultencoding('utf8')

之后就没有报错了

这篇关于小工具:输出Houdini里节点间参数的差别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时