本主题介绍 XGen RenderMan DSO 的操作以及其所有参数。文中介绍了相关的程序,以使您能实现让 XGen 渲染其本身的自定义方法。
有两种形式的 XGen RenderMan 程序:面片和面。Rib 生成器负责将面片级别的程序调用置入 rib。当面片程序裂开时,XGen 将那些面片程序扩展到面程序。仅当面程序裂开时才会生成基本体,并且才会开始真正的渲染。面片程序可使用后面列出的所有标志。您必须为面片程序指定边界框。边界框必须绑定要渲染的所有面和所有基本体。如果边界框太小,则会执行剪裁。如果边界框太大,程序裂缝会打开得太快并且会浪费内存。边界框应绑定该面片的所有运动采样。
当面片程序裂开时,它将会分析参数。如果判断为这是首次遇到指定的选项板,它会加载选项板文件,读取运动采样对应的几何体,并将其缓存。然后对已命名面片上的所有面发射面程序。如果选项板已被缓存,则不会读取该文件,而是跳过该操作并开始发射已命名面片的面程序。
选项板基于其名称(包括名称空间的名称)来缓存。这可实现多次使用相同的 .xgen 文件来填充森林或树丛。但是,您必须为每个实例指定唯一名称,以使它们不会意外最终共享几何体。例如,有两棵树共享相同 .xgen 文件和相同 .caf 动画文件,但它们在动画循环中偏移 50 帧。您必须为其中一棵树指定名称空间 tree1,并为另一棵树指定名称空间 tree2。否则第一棵树将先出现并被缓存。随后出现的第二棵树只是查找并使用第一棵树的缓存。第二棵树的几何体将不会被加载,因此这两棵树是相同的。
将几何体文件单独缓存于选项板文件之外可实现更好的共享。例如,即便是在相同的选项板内,也经常会多次使用相同的几何体。这样您的森林中的一些树会是相同的。通过允许共享可节约内存。XGen 选项板不可共享,但基本几何体可以共享。
程序提供一些参数作为标志。以下列举的每一项都附带简要说明以及表示是否可选的指示。
-debug | 设置调试消息的级别(可选)。 |
-stats | 设置统计消息的级别(可选)。 |
-warning | 设置警告消息的级别(可选)。 |
-quitOnError | 告知 XGen 在遇到任何错误时即退出(可选)。 |
-nameSpace | 如果存在选项板的名称空间,使用此标志进行传递。请勿将名称空间附加到选项板名称上。 |
-palette | 要渲染的选项板名称。此名称必须与使用 -file 标志传递的 .xgen 文件中的名称一致。 |
-description | 要渲染的已命名选项板中的描述的名称。 |
-patch | 属于描述和要渲染的选项板的面片(几何体)名称。 |
-frame | 设置选项板要用作基础选项板帧的帧。指定的话,将由 -motionSamplesLookup 的值调整。 |
-motionSamplesLookup | 用于加载几何体的运动采样偏移值列表。这些值被添加到通过 -frame 传入的值,以指定每个运动采样的帧值。但这并非添加到运动块的值,后者是通过 -motionSamplesPlacement 标志指定的。将这两者分离可实现对运动模糊效果的控制。 |
-motionSamplesPlacement | 运动块值的列表。这些值直接用作 RenderMan 运动块调用中的值。通常此值与通过 -motionSamplesLookup 指定的间距一致,但如果需要运动模糊效果(如 strobbing),此值不是必须的。 |
-file | 此特定选项板/描述/面片的选项板 .xgen 文件。此文件只读入一次并为特定元素(名称空间)缓存。 |
-delta | 以空格分隔的要应用到指定选项板文件的增量文件列表。它们按其查找到的顺序应用到选项板。 |
-geom | 选项板的几何体 caf 文件。它所包含的几何体可以超过选项板所需,另外还可以包含其他数据。XGen 会忽略自身不使用的数据。所需的是 XGen 所绑定的所有几何体的采样帧、静态拓扑和首选项对应的数据。为了获得最佳性能,几何体应位于对象空间中。 |
在 rib 文件中必需的设置的集合。这些设置不适合 xgen 文件,它会使文件特定于帧、摄影机或渲染相位(颜色对阴影)。它通常用于烘焙出包含风循环等元素的 rib,然后创建贯穿整个场景的 rib 实例。这些 RenderMan 设置允许在每个元素仍在渲染时实现这一点,如同元素在该位置渲染一样(即,朝向摄影机、消隐、细节级别仍然有效)。
# directory for writing temp files Option "user" "string irCacheDir" ["/disk1/tmp/renderPipeTemp12766"] # the current render phase Option "user" "uniform string phase" ["Shadow"] Option "user" "uniform string generator" ["key_dir"] # the 'current camera/generator' (once in rib) Attribute "user" "string irCurrentCam" ["true, -0.633307, -0.591462, -0.499094"] Attribute "user" "string irCurrentCamFOV" ["90, 90"] Attribute "user" "string irCurrentCamXform" ["0.773158, 0.0338928, 0.633307, 0, -0.511791, 0.623091, 0.591462, 0, -0.374562, -0.781414, 0.499094, 0, 0, 0, 0, 1"] Attribute "user" "string irCurrentCamRatio" ["1"] # tell xgen the 'render camera' (once in rib) Attribute "user" "string irRenderCam" ["false, 5.33365, 7.04902, 14.19"] Attribute "user" "string irRenderCamFOV" ["54.4321, 54.4321"] Attribute "user" "string irRenderCamXform" ["0.93606, -0.148352, 0.319037, 0, 0, 0.906762, 0.421643, 0, -0.351842, -0.394683, 0.848783, 0, 0, 0, -16.718, 1"] Attribute "user" "string irRenderCamRatio" ["1.94445"]
当使用 DAR 渲染方法时,irCacheDir 用于写出 dra 文件。有一种假设:在渲染阴影过程时,目录比在渲染颜色过程时深一个级别。相位表示渲染的类型:颜色或阴影。此假设为所有阴影渲染发生在颜色渲染之前。如果相位是阴影,则阴影生成器的名称随生成器选项一起指定。
接下来的两组值表示正在使用的摄影机。第一个是 irCurrentCam,表示当前摄影机或阴影生成器。所示示例是一个阴影渲染,因此当前摄影机为阴影生成器(即灯光)。第一个值是 bool,表示摄影机是否为正交,后面三个值为位置(当摄影机为透视时)或方向(当摄影机为正交时)。irCurrenCamFOV 是摄影机的视野(如示例所示,正交的值为 90,90)。irCurrentCamXform 是反向摄影机变换。最后,irCurrentCamRatio 是摄影机在 2K 的比率,用于随机细节级别。最终的属性按如下方法计算 2.0*focalLength/25.4044/horizontalFilmAperture。
下一组值为 irRenderCam,表示颜色过程的摄影机。如果可能,请为所有渲染都提供这两组值。如果无法生成这两组值,可仅提供当前摄影机的值,然后将这些值传递到这两组属性。
另外,还有若干可用于控制渲染器的配置变量。这些变量中的一部分是 DSO 特有的,一部分是通用的,但由于它们都会影响到处理,因此包含在此作为引用。如果设置了这些变量,它们会覆盖上文所列的任何标志值。