Advertisement

图形学笔记:光线追踪

阅读量:

光线追踪是一种经典的渲染方法。

Ray Tracing

概述

该算法基于观察者的视角进行建模,并通过跟踪光线的行进路线来确定每个像素所对应的视觉信息。

这里写图片描述

光线生成

投影

将3D场景转换为2D图像的过程采用了不同的投影方法来实现转换。在这些过程中, 透视投影与人类视觉系统的特点一致。

这里写图片描述

光线

在透视投影中,光线的原点是人眼位置,方向为从眼睛到每个像素的方向。

这里写图片描述

交点

通过几何计算的方法来确定光线穿过场景中物体时所形成的相交位置关系。主要涉及直线与球体之间的相交情况、以及直线与平面图形中的三角形面之间的相交问题。其中涉及直线与平面图形中的三角形面之间的相交问题更为常见的问题类型。具体操作方法即通过建立方程组来求解该几何体表面的相交坐标值。

着色

在着色这一步主要考虑有光,阴影和镜面反射。

光由三部分组成:环境光,漫反射光和镜面反射光。

因此在每个顶点处需要记录纹理颜色k和法线方向n

阴影

从交点处和光源连线,如果中间有遮挡,那么这里就是阴影。

镜面反射

镜面反射的解决方法是递归调用,反复寻找上一个交点。

伪代码

复制代码
    function raycolor( ray e + td, real t0, real t1 ) #求某个像素着色
    hit-record rec, srec
    if (scene→hit(e + td, t0, t1, rec)) then   #视线与物体相交
    p = e + (rec.t) d
    color c = rec.ka Ia  #环境光
    if (not scene→hit(p + sl,epsilon, ∞, srec)) then  #不是阴影
        vector3 h = normalized(normalized(l) + normalized(−d))
        c = c + rec.kd I max (0, rec.n · l) + (rec.ks) I (rec.n · h)rec.p
    return c   #出现阴影就返回环境光
    else
    return background-color #没有和物体相交返回背景光
    
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

全部评论 (0)

还没有任何评论哟~