Interacting with Houdini Engine in Python | 使用Python与Houdini Engine交互

Houdini Engine是Houdini的一个无图形界面简化版,可以通过houdini engine与houdini内核交互,完成houdini fx中的操作。官方有For Maya, For Max, For Unity, For Unreal四个插件,可以在这四个host程序中调用houdini engine。这是极好的,意味着开发的HDA资源可以直接应用在host程序中。 不过笔者并不满足于此,是否可以不用host环境直接调用houdini engine?当然可以,官方提供了一套C API . 只不过笔者看着它就头疼,主要两个问题 面向过程,不面向对象语法繁琐 这也是笔者开发pyhapi的初衷,希望面向对象,简化语法。 文档请见 https://pyhapi.readthedocs.io 如何安装 已经发布到PyPI,安装直接使...
Read More

Blocking Out City With Houdini PDG | 使用Houdini PDG生成城市白模

Houdini PDG是17.5版本新增的一个任务管理模式,方便最终结果的分步生成。笔者当前使用的17.5.258版本,鉴于这个功能刚刚出现,目前似乎是还有些bug,其后的版本可能会修复的。 到目前为止(~2019.6,确实没看到什么houdini engine + pdg的教程,只有Kenny Lammer的一套PDG for Indie Game Dev。 笔者尝试将之前道路生成,地块生成文章整合进一个PDG,生成一个小的城市,体验一下PDG的使用。那自然是有很多坑。 个人感觉PDG的主要优势: 显式化分步操作,方便每步参数调整,避免整体生成时间过长。 多线程生成,PDG中有一个任务调度器,自动根据依赖关系给空闲CPU指派workitem。 方便程序互操作,可以调度maya/p4v等等,其实用以前可以py自己写,这次显式地增加了这个功能。 ...
Read More

[Translate] GDC19 – Procedurally Crafting Manhattan for ‘Marvel’s Spider-Man’ | [译]漫威蜘蛛侠中程序化创建曼哈顿

原文为GDC2019中,Insomniac Studio的Principle Technical Artist - David Santiago带来的Talk-Procedurally Crafting Manhattan for 'Marvel's Spider-Man'. David Santiago经历相当传奇,20年的从业经验。早年就读于UTAustin和USC学习EE,之后加入NASA喷气动力实验室。28岁加入特效行业,做过lighting TD,FX TD,CG Superviser等等。 https://www.youtube.com/watch?v=4aw9uyj9MAE&t=892s Procedural生成场景方面,之前GDC已经有很多次讲了,比如 GDC2016 - Assassin’s Creed Unity: London Is Not Built In ...
Read More

Skin Decomposition | 蒙皮分解

想解决的问题是:已知一连串顶点运动的动画,能不能用骨骼动画把它表示出来? 比如,一个动补的脸部动画?一个离线模拟的布料?   以下是笔者测试的一个结果,UE4中渲染,连衣裙用了接近200根骨骼。可以看到有些帧跳了,应该是动画压缩的问题。 1. Intro 一个直觉的想法是,这不就是降维嘛。顶点运动的很多数据是相关的,比如相近两点的运动会比较接近。所以应该有办法压缩它们,就像PCA主成分分析一样,找到影响顶点最重要的维度就行了。   自然学术界已经有很多研究了。自然首先推荐ACM SIGGRAPH 2014 Course, Skinning: Real-time Shape Deformation 主持人是Dual Quaternion的提出者Kavan大神 第四部分就是讲蒙皮分解,也就是本文想解决的问题。讲义中提到了SMA,FSD,SSDR三种方法。嗯FSD也是Kavan提...
Read More

Dabble FrankenGAN with Houdini | Houdini中测试FrankenGAN

本文尝试在Houdini中测试和实现FrankenGan的(部分)功能 1. FrankenGAN 首先介绍一下这篇文章 FrankenGAN: Guided Detail Synthesis for Building Mass-Models Using Style-Synchonized GANs 发表在刚刚结束的Siggraph Asia 2018. 基本思路是:用GAN训练神经网络,给粗糙的建筑体块模型添加模型和贴图细节。 源码在Github上有, 前端是java写的:chordatlas,显示和资源管理等任务 后端是pytorch:bikegan,完成GAN生成的任务     作者将添加细节这个操作分成了很多步,每一步都训练了一个bicycleGAN完成任务 首先会对立面和屋顶进行标注,区分语义。之后通过标注生成贴图。最后用超分辨率提高分辨率。总共9个GAN! 预训练的模型原作都...
Read More

Tensorflow/Pytorch in Houdini | Houdini中使用Tensorflow/Pytorch

(首先假定读者有基本的Linux/Houdini/Python操作经验) Houdini作为最好的程序化建模软件,又正好深度学习框架大部分在Python中,那么进行一些建模/图形的深度学习任务时,怎么能少得了在Houdini?然而有几乎没有文章讲如何在Houdini中使用Tensorflow或者Pytorch,本文聊一聊这个。 笔者查到的唯一一篇文章是这个: Houdiniで機械学習 with TensorFlow 作者在Houdini里搭建了一个Minst识别程序。本文先不讲应用,主要是安装步骤,下一篇再讲应用。 首先一个问题是,Windows下行不行? 笔者感觉,想直接在Houdini里写Python,似乎不能用Windows。主要原因是Windows版本的Houdini使用的一个特殊编译的Python2.7.5版本,一些其它python版本预编译的packag...
Read More

Procedural Building, A Prefabricated Way | 程序式建筑生成-预制方法

虚拟环境中程序式生成建筑的建模逻辑应当在一定程度上参考现实世界中建筑的建构逻辑。虚拟环境的建模固然比现实世界轻松很多。一堵混凝土墙,虚拟环境中建一个低模分UV然后程序式生成贴图就可以了,现实世界中还要支模打钢筋灌浆。比如建造一座雅典城,可能需要几万人几十年的时间,而刺客系列可以一千人两年铺完。诚然如此,对提高建模效率的追求永无止境。这自然也需要参考现实世界的建构逻辑。 现实世界中为了减少建造成本,加快建造速度,一定会探讨快速的建造方法。装配式建筑就是这个背景下产生的。历史上大概早有这个概念,但是现代建筑史中最著名的大概就是魏森霍夫住宅(Weissenhof Estate)了,魏玛德国时期现代主义大师密斯凡德罗主持的一个建筑展,大量使用了装配式的方式建造住宅。二战后欧洲的重建中,住宅建筑大量采用了这种方式降低成本。苏联自然也是如此,这也在60年代传到中国,那个时期大量的工人宿舍住宅都采用了这...
Read More

Making of a alien base with L-System | 使用L-system建模外星基地

更多美术向的图片请戳这里,本文主要是相关的技术分享   Procedural建模中有一套比较特殊的基于规则的方法,一般都是衍生自L-system。最早是匈牙利植物学家lindenmayer提出的,L-system也就是Lindenmayer-System的简称。自然界的植被(Speedtree),建成环境(CityEngine)基本都是基于L-Systemd的。Houdini里直接有现成的节点提供。 1. L-system, Extended L-system 不过问题是这种L-System不支持与环境交互或者与自己的交互,对local constraint和global goal没有知识。   Měch在论文Visual models of plants interacting with their environment提出了Open L-System[1],用于建模与环境交互的植被。...
Read More

Procedural Parcel Modelling In Houdini | Houdini中程序式生成街区地块

上图是周边式的街区地块随便拉的盒子,redshift的水印还在。。。   上文讲到了如何程序式生成街道,那么下一步就是将街区划分为地块。实际中的街区形态多种多样,又以三种最为典型。一种是地块平铺在街区中,自发形成内部道路,姑且称为平铺式。另一种是地块面向街区外侧,成环状,姑且成为周边式。第三种,整个街区并没有划分地块的产权,而是整体开发了,姑且称为独立式。   平铺式以北京就成四合院为典型,主干街道划分了街区,每个街区内部自发形成了胡同。   周边式在很多西方文艺复兴之后的城市中比较常见,得益于规范的城市规划体系。当代城市中又以巴塞罗那最为典型   至于第三种独立式,就是北京最为典型了,一个没有街道的城市。公共道路划分的街区都整体交给开发商,要么盖办公楼,要么盖居住小区,没有街道立面,都是独立街区。   第三种没什么好讲的,因为街块不用划分,但是前两种的街块划分就需要程序式生成了。 ...
Read More

Procedural Street Modelling In Houdini 1 | Houdini中程序式街道生成 I

  路网的程序式生成前人曾经提出过多种方式,比如用模板,用L-System,用代理(Agent-Based),用张量场(Tensor Field)。其中比较实用的是L系统和张量场,前者也就是CityEngine中使用的方式。[Parish and Muller, 2001]这里的L系统不是传统的字符串替换的L系统,虽然思想一致,用递归替换的方式替换衍生,但在Extended L系统中,可替换的可以是复杂的带变量的函数,而不仅仅是简单的Turtle移动了。这我们后面再说,这里主要讲张量场的实现[Chen, 2008]   基本思路是: 根据地形生成张量场,可以多个张量场叠加 根据张量场生成道路   张量定义是 它可以有两个互相垂直的本征向量,这个特性很好,因为很多路网交叉口是垂直的。 1 张量场生成 可以有多种,比如格网的,轴向的。延海岸线和河流线可以有顺应边缘的张量场,沿高度图也...
Read More

Terrain Cliff Problem | 地形峭壁问题

传统高度图地形的制作方式不可避免会遇到峭壁拉伸严重的问题,另一方面峭壁要有分层的感觉。常见的解决方法主要有两种:一种是贴面,用石头的模型摆成悬崖,但是人力成本太高;另一种是用triplanar的uv,但是贴图采样次数过多。 一些新的程序化的方式包括:stochastic triplanar(Far Cry5),拆峭壁减少triplanar的贴图采样次数;启发式贴面Heruistic Quilting(Dauntless),程序化摆贴面模型,Ghost Recon目测大概也是这么做的。 不过triplanar仍然采样次数过多;而贴面意味着drawcall过多的问题。而要达到峭壁也有层积的效果,这里提出对峭壁mesh自动展UV的方法。 1. 建模 没什么好说的,houdini terrain程序化生成一下就好了,这里选择了一种大峡谷的地貌。方法就是经典的多层terrace然后e...
Read More

[Translate] Procedural Islands of ‘Dauntless’ | [译] “无畏”中的程序化生成岛屿

来自GDC2018的一个Talk:Technical Artist Bootcamp Procedural Islands of 'Dauntless' 主讲者两位, Michael Trottier,之前在Bioware做Artist和TA; Mykola Konyk,之前在Side Effect做工程师开发Houdini Phoenix Labs是Vancouver的一个工作室 关卡和原画是怎么一个需求,浮空岛。 下面这些是程序化生成的 1. UE-Houdini Pipeline UE4导入Houdini有很多自定参数,和Biomes相关的,比如用哪些植被哪些贴图等等;这些参数直接存了一个JSON格式放进houdini里用Python解析; Houdini倒回UE4会直接生成Actor。 2. 地形体量生成 最开...
Read More

[Translate] Procedural World Generation of ‘Far Cry 5’ | [译]孤岛惊魂5中的程序化场景生成

来自GDC2018的Talk:Procedural World Generation of 'Far Cry 5' 主讲者 Etienne Carrier,法国人,Ubisoft Montreal的TA,之前在Frima Studio担任TA. 主要展示的是FarCry引擎DUNIA2中场景编辑流程和其中Houdini制作方法. 个人比较有用的是pipeline方法和细讲的两个工具:Cliff Tool和Biomes Tool 1.工作流程 工作是以基于高度图的Terrain为基础的,在其上可以制作水域/道路/栅栏/峭壁/植被/雾气/世界地图 美术的一般工作流程是: 1. 生成Terrain地形 2. 一键生成峭壁 3. 画一下水的范围然后生成 4. 刷biomes,biomes是一套贴图/植被的组合 5. 之后放路放电线杆放房子 6. 拜访资源,刷b...
Read More

Memo of some HScript and VEX Variables| 一些HSript Expression和VEX变量备忘整理

Houdini中代码主要有三种语言:Python,HSript,VEX。HScript有点像MEL,Maya里的老祖宗语言;Python是最近支持的,可能有点像PyMel这种。这三种语言的复杂关系可以看这个科普帖子 Python和HScript都可以写Expression的,笔者见到的还是用HSript比较多,Expression可以写在所有node的channel里,感觉主要是起控制作用的。VEX是写在wrangler这种node里的,语法类似C++,在Obj这个context里主要是用来建模用的。其它Contex里好像还有很多用处,笔者是不太懂了。目前主要用的是Houdini的建模功能。。。。看教程的时候,经常见到写Expression时候信手拈来一堆HScript变量,但是又很难查到定义,用起来的时候又经常记不住,在这里总结一下和Vex里类似的变量吧。 定义 Ex...
Read More

Mesh Vertex Animation In Unity | Unity中顶点动画

最后的效果,左为顶点shader,右为蒙皮 10根骨骼 有些远景动画、小动画,用骨骼蒙皮来做太费了。一个好的办法是用顶点动画。比如在顽皮狗GDC的分享Technical Art Techniques of Naughty Dog:Vertex Shaders and Beyond用这种方法模拟鸟的人群的运动。 Houdini集成了Game Development Tools里可以做到导出顶点动画,直接看这篇教程就好。Houdini官方做了Game Development Toolset的工具包,直接可以用的,在Github上有。包含了Houdini中的一些节点和Unity的shader。 制作流程 安装 首先要安装Houdini Game Development Toolset,看上面github即可不必多说。 导入 fbx导入houdini,在out窗口内找到Ver...
Read More