-
Houdini程序化建模入门教程指南
软件安装 沐月心得 帮助英语不好的新人朋友系统学习HOUDINI,少踩国内垃圾教程的坑 橘柚笔记 Bilibili:o橘柚o 版本:2020/4/4增补2.0版 版本特点:对部分教程进行描述细化,新增了游戏pipeline模块的教程推荐 *群友Rosarita推荐流程 Rosarita:sop【geo、groom、heightfield、HDA】→vop【volume】→vex→dop【pop-pyro-flip-vellum-RBD】→render→USD →Python 入门包括UI、界面设置、操作指令、快捷键等教程地址:Houdini18.5完全入门教程 注:该老师水平一般,只看P1-P13就可以了,了解下基础界面即可, 也可以不看直接看下面的这个教程地址:【软件入门】Houdini在视觉设计中的应用 注:b站不全,作者自己贴了阿里云连接:https://www.aliyundrive.com/s/hUpUMfR8Ebi 群友推荐入门流程:https://docs.qq.com/pdf/DUkhOY01xeEdxWGF0 以下来自橘柚的笔记,docs下载请戳 https://pan.baidu.com/s/13rGdAk6kZSB0E0xQh-9LWQ SOP 一.入门基础知识 ①Houdini18官方入门教程 https://www.bilibili.com/video/av77323910 https://www.sidefx.com/tutorials/ 两个链接一样,B站是搬运,下面是官方。Houdini18出来之后,官方请Rohan Dalvi出的一系列基础教程,5个多小时,涵盖了sop中的重点:UI及基础、程序化建模基础操作、属性attributes、copy节点、vop、vex入门,还有最新的solaris、Lop模块介绍,如果没有houdini基础,入门先看它就对了。 ②CG猎人B站基础教程 https://space.bilibili.com/20391302 国人的教程,B站上的部分讲了一些基础和节点的知识,特别建议看一下他for循环完全讲解的部分,For循环是houdini中对于新手来说非常常用但是难以理解的部分,他讲的非常清楚。 ③Entagma系列 我的b站收藏里有很多,Entagma制作了很多小案例,可以看下面推荐的这个合集,从第一个开始看,从基础案例讲起。不过可能都比较跳脱,都是一个个小案例。所以建议当泡面番看,适合有空的时候随便看几个,看多了,再结合别的教程看多了,就融会贯通了。 https://www.bilibili.com/video/av28506607 ④群友推荐 ZPLUS HOUDINI SOP中文教程\sop 上:https://www.bilibili.com/video/BV1oZ4y1A7HZ 下:https://www.bilibili.com/video/BV16y4y1J7Kp/ Rohan Dalvi - 装饰设计建模教程【中文字幕】 :https://www.bilibili.com/video/BV1tt411p7sE 二.入门基础案例(偏影视流程) 这一部分是我觉得比较基础的案例,推荐的都是rohan dalvi的,他讲的特别好,咖喱口音听着很亲切,而且难度都不大。他的教程基本都是给入门的新手看的,在跟着做完之后,会慢慢融会贯通的。介绍上标注偏影视流程,因为它们都是直接把模型建出来然后渲染。游戏里面会多一些步骤,比如把模型写成点云,以及拆分UV,优化等。但是对于新手来说,用于熟悉建模流程还是不错的。 ①Rohan Dalvi houdini17.5从建模到渲染全流程 《 Rocket Bus》 https://www.bilibili.com/video/av64837970 简介: 1.Houdini中的简单物体建模(花、草等) 2.Houdini中多边形硬表面建模(车辆、公交站台等) 3.Terrain地形系统入门(Houdini中强大的地形系统的演示,很值得一看) 4.雾气,云的制作(体积的制作在houdini里十分方便快捷) 5.lookdev(讲解了简单的程序化纹理制作,还有灯光渲染,适合新手) 6.一些喷气特效(特效部分,可以作为了解) ②Rohan Dalvi houdini15浮空岛教程 链接:https://pan.baidu.com/s/1pa-8s1la-AOZ1fUpaae3EA 提取码:xtkb 这是我看的第一部houdini程序化教程,集中在植被、藤蔓的程序化制作以及vop程序纹理入门上,当时我是在完全没有houdini基础的情况下强行跟着做的,啃完之后就立即对程序化生成有了比较全面的了解,并根据里面的知识完成了我b站上那个巨人作品。但是这部教程版本比较旧,里面一些节点和写法都有比较大的变化了,建议可以对houdini有一定了解后再看。 ③Rohan Dalvi各种案例教程 这位印度大神出了很多完整案例的教程,可以挑自己有兴趣的看,我没有全看过。b站我的收藏里有不少他的完整案例。 https://www.bilibili.com/video/av20301958 https://www.bilibili.com/video/av20483608 ④AboutCG——Neroblack雪山场景、风格化场景 这两部都是houdini中进行场景制作及lookdev的教程,切片山脉那个重点讲解了hda的制作,国语的,而且价格还算公道,100块左右一部。如果觉得外语看的吃力,可以考虑看看这两个爽爽……入门级的,难度不高。 三.单独的一些程序化建模案例 拆分UV ①棕榈树(sop综合运用,copy) 这是一个棕榈树的程序化建模过程,基本流程就是把线拷贝成树叶,然后再拷贝成一团树叶……非常符合程序化流程,核心就是copy节点的训练,对于入门新手来说是个不错的练习。最后还有一点点redshift渲染,讲的不多。 ②矿物分型教程 https://www.bilibili.com/video/av50910681 https://www.bilibili.com/video/av51269184 这也是一部石头相关+材质贴图渲染的教程,看完CG猎人的for循环教程之后,对于这个教程的理解会容易很多。主要讲了用for循环对几何体进行迭代循环,形成比较复杂的矿石效果。就是一个for循环的应用教程,我那个巨人的身体就是这么做的。 ③Rohan Dalvi有机几何形建模教程 https://www.bilibili.com/video/av37990121 讲解了houdini如何制作这些重复、有规律并且稍复杂的模型,里面大量运用copy、lsystem来快速建这些有机的、有规律的模型,是很好的基础教程,建模方法值得参考,可以跟着它来做一些自己的hda。 ④Rohan Dalvi蛋糕建模 主要讲了运用vop的噪波纹理来建模,以及redshift渲染。影视行业新手可优先看。 https://www.bilibili.com/video/av13350535 https://www.bilibili.com/video/av13364773 这个案例是是VOP来制作程序纹理的入门,蛋糕表面的那些噪波是如何一下程序生成的。然后还有一些copy、动力学的知识,比如用copy做树莓,动力学做流油等。最后好好讲了redshift渲染。 ⑤陨石资产 https://www.yiihuu.com/a_8695.html Vfxforce团购里也有,很便宜,不过那是机翻。翼狐网这个应该是人工翻译,不过就很贵了,土豪自选-。- 这个是一个完整的数字资产的建模的教程,我以前不懂数字资产的时候,就是跟着它学会的。数字资产是houdini中很重要的一个概念,它允许你自己封装一些东西,然后以后就可以轻松调用。 并且这个教程还是面向游戏的,建立好程序化模型之后,还讲了高低模的烘焙。 最后用mantra程序化组合材质贴图,并渲染。 ⑥uv拆分 建模总是无法离开拆分UV的,这套教程详细讲了houdini中基本节点拆分UV,以及gamedev插件拆分uv的方法。在houdini18中,gamedev变成了lab。 https://www.bilibili.com/video/av29821314 四.游戏建模及pipeline相关(2020.4.4增补) ①Mixtraining影视和游戏中程序化建模 https://www.vfxforce.cn/archives/9702 讲了运用osm数据生成路网和楼房,一开始讲了一个简单的程序化的架子模型,并讲了导入UE4、变成钢体这样的流程。接下来讲解如何根据地图网站上下载的数据,把这些数据程序化地变成真实模型。本质上就是根据一些面片来程序化地建起一栋楼、路面等。 视野非常宏大,直接从大处着手来制作模型,然后渐渐细化,对我真的很有启发。 也是游戏行业很常用的osm生成大世界的基础教程。 ②Simon的一系列教程 2020年左右,houdini官方出了一些列simon讲师的游戏流程的视频,在官网教程里搜simon即可,全是游戏流程的建模,比较基础,着重使用gamedev快速出程序化效果,思路都很不错,绝对值得新人观赏。这些教程b站都有搬运,大家可以自己找,不过官网可以下到工程文件。 https://www.sidefx.com/tutorials/ ③Houdini结合ue4 u3d制作写实赛车游戏(重点推荐) https://www.bilibili.com/video/BV1zJ411E7My 真的就是个手把手教你入门游戏流程的好教程,针对纯新手,教你建模,生成hda,导入ue u3d,最后完成一个完整的游戏场景效果。 里面涵盖了houdini节点入门/程序化建模/vex入门/地形系统/houdini engine/ue4 u3d的基础等知识。 而且原教程10美元就能买到,足足17个小时,得到里面的工程文件。 这个教程真比国内的所有教程网站良心x倍了…… 五.地形系统 ①Houdini17 地形教程 https://www.bilibili.com/video/av49533798 我看过的最容易理解的houdini Terrain地形系统的教程,可以帮你很快上手地形制作。 ②Houdini17.5地形与UE4联动教程 这个不仅讲了地形的制作办法和逻辑,还讲了地形如何封装及制作散布,导入UE4。游戏入门流程。 六.Lsystem(可当兴趣,先看别的) Lsystem可以比较方便快捷地制作植物的骨架部分,然后再连上叶子花朵,就是比较逼真的植物了。影视中可以做特效,植物生长等,用于游戏的话,也可以用程序化生成的骨架来制作低模, 但是现在游戏中做植物用的更多的应该是speedtree,两者相比的话我觉得做单独的一棵树还是speedtree更快,lsystem可能更适合大批量,不重复的,精度要求不是那么高的远景树木批量生成。 推荐两部教程,第一部我放在上一个视频里了。 但是lsystem的优先级不是那么高,万一项目中运用到了,再学也不迟,其实是个独立的模块,可以先略过。 第二部是Tyler Bay大神的,这个教程不仅讲了lsystem的使用,还讲了如何通过节点把它转化成真实可渲染的模型,拆分uv,应用贴图……非常完整。而且它是从入门讲起的,非常适合新手。 VFXforce往期团购可以找到。 七.Vop/Mantra程序化纹理(游戏从业者可先略过,直接学vex) https://www.bilibili.com/video/av69229668 https://www.bilibili.com/video/av36998969 讲解了houdini中使用vop制作程序纹理,吃透这个教程,可以彻底理解vop的原理了。Houdini中各种渲染器的本质也是vop的逻辑。 并且houdini中vop的逻辑和UE4的材质逻辑、SD的材质逻辑都是比较像的,有另外两个基础,学这个会更快。有这个基础,学习另外两个也更快。 Render(影视行业,游戏不看) ①Patreon – Saul Espinosa Tutorials – Redshift 这个教程太强了,但是也太长了,里面保守估计有大几十小时内容。讲了CG生产的各种软件,到houdini中用redshift渲染,包含speed tree如何导入H、Quixel的那个扫描材质库如何导入H、redshift渲染器的使用方法、地形如何用redshift渲染等等等等……还是houdini17.5版,非常新,慢慢品吧。 https://www.vfxforce.cn/archives/10363 ②Houdini17.5 -- Mantra Tutorial 虽说下版本要有完全的karma渲染器了,但我们也不知道到底是不是基于mantra做优化的,所以要了解mantra原理,可以看看下面这个吧。我还没看过,我就是先马一下。因为版本比较新。 在我的b站收藏里。 VEX(houdini必学) 一.入门 ①B站捷佳系列 讲的非常非常好,由浅入深,萌新们不要再问VEX怎么入门了,看他的教程就对了,国语的。当时看他的教程入门,因为觉得讲的太好了,甚至让我泪流满面。 ②Entagma——VEX101 https://www.bilibili.com/video/BV1Pq4y147kG 同样是VEX入门教程,从基础语法讲起,到后面的案例都很有意思,我当初学习的时候就是对后面的案例每个多做几遍,自己默做,渐渐就熟了。配合捷佳食用更佳。 二.中级 ①VEX制作树木hda资产 https://www.bilibili.com/video/av19764667 非常屌,非常屌,讲了超级多VEX的使用技巧,而且比较复杂,有难度,适合中级。啃完之后,你可以做出一个简单的类似speedtree的树木生成器。 ②捷佳——python城市 https://www.bilibili.com/video/av20882458 根据地图生成城市群的一个非常好的案例,虽然名字是python,但是python在其中只是实现了批量创建节点并导入的功能。大多是用SOP和VEX以及一点点动力学解算,去控制楼房的分布,实现一个城市群,有不少实用技巧。 …- 0
- 0
- 4.2k
-
【Houdini】VEX - 基础篇(捷佳的教程笔记)
说明教学视频笔记参考# 数据类型 常用数据类型 //常用数据类型 int a_ = 1; //变量名可以用字母和下划线。一些整数类型:21, -3, 0x31(16进制), 0b1001(2进制), 0212(8进制), 1_000_000(长数字可以用下划线分隔) float _b1= 2.1; //变量名可以用数字,但数字不能放在最前面,字母下划线随意 vector2 c = {1.1,2.0}; //向量(和矩阵)的每个分量都是浮点类型 vector d = {2.0,3.3,4.1}; //vector代表三维向量,(在向量中使用最频繁,故作简写处理) vector4 e = {3,5,7,9}; //不必刻意写成{3.0,5.0,7.0,9.0},这点与C不同 matrix2 f = {2,4,6,8}; //vector4(四维向量)和matrix2(2*2矩阵)结构相似,都是四个元素,所以为了区分二者,不建议用这种方式写2*2矩阵,应当采用下面的形式 matrix3 g = 1,2,3},{4,5,6},{7,8,9; //括起来的表示一行,或者采用下面的形式更方便阅读 matrix h = 1,1,1,1}, {2,2,2,2}, {3,3,3,3}, {4,4,4,4; //matrix代表四维矩阵,四维矩阵和三维向量一样,(在矩阵中使用最频繁,故也作简写处理) matrix h = {1,2,3,4...} //中间的大括号可以省略,只不过为了方便阅读,你还是加上吧。 string i =hello world; //也可以用单引号'hello world' 类型转换 有的会自动转换,比如点位置,最后都会变成浮点 变量类型(要转化的变量) 如float(100)-> 100.0 变量类型(函数( )) 如float( rand(@ptnum)) 示例1 @P.x = int(@P.x);//int()会将x坐标从浮点转为整数, //重新赋予给@P.x后又会自动转成浮点 //printf('%s\n',int(@P.x)); print_once(sprintf('%s\n',int(@P.y))); //sprintf('%s\n',变量数据) 将变量转换成字符串并返回 //print_once(字符串,....) 相同的字符串只打印一次(这里官方的API都没看懂) //print_once(sprintf('%s\n',变量数据)));干脆就按照就这个用得了 示例2 //@P +=noise(@P)*chf('amp'); //这里'+='后面的代码求出的是浮点,在加法运算时自动被转成向量了 @P += vector(noise(@P))*chf('amp'); //noise()可以返回浮点也可以返回向量, //vector(noise())明确让它返回向量 示例3 //@Cd = length(point(1,'P',@ptnum) ); @Cd = 0.3*length(vector(point(1,'P',@ptnum) ) ); //length()返回浮点,但参数可以有多种类型,如vector2 vector vector4 //point()返回点属性,点属性有多种类型 //length()不知道point()会返回什么类型,所以报错Ambiguous call 运算符 printf('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n'); //重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点***** int iii = 5; int ii = 2; float ff = 5.2; printf('0 %s\n',iii*ii ); //整数之间运算结果还是整数 printf('1 %s\n',ii*ff ); //只要有浮点,结果就是浮点,不论在运算符左边右边 //重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点***** //重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点***** vector4 a = {5,8,2,4}; printf('2 %s\n', a.a );//向量的每个分量可以用 xyzw 或rgba 或0123 获取 printf('3 %s\n', a[1]); vector2 b = {6,7}; printf('4 %s\n', b.v );//二维向量可用uv xy获取 matrix d = {3,6,8,7, 1,5,4,2, 2.2,1.9,5.6,8, 77,32,17,32}; printf('5 %s\n', d.rx);//矩阵也可用xyzw rgba获取 //例如xy(第一行第二列)wb(第四行第三列)rx(第一行第一列) //重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点*****重点***** //向量(包括矩阵)与标量(浮点或整数)相加咸乘除还是向量,每个分量都会进行运算 printf('6 %s\n',{1,2,3}*5 );//不论正反 printf('7 %s\n',6/{1,2,3} ); matrix c = 2; printf('8 %s\n', 5*c ); printf('9 %s\n', 5-c ) ; //printf('9.5 %s\n',2.0/c );//不能用 标量除以矩阵 //切换向量的元素顺序,相当于set vector e = {3,2,4}; printf('10…- 0
- 0
- 2.2k
-
【Houdini】 表达式与VEX变量
https://github.com/benjamin-white/vex-and-hscript-reference 个人常用的几个 定义 Expression-当前几何体 Expression-其它几何体 VEX 包围盒中心点 $CEX $CEY $CEZ centroid(“../node”, id) —— 0-X 1-Y 2-Z getbbox_center() point数量 $NPT npoints(“../node”) @Npt, npoints(0) primitive数量 $NPR nprims(“../node”) @numprim, nprims(0) point id $PT @ptnum primitive id $PR @primnum vertex id $VTX @vtxnum vertex数量 $NVTX @numvtx, nvertices(0) point颜色 $CR $CG $CB @Cd.r @Cd.g @Cd.b point位置 $TX $TY $TZ @P.x @P.y @P.z point法线 $NX $NY $NZ @N.x @N.y @N.z 包围盒 $BBX, $BBY, $BBZ bbox(“../node”, id) getbbox_size(), getbbox() 完整表单:有空再翻译 Global Variables Mostly taken from the SideFX docs The global variables are commonly, though not exclusively, used in expressions rather than wrangles. Geometry $BBX Bounding box x. $BBY Bounding box y. $BBZ Bounding box z. $SIZEX Bounding box x length. $SIZEY Bounding box y length. $SIZEZ Bounding box z length. $PT Index of a point. $CEX Centroid x. $CEY Centroid y. $CEZ Centroid z. $XMIN Bounding box corner. $YMIN Bounding box corner. $ZMIN Bounding box corner. $XMAX Bounding box corner. $YMAX Bounding box corner. $ZMAX Bounding box corner. Particles $AGE Number of seconds a particle has been alive. $LIFE $AGE normalised to between 0 & 1. Playback $FPS Playback speed in frames per second (as set with the Playbar controls). $FSTART Frame number of the first frame of animation (as set with the Playbar controls). $NFRAMES (the number of frames in the animation) = $FEND - $FSTART…- 0
- 0
- 1.2k
-
【Houdini】100个技巧与陷阱
吕大的教程 视频 文档 1、使用@语法对节点的group参数进行控制时,不要加数据类型,且比较符号两边不要留有空格符 2、在使用voronoi与boolean联合切割碎块时,voronoi出来的内部表面应该用subdivide节点添加精度,而不要用divide,否则boolean结果有误 3、FEM使用pintoanimation属性进行约束时,必须加数据类型,否则无法读取约束,而wire对象则不用 4、在使用属性控制材质时,即使在指定完材质球后,即在material节点之后,也不要删除该控制属性,否则渲染器无法调用该属性,因为任何属性都在解析材质之前处理 5、使用pcfilter获取属性时,不要用它获取整数类型属性,会有错误 6、使用vex/vop改变pack对象的方位时,不能用矩阵乘等传统方法,应该使用setprimintrinsic()函数 7、如果使用animated属性导入变形刚体,它只能导入pack之后的运动,即pack的packfulltransform中的变换数据,因此它只能导入移动和旋转两种运动,不能设置变形,变形需用deforming 8、在对vellum进行weld约束时,不要用voronoi fracture做布料碎块,可能会产生焊接不上的错误,如果发生错误可以在碎块后加fuse对齐,即可修正错误 9、当使用pop spin对粒子进行旋转控制时,会产生覆盖掉粒子z轴和速度v对齐的问题,并且将粒子局部坐标系重置,因此需要手动初始化orient 10、使用矩阵进行复合变换时是顺序操作,而用四元数进行复合变换时是逆序操作 11、如果串联pop粒子网络,则pop节点仅仅影响最近的上游粒子流(即使分组控制也不行),此时应将pop节点使用merge进行并联,或者连在解算器pre-solve端口 12、dop数据是根据apply data从左到右提供的顺序来提供顺序的,因此如果有数据在某个层级出现重名,则左边连入的数据会覆盖右边连入的数据 13、用sop geometry导入外部几何体时,因为使用其内部几何体覆盖Geometry数据时,set always会产生错误,所以应该导入外部几何体,即可顺利覆盖 14、top多线程输出dop时,应将其缓存关闭,并将rop geometry的All Frames In One Batch打开,以确保一个dop全部序列的输出只在一个线程内完成 15、noise、onoise、turb等函数时,对整数采样时结果为0(表达式的noise为0而vex不为0),若要避免此问题,应选择其它函数,如snoise、anoise、xnoise等 16、不要输出bgeo格式的pack序列模型,应解开为非pack标准模型后再输出,否则输出会极慢,且文件量会非常大,pack形式的动态模型应输出abc格式 17、solver中要输出input1模型,并且保留属性累积功能,可以在input1下的wrangle中累加上Prev_Frame节点中的对应属性 18、用自定义属性修改材质库中的物理材质球时,应进入内部修改,不要在mat下直接修改,否则渲染出错 19、cluster流体与刚体合并后刚体消失,将刚体合并在流体右侧即可,若要交互可手动指定碰撞关系节点 20、dop会对pack刚体添加rest属性,所以在unpack时应排除rest,以防止原始rest被覆盖 21、flip solver的粘性与密度缩放参数,只影响效果不影响属性值 22、sop solver中可以加入output节点来确定sop solver的节点输出位置,而并不依赖于切换到哪个节点,如果没有output节点,则切到显示标记的节点,此特性和HDA或Subnet一致 23、使用点云获取相邻点序号与距离时,不用事先存储属性,或者使用distance函数计算距离,pcimport()函数直接内置了point.number与point.distance两个数据 24、cone约束关系同样有restlength参数,默认为1,所以为了初始稳定,需要设置正确的restlength属性值 25、flip的空气压力计算功能需要关闭流体框自动匹配,且不支持solve pressure with adaptivity压力的自适应计算优化。Narrow Band功能除了需要基本的surface场外,也要记得流体框必须封闭,且reseed必须打开 26、flip解算应记录dopnet缓存,否则变形刚体碰撞是不准确的,但由于flip占用资源巨大,此时可以将flipobject上的Allow Caching关闭,即flip不记录缓存,而其它动力学对象记录缓存 27、wrangle中的代码为了提高执行效率,可以根据需要使用return语句提前结束代码块的执行。而在参数中写python代码时,return语句不能写在第一行,写Hscript代码时,return语句必须放在一对花括号{}中 28、若要在python shell中执行Hcript Textport中的命令,只需在命令前加% 29、变换方向向量不同于变换坐标向量,前者必须分别变换向量的起点与终点,再确定出新的向量 30、粒子系统是以pscale作为半径进行碰撞检测的,所以在粒子解算前,先检查pscale的设置是否正确 31、用volume source导入自定义向量场控制速度时(支持volume与vdb),应连在flip solver的input3上,并且sop下的流体框尺寸应该和flip的框大概相同,过小会有问题 32、unpack会自动根据原始的name属性值来打断点,打断不同name值表面之间的点 33、粒子包面时,应该经过fluid compress流体压缩节点,否则narrow band情况下不能包出完整的表面 34、白水如果导入的surface是vdb类型,则使用maximum half-width设置其计算范围,如果是volume,则该项必须关闭 35、白水的repellant需要volume source导入vdb的surface与vel,而不能是volume,所以最简单的方法就是flip出来的数据加fluid compress 36、做海洋置换时,将mask与pointmask一并输出到频域文件中,海洋材质的spectrum geometry参数导入即可,无需设置mask geometry,遮罩动态也都在频谱文件中。 37、海洋材质置换时,ocean foam要关闭displace particles,才可与置换匹配 38、白水内置碰撞物必须是sdf,不能是几何模型 39、海洋变形要产生条纹波浪,可以将scale设为0,将wave instance下的wavelength调大,即可看见效果,也是ocean wave节点的功能。同时,particle fluid mask节点的remove non-spectral waves选项可以用来屏蔽掉这种条纹波浪 40、使用发射器发射多流体框的流体时,场名和序号之间应该加下划线,且序号应从零开始,如:density_0、density_1... 41、volume值为零的区域,转出的vdb分辨率为零 42、如果使用flip的dual rest,应该使用dopimportfield导回,因为它会创建rest*_ratio,否则需要手动设置 43、创建多流体框时,应勾选创建时解算,以使流体框自动匹配初始时可以正确匹配流体 44、dopnet直接导回sop是不带速度的,所以应该用dop import及相关节点,同时dual rest的rest*_ratio是在dop import field阶段产生的 45、对于Cd场,没有Alpha,则不能用blend以外的其它叠加方式,否则vel不能正确传送Cd,但可以用gas advect手动指定对Cd的传送 46、chop的foreach的channel group参数,不支持[]语法,也不能直接写,应该chan这样表达,循环变量用ch读取里面For节点的Current Loop Index参数即可 47、修改系统日期可能导致Houdini图标变成黑块 48、Pack刚体hard约束关系,可以通过设置两个约束点之间的相对逆变换来控制刚体正向变换运动,此技术可实现刚体的塑性变形,但是现在更提倡使用soft约束 49、在volume wrangle中根据voxel位置创建点时,需要存在场的调用,否则无法创建出点,如:@density=@density(不改变输入密度的基础上创建点) 50、设置自定义菜单时,尽量不要修改系统默认的,可以将xml放置到$HOME/houdiniXX.X目录下,这样菜单会自动与系统默认菜单合并 51、通过lvar函数调用表达式变量时,应该使用@调用的形式,不要用$的形式,比如在使用全局时间变量时,lvar("T")是报错的,而lvar("Time")是正确执行的 52、用python写参数时,将计算结果赋值给一个变量,并将该变量用return关键字返回即可,如果第一行便出现return语句会报错 53、如果帮助提示没有了,将修改$HOME/houdiniXX.X目录下的common.pref文件内容helpTags := 1; 54、分支曲线经过resample后会产生新的pt点,即在分支点处线会断开 55、使用内置Mocap Biped时,应关闭其In-Place功能,如需原地动画则应在out的agent节点的输出动画素材中设置,如果不输出动画素材,可在sop的agent上设置,否则步迹锁定出错 56、crowd群集作为刚体时,如果是和其它刚体一起连接到multisolver上的,则应连在其它刚体对象之前 57、群集动画中,在用vex自定义force或v时,如果刚体解算器在群集解算器之前,则crowd state节点的rbd ragdoll应设为ignore方式,如果刚体解算器在后,则调整force或v的vex应该在刚体解算器之前且在crowd solver之后,因为crowd solver会更新掉force和v,总之,bullet solver应该使用没被crowd solver修改的force或v 58、模型的长度单位不应超过万级,万级以上的单位会因为数值误差而产生扭曲,模型精度越高扭曲越明显(obj级没有问题),因此在极端情况下,是不能按照真实比例与位置来设定的 59、primuv()不支持读字符串属性,但可以间接通过读预存的点序号属性,再用point()读取 60、现在可以直接在cop中使用Inter Denoiser与Optix Denoiser两大AI降噪工具 61、置换渲染速度会随着模型精度的提高而明显变慢,所以应权衡好模型精度,也可适当降低材质率,以提升渲染速度并减少内存 62、做经典材质(非pbr)透明度时,应关闭渲染器的stochastic Transparency以降噪 63、刚体和flip碰撞时拓扑尽量不要改变,否则容易引起flip的碰撞不稳定 64、mantra输出exr时,每层是渲染完rgba后再去分别保存各个材质层到图片文件的,所以如果不分材质层,则输出会快很多,因为省去了保存各层图片的时间,尤其是大尺寸图片尤其明显。 65、导入sim缓存用$SF,不要用$F 66、wrangle中chramp对于输入默认没有0-1的限制,而vop有0-1限制 67、intersect对四边面的精度没有三角面高,如果映射出错应该转成三角面 68、稀疏解算,如果让流体框初始时包住发射器,可以将volume source中的Enlarge Fields to contain sources打开 69、pack刚体更新w有效,但直接更新orient无效,而粒子更新w无效,但更新orient有效 70、可变的整型point属性在材质中无效,可变的整型prim属性在材质中有效,可变的浮点类型point与prim属性在材质中均有效,但可变的浮点类型point与prim属性在pack几何体的材质中均无效,此种情况应该使用材质样式表方法 71、python在执行输出节点的pressButton函数时,是等待输出全部结束后,再去执行后面的语句 72、pyro sop发射器如果初始不发density,则烟火会滞后于发射器模型,因为材质中density对flame有校正操作 73、agent edit对关节的矫正,在crowd source中无效,应该使用motion clip导入新动作剪辑,crowd source中可识别 74、flip开启张力后,即可通过surfacepressure自定义流体压力,以实现自定义受力 75、vex不支持递归,但可以结合foreach的feedback模拟 76、可以在vop节点的code栏中查看对应的vex代码 77、提高motion factor,可提速景深与运动模糊 78、用gas blur做流体融合时,需加gas extropolate,且外推距离和模糊距离要一致 79、几何体存在Degenerate Primitives蜕变模型时,会导致渲染及其缓慢,所以应先将其清除 80、材质中读取点云文件,只能在硬盘中读取,op:路径方式无效 81、解算中flip液面降低时,在不提高解算精度的前提下,可以采用gas equalize volume或者注入散度来解决 82、在用点云搜索最近相邻点时,pcfilter不能读取整数类型的属性,此时可用pcimportbyidxi函数代替 83、PBR物理材质中,如果需要设置材质优先级,需将mantra中的总开关Enable Absorption and Nested Dielectrics打开 84、可以借助工具架的python或Hscript代码做hipnc到hip的转化 85、可以使用hou.ui.addEventLoopCallback()函数获取Houdini的事件循环,频率大概是50ms 86、Boolean运算尽量不要包含自相交表面,否则会极大提升出错概率 87、如果想用python控制font节点的输出字符串,可以先打个关键帧,再change language to python后即可,输出结果应该用return语句返回 88、在视图中,根据点的选择顺序,将点序号添加到字符串中:hou.ui.paneTabs()[1].selectGeometry(ordered=1).selectionStrings() 89、obj下如果使用帧表达式变量控制变换参数,应该使用$FF而非$F,否则运动模糊渲染无效 90、hard约束关系除了用于bullet刚体,也可用于wire线动力学的约束设置 91、多个流体框转为一个框,volume可用volumesplice,vdb可用vdbcombine的Flatten All A的Add方式,两种类型也可用feedback foreach手动合并 92、用xyzdist方法将点吸附在多边形表面,会有大量点分布在顶点和边上,此现象是正确的计算结果,如果要减少在边上的分布,应该增加模型精度 93、在detangle的previous position中输入各个部分的中心位置点属性,即可将各个部分推开,当然推开距离不能过大,否则模型变形严重,但可在feedback中迭代来缓解 94、如果在Houdini中使用当下流行的机器学习库,应该安装python3.x版本的Houdini 95、如果海面模型尺寸大于海洋频谱节点的Grid Size参数,则会在Grid Size边缘产生接缝,波浪较大时,接缝尤其明显,所以理想设置应该让海面模型尺寸小于Grid Size 96、使用trail连线时,点序号应该稳定,复杂连线更建议add或者vex 97、出于性能考虑,能用foreach则不用copy stamp,能用其它方法则不用foreach,但如果可以compile foreach并行计算,则应该具体评估速度后,再选择哪种方法,对于普通sop网络也建议使用compile block提速 98、vex应该主要用于密集型属性计算以及模型创建方面,python应该主要用于脚本处理方面,传统表达式应该主要用于节点之间通信方面 99、浮点数或者坐标向量可以使用lerp插值,方向向量应该使用slerp插值 100、如果显卡过旧,导致无法正确打开houdini,则可以在操作系统环境变量中添加HOUDINI_OCL_DEVICETYPE变量,其值设为:CPU- 0
- 0
- 1.2k
-
【Houdini开发】工具:HoudiniExprEditor
Houdini 表达式编辑器允许您为所有类型的表达式设置外部文本编辑器。如 Vex 片段、python 代码、HScript。它使用文件观察系统来实时跟踪代码更新。它不会冻结 Houdini,您不必关闭编辑器即可查看应用于参数的更新代码。还兼容自定义 Python SOP 节点源代码。 兼容性 Houdini 15、15.5、16.0、16.5、17.0、17.5、18.0、18.0、18.5、python3构建 由于那个网站没有科学上网不太好下,所以发布此文章。 新版本可以直接配置额外编辑器了 19可以,其他版本没试过 转到C:\Users\%USERNAME%\Documents\houdini19.0,在 MAC OSX 上为:~/Library/Preferences/houdini/19.0) 目录 有个houdini.env,用记事本打开 加入环境变量(下面填自己的代表编辑器位置。记得路径用斜杠/) EDITOR = D:/software/study/Microsoft VS Code/Code.exe 安装 转到 $HOME/Houdini16.0 文件夹(例如,在 Windows 上:C:\Users\%USERNAME%\Documents\houdini16.0,在 MAC OSX 上为:~/Library/Preferences/houdini/16.0) 解压 我是解压到自己的文件夹(my_scripts) 环境变量 同级目录 有个houdini.env,用记事本打开 在底部添加如下代码。记得把文件路径改成自己的,然后用两个斜杠\\ 或者用/ C:\\Users\\YL\\Documents\\houdini19.0\\my_scripts\\HoudiniExprEditor_v1_4_8 C:/Users/YL/Documents/houdini19.0/my_scripts/HoudiniExprEditor_v1_4_8 HOUDINI_PATH=$HOUDINI_PATH;C:\\Users\\YL\\Documents\\houdini19.0\\my_scripts\\HoudiniExprEditor_v1_4_8;& 配置 重启houdini 编辑-首选项-设置额外编辑器 选择VS code D:\software\study\Microsoft VS Code\bin。找到code.cmd 完成! 此时,所有额外编辑器打开,都可以使用vsc了 文档 要在外部编辑器中编辑您的表达式或代码,只需单击一个参数,然后转到 Expression => External Expression Editor: 如果您没有设置任何编辑器,它会要求您选择一个: 您可以通过将系统上的环境变量 EDITOR 设置为有效的可执行路径来设置编辑器。或使用“编辑 => 首选项 => 设置外部表达式编辑器”菜单。编辑器设置路径保存到您的 $HOME/houdiniXX.X/ExternalEditor.cfg 文件中。 你的编辑器会出现,在那个例子中,我选择了安装了VEX 语法插件和Python 插件的Visual Studio Code。如果保存文件,代码会自动更新,无需关闭编辑器,也不会冻结 Houdini: 您可以看到它创建了一个遵循该名称格式的文件:%node_id%_%node_name%_%parm_name%.%expr_type_file% 它为 vex 代码创建一个 .vfl 文件,为 python 创建一个 .py 文件,为其他字段(hscript)创建一个 .txt。 您可以通过将环境变量“EXTERNAL_EDITOR_TEMP_PATH”设置为有效的文件夹路径来设置文件的保存位置。否则将使用系统的默认临时路径。 您可以使用菜单删除参数与其文件之间的链接:Expression => Remove File Watcher。请注意,它不会删除该文件。 如果资产包含额外的部分 (python),例如 OnCreated、PythonModule、自定义部分等...您可以像表达式一样在编辑器中编辑这些部分。python sop源代码也是如此: 变更日志 v1.4.8: 现在使用 $HOUDINI_USER_PREF_DIR 保存配置文件。 添加对 .cl 文件 (opencl) 的支持。 v1.4.7: 错误修正:编码错误 (py3) v1.4.6: 错误修复:修复了 $STR_EXPR 在外部编辑器中打开时自动展开的错误。 v1.4.5: 新功能:增加对货架工具版的支持。 错误修正:删除观察者后,观察者文件未正确清理。 v1.3.4: 添加对 python 3 的支持(在 Houdini 18.0 技术预览上测试)。 在已删除的节点上调用时对 wather 的小错误修复。 v1.3.3: 错误修复:修复绑定清理过程中的崩溃。 v1.3.2: 添加新菜单项:Windows => External python source editor,在外部编辑器中编辑会话的 python 源代码。 v1.2.2: 错误修复:修复了在资产的 UI 中的参数引用时更新资产的 python 模块时可能发生的崩溃。 v1.2.1: 支持资产额外部分版本(PythonModule、OnCreated、自定义部分等),仅支持 python。 v1.1.1: 错误修正:文件不再是不必要的删除。 特点:支持Python SOP节点源码 v1.0.0: 首次发布- 0
- 0
- 1k
-
【Houdini】如何导入abc文件
https://www.bilibili.com/video/BV1zW411C7Mv?p=11 方法1(不推荐) File - Import - Alembic 缺点:会自动产生很多层级,不易修改 方法2 自己新建alembic节点,选择对应文件即可 其他说明:稳定撒点 导入后,默认是primitive,如果想获取面、点属性,请勾选下面的设置 abc模型是缓存,相当于每一帧都不一样 如果是相同拓扑,可以用timeshift获取一帧数据,并把XX属性(比如area)复制一份,这样每一帧的XX属性都一样 然后scatter基于area撒点 完事- 0
- 0
- 735
-
-
【Houdini节点】Group组
每个point、primitive、edge、vertice等都有不同的属性,而group(组)也是其中属性之一。 视频 图示 说明 为啥示例不放图?因为放图会影响你的想象力,请自行脑补 Group 又名:group create 说明:把point、primitive、edge、vertice划分为组,还可以与同名组做布尔 输入:point、primitive、edge、vertice 输出:带以上信息的group 选择方式:strong>手选、表达式(@P.y>0)、- 0
- 0
- 704
-
【Houdini插件】Magascans / Bridge导出插件
[sc name="zhuanzai" author="quixel.com" link="https://help.quixel.com/hc/en-us/articles/360002427238-User-Guide-Megascans-Plugin-for-SideFX-Houdini" ][/sc]. 概述 Houdini 的 Megascans 插件允许您在 Houdini 中单击一下即可自动设置 Megascans 资产。 插件兼容性 Windows、Mac 操作系统、Linux Houdini 17.5、18 和 18.5 它目前仅支持以下最新版本的 Houdini 渲染引擎和着色器设置: Mantra Mantra 原则着色器 Mantra 三平面着色器 阿诺德 标准表面 标准三平面 ❗注意:如果要为导入的纹理create .tx 文件,请使用 Houdini 的 Arnold 菜单中的更新 TX 纹理选项。这将为您的 Megascans 库中资产文件夹中的纹理创建 .tx 文件。 红移 红移材料 红移三平面 Renderman Pixar表面 Pixar三平面 ❗注意:目前仅支持 Renderman 22。即将支持 Renderman 24(在 Houdini 18.5 中)。 Octane Universal Material Universal Triplanar 它还提供以下附加功能来加快您的工作流程: 地图集分裂 资产分散 为 3D 资产设置的 LOD 将动作应用到 Plant 资产 如果您使用 Houdini Solaris 和以下渲染器,则能够将 Megascans 资产导入 USD 阶段: Karma 阿诺德 Renderman ❗注意:建议进入Houdini视口的“显示选项”(在视口中点击“D”)并关闭“置换”以获得最佳性能。 安装 插件安装是 Bridge 导出设置的一部分。这些设置是全局的,一旦设置好,就不需要经常更改。 您可以使用以下任何一种方法安装插件: 首次在计算机上安装 Bridge 后,您可以在启动 Bridge 时设置该插件。 通过导出设置。 通过编辑菜单中的管理插件选项。 ❗注意:在安装插件之前,请确保 Houdini 已关闭。 刚开始安装Bridge时 首次在计算机上安装 Bridge 后时,将看到初始设置选项。单击库路径(资产库所在的文件夹)。 库路径很重要,因为这是 Bridge 将存储资产和插件的地方。如果还没有该文件夹,Bridge 将为您创建它。 单击下一步。 从导出目标下拉列表中,选择 Houdini。 单击下载插件开始下载插件。 下载完成后,您将在 Bridge 中看到一条确认消息。 点击Install Plugin在 Houdini 中安装插件。 安装插件后,您应该会在弹出窗口中看到已安装状态。单击完成以完成设置。 启动 Houdini,您应该会在工具栏中看到一个 Megascans 菜单,确认插件已成功安装。 在 Houdini 中,Bridge 将在以下位置(基于您的操作系统)创建一个MegascansPlugin.json文件,该文件引用您库中的插件: Windows : C:\Users\<用户名>\Documents\houdini18.5\packages Mac OS :~home/Library/Preferences/houdini/18.5/packages/MegascansPlugin.json Linux : Home/houdini18.x/packages或Computer/home/<用户名>/houdini18.x/packages 如果你打开这个文件,它将拥有 Houdini 插件在你机器上的路径: 通过导出设置安装 要访问设置,请单击资产右侧面板左下角的齿轮图标或转到编辑 > 导出设置。 单击弹出菜单中的导出设置以查看所有导出选项。您可以调整您的设置,例如纹理格式、LOD、网格格式(FBX 或 OBJ)等。 插件接口 当您启动 Houdini 时,您将在 Houdini 菜单栏中看到一个新的 Megascans 下拉菜单。 从下拉列表中单击“ Megascans Plugin ”将启动插件窗口。从这里您可以选择“渲染器”和“材质类型”。 以下是插件 UI 上不同选项的工作方式: 渲染器:选择您在 Houdini 中设置的渲染器。 材质类型:根据选定的渲染器,此下拉菜单将显示您可用的材质设置。 使用 Megascans Scattering :选中此框可为您导入的资产启用散射。 启用 LOD :选中此框可为 3D 资产设置 LOD。取消选中时,仅设置在资源的导出设置中选择的 LOD。 使用 Atlas Splitter :这将在启用时拆分 Megascans atlas 资产。 应用运动(植物):选中后,此选项将在 Megascans 植物上启用运动。 在USD舞台上导入资产:如果您在 Solaris 中工作,启用此选项将允许您以USD格式导入 Megascans 资产。 ❗注意:如果您选择了在USD舞台上导入选项,则 UI 上的其他选定选项均不适用于导入的资产。 用户界面首选项 插件的 UI 首选项保存在Settings.json文件的以下位置: <LibraryPath>\support\plugins\houdini\<PluginVersion>\MSLiveLink\scripts\python\MSPlugin 您可以按如下方式更改文件的位置: 设置一个名为MS_HOUDINI_PATH的环境变量。…- 0
- 0
- 673
-
【Houdini】Vex函数:bbox 边界盒
https://www.bilibili.com/read/cv14717043 在[HOUDINI]中,[bbox]函数它描述的是对象三个轴向上的数值[最大]、[最小]、[大小]。 我们完全可以把它想象成装快递的盒子,它刚好能装下我们的对象。 盒子的顶部[最大]就是对象的最高处,盒子的底部[最小]就是对象的最低处。 https://cdn.yuelili.com/2022/20220209233251.webp 使用这个[函数]可以获取并关联[当前对象]或者[其它对象]的bbox值,通过这些值可以建立两个对象或多个对象的多种相互关系。 在[HOUDINI]中[getbbox]可以获取对象边界框中的[最大位置]、[最小位置]、[中心位置]、[大小矢量]。 并且这些[矢量]信息会随对象的变化而变化,可以利用这些属性去驱动其他属性。 getbbox_min()获取边界盒最小值; getbbox_max()获取边界盒最大值; getbbox_center()获取边界盒中心点; getbbox_size()获取边盒界大小; 也就是信息栏右侧的各种信息- 0
- 0
- 590
-
【Houdini插件】TabPro | tabttoo
视频介绍 优势 更快地找到节点 在视窗上工作 可以启动系统工具 适用于任何环境 更改图标的大小 获取 UI 比例设置 访问历史窗格 快速帮助窗格 Vex 快速帮助 将任何内容保存到别名 漂亮的大图标 同时创建多个节点 支持 window/mac houdini19及以下版本 如何安装 下载完毕 1.解压,出来3个文件夹 把tabpro文件夹转移(见第2步) 2.修改配置 记事本打开tabpro.json(或者其他编辑器) 把这里改成你的tabpro文件夹的目录。我是放在了 H:/Houdini19/myscipts/tabpro (注意是反斜杠) 3.安装配置 把tabpro.congfig放在如下目录。 C:\Users\你的用户名\Documents\Hou对应版本\packages C:\Users\yl\Documents\houdini19.0\packages 4.初始化 打开你的houdini,勾选MIX-TOOLS 5.快捷键设置 切换到MIX-TOOLS ctrl shift alt单击这个图标 移除NewWork的 还有上面 Geo的快捷。 这时候再在节点里摁tab,完成(成功覆盖原来的)!- 0
- 0
- 580
-
【houdini】zplus | SOP中文基础教程
内容:详细讲解Houdini中SOP节点的用法,并且有大量案例参考。 版本:Hou13(版本随老,但也是好教程) 推荐指数:★★★★★- 0
- 0
- 524
-
-
【Houdini】IDMG | 软件入门教程
内容:软件入门教程 难度:中 推荐指数:★★★★★ 推荐理由:入门中的精品,讲的比较底层(透彻),众多大佬推荐 注意:纯0基础最好先找个快速入门教程,大致了解下软件框架之类的。- 0
- 0
- 483
-
【Houdini】甜甜圈
共4P,完整链接请戳B站 难度:低 用到的节点 tube、polybevel、normal、copytopoints、attribrandomize、groupcreate、scatter、peak、null、material、color、attribcreate、attribdelete、convertvdb、merge、attribblur、vdbreshapesdf、vdbsmoothsdf、vdbfromparticles、attribnoise、attribremap、attribvop、torus- 0
- 0
- 483
-
【Houdini开发】节点简单操作
层级 官方文档 hou.NetworkMovableItem.path() ─ SideFX docs hou.node HOM function ─ SideFX docs 常用 import hou # 查找 root = hou.node("/") node.numItems() # 创建 obj = hou.node('/obj') geo = obj.createNode('geo') geo = hou.node('/obj').createNode('geo') geo.setName('josh', unique_name=True) # 重命名 path = geo.path() # 获取完整路径 geo = hou.node(path) # 基于路径引用 exec('''self = kwargs['node']\nprint(self.name())''') # 从一个参数的回调脚本中引用自己。 # 复制与移动 copied_node = hou.copyNodesTo((original_node,), parent_node)[0] moved_node = hou.moveNodesTo((original_node,), parent_node)[0] geo.moveToGoodPosition() pos = reference_node.position() transformed_pos = pos + hou.Vector2((2.0, -1.0)) node.setPosition(transformed_pos) # 遍历节点 node.parent() node.children() node = hou.node("/obj/geo1/") for item in node.children(): print(item) # 设置节点输入输出,返回set 或者 null node.inputs() node.outputs() node.setInput(index,node_name) # 设置节点flag node.setDisplayFlag(True) node.setRenderFlag(True) node.setGenericFlag(hou.nodeFlag.Lock,True)) node.isHiden() # 设置节点属性 box.setParms({"tx":1,"ty":2,"tz":3}) color_node.setParms({"colorr":1,"colorg":0,"colorb":0}) # 外观设置 geo.setColor(hou.Color((1, 0, 0))) geo.setUserData('nodeshape', 'wave') # 形状 hou.selectedNodes() 当前选择的节点 参考 Python & Nodes in Houdini || Exploring Houdini youtube视频 Nodes with Python- 0
- 0
- 477
-
【Houdini开发】VS Code环境配置
视频教程 https://www.bilibili.com/video/BV18i4y1g7T4/ 具体 要安装的插件 python pylance 设置 "python.analysis.extraPaths": [ "C:\\Users\\YL\\Downloads\\fake_bpy_modules3.0", "H:\\Houdini19\\houdini\\python3.7libs" ], "terminal.integrated.env.windows":{ "PYTHONPATH":"H:\\Houdini19\\houdini\\python3.7libs", "PATH":"${env:PATH};H:\\Houdini19\\bin" }, "python.languageServer": "Pylance"- 0
- 0
- 439
-
【UE】houdini 导入ue问题汇总
1.可以使用插件 houdiniengine,不过5.01正式版还没更新 https://github.com/sideeffects/HoudiniEngineForUnreal 2.导入fbx 正常导入记得把缩放改成100,因为houdini单位是米,ue是厘米 3.导入hda 晚点发- 0
- 0
- 438
-
【Houdini开发】显示所有节点注释
说明 默认注释不会勾选,所以只会选择一个点。对于笔记狂魔很难受,每次都得点一下。 一键开关,岂不美哉? 代码 import hou allChild = hou.node("/obj/").allSubChildren() for i in allChild: i.setGenericFlag(hou.nodeFlag.DisplayComment,True) # 不显示就把True改成Fasle 如何运行 1.python shell 2.script editor 方法二 快捷键设置:搜comment,把切换注释显示,自己设置一个快捷键。这样可以全选节点,摁ctrl M开启/关闭显示了- 0
- 0
- 422
-
【Houdini教程】VEX资源合集!
资料 Houdini vex(官方文档) vex_tutorial(Github整理的VEX许多资料) tokeru-HoudiniVex UP主与Ytber entagma(油管) BiGasuo(B站) 视频教程 VEX-零基础 https://www.bilibili.com/video/BV1Zp411d7Hw/ VEX中文百科 https://www.bilibili.com/video/BV12W411x7df VEX算法教程 B站链接:https://www.bilibili.com/video/BV12K4y1p7wi 油管链接:https://www.youtube.com/playlist?list=PLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI- 0
- 0
- 419
-
【Houdini】Entagma | VEX 101系列教程
内容:VEX入门教程 难度:简单 推荐指数:★★★★★ 推荐理由:Entagma佬付费教程(有能力的请去支持正版) https://www.bilibili.com/video/BV1Pq4y147kG/- 0
- 0
- 406
-
【Houdini节点】生成点
1.1个节点生成 基本primitive 选择points模式 add 自己创建 curve 自己画 delete 选择keep points 2.2个节点 geometry + add(选择删除geo 保留points) geometry + scatter(可以在geo或者volume里撒点) geometry + pyrosource(撒点) flip source(R姐姐提供) pyro source(dio掌门提供)- 0
- 0
- 372
-
【Houdini】Python | HOM 介绍
简单示例:打印节点树: import hou def print_tree(node, indent=0): for child in node.children(): print (" " * indent + child.name()) print_tree(child, indent + 3) print_tree(hou.node('/')) 加载文件 import hou try: hou.hipFile.load("myfile.hip") except hou.LoadWarning as e: print (e) 访问Node import hou # hou.hipFile.clear() // 清空项目 # 访问节点(没有返回None) hou.node('/obj') n = hou.node('/asdfasdf') print (n) # 瞎几把写 返回None # 创建节点(实例化) g = hou.node('/obj').createNode('geo') print (g) # geo1(打印会显示节点名,不过g本身是节点对象) # 访问属性(没有会报错) tx = g.parm('tx') print (tx) # <hou.Parm tx in /obj/geo1> # 属性赋值 tx.eval() # 0.0 tx.set(3.5) # 设置为3.5 print(tx.eval()) # 3.5 # 不想用eval(),可以直接用evalParm print(hou.evalParm('/obj/geo1/tx')) # 3.5 # 或者用ch print(hou.ch('/obj/geo1/tx')) # 打印所有参数 print([p.name() for p in g.parms()]) print(tuple(g.parmTuple('t'))) # 完整的 box = geo.createNode('box') subd = geo.createNode('subdivide') subd.parm('iterations').set(3) subd.setFirstInput(box) subd.moveToGoodPosition() subd.setDisplayFlag(True) subd.setRenderFlag(True) subd.setCurrent(True, clear_all_selected=True) 使用动画参数和关键帧 当你听到 "动画参数 "这个术语时,通常会想到关键帧的值、贝塞尔曲线以及动画图编辑器。不过,回顾前面的内容,有表达式的参数也被认为是动画参数。所有的动画参数至少有一个关键帧,每个关键帧有一个表达式。典型的带表达式的参数只是有一个关键帧,其表达式是sin($F)或cos(time()),而典型的动画曲线有多个关键帧,其表达式是bezier()。 那么,像bezier()这样的函数是如何在不同的时间评估为不同的值的呢?显然,没有传递给bezier的参数是随时间变化的,也没有传递关键帧或斜率值。答案是,关键帧存储的不仅仅是一个表达式。一个关键帧存储了这些值、斜率和加速度,而某些函数,比如bezier,可以访问当前关键帧和下一个关键帧的这些值。对于像sin($F)这样的表达式的关键帧,这些额外的值不会被设置,也不会被使用。 每个关键帧都有一个相关的时间。使用该时间和每秒的帧数,你可以推导出关键帧的帧数。你可以把表达式看成是在关键帧之间的活动。胡迪尼在其关键帧和下一个关键帧之间评估该表达式。如果没有下一个关键帧,大多数动画函数(例如贝塞尔、立方体等)只需评估其关键帧的值。对于第一个关键帧之前的时间,参数评估为第一个关键帧的时间的值。 hou.Parm.keyframes()的值、斜率和加速度 如果你设置了in值,而没有设置(out)值,那么认为out = in值。如果都没有设置,认为是并列的。 例如,要用当前值和斜率设置一个关键帧,不要在关键帧中设置值或斜率 或者,为了自动确定斜率,在不设置斜率的情况下设置一个关键帧 时间和表达式 入和出/值 捆绑值 asCode() Hscript表达式和Python之间的语法相同 使用对象和转换 worldTransform(), setWorldTransform() matrices, exploding column vectors for transforms (p T1 T2), not (T2 T1 p) 参见 object_xform cookbook 示例 哪里可以找到错误信息 对于 shelf/tab 菜单:在弹出窗口的细节部分。 对于 HDA 的回调:控制台中。 对于 123.py/456.py:控制台中。 对于参数:节点的MMB(中键)。 对于基于Python的节点:节点的MMB。 解释 Python 错误消息 当 Python 代码产生一个未处理的异常时,它将显示一个引发异常的调用栈的回溯。通过查看回溯中的最后一条,你可以找到引发异常的那一行代码。 例如,如果在 实现fixFilePrefixes 时,出现了拼写错误,可能会看到以下回溯(看最后一行就完事了)。 >>> hou.session.fixFilePrefix(hou.node('/'), '/home/luke/project', '$HIP') Traceback (most recent call last): File "<console>", line 1, in <module> File "hou.session", line 12, in fixFilePrefix NameError: global name 'to_prefix' is not defined ← ← ← ← ←…- 0
- 0
- 366
-
【Houdini】小脚本:导出选择节点名称
import hou def getNodeSourceName(node): '''获取SOP节点真实名称''' name = str(node.type())[:-1] name = name.replace("<hou.SopNodeType for Sop ","") return name.split("::")[0] nodes = hou.selectedNodes() if not nodes: print("请选择要导出的节点") lists = [] for node in nodes: name = getNodeSourceName(node) if (name not in lists): lists.append(name) print(name,end = '、') 如图所示,导出了所有选择节点名称(会过滤重复)这样做笔记就很方便。- 0
- 0
- 356