最近有人跟我反映,换了双路至强,感觉渲染也没比3770K快多少,问题出在哪里? 我现在做了一些分析测试,相信论坛里也有不少做3D的设计师,欢迎大家一起讨论。 先以这个为例:国外一个数据量较大的帖子:http://www.evermotion.org/vbulle ... 1b13443daac38300f65 帖中的素材始于06年,3DsMax 6版本,一直用到现在,都可以正常工作,并且可以用于测试。 素材下载: ![]() ![]() 从Mental Ray中渲染器的设置,我们发现Mental Ray采用的是32位浮点运算,由CPU来完成。可以指定渲染块大小,所以我在数据表最后特意加入了块大小这列。 通过分析渲染过程中的CPU工作状态,我们得知:由于渲染是分块进行的,不同的块内需要着色的复杂程度、光照、细节纹理都不一样,所以渲染速度也会大不相同。系统会分配CPU各个线程给不同的块,速度快的线程就进行下一次的分配,继续渲染下一个块。 通过对6950X运行上述例程渲染过程的观察,我们发现图中纯色部分占了很多,这些部分渲染会非常快,而车体部分元素较为复杂,渲染较慢。默认设置下要渲染的图像大小只有800x600像素,打开Mental Ray,发现默认设置的渲染块大小就有128x128像素,在十年前CPU还处在单核心时代那几个线程来讲还算合理,对于现在的CPU动不动几十个线程来讲,实在太大了,计算一下长和宽,基本上7*5=35个线程就可以排满。这就导致分配到纯色部分渲染块很快结束了,然后等待车体部分的渲染,而车体部分的渲染只由分配到那部分的几个线程进行,造成了大量的资源闲置。如果你的CPU超过35个线程,在默认状态下有些线程就分配不到块,直接就不工作。 ![]() 通过修改渲染块边长设置为32,我们发现6950X的测试成绩比默认的边长128提高了许多,从3分钟以上直接提升至1分37秒,几乎是100%的速度提升。再分别测试16、8、4的块大小,发现成绩出现比较有意思的先快后慢的变化趋势,在渲染块边长设为16时达到最快。 ![]() 综合来看,我认为,如何在现有硬件基础上最大化渲染效能,还需要这样优化软件设置: 1、看渲染的图像元素分布情况。例如本文中所用的悍马案例就是典型的分布不均匀的,不同线程渲染速度会差很多,因此需要有足够的线程来渲染元素复杂的部分,建议优先考虑减小渲染块边长以避免资源闲置;如果元素分布较为均匀,各线程渲染速度差不多,建议在资源充分利用的前提下优先考虑增大渲染块边长,减少线程分配次数。 2、在1的基础上,根据自己的CPU线程数设置渲染块大小,减少线程空置的时间。对于本例来说,800x600的分辨率,8个线程可在渲染块边长为32像素时发挥最大效能,而20个线程在渲染块边长为16像素时速度达到最快。如果渲染图片尺寸加大,那么渲染块尺寸也可以同步放大。 3、根据渲染图的分辨率设置渲染块边长,在保证资源充分利用的基础上,尽量增大渲染块边长以减少线程分配次数。 4、对硬件来说,提升线程数的性能收益大于提升单线程效率,通过超频的手段提升CPU频率以加快单线程效率,只能是在现有硬件基础上进一步挖掘潜力,需要量力而行。 5、3DsMax软件版本:根据反馈的测试数据情况来看,2010之前的版本渲染速度普遍较快,之后的版本会比较慢,原因还有待进一步研究,如果只是修改了默认的块大小,那就可以通过上述方法自己修改优化回来。但我认为不要道听途说所谓的哪个版本最好用,自己用得惯的就是最好的。 以上是我的一些分析情况,欢迎PCEVA里做3DS的设计师一起讨论。保定×××医院提供 |
转载于:https://blog.51cto.com/12010197/1843339