计算机中所说的「渲染」是什么意思?

论坛 期权论坛 股票     
期权匿名问答   2023-5-19 00:50   2216   5
计算机中所说的「渲染」是什么意思?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2023-5-19 00:50:57 发帖IP地址来自 北京
答案不重要,福利最重要:
https://xg.zhihu.com/plugin/24492e412f4f4bcf81417921228d0262?BIZ=ECOMMERCE

接下来进入正题:
渲染是三维计算机图形学中的最重要的研究课题之一,是模型成像的过程。渲染在建筑,游戏,模拟,电影或电视视觉效果以及设计可视化的各种场景中都被充分的使用,而每个行业都采用不同的特征和技术平衡。


图像显示的过程大致如上图所示,CPU拿到位图数据 ,然后通过总线发送给GPU,GPU做图层渲染,然后将渲染的结果保存在帧缓冲区(FrameBuffer)里面,在由视图控制器根据VSync信号(当一幅画面从上到下绘制完成后,电子枪恢复到开始位置,准备画下一帧前,会发出一个垂直同步信号,简称VSync)在适应的时机将帧缓冲区里面的内容给到显示器。

  • 根据实现的技术不同,渲染主要分为:

  • 光栅化( rasterization):将矢量顶点组成的图形进行像素化的过程
  • 光线投射(ray casting):正向投射。从图像的每一个像素,沿视线方向发射光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。
  • 光线跟踪(Ray tracing):逆向跟踪。沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点,并继续跟踪,找出影响点光强的所有光源,从而算出点上精确的光线强度。
自20世纪90年代以来,传统的3D渲染通常会采用一种被称为光栅化的流程。光栅化使用基于三角形或多边形网格创建的对象来构建物体的3D模型。然后渲染管线将3D模型的每个三角形转换成2D图像平面上的像素。这些像素最终在屏幕上显示之前,还可能会被进一步处理或“着色”。虽然光栅化对于实时生成图像非常有效,但为光栅化管线添加逼真的光照效果会使复杂性提升,因此就需要基于给定场景手动进行许多参数调整。要想维持良好的性能,通常需要通过剪切或处理掉不可见的一些物体面,或进行估计,这可能会影响整体的逼真感。而光线追踪是实现更高逼真度的重要一步。
光线追踪通过模拟光线的物理行为来生成高度逼真的图像。光线追踪通过追踪光线从观者的眼睛穿过虚拟3D场景的路径来计算像素的颜色。光线在穿过场景时可能会从一个物体反射到另一个物体(引起反射)、被物体阻挡(引起阴影)、或穿过了透明或半透明物体(模拟半透明或电介质,如玻璃或水)。所有这些交互结合起来就产生了屏幕上所显示像素的最终颜色。


  • 根据渲染的时机来分类,可分为:

  • 实时渲染:指计算机边计算画面边将其输出显示,可以实时操控预览画面。
  • 离线渲染:指计算出画面时并不显示画面,计算机根据预先定义好的光线、轨迹渲染图片,渲染完成后再将图片连续播放,实现动画效果。
如前所述,光栅化技术多年来一直作为实时渲染标准(对于电脑游戏尤为如此);虽然很多光栅化场景看起来十分出色,但光栅化渲染仍存在很大局限。例如,若仅使用光栅化技术渲染反射和阴影,我们需要简化可能导致多种不同伪影的设想。同样,静态光照贴图可能看起来正确无误,但物体一经移动就会失真,光栅化阴影经常会出现锯齿和漏光问题,而屏幕空间反射只能反射屏幕上显示的物体。这些伪影有损游戏体验的真实感, 而开发者和艺术家若要试图通过附加效果实施修正,也要付出高昂的代价。 实时光线追踪的引入解决了该问题,其可带来近乎百分之百真实的渲染画面。
为什么选择GPU渲染?
GPU作为图像处理器,最初被设计时就是用来做实时的图像渲染(光栅化)的加速的。在图形渲染领域,不管是影视动画、建筑表现还是CG广告,GPU都凭借其专为图形加速而设计的架构和计算能力,为用户带来更加高效的渲染解决方案,GPU渲染具有更快速度、更低成本的优势,而且GPU加速渲染的可用性也不断提高。
各行各业的设计师和艺术家必须以空前速度生产出更优质的内容,但其生产力却受基于 CPU 的低效渲染解决方案所限。GPU 加速渲染技术的最新进步可以为强大而灵活的解决方案提供出色的性能表现,而 NVIDIA RTX 服务器正是利用这些技术进步实现了生产管线的革新。


