04 1月

ray tracing 简介

光线追踪的渲染技术已经被大量运用到现在的电影产业中,我们身边也出现了大量光线追踪的渲染器,arnorld,vray,houdini的mantra,maxwell等等。它出现的目的也是为了追求更真实的物理效果。
800px-Ray_trace_diagram.svg
光线追踪算法中,一个物体要被观察者(camera)看到要具备两个因素。其一,就是要有光,物体不被光照到我们是看不到,其二,就是当然要有物体,光被物体反射入观察者眼中才能被看到。所以,光线追踪算法就是计算光线和物体交互,碰撞检测的算法。
光线追踪算法分为两种:正向追踪算法和反向追踪算法。其中,正向追踪算法是大自然的光线追踪方式,即由光源发出的光经环境景物间的多次反射、透射后投射到景物表面,最终进入人眼。
反向追踪算法正好相反,它是从观察者的角度出发,只追踪那些观察者所能看见的表面投射光。就目前而言,所有3D制作软件的光线追踪算法都是采用反向追踪法,原因是这种算法能够最大程度地节省计算机的系统资源,而且不会导致渲染质量的下降。

接下来我们来介绍栅格化(Rasterization)。就是将图转化为一个个栅格组成的图象

为什么要栅格化,因为我们知道我们的电脑屏幕是由像素点组成。目前主流的像素已经1920*1080。也就是说,我们的屏幕横向有1920个像素,然后丛向有1080个像素点。

所以,我们要将三维的模型投射到屏幕上面,然后将每个像素点填充上一个相对硬的颜色,就好比一个圆是由多个网格组成。当然了,网格细分越高,显示精度也越好。

raster

光线追踪的灵魂所在就在于光线。所以,我们基于屏幕的每个像素点射出去一个光线。如果射出去的光线碰到了障碍物(模型),我们就能将这个像素点填充上相应障碍物的信息(根据灯光,物体材质)。如果什么都没碰到,那么相对因的像素就什么都不显示(背景颜色)。

现在我们知道了,每个像素到底看到了什么。然后我们通过重复的遍历屏幕上的每个点,那么一个球就出现在屏幕上了。是不是很好理解?

好了,下面我用为代码来简单介绍一下一个简单的渲染器的工作流程。

影响一个像素点颜色由三个通道来表示,R(红),G(绿),B(蓝)也就是这三个通道来表示,我们知道通过这三个颜色组合,我们可以得到所有的颜色。比如红色+蓝色=紫色。如果还不清楚的同学建议你们去看颜色构成方面的内容。

我们现在定义每个颜色通道为8位,也就是2^8。他表示范围为0-255。0表示最小值,255表示最大值。所以

黑色:0,0,0

红色:255,0,0

绿色:0,255,0

蓝色:0,0,255

白色:255,255,255

那么问题来了,如何来决定某个像素的值呢:

它由多个因素来决定的。请看下图:

我们简单来分析: 首先一束光射出去,我们打到一个物体上,

如果打到一个物体向光面上,那么我们会根据物体的材质(物体本体颜色,对光的漫反射,对其他物体的反射)来计算像素点材质。

如果打到一个背光面上,那么这就是阴影。

如果什么都没打到那么,那么他就是个背景颜色。

毕竟在光线追踪影响物体颜色的因素太多了,因为光线是在空间中不停的反弹。有直接反射,间接反射,理论上来说如果计算时间足够长,那么得到的结果就无限接近真实效果,但是时间和效果往往是矛盾的,我们如何在有限的时间中得到尽量真实的效果就是我们之后要做的。

4 thoughts on “ray tracing 简介

  1. high inflation in the world market will slow demand of oil.Energy prices ,natural gas in the US are going do.#2&n82w0;Food, energy, education, healthcare prices have been going nowhere but up”It has been since I have known capitalism.But inflation was always in the 2.0 target.I never said it always hit target.

发表评论

电子邮件地址不会被公开。