What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
vfx:houdini:dop:dynamic_basics [2019/09/06 01:42] – [Dynamics] codingharevfx:houdini:dop:dynamic_basics [2021/11/11 08:08] (当前版本) codinghare
行 1: 行 1:
 ======Dynamics===== ======Dynamics=====
 <color #7092be>//All about Houdini’s dynamics networks / simulations.//</color> <color #7092be>//All about Houdini’s dynamics networks / simulations.//</color>
-===== =====+----
 在 Houdini 中,dynamics network( //DOP// ) 用于创建模拟(//simulation//)。模拟主要由两部分组成:**被计算的对象**(//Object//)与**应用到对象上的的解算器**(//Solvers//)。下图是一个非常典型 / 基础的解算示例: 在 Houdini 中,dynamics network( //DOP// ) 用于创建模拟(//simulation//)。模拟主要由两部分组成:**被计算的对象**(//Object//)与**应用到对象上的的解算器**(//Solvers//)。下图是一个非常典型 / 基础的解算示例:
 \\ \\
行 8: 行 8:
 </div> </div>
 </html> </html>
-在 Houdini 中,针对不同的模拟(Rigidbody / fluid / cloth / grain etc.)有不同的 Object 和 对应的 slover。 
 \\ \\
 +\\
 +在 Houdini 中,针对不同的模拟(Rigidbody / fluid / cloth / grain etc.)有不同的 Object 和 对应的 slover。
 \\ \\
 \\ \\
行 58: 行 59:
 通过 ''Geometry Spreadsheet'' 可以查看对象之间的关系。 通过 ''Geometry Spreadsheet'' 可以查看对象之间的关系。
 ==模拟的可视化== ==模拟的可视化==
-见此+<WRAP round todo 60%> 
 +待完善 
 +</WRAP> 
 ==DOP 中的 Bypass== ==DOP 中的 Bypass==
 与 SOP 相同,DOP 中也允许节点的 bypass。bypass 的节点不会参与整个节点的模拟。bypss 的状态是可以进行 keyframe 的,我们通过对指定节点的 ''Activation'' 属性进行关键帧管理即可达到这样的效果。非零代表当前节点参与模拟,零代表不参与模拟。 与 SOP 相同,DOP 中也允许节点的 bypass。bypass 的节点不会参与整个节点的模拟。bypss 的状态是可以进行 keyframe 的,我们通过对指定节点的 ''Activation'' 属性进行关键帧管理即可达到这样的效果。非零代表当前节点参与模拟,零代表不参与模拟。
行 263: 行 267:
 如果参与碰撞几何体中同时存在 volume / thin-plate 类型的对象,那么碰撞的类型是 volume。如果只存在 thin-plate 类型的对象,那么使用三角碰撞检测(per-triangle collision test)。需要注意的是,thin-plate 类型的对象并不能很好的堆叠。如果想得到更好的效果,需要增加 ''minimum number of sub-steps'' 如果参与碰撞几何体中同时存在 volume / thin-plate 类型的对象,那么碰撞的类型是 volume。如果只存在 thin-plate 类型的对象,那么使用三角碰撞检测(per-triangle collision test)。需要注意的是,thin-plate 类型的对象并不能很好的堆叠。如果想得到更好的效果,需要增加 ''minimum number of sub-steps''
 ====Caching Simulations==== ====Caching Simulations====
 +===概况===
 +通常,Houdini 将解算的结果存储在内存里供回放使用。在 ''Dop network'' 节点中有一个属性 ''Cache memory'' 可以设置使用多少内存来 caching。
 +\\
 +\\
 +但当没有足够的内存供 Houdini 创建新缓存的时候,Houdini 会舍弃之前已经缓存过的内容。如果我们不希望丢弃之前的内容,我们可以开启该节点中的 ''Allow Caching To Disk'' 的选项。这种情况下,Houdini 不再丢弃旧的内容,而是将旧的内容按 ''.sim'' 的文件存储到指定的临时目录。当然,回放的速度会相应的变慢;但至少我们还保有整个模拟的结果。
 +\\
 +\\
 +除此之外,有两种情况需要存储解算结果到硬盘:
 +  * 如果只需要解算一次对象的运动(比如 ridid body)。
 +  * 当对解算结果满意,不希望更改时。
 +除了利用上面节点的 caching 功能之外,我们也可以利用 ''Output'' 节点或者 ''Dynamics render'' 节点来输出解算结果。
 +\\
 +\\
 +===Timeline coloring===
 +Houdini 会使用不同的颜色来代表当前的解算文件类型:
 +|<color #00a2e8>蓝色</color>|缓存处于内存中。|
 +|<color #c8bfe7>紫色</color>|缓存处于 //.sim// 文件中。|
 +|<color #ff7f27>橙色</color>|该缓存使用内存存储,但因为内存不足 / 改变了解算设置 导致该缓存不再存在。|
 +===Explicit Disk Caching===
 +默认情况下,如果 ''Allow caching to disk'' 选项启用,那么 Houdini 会将缓存文件写到一个临时目录中。而一旦解算文件无效以后,Houdini 会自动将其从临时目录中删除掉。
 +\\
 +\\
 +这种情况下,我们的解算文件既不安全,又难以管理。针对该情况,Houdini 提供了 ''Save checkpoints'' 的选项。该选项允许我们:
 +  * 指定存储解算文件的目录,需要使用 ''$SF'' 作为自动编号扩展名。
 +  * 指定多少帧存储一个 checkpoint;比如 ''5'' 意味着每 ''5'' 帧存储一次。
 +  * 指定 Houdini 每次存储多少个 checkpoints,超过该值的存储点会被删掉。
 +checkpoint 在规模较大的模拟中非常有用,特别是在渲染农场中。比如,如果我们的渲染在 ''50'' 帧的时候由于某种原因失败了,那么我们设定当前起始帧为 ''50'' 帧,之后再利用之前的 checkpoint 来进行解算(比如 ''45'' 帧处有一个 checkpoint),而不是从一开始重新解算。
 +===Baking out sim files===
 +处于 DOP 网络末端的 ''Output'' 节点可以控制如何写出模拟结果。这些结果是独立于缓存的,可以用于其他的用途。
 +\\
 +\\
 +输出的步骤:
 +  - 选择 ''start'' 和 ''end'' 决定要输出的帧数。
 +  - 在 ''output file'' 中输入对应的路径与表达式。可以使用 ''.sim.gz'' (gzip) 或 ''.sim.sc'' (Blosc) 的压缩格式;速度更慢但更节省硬盘空间。
 +  - ''save to disk'' or ''save to disk in background''。''save to disk in background'' 会创建一个新的 Houdini 进程来运行当前的模拟。如果选择该方式,模拟之前必须存储 ''.hip'' 文件。
 +除了 ''Output'' 节点之外,我们也可以选择 ''Dynamic'' 来输出我们的文件(注意这个文件是在 out 中)。如果我们的模拟在 out 网络中有依赖(也就是 out 网络的一部分),那么用 dynamic 节点是非常有用的。同时,因为 ''Dynamics'' 节点不是 DOP 的一部分,因此修改其参数不会导致 recook。
 +\\
 +\\
 +当我们完成 “baking” 解算文件后,我们可以停止 DOP network 的解算并使用我们存储好的 ''.sim'' 文件。
 +====参考资料====
 +  * [[https://www.sidefx.com/docs/houdini/dyno/index.html|Dynamics]]