因为很多人问到了预览和渲染结果不一致的情况(包含预览正常,渲染出现其他错误等原因),而我往往给出的回答是优化工程,但有的人连优化工程是什么意思都不知道,而优化工程又不是简单一句话能说完了,所以我在这里统一进行详细的说明,希望对你们有所帮助。


优化工程

说这个之前,先来了解一下计算机的基本工作流程。通过计算机执行命令的软件中(基本包含所有的后期软件了),都是通过键盘和鼠标等输入设备对计算机上的软件进行互交,由计算机执行输入命令,进行计算后呈现到显示设备上。

简述:鼠标/键盘 → 输入命令 → 软件接受命令 → 计算机计算命令 → 返回结果到软件 → 呈现到显示器上


优化工作流程是指在不变更显示结果的情况下,减少计算量或者加快显示结果

减少计算量或加快显示结果有很多种方法,比如:提高电脑配置、提高计算机执行效率,提高软件工具速度等等。

但通常情况下,我们只是使用软件的普通用户,不是硬件设计师,所以无法更改硬件运算逻辑提高执行效率,也不是软件开发工程师,无法修改核心指令,加快工作流程,仅仅只能对软件的操作上,减少计算量,从而加快显示的结果,那就是优化。


以 C4D 为例,预览和渲染不一致大多数情况下就是因为计算过程发生了错误,导致计算错误的原因有很多,有可能是几何体模型,有可能是材质,也有可能是动画,这里先来简单科普一下 C4D 软件的几何体优化流程


C4D 的几何体优化流程

这里为了方便理解,我把 C4D 的优化流程分为两种进行说明,一种是用于预览的投影绘制流程,作用是显示视图中的全部几何体。另一种是用于查看最终结果的渲染流程,作用是显示几何体与材质之间光的互交结果。


先说一下什么是绘制流程

在 C4D 的视图窗口中,所有显示在视图中的几何体(点线面)都会以 opengl 的 API 进行投影绘制显示。这里不需要知道 opengl 和 API 具体是什么(当然有兴趣的当然建议你们多去了解下),只需要知道视图窗口应用它后会显示对象就好了。


为了更加直观的理解,这里打开 C4D 软件进行说明,默认是一个空场景

1.jpg

很多人以为这空视图中没有进行任何计算,其实是错的,这空视图中实际上就有很多投影计算在其中

红框内是视图区域,其中有网格和两个红绿蓝坐标等物体,这些都是通过 opengl 绘制后显示的结果


可以通过下方步骤,验证上方说法

打开视图设置(视图设置快捷键 shift + v),在 HUD 中勾选 opengl 统计

2.jpg


就可以查看到视图中经过 opengl 绘制的几何体

3.jpg

就算一个默认空场景中也会有309条线


新建一个空对象,视图也会重新绘制空对象的轴向

3.5.jpg

轴向由 108 个三角形组成


现在我们知道了 C4D 视图当中的几何体都会进行投影绘制,而这个绘制是有上限。特别是低版本软件,以 C4D R19 例,当绘制面数和场景复杂时,视图会开始卡顿,有时还会延迟响应。


响应速度与硬件配置无关,是 C4D 软件的单位上限(使用 R21 以上版本会提高上限)


再来说一说几何体渲染流程

渲染是计算几何体形状和材质对光线的互交的计算结果,所以视图中的一些坐标和网格并不会被计算。这里先不谈深度渲染,简单说说几何体导入到渲染器会发生什么变化。

通过上方方法,在视图设置中开启 opengl 统计,再开启多边形总计

4.jpg

现在我们会发有三种基本型,三角形,四边形和多边形。( opengl 绘制视图会不断的刷新中,所以切换选择对象或者切换选择工具绘制都会发生变化)


关于面数的组成在之前的文章中也有说过

5.jpg

图片来自 C4D插件 重新拓扑QuadRemesher1.01汉化版


但这里要说的不是这个,而是多边形显示 6,而三角形显示 12,这是为什么呢?


没错,答案已经在上图中了,虽然 C4D 软件认为它的 6 个多边形,实际上是三角形组成个 6 个多边形,正好是 12 个三角形

5.jpg

把 6个多边形的立方体,鼠标右键三角化,就得到了 12 个多边形,而且三角形数量也是 12


顺便给你们留一个自己思索的小问题,为什么下图中有 3 个多边形和 4 个三角形?

6.jpg


你可能一脸懵逼,我为什么要说这个,这和几何体渲染有关吗?答案是肯定的,渲染时会收集场景中的多边形数据发送到渲染程序,模型进行交换的数据结构就是三角形,即使你在 C4D 预览窗口中显示是四边形,发送到渲染器中也是三角形,所以当你以为预览窗口中的 800 万面好像可以承受时,渲染器承受的可能是 1600 万面,甚至更高。


为什么会更高?这里就还需要说一下另一个知识点,C4D 有很多工具,而很多工具中有细分属性,如生成器中的细分曲面,它分为编辑器细分和渲染器细分

这里先简单解释下细分的计算方式

新建 1 个四边形,多边形为 1,三角形为 2 

11.jpg

细分一次就是 ×4(乘 4),多边形数量为 1,1×4 = 4,三角形数量为 2,2 ×4 = 8

12.jpg


细分两次就是 ×4×4 ,乘两次后,多边形数量为 1×4×4 = 16,三角形数量为 2×4×4 = 32

13.jpg

细分数量以此类推。


解释完细分算法后,再来看看编辑器细分和渲染器细分

以一个简单立方体为例,添加细分曲面,并且编辑器细分调 0,渲染器细分调 3

9.jpg

编辑器细分只会影响视图窗口的绘制结果,由于编辑器细分为 0 ,所以视图中三角形绘制不会发生任何变化

现在我们执行渲染当前活动视图

15.jpg

上图是渲染结果,你可能感觉不到区别,好吧,那我加个线描渲染器

16.jpg

现在渲染出来的模型是立方形,你可能会觉得,没问题啊,没什么不对的,那我们再来看看渲染到图片查看器的结果

17.jpg

现在出现了两种不同的渲染结果,这是为什么?

这是因为,如果以渲染当前视图,会直接以视图中的几何体与材质和光进行计算,而在图片查看器中渲染则会把几何体模型发送到渲染器后,再执行渲染。

渲染器细分设置的是 3,它接受的应该是 3 次细分,所以渲染器会得到三角形的数量是 12×4×4×4 = 768才是正确数据,

那么我们怎么才能在视图窗口中查看到正确的渲染结果呢?

非常简单,把细分曲面转为可编辑对象就可以查看到渲染的几何体结果(快捷键:C)

14.jpg

那么现在你应该可以知道,视图中预览结果和渲染结果的计算方式并不相同,根据不同的操作会得到不同的结果是很正常的。有的时候 C4D 的一些工具会给我们在视图中操作带来便捷性,但对于渲染来说,只会增加渲染复杂度,所以如果我们想要正确的几何体渲染结果,那么就应该统一模型拓扑结构,也就是转为可编辑对象。


到现在也就说了说产生差异的原因,并没有说到优化方法,怎么优化,什么时候优化,这个准备留个悬念,等下期讲,其实也非常简单。




添加对象 → 向量计算和矩阵计算 →    → 窗口显示



© 2018 Corporation 木客教育  ICP备案号:粤ICP备17088176号-1

技术支持:英铭网站建设
返回顶部
技术支持 英铭科技