What & How & Why

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
vfx:houdini:concepts:geo:primitive [2019/10/09 12:02] – [Material assignment] codingharevfx:houdini:concepts:geo:primitive [2021/11/11 08:07] (当前版本) codinghare
行 2: 行 2:
 <color #7092be>//Ver.17.5//</color>\\  <color #7092be>//Ver.17.5//</color>\\ 
 Houdini 关于 //Primitives// 的相关知识点 Houdini 关于 //Primitives// 的相关知识点
-===== =====+----
 ====什么是Primitives==== ====什么是Primitives====
 在 //Houdini// 中,//Primitive// 代表了几何体的单位。//Houdini// 中可以表示为 //Primitive// 的单位有: 在 //Houdini// 中,//Primitive// 代表了几何体的单位。//Houdini// 中可以表示为 //Primitive// 的单位有:
行 87: 行 87:
 {{ :vfx:houdini:concepts:geo:packedprimitiveforrender-03-min.jpg |}} {{ :vfx:houdini:concepts:geo:packedprimitiveforrender-03-min.jpg |}}
 ==Displacement and subdivision surfaces== ==Displacement and subdivision surfaces==
 +在 //Displacement shading// 和 //Subdivision Surface// 的处理上,Houdini 采用了同样的策略对待 //Packed Primitives// 和一般的几何体。但当我们主要使用 //Packed Primitives// 时候,我们需要考虑 //Dicing//(分治?)。
 +  * 在渲染被置换(displaced ) / 细分(subdivided )的表面之前,Mantra 会将几何体划分为更小的块,直到每个像素都有 ''1'' 个匹配的“块”(与 ‘’shader quality‘’ 有关,这里是 ''1'')。这意味着越靠近摄像机的对象,越细分的厉害(离摄像机越近,所占的像素区域越大)
 +  * 当我们使用 //Packed// 几何体作为实例的时候,就会出现问题了。//Packed// 几何体作为实例的好处是共享源几何体;但当添加了置换与细分之后,Mantra 必须要分别加载每一个划分后的部分,这就导致源几何体不再被分享了。
 +  * 解决这个问题需要添加 //Share Displacements Between instances// 渲染属性到包含实例的对象。开启这个选项会告诉 Mantra 做以下的事情:
 +    * 对于场景中某一个实例进行的最高级别的划分
 +    * 其他实例共享该划分过的实例
 +  * 这意味着远处的对象可能会获得更多的(不必要)的细节。这可能会导致渲染的减速;但因共享而带来的好处可能要更加有价值一些。 \\ \\ 在比较极端的情况下,如果上述这种“不正确”的划分导致了问题,我们可以将该用于分享的实例分解为两个对象,一远一近。这样我们就可以对不同的对象进行不同等级的细分,从而达到按照远近进行恰当划分的效果。\\ \\ 同时,我们也可以解包离摄像机近的对象,将其从 ''highest necessary dicing level'' 选项中移除。
 +==Attributes==
 +  * Disk / Memory Packed primitives 中的实例实质上是一个简单的指针。该指针指向被分享的源几何体的内存地址(或硬盘位置),因此所有的实例都无法拥有自身的属性(除开 material / vel attribute ,Houdini 对该两种属性做了特别处理)
 +  * Packed fragment 实例可以拥有//独立//的属性,因为这些 fragment 是被“//拼合//”在一起的(引用的源几何体的子集)。但这也意味着 Packed fragment 的效率并不如 Disk / Memory Packed primitives 。
 +  * Alembic primitive 也不能拥有自身的独立属性。不过,在 Mantra 中,针对 Alembic 有一个 ''unshare'' 的选项。该选项会消耗大量的内存,但允许 Alembic 的实例拥有独立属性,并可以在 render time 使用。
 +<wrap lo>How Material / Vel works</wrap>\\ \\ 
 +Mantra 会为 Packed primitives 建立一棵虚拟的对象树,然后会将对应的 material attribute 拷贝到该书上的每一个虚拟的对象(如果这些虚拟的对象都没有 material attribute 的话)。因此 几何体对象上的 materials 将会正确的应用到 Packed primitives 上;''vel'' 同理。
 +\\ \\ 
 +可以通过 ''Render State''(VOP)/ ''renderstate'' (VEX)访问在 //Packed primitives// 上的属性。
 +\\ \\ 默认情况下 Houdini 不会查看 //Packed primitives// 中的 ''material'' 属性。在 Mantra 中启用 ''Declare all SHOPs'' 可以修复该问题,但也会导致 IFD 体积增大。
 +
 ====Polygon soup==== ====Polygon soup====