优化

渲染场景经常会花费很长时间。但是,可以使用许多方法来帮助缩短渲染时间。

Raycaster/Raytracer 优化

Raycaster 优化

请参见“Render”>“Editors”>“Render Stats” 中的“Double Sided”。

尽可能地使曲面成为单侧曲面。

Raytracer 优化

避免对场景中的所有对象进行光线追踪。例如,不要对不需要折射的透明对象进行光线追踪。

请参见“Render”>“Editors”>“Render Stats” 中的“Shadows”。

避免使用可投射阴影的区域和线性灯光。

请参见“Render”>“Multi-lister” 中的“Raytrace Parameters”和“Render”>“Globals” 中的“Raytracing Maximum Limits”。

全局(“Render Globals”窗口中的“Maximum Reflections”、“Maximum Refractions”和“Max Shadows Levels”)或按材质球(材质球的控制窗口中的“Reflect Limit”、“Refract Limit”和“Shadow Limit”)将反射、折射和阴影的级别数设置为最小。设置为 1 通常就足够了。对于大多数镜像效应,一次反射反弹就足够了,而 1 个以上的阴影级别会很浪费。即使 2 个反射级别(加上折射)也会大大增加渲染时间。

请参见“Render”>“Multi-lister” 中的“Reflection”。

可能的情况下,请使用反射贴图,而不是光线追踪反射。

避免使具有复杂几何体的大型地板占据一个很小的区域。缩减地板大小。

请参见“Render”>“Globals” 中的“Subdivide Recursion”。

如果内存足够大,请尝试将“Render Globals”窗口中的体素“Subdivide Recursion”值提高到一个更高的值,如 3 或 4。但是,这样做可能会使内存使用量呈指数增长。

请参见“Render”>“Multi-lister” 中的“Use Depth Map”。

对于投射柔和阴影的聚光灯,请在灯光的“Control Window”中,将“Use Depth Map”设置为“ON”。

建模和着色显示

根据相机的视图为场景建模,并使该视图中的每个元素尽可能地简单。例如,如果您的场景在该距离内包含山脉,请不要在建模中将它们设置为具有许多三角形和复杂材质球的置换。而是要在其剖面中使用与真实山脉的照片和透明度贴图相吻合的简单平面。若要创建一个小行星场,请为较近的一些小行星建模,对于较小的小行星使用凹凸贴图,而对最小的小行星使用粒子。对于离得最远的小行星,请将一些大平面与透明度、颜色和凹凸贴图配合使用。

请参见“Render”>“Multi-lister” 中的“Transparency”。

构建和修剪曲面时,尽可能使用最小数量的 CV 和等参曲线。可能的情况下,使用透明度贴图而不是修剪曲面。

请参见“Render”>“Globals” 中的“Mask”和“Depth”。

您可能希望(或需要)在不同的层中创建和渲染您的场景,然后使用遮罩和深度文件及一个合成器(例如,Maya Composer 或 Maya Fusion)来合成多个渲染。

背景

请参见“Render”>“Multi-lister” 中的“Color”和“Use Back Color”。

如果在动画过程中背景不变,请预渲染它并通过将预渲染的图像指定给“Environment Color”参数,将它用作一个背景幕。您可以使用材质球的“Use Back Color”参数在这样的背景幕上投射阴影。

如果您有合成器(例如,Maya Composer 或 Maya Fusion),请不要使用背景幕。而要将背景幕与渲染的场景合成到一起。这不仅可以缩短渲染时间,而且在对场景元素进行更改后,您不必重新渲染背景。

纹理

请参见“Render”>“Multi-lister” 中的“Blurmult”、“Convert To Pix”和“Convert Solid Tex”。

请将“Blurmult”值调整为抗锯齿纹理,而不是将“Anti-aliasing Levels”值设置得很高。只有“File”纹理和一些“Procedural”纹理具有“Blurmult”参数。对于没有“Blurmult”参数的表面纹理,请尝试使用“Convert to Pix”按钮将该纹理转化为一个 PIX 文件(包含或不包含抗锯齿);对于没有“Blurmult”参数的实体纹理,请尝试使用“Convert Solid Tex”按钮将该纹理转化为一个 PIX 文件(包含或不包含抗锯齿)。使用该 PIX 文件作为“File”纹理,并调整“File”纹理的“Blurmult”值。

请参见“Render”>“Multi-lister” 中的“Rgboffset”。

请勿使用大型高分辨率纹理,而是尽量将大型低分辨率纹理与重复的小型高分辨率纹理结合使用,以更精细地呈现细节。您可以将小规模纹理作为“Rgboffset”或 Alpha 偏移应用到大规模纹理。这样可以显著减少内存使用量。

避免在占据大面积视图区域的曲面上使用昂贵的“Procedural”纹理。最不合适的纹理有:“Granite”、“Leather”、“sFractal”、“sCloud”(包含噪波)、“Projection”(包含噪波)、“Water”(如果“Numwaves”值很大或将“Reflect_bound”设置为“ON”)、“sWood”(在树横断面的图像中使用“Projection”纹理将获得更好的效果)和“sMarble”纹理。“Sky”纹理也可能会很昂贵,特别是当它使用“Fractal”或“sFractal”云和地面时。

如果 blurmult 很低且 level_max 很高,则不规则属性可能会非常低(尽管细节效果很好)。可能的情况下,请尝试将昂贵的“Procedural”纹理转化为小缠绕“File”纹理。在某些情况下,实体纹理可以使用转化实体纹理。但是,通常最好将实体纹理放置到环境材质球颜色上来渲染实体纹理的方形样例,然后将此样例用作一个投影贴图。三平面映射有时效果也很好。

只需使用天空反射贴图(specularity 1、reflectivity 1、color black)渲染一个球体的方形图像,即可将“Sky”纹理转化为渲染速度更快的“Ball”纹理。请确保球体只接触视图的边。预渲染光线追踪反射时也可以使用此技巧。

避免将“Procedural”纹理用作凹凸贴图、置换贴图或每像素扭曲。这些效果对于每个采样使用五个纹理评估(与对于颜色贴图使用一个纹理计算不同)。某些情形效果更差,即在包含纹理的透明曲面层上还有层,如包含“sFractal”水滴贴图的粒子场。

请参见“Render”>“Multi-lister” 中的“Convert To Pix”和“Convert Solid Tex”。

如果您有几个“链”到一起的纹理(即,映射到纹理上的纹理),请使用“Convert to Pix”(适用于表面纹理)或“Convert Solid Tex”(适用于实体纹理)将其塌陷为一个“File”纹理。

如果实体纹理的计算时间太长而内存足够用,请使用“Convert Solid Tex”并使用该 PIX 文件作为“File”纹理。这也会使您能够更好地控制纹理过滤。

请参见“Render”>“Globals” 中的“Texture Caching”(“bot”纹理)。

使所有的“File”纹理尽可能小。如果您必须使用大纹理贴图,请使用“Texture Caching”(在“Render Globals”下)。

光晕

请参见“Render”>“Multi-lister” 中的“ShaderGlow”。

如果您的场景包含材质球光晕,并且您增加了渲染的分辨率,请按等比减小“ShaderGlow Quality”值。

灯光

使场景中的灯光数量最少。如果可以使用材质球效果或纹理,则不要使用灯光。例如,若要在脸颊上创建高光,请不要在每个脸颊上创建链接的点光源;而是使用诸如半透明和纹理等材质球参数来创建该效果。若要创建包含大量灯光的选区,请不要实际创建 100 个灯光,而应使用有纹理的材质球。可通过使用一个具有大量明亮光晕点的环境贴图,来获得选区高光。另外,请确定您的效果是否应在一个灯光上使用纹理,而不是在许多灯光上使用纹理。

请参见“Render”>“Create Lights”>“Volume”

如果您必须在场景中使用许多灯光,请使它们设置为体积光。体积光不会为体积之外的对象计算照明,并且渲染起来比其他灯光类型更快。

请参见“Render”>“Multi-lister” 中的“Renderer Shadows”。

不要使每个灯光投射阴影;要有选择性。

请参见“Render”>“Globals” 中的“Depth Maps in Memory”和“Render”>“Multi-lister” 中的“Use Depth Map”。

如果动画过程中阴影没有发生变化,可通过将“Depth Maps in Memory”设置为“ON”(在“Render Globals”下),或对命令行渲染器使用 -k-K1 选项,来重新使用阴影深度贴图。您还可以通过将“Use Depth Map”设置为“ON”(在“Shadow Casting”下),来对个别聚光灯重新使用阴影深度贴图。

渲染参数

并非总是需要以您的最终输出分辨率进行渲染。例如,若要与 NTSC 视频的模糊度匹配,您可以使用较低的分辨率渲染,并在合成时将图像调整得更大。同时,如果您单独渲染柔和点云粒子元素,则您可能能够使用更小的渲染设置,也许只是您的最终输出分辨率的 1/4,并且无任何抗锯齿。

请参见“Render”>“Editors”>“Render Stats” 中的“Object Rendering Parameters”。

对于每个对象和相机视图,请将“Object Rendering Parameters”(“MB Texture Samples”和“MB Shading Samples”)设置得更尽可能低。