NVIDIA RTX 服务器是一款超高效的综合渲染解决方案,从桌面交互式会话到数据中心内的最终批量渲染,无不适用。NVIDIA RTX 服务器由 NVIDIA Quadro RTX GPU 助力,用以加速在 CUDA-X 显卡上构建的主流渲染应用程序。作为一款经认证的解决方案,NVIDIA RTX 服务器可提供前所未有的渲染与计算性能,而消耗的成本、空间和功率却远远低于传统 CPU 渲染场,因此,您可以超越以往的速度更快制作出精美内容。
NVIDIA RTX 服务器采用可高度配置的服务器参考设计,可为提升桌面渲染性能、加速离线渲染和置备高性能虚拟工作站提供所需动力。所有这些功能均集成在灵活单一的解决方案中。
<a href="http://xg.zhihu.com/plugin/24492e412f4f4bcf81417921228d0262?BIZ=ECOMMERCE" data-draft-node="block" data-draft-type="link-card" class="internal">https://xg.zhihu.com/plugin/24492e412f4f4bcf81417921228d0262?BIZ=ECOMMERCE
3#
期权匿名回答  16级独孤 | 2023-5-19 00:51:09 发帖IP地址来自 中国
我提供一个给妹子解释的思路:
渲染和化妆是一样一样的
为什么这么说呢?我们来看这样一个图:



这是一个丑陋的素颜,一般我们管它叫白模

给它随便上点儿什么粉:



渲染里面,我们管它叫贴图(texturing),别看现在已经很普遍了,在Quake那个年代,模型贴图也是跨时代的技术

嗯,简单打个光:



光照是渲染必不可少的部分,实际上它要比这里描述的复杂很多,这里还会使用法线贴图(Nomal Mapping)的技术,给模型增加更多细节

补点水,磨个皮:



针对某些材质,在光照后,我们还会给它额外增加一些通透感,渲染管这个叫次表面散射,你管它叫磨皮就行

涂点阴影粉底,让五官更立体:



通常会在打光之后,给场景增加一些阴影和环境遮蔽(AO)的信息,以凸显场景的层次感

最后搞点滤镜,配个炫彩的标题,发个朋友圈:



后处理一般是渲染的最后一个环节,就是我们拍照用的“滤镜”,当然,渲染中用到的滤镜未必是针对人像的,像是景深、运动模糊、体积光、后期曝光等都属于后处理

其实我非常想把这里面每一个环节和化妆联系起来,但是我压根儿不懂妆是怎么画的。有妹子就说了:你这里面几张图看起来也差不多啊,折腾半天也看不出来效果,有啥用?
呵呵,你买几百几千的化妆品涂脸上都是有用的嘛?怎么不见你少买?
简单地说:美术负责提供素颜(模型)化妆工具(贴图等);渲染工程师负责给素颜化妆
当然,如果你是一个游戏爱好者,想看一个比较正经的渲染流程,去学习更多知识的话,我建议你去看这篇关于GTA V渲染技术的科普文章。
之前看到一篇技术sides里面说,理想的美术和渲染工程师的协作模式是:
“You make pretty art. I'll make it fit.”
但我觉得通常的情形是:
“You make ugly art. And I'll make you take the blame.”
所以就好像关于颜值这个问题有两派论点,一派认为清水出芙蓉,天然去雕饰,一个人好不好看关键还是看底子;另一派认为没有丑女人,只有懒女人,丑都是因为不会化妆。关于一个游戏画面好不好看,当然也就有两派的说法,不过对于渲染工程师来说,游戏画面好不好看的原因,是薛定谔的
比如你要是看到过这个DEMO:
优酷视频这些:






然后说:“哇,这个渲染效果好好啊,简直快要到电影水准了!”
我会表面上毫无波澜地跟你说:“是啊,国内渲染水平不但不比国外差,还有望赶英超美,你看,这就是我做的。
但是你要是跟我说:“《逆水寒》上GTX 1080TI还卡的要命,画面还不如早几年出的《天涯明月刀》,你怎么说?”
呵呵,我不是项目组的,具体情况我也不知道,可能是。。。鹅厂的美术比较牛逼吧?
当然,说一千道一万,这些全部都是我YY的,压根儿就没有妹子一脸好奇地问过我“渲染”到底是什么。就算偶尔有妹子假装客气地问问,通常我说两三句之后,她们就开始不耐烦了。
4#
期权匿名回答  16级独孤 | 2023-5-19 00:51:17 发帖IP地址来自 北京
引用我上图形学的时候老师彭群生的话,“render翻译成渲染是不对的,render的翻译应该是绘制”
所以意思很简单明了,就是把场景画出来的意思啊
5#
期权匿名回答  16级独孤 | 2023-5-19 00:51:59 发帖IP地址来自 北京
发布与我的专栏:
miccall:当我们在说"渲染"的时候,我们在说什么? -- 从渲染到渲染方程,图形学的一路假设我们在一个空的三维空间中,创建了三个点


我们知道,要确定一个面,至少得有三个点,而一个物体的构成,就是一个个的面,在图形学中,我们一般用三角面代替


这是在我们假象的三维空间中,但是我们要在二维的显示器中看到他,我们就称之为把三角形从三维空间渲染到二维空间中 。



在现实世界中,三角形会将光线向各个方向散射。但是对于一台电脑,根本不可能去计算所有不同方向的光线


所以,我们计算机渲染图像,仅仅计算了那些散射到我们人眼方向得光线 , CG里面也叫摄像机方向 ,图形学中称之为 视角方向 。

所以让我们在 3D 空间中添加一个摄像头 ,并在前面透视点让我们放置一个屏幕网格,其中每个框是我们渲染图像的一个像素。


现在,我们只画出与我们相机的透视点相交的一条光线。 如果这些光线相交于我们的屏幕,那么屏幕就能知道我们观察这个三角形的边界


我们将标出这个三角形的边框:


我们知道边界之后,在边界与像素之间重叠得部分渲染像素,其余地方不做处理,我们就得到了这个三角形的图像:


这种投影到像素格子的方法就是是计算机图形学中的光栅化渲染方法。

这是七十年代的图形科学家所研究的内容,并且至今仍然是GPU渲染管线的一部分

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


光栅化是以物体为中心的,这意味着我们从相机捕捉 物体所发射到相机的光线,而
Ray casting 以图像为中心 ,也就是说,如果我们只考虑那些实际有用的光线
(进入相机的光线) - 那为什么不把这些光线从相机发射到场景中去呢 ?

所以这一次,我们将从我们的虚拟相机开始,并通过相机向每一个像素都发射一条光线:


现在我们将判断每条射线是否射中了我们的每一个三角形 ,如果一个光线遇到多个物体 - 我们会取最近的那个点。


这个过程解决了困扰光栅化技术的一个重要问题,那就时可见性问题,如果是光栅化,那时候还不知道怎么解决远近遮挡问题 。但是后来,光栅化的解决方案是一种称为Z缓冲器的技术 , 它创建了一个深度图,然后根据该深度图检查了所有内容。但是Ray casting就不用这么麻烦。


但是他也有很大的弊端,就是计算量实在是太大了,因为他要判断相当多的射线与物体的三角面是否相交 ,假设我们有一个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 分钟。

不像光栅化,递归光线追踪 实际上是模拟真实光线在物体周围反射时的真实行为,但是对真实的表现,还是远远不够的,后来又有大量的人们开始进入该领域深入研究,并在计算机科学中,投入大量的时间尽力,开始研究光线追踪算法 ,以此来真正模拟光的规律。

即使光线追踪产生非常逼真的阴影,反射和折射,像运动模糊和景深场这样的问题可以相对容易地解决,但是最多具有极复杂的光线模拟:

其中,最重要的应该是间接照明 , 相对直接照明是指光直接照射并被物体反射。但在真实世界的光线不仅来自光源



间接光被用于全局光照



直接光与间接光

1986年,James Kajiya 发表了一篇名为“rendering equation”的论文。于是世界就不一样了。这个方程我们稍后再讲,



James Kajiya

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



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

同样,渲染方程最难的一点也是计算 。
所以在发展过程中,游戏渲染采用了许多策略来尝试找到计算的捷径。
最早的是尝试从许多不同的方面呈现基本光线追踪图像的光能传递角度和求取他平均值。
后来 , 又出现了蒙特卡罗积分,这是基于概率的一种近似方式,可以通过求平均来求解积分,这个方法运用了大量的随机值 。来对光线进行采样和优化 。

后来运用到渲染方程已经是十年后了,皮克斯的第一部全长CGI电影:玩具总动员于1995年问世 :


此后的日子里,人们就像这样,仿佛找到了研究的方向,不断的寻求积分的最优解,有快解。
于是,不断的追求速度与精度,就成了图形学发展的最重要的方向 。
6#
期权匿名回答  16级独孤 | 2023-5-19 00:52:43 发帖IP地址来自 中国
简单来说就,渲染 = 光栅化(rasterization)or光线追踪(ray tracing) + 着色(shading)
前者用于解决“看不看得见物体(visibility)”的问题,后者用于解决像素的颜色问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP