渲染是是考虑每一个对象是如何影响输出图像的
分为两种:
对象顺序渲染(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光线追踪程序
我们现在知道如何为给定的像素生成观察光线,如何找到与对象最近的交点,以及如何对产生的交点进行着色。 这些是生成隐藏表面的阴影图像的程序所需的所有部分