请参见“Render”>“Globals” 中的“Motion Blur”和“Render”>“Editors”>“Render Stats” 中的“Motion Blurred”。

在动画过程中不要对不移动或很少移动的对象使用运动模糊。您可以全局(在“Render Globals”下)或按对象(在“Render Stats”下)关闭运动模糊。

请参见“Render”>“Editors”>“Render Stats” 中的“Shadows”。

避免阴影投射曲面。阴影投射曲面越少,生成阴影贴图/阴影投射就越快。受所有阴影投射曲面束缚的体积越小,阴影贴图的密度就越高(并且阴影质量也就越好)。

请参见“Render”>“Globals” 中的“Anti-aliasing Levels”。

保持“Anti-aliasing Levels”尽可能低。它们对渲染时间影响很大。请使用下列建议的值:

质量 最小值 最大值
0 0
中等 0 4
3 12

预览渲染

请参见“Render”>“Globals” 中的“Animation”。

确保将“Animation”设置为“OFF”(在“Render Globals”下)。解析动画曲线可能会非常昂贵。

请参见“Render”>“Globals” 中的“Render”。

如果可能,请将“Render”设置为“ACTIVE”(在“Render Globals”下),这样,只有活动对象才会被渲染。

渲染

在渲染过程中不要在计算机上运行任何其他重要进程。如果可能,也不要在渲染过程中运行任何其他次要进程(例如,wrl)。

密切观察内存使用情况,尽量避免使用交换空间(请参见“减少内存使用量”)。

内存使用情况

在使用上述方法优化场景之后,渲染可能仍会使用您的所有可用内存和一些交换空间。

渲染巨大的复杂场景时,即使内存足够大,也可能会用尽指针空间。32 位处理器无法为大于 232-1 (大约 2 GB)的内存寻址。但在您减去堆栈和堆的开销之后,32 位应用程序将最多可使用大约 1.8 GB。

减少内存使用量

确保将系统设置为使用所有可用内存(“hinv”指示 RAM,“/etc/swap -ln”指示交换空间大小)。若要使您的进程可以使用所有 RAM,请键入“limit”并查看 RAM 信息是否匹配。如果计算机上的 RAM 超过 256 MB,则通常匹配不正确。

减少对无关紧要的曲面的细分(“Windows”>“Render stats”)。

减少平铺大小(渲染命令行选项 -T),这对于除 Raytracer 之外的所有渲染器都很有用。

确保根据生成的渲染的重要性,使用适当的纹理贴图分辨率(例如,请不要将 4kx4k 纹理贴图应用于无关紧要的对象)。

请降低您的阴影贴图的分辨率(“Multi-lister”>“Light”>“Shadows”)。

除非必须,否则,请不要使用 Raytracer/Powertracer,这些应用程序会比 Raycaster 占用更多的内存。

减少“File”纹理所用的内存

对于“File”纹理,请将“FILTER”设置为“OFF”。这样可避免在为纹理贴图过滤时分配额外的内存;但是,这会产生锯齿瑕疵。请参见“Render”>“Multi-lister” 中的“Filter”。

请将“Render Globals”下的“Texture Caching”设置为“ON”,并将“Disk Cache Limit”设置为大于所有纹理所需大小的值。这会显著降低渲染作业的运行规模。该作业将使用更多的临时磁盘空间,但使用的内存会更少。

或者,您也可以将下列行添加到 SDL 文件的“DEFINITION”部分中:

texture_caching = ON;
texture_cache_size = 32;
texture_cache_disk_limit = <maximum space to use for textures>;

通过使用带有 -l 选项的命令行渲染器,增加 File 纹理可以使用的临时磁盘空间量。-l 后指定的值指明渲染器可用于 File 纹理的 TMPDIR 磁盘空间量。增大 TMPDIR 磁盘空间会为渲染器释放一些 RAM。(TMPDIR 是指定临时磁盘空间位置的环境变量。)

使用命令行渲染器

使用“File”>“Export SDL”为您的场景保存 SDL 文件。退出交互式软件包,并使用命令行渲染器来渲染 SDL 文件。

减少光线追踪时的内存使用量

将 SDL 文件中“DEFINITION”部分的“grid_cache”值设置为小于 4000。尝试在测试渲染之间按每次减少 500 的方式减小“grid_cache”值,在“grid_cache”降为 1000 后,尝试在按每次 100 的方式减小。

请减小“Render Globals”窗口的“Raytracing Maximum Limits”部分中的“Subdivide Recursion”限制值(在“Global Quality Parameters”下),但需要注意,这样可能会使性能发生很大变化。