本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
vfx:houdini:concepts:geo:primitive [2019/10/08 10:40] – [How to] codinghare | vfx:houdini:concepts:geo:primitive [2021/11/11 08:07] (当前版本) – codinghare | ||
---|---|---|---|
行 2: | 行 2: | ||
<color # | <color # | ||
Houdini 关于 // | Houdini 关于 // | ||
- | ===== ===== | + | ---- |
====什么是Primitives==== | ====什么是Primitives==== | ||
在 //Houdini// 中,// | 在 //Houdini// 中,// | ||
行 69: | 行 69: | ||
* 分离 Packed 几何体中的子物体:'' | * 分离 Packed 几何体中的子物体:'' | ||
* 将几何体按照 Packed 几何体导入 DOP :'' | * 将几何体按照 Packed 几何体导入 DOP :'' | ||
- | * 在 VEX shader 环境中访问 Packed 几何体中的属性(比如 '' | + | * 在 VEX shader 环境中访问 Packed 几何体中的属性(比如 '' |
+ | <WRAP center round info 100%> | ||
我们只能以 material attribute 的方式在 GEO 层级使用 primitive attribute。 除了 material attribute(Houdini 按照特殊情况处理),primitive 层级的属性是不能在一般的场景中工作的,因为 Houdini 将 Packed 几何体视作单个 primitive 加上一个点。 | 我们只能以 material attribute 的方式在 GEO 层级使用 primitive attribute。 除了 material attribute(Houdini 按照特殊情况处理),primitive 层级的属性是不能在一般的场景中工作的,因为 Houdini 将 Packed 几何体视作单个 primitive 加上一个点。 | ||
</ | </ | ||
+ | ===Rendering=== | ||
+ | //Packed Primitives// | ||
+ | \\ \\ | ||
+ | ==Material assignment== | ||
+ | 当我们对标准的几何体指定材质的时候,我们可以在两个层级下应用材质: | ||
+ | * 在对象层级(Object Level)下 | ||
+ | * 在几何层级(SOP Level)下,使用 '' | ||
+ | 当 Houdini 生成场景描述文件(IFD)的时候,Houdini 会检查对象和几何体中与材质相关属性;因此 Houdini 知道哪个 shader 需要包含在这个 IFD 中。 | ||
+ | {{ : | ||
+ | 但当我们使用 //Packed Primitives// | ||
+ | {{ : | ||
+ | 为解决这个问题,我们需要告诉 Houdini 将所有场景中的 Shader 信息包括到 IFD 中(不管是什么层级中应用的)。我们可以开启 '' | ||
+ | {{ : | ||
+ | ==Displacement and subdivision surfaces== | ||
+ | 在 // | ||
+ | * 在渲染被置换(displaced ) / 细分(subdivided )的表面之前,Mantra 会将几何体划分为更小的块,直到每个像素都有 '' | ||
+ | * 当我们使用 //Packed// 几何体作为实例的时候,就会出现问题了。// | ||
+ | * 解决这个问题需要添加 //Share Displacements Between instances// 渲染属性到包含实例的对象。开启这个选项会告诉 Mantra 做以下的事情: | ||
+ | * 对于场景中某一个实例进行的最高级别的划分 | ||
+ | * 其他实例共享该划分过的实例 | ||
+ | * 这意味着远处的对象可能会获得更多的(不必要)的细节。这可能会导致渲染的减速;但因共享而带来的好处可能要更加有价值一些。 \\ \\ 在比较极端的情况下,如果上述这种“不正确”的划分导致了问题,我们可以将该用于分享的实例分解为两个对象,一远一近。这样我们就可以对不同的对象进行不同等级的细分,从而达到按照远近进行恰当划分的效果。\\ \\ 同时,我们也可以解包离摄像机近的对象,将其从 '' | ||
+ | ==Attributes== | ||
+ | * Disk / Memory Packed primitives 中的实例实质上是一个简单的指针。该指针指向被分享的源几何体的内存地址(或硬盘位置),因此所有的实例都无法拥有自身的属性(除开 material / vel attribute ,Houdini 对该两种属性做了特别处理) | ||
+ | * Packed fragment 实例可以拥有// | ||
+ | * Alembic primitive 也不能拥有自身的独立属性。不过,在 Mantra 中,针对 Alembic 有一个 '' | ||
+ | <wrap lo>How Material / Vel works</ | ||
+ | Mantra 会为 Packed primitives 建立一棵虚拟的对象树,然后会将对应的 material attribute 拷贝到该书上的每一个虚拟的对象(如果这些虚拟的对象都没有 material attribute 的话)。因此 几何体对象上的 materials 将会正确的应用到 Packed primitives 上;'' | ||
+ | \\ \\ | ||
+ | 可以通过 '' | ||
+ | \\ \\ 默认情况下 Houdini 不会查看 //Packed primitives// | ||
====Polygon soup==== | ====Polygon soup==== |