分享

新手提高必看——渲染的底层逻辑原理

 mike011 2020-09-26
假设在一个空三维空间中,创建三个点。

一个面至少有三个点,而一个物体的构成,是一个个的面,在图形学中,一般用三角面代替。
假象三维空间中,要在二维显示器中看到他,就要把三角形从三维空间渲染到二维空间中 。

现实世界中,三角形会将光线向各个方向散射。对于一台电脑,不可能计算所有不同方向光线。
计算机渲染图像仅仅计算了那些散射到人眼方向的光线 ,也叫摄像机方向 。所以在3D空间中添加一个摄像头 ,并在前面透视点放置一个屏幕网格,其中每个框是渲染图像的一个像素。
画出与相机透视点相交的一条光线。如果这些光线相交于屏幕,屏幕就能观察到个三角形边界。
标出了这个三角形边框。
知道边界之后,在边界与像素之间重叠部分渲染像素,其余地方不做处理,得到了三角形图像。这种投影到像素格子的方法就是光栅化渲染方法。

除了光栅化,还有另一种方法 - ray casting :回到3D对象空间,但这次将添加第二个三角形。

光栅化以物体为中心,意味从相机捕捉物体所发射到相机的光线,而Ray casting 以图像为中心 ,如果只考虑那些实际有用光线进入相机的光线,为什么不把这些光线从相机发射到场景中去 ?并通过相机向每一个像素都发射一条光线。
将判断每条射线是否射中了每一个三角形 ,如果一个光线遇到多个物体,会取最近那个点。
这个过程解决了是可见性问题,如果是光栅化,当时不知道怎么解决远近遮挡问题 。光栅化解决方案是一种称为Z缓冲器的技术,它创建了一个深度图,然后根据该深度图检查了所有内容。
但也有计算量大弊端,因为要判断相当多的射线与物体三角面是否相交 ,假设有一个1000 x 1000 像素的图像,那么就要计算 1,000,000 条光线来检查是否和场景中一个多边形相交,对计算机来说,这个计算相当费时。
由于这个原因,在20世纪70年代的大部分时间里,光线投射并没有被广泛的研究
光栅化有三个问题一直没有人能够很好地解决:那就是如何模拟真正的阴影,反射和折射。
后来,解决办法还是回到Ray Casting ,并在这项旧技术上添加新的变化。
1980年,在贝尔实验室工作的一位名叫Turner Whitted 的工程师在 SIGGRAPH 发表了一篇论文,题为“An Improved illumination Model for Shaded Display”,一手解决了阴影,反射和折射问题。
Whitted的技术称为递归的射线追踪 Ray tracing  。还是从相机的射线开始像之前一样。
这些被称为主光线。但是,当主光线接触一个表面,Whitted的方法是画出反射射线。
为了解决阴影问题,通过在反射方向上绘制二次光线来绘制阴影光线,只要这个光线可以反射到光源,就知道是光源照亮这个物体。

如果发现光与表面之间存在物体,这时,表面就处于阴影中 。
当光线遇到表面反射,使用入射角绘制反射光线,以不断反射下去,看看这条反射光线在哪里。如此不断的反射,于是被称之为:递归射线追踪。

如果对象是透明的,则需要类似过程。但是使用角就变成使用折射率来确定新折射光线的角度。

最终光线追踪得到的效果。
正如所看到的那样,让Ray Casting 更好的解决方案就是绘制和分析更多光线。
Turner Whitted 1980年在他的论文中第一张光线追踪图像之一 , 在这张图片中,明显的阴影,反射和折射效果。这512x512渲染图花了74 分钟。递归光线追踪实际上是模拟真实光线在物体周围反射时的真实行为,但是对真实表现,还远远不够、
即使光线追踪产生非常逼真阴影,反射和折射,像运动模糊和景深场这样的问题可以相对容易地解决,但是最多具有极复杂的光线模拟。其中,最重要的应该是间接照明 , 相对直接照明是指光直接照射并被物体反射。在真实世界的光线不仅来自光源。

间接光被用于全局光照

直接光与间接光

它基于Conservation of energy【能量守恒】和麦克斯韦方程,以正确地模拟应该被感知光线 。

辐射率大小对环境光的影响

同样,渲染方程最难一点也是计算 。在发展过程中,游戏渲染采用了许多策略来尝试找到计算捷径。
后来 , 又出现了蒙特卡罗积分,这是基于概率的一种近似方式,可以通过求平均来求解积分,这个方法运用了大量的随机值 ,以对光线进行采样和优化 。
此后像找到了研究方向,不断寻求渲染最优解算方式,不成为图形学发展的最重要方向 。


渲  染

渲染,是CG的最后一道工序(除了后期制作)也是最终使图像符合3D场景的阶段。英文为Render,也称为着色,但一般把Shade称为着色,把Render称为渲染。

因为Render和Shade这两个词在三维软件中是截然不同的两个概念,虽然它们的功能很相似,但却有不同。Shade是一种显示方案,一般出现在三维软件的主要窗口中,和三维模型的线框图一样起到辅助观察模型的作用。很明显,着色模式比线框模式更容易让我们理解模型的结构,但它只是简单的显示而已,数字图像中把它称为明暗着色法。

在像Maya这样的高级三维软件中,还可以用Shade显示出简单的灯光效果、阴影效果和表面纹理效果,当然,高质量的着色效果是需要专业三维图形显示卡来支持的,它可以加速和优化三维图形的显示。

无论怎样优化,都无法把显示出来的三维图形变成高质量的图像,这是因为Shade采用的是一种实时显示技术,硬件的速度限制它无法实时地反馈出场景中的反射、折射等光线追踪效果。而现实工作中我们往往要把模型或者场景输出成图像文件、视频信号或者电影胶片,这就必须经过Render程序。

Shade窗口,提供了非常直观、实时的表面基本着色效果,根据硬件的能力,还能显示出纹理贴图、光源影响甚至阴影效果,但这一切都是粗糙的,特别是在没有硬件支持的情况下,它的显示甚至会是无理无序的。


近十天历史发布链接

  1. 3D建模可以养活自己吗?

  2. 学习AE和C4D几个疑问和建议

  3. 3dsmax最稳定和室内设计用的最多版本

  4. 为什么Blender没有像C4D那样火

  5. 学习3dsmax也许是错觉

  6. 3dsMax只适用于建筑行业了

  7. 2020年暑期电脑配置

  8. 一周学会su-sketch up(草图大师)-2-技巧提升

  9. 一周学会su-sketch up(草图大师)-1-入门操作

  10. C盘空间越来越小原因

提示:公众号菜单“历史发布”,可浏览全部历史发布

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多