参考资料
几何体
Blender归档
导出到RIB归档
要将一个几何体或一组几何体导出到RIB存档,选择对象,进入对象属性,在RenderMan几何体面板下,选择导出,然后将对象导出为存档。
你还可以选择是否要导出分配给几何体的材质,以及是否要将所有的帧存档。
如果你预计需要覆盖存档对象上的材料,请取消选择导出材料。
导入RIB档案
你可以从添加菜单中导入RIB档案。
覆盖材料
如果你想给RIB档案附加一个材料,你可以使用对象属性中的材料覆盖面板来实现。注意:如果存档中的对象本身已经有一个材料,那么它将被优先考虑。
Blender中的OpenVDB体块
要添加一个OpenVDB体积几何,请使用添加菜单中的导入OpenVDB。
这将添加一个Blender OpenVDB节点,以及附加一个PxrVolume着色器。下面是一个使用OpenVDB网站上的bunny_cloud.vdb例子的渲染。
OpenVDB的属性Attributes
Filter Width: 如果设置为0,则禁用mipmapping。如果大于0,小于1的值偏向于更精细的mipmap级别,大于1的值偏向于更粗糙的级别。
Density Multiplier(密度乘数): 对体积的密度网格中的数值进行缩放。这应该比缩放着色器中的密度更有效。
Density Rolloff: 大于0的值在密度值中产生一个对数的衰减。较小的滚降值产生较大的衰减。
DSO Min/Max: 目前只用于aggregate volumes,并且只用于使用ImplicitField DSO Volumes(如OpenVDB)。如果设置为1,DSO可以直接使用文件中存储的信息来计算卷内的最小和最大值。这可以让渲染器避免在前面对体积进行着色,从而大大减少到达第一个像素的时间。只有在直接使用体积中的密度信号,或者密度信号仅由DSO本身调制的情况下,才能启用这个功能。任何对密度信号的着色修改都需要将这个参数设置为关闭。
Blender中的程序性基本元素
对于程序性基本元素,RenderMan for Blender同时支持程序性基元DSO(dynamic shared objects)和RunProgram。关于如何编写/编译这些类型的程序性基元的更多信息,请参见《开发者指南》中的这一部分。
添加
您可以从添加菜单中添加任一类型的程序性基元。
DSO
要向你的 RunProgram 传递参数,请在 RenderMan Geometry 面板下的对象属性中查看;应该有一个 Dynamic Load DSO 子面板。
Blender中的四边形基本结构
添加菜单中的这个菜单可以创建RenderMan四边形基元。
这里是所有可用的四维基元的渲染。从左到右。 球体、圆柱体、圆锥体、圆盘、环形体
Blender中的体块聚合
在Blender中使用体积聚合体Volume Aggregates
体积聚合编辑器Volume Aggregates Editor
要创建一个体积集合体,你可以使用体积集合体编辑器,它可以从视口的右键菜单中进入。
点击+按钮,创建一个新的聚合。然后你就可以开始将场景中的卷添加到聚合中。
你也可以从视口中选择你想要的卷,然后从右键菜单中把它添加到组中。
集成器 Integrator
要指定全局体积聚合到集成器,请确保已经创建了一个集成器节点树(见Integrator in Blender),然后在体积聚合名称下拉列表中选择体积聚合名称。
如果没有给集成器指定一个体积集合体名称,任何属于体积集合体的体积都不会渲染。
云层的聚合体积组成与最终渲染图的对比 - Luca © Disney/Pixar
为什么是聚合体量?
聚合体是为涉及许多没有任何边界行为的独立体的工作流程而设计的。射线不会在体块的边界上反射或折射,这一知识使渲染器能够对许多这样的体块进行重大优化。
在上图所示的Luca云场景中,几十个单独的云元素被分层成一个统一的云层。聚合体的工作流程允许对这些云元素进行有效的渲染,而不必将它们合并成一个单一的体,这可能是渲染器外部的一个昂贵过程。
此外,聚合体允许在特殊情况下使用一组命名的体,例如将异质的内部与电介质表面的内部结合起来。
工作流程
聚合体的通常工作流程是通过将属性 “volume” “string aggregate” [“name”]附加到一个或多个RiVolumes基元来创建一个命名的聚合体,其中 “name “是聚合体的期望名称。这些体积基元应该使用PxrVolume着色器来控制其体积元素外观。一旦几个体积基元被标记为具有相同名称的这个属性,命名的集合体积就可以作为 “volumeAggregate “参数提供给PxrPathTracer集成器。这表明场景的全局体积集合是命名的集合体积。命名的体积集合体现在将出现在渲染中。通过PxrPathTracer集成器上的参数来控制体积如何被集成和采样。
如果体积的数据源是OpenVDB文件,密度信号直接来自该文件,并且没有通过阴影来增加,那么强烈建议将 “体积 “的新属性 “int dsominmax “设置为[1]。这样做可以让渲染器使用密度的最小值和最大值,更快地从体积中建立一个加速结构,可以直接从VDB文件中读取预烘焙的数据,也可以在加载体积时即时生成。这使得第一个像素点的生成时间大大加快,因为渲染器不再需要在拍摄光线之前在预处理中运行密度着色。如果体积密度是在着色器中程序化生成的,那么dsominmax应该被设置为0。impl_openvdb支持新的控件,允许对密度进行全局缩放和塑造,同时仍然支持dsominmax 1优化。
此外,如果OpenVDB文件非常详细,并且预计这些文件对于所需的东西来说可能过于密集,可以选择用vdbmake对VDB文件进行预处理以生成mipmaps。这样做可能会降低峰值内存需求,因为渲染器只需要加载mipmap pyramid的底层。另一方面,通常情况下,加载mipmap pyramid的两个细级别可能会比简单地加载pyramid的基本级别使用更多的内存;特别是OpenVDB文件格式可以使mipmapping的优势不如其他潜在的体积文件格式那么明显。
虽然通常PxrPathTracer集成器只能渲染一个全局体积集合体,但可以创建任何数量的集合体。这些集合体可以被绑定为使用PxrSurface材料的封闭电介质表面的内部。与普通体积不同,聚合体完全支持作为PxrSurface的异质内部。这是创造复杂效果的最佳方式,比如宝石内部的闭塞,或者水晶球内部的旋转烟球……或者卢卡在海洋中游动的月光射线。
雾束层与束缚在海洋内部的总体积,与最终的合成物对比 - Luca © Disney/Pixar
能力和优势 Capabilities and Advantages
聚合体是由PxrPathTracer和PxrUnified集成器完全支持的。如上所述,聚合卷的设计是为了在有几十个甚至几百个重叠卷的情况下比以前的卷工作流程更有效,并且对重叠卷的数量没有限制。它们的设计也意味着集合体在处理重合的几何体(如重合的体积边界,或与表面重合的体积)时,不容易出现问题。
聚合体还提供了一些非聚合体所不具备的优势。在体积的密度直接来自于VDB文件,并且没有被阴影增加的情况下,聚合体通常可以大大减少复杂渲染的首次判断时间。聚合卷也支持mipmapped卷,这有可能减少过于详细的卷的内存消耗。在复杂的光传输场景中,聚合体也可以有更快的收敛速度,因为渲染器能够在获得场景中更多体的信息后,对采样做出更好的全局决定。
预计在未来版本的XPU渲染器中,聚合体将成为主要的支持体量工作流程。
限制
聚合体的主要限制在于一个单一的加速结构是建立在多个体上的,而加速结构不能存储各个体的许多属性。这是由于性能的原因;必须建立一个知道所有这些单独属性的加速结构会大大降低这些卷的迭代速度。除非进行特殊处理,否则会影响光线穿越的单个卷的属性不会在聚合卷中起作用,而这种特殊处理需要渲染器在卷的每一步都进行额外的检查。作为一个例子,将卷体分组为跟踪成员,并使用光线子集,确实可以工作,但可能没有正常曲面渲染情况下那么有效。
不起作用的单个体的主要属性包括。
-
可见性visibility:聚合体不认可standard visibility flags,用于摄像机、透射和间接可见性,你通常会期望在单个体上设置这些标志。为了绕过这个限制,PxrPathTracer允许在处理特定类型的射线时指定单独的体积卷:这些是volumeAggregateCamera、volumeAggregateTransmission和volumeAggregateIndirect参数。这些控制并不像普通的可见性标志那样灵活 - 你不能在集合体的各个卷上混合可见性标志 - 你只能对所有集合体的可见性进行操作,或者指定对某些类型的射线使用哪些集合体。
-
体积采样标志volume sampling flags:PxrVolume上控制采样技术的参数(例如minSamples、maxSamples、equiangularWeight)在使用聚合体时并不适用。相反,体积采样的控制是在主PxrPathTracer集成器中设置的。
有几个限制也与渲染器的优化有关,这些优化可以在许多不相干的卷中工作。聚合体不支持单一散射;多重散射multiple scattering是唯一的选择,PxrVolume的multiScatter参数将被忽略。聚合体也没有针对严格意义上的同质体进行优化。虽然渲染算法针对接近均质的体块进行了优化,但它们仍然假定聚合体块作为一个整体是异质的,即使单个元素是均质的,也不能完美地对体块进行相应的重要采样。
聚合体只支持使用RiVolume的几何基元。
与非集合体相比,在集合体工作流程中,单个集合体的高速转换运动模糊将没有那么高效。
虽然集合体可以作为内部空间绑定到PxrSurface上,但对于复杂的嵌套电介质场景(例如,在一个有雾的房间里的有色玻璃内的有色水),不建议使用集合体。
PxrVCM中目前不支持聚合体。它们在PxrPathTracer和PxrUnified中得到完全支持。
完全支持多重散射优化,但在聚合体上忽略了PxrVolume的相关控制。相反,在集合体工作流程中,这些控制现在是在光源本身。
在最初的24.2版本中,哑光聚合体可能无法正确地抵御非哑光体non-matte volumes。我们预计这将在即将发布的补丁版本中得到解决。
Mipmapping
Mipmapping是一种标准技术,用于改善纹理混叠和渲染性能,它根据屏幕上纹理的观察尺寸和角度,从pyramid中自动选择适当的纹理分辨率级别。这种技术可以选择性地应用于由体素组成的体积数据:就像二维mipmap pyramid级别包含的体素是四个更细的体素的平均值一样,三维mipmap pyramid级别包含的体素是由八个更细的体素的平均值组成。对体积素材进行mipmapping会大大增加其磁盘空间,如果最细的体素被适当地调整到摄像机所需的细节水平,那么在渲染过程中可能会增加一些内存;但是,如果体素的细节比摄像机设置要求的要细得多,mipmapping可以节省大量的内存和渲染时间,因为渲染器将只加载较粗的平均体素来代替。使用impl_openvdb插件作为体素数据源的聚合体可以通过将filterWidth参数设置为大于0的值来启用mipmapping;该参数是渲染器计算的标准filterwidth的倍数。
vdbmake是RenderMan发行版中的一个新工具,用于帮助创建这些OpenVDB格式的优化文件。vdbmake将一个带有一组网格的OpenVDB文件作为输入,并创建具有辅助mipmapped网格和这些网格的预烘焙加速信息的OpenVDB文件。
多重散射近似
用于近似深度多散射体的外观的技术依赖于根据相机射线的深度来改变体的密度属性。对于体块集合体来说,这方面的控制已经被移到了灯光上。欲了解更多信息,请参考用聚合体渲染云。