第4章光线追踪

渲染是是考虑每一个对象是如何影响输出图像的

分为两种:

对象顺序渲染(object-order rendering):按对象顺序依次考虑每个对象对所有像素的影响并更新像素值。

像素顺序渲染(image-order rendering):按像素顺序依次考虑所有对象对每个像素的影响并更新像素值

两种方法计算结果相同,但在不同应用场景性能不一样。

通常是像素顺序渲染更简单,适应性更强,但产生一张图像时间更长(不总是这样);

先讨论像素顺序渲染

4.1(基本的光线追踪算法)The Basic Ray-Tracing Algorithm

光线追踪器有三个部分组成

1.光线生成(ray generation): 根据相机的空间参数计算每个像素上的“视线”的原点和方向

2.光线相交(ray intersection) 找到视线首先击中的对象,计算法向量n

3.着色(shading) 基于光线相交的结果计算出像素的颜色

基本的光线追踪程序是

for 每个像素 do

​ 计算视线

​ 计算第一个被光线“击中”的物体它的表面的法向量n

​ 设置像素的值通过交点,光线和法向量计算出来

4.2 透视(perspective)

正交投影(orthographic projection):投影线相互平行且垂直图像平面

斜射(oblique): 投影线互相平行但不垂直图像平面

透视投影(perspective perspective): 投影线交于视点

4.3 计算视线(Computing Viewing Rays)

​ 首先我们使用一条3D直线代表从视点e设向图像平面上的点s, P ⃗ = e ⃗ + t ( s ⃗ − e ⃗ ) ,

则p是视线上一点 s ⃗ − e ⃗ 为视线的反向 t<0代表对象处于视点之后

​ 现在的困难时怎么找到点s。如果在正确坐标系统中,这是个简单问题

我们所有的光线生成方法都是从正交坐标系统开始被称为相机框架

e ⃗ 表示视点 {u,v,w}表示3个基向量 , 对于相机视角来说u ⃗ 向前方向v ⃗ 向上方向

w ⃗ 向后方向,这是三个基向量组成的坐标系统称之为右手坐标系统

4.3.1 正交视角(orthographic view)

在正交视图下所有的ray的反向都是-w ⃗ 。所有的视线都从视点e和向量{u,v}决定的平面上平行射出,唯一需要确定的参数是图像平面在那。我们定

4.4 射线与物体相交(ray-object intersection)

4.4.1射线与球体相交(ray-sphere intersection)

给定射线P(t) = e + td和隐式曲面 f§ = 0;

当满足等式

​ f(p(t)) = 0 或 f(e + td) = 0

求得t解

球心为 c = (xc, yc, zc) 的公式为

​ (x - xc)^2 + (y - yc)^2 + (z - zc)^2 - R^2 = 0

相等的向量形式为

​ (p - c) · (p - c) - R^2 = 0.

任何点p满足这个等式 都在这球的表面上。

如果将射线p(t) = e + td代入这个等式上。则我们可以得到满足下列等式,t的解,

(e + td - c) · (e + td - c) - R^2 = 0.

整理该式子得到

​ (d · d)t^2 + 2d · (e - c)t + (e - c) · (e - c) - R^2 = 0.

在此式子中除了t是未知量,其他都是已知量

​ At^2 + B^t + C = 0

解出t

4.4.2 射线与三角形相交

根据重心坐标来计算得出。主要是重心可以根据三个顶点算出,可以不需要额外的存储空间

e + td = f(u, v).

该式中我们有3个未知量(t, u, v)

由三角形表达式可得出该式

​ e + td = a + β(b - a) + γ(c - a),

if β,γ >0且 β+γ < 1则 点p在三角形内部

反之 则在三角外部

如果没有解则射线与三角平面平行或三角退化(???)

4.4.3 射线与多边形相交

4.4.4

4.5 着色(shading)

​ 主要介绍两种经典的着色模型

​ 大多数着色模型,以一种或另一种方式,旨在捕捉光反射的过程,即表面被光源照亮并反射
部分光线到相机。 简单的着色模型是根据点光源的照明定义的。 光反射的重要变量是光的方向 l,它是指向光源的单位向量; 视图方向 v,它是指向眼睛或相机的单位向量; 表面法线 n,它是垂直于发生反射点的表面的单位向量; 以及表面的特性——颜色、光泽或其他特性,取决于特定型号

4.5.1 lambertian shading

lambertian shading

1.来自光源的能量落在表面区域上取决于表面与光的角度。 直接面向光的表面接收最大的照明;
2.与光方向相切(或背离光)的表面不接收照明;

3.以及介于两者之间照度与表面法线和光源之间的角度 θ 的余弦成正比。

​ L = kd I max(0, n · l)

L是颜色值

kd是漫反射系数

I是光源强度

n*I表示cos角度

4.5.2 Blinn-phong shading

lambertian 不产生高光等等缺点

blinn-phong shading这个想法是当 v 和 l 对称地放置在表面法线上时产生最亮的反射,这也是会发生镜面反射的时候; 随着矢量远离镜面配置,反射然后平滑地减少

4.5.3环境着色

L = ka* Ia + kd I max(0, n · l) + ks I max(0, n · h)^n,

4.6光线追踪程序

​ 我们现在知道如何为给定的像素生成观察光线,如何找到与对象最近的交点,以及如何对产生的交点进行着色。 这些是生成隐藏表面的阴影图像的程序所需的所有部分

上一篇:8.HTML表格


下一篇:题解 AT3875 【[ARC089A] Traveling】