3D渲染-光线追踪-包围盒

一、回顾

1、理解

上节通过光栅化和光线追踪的对比,引入光线追踪。

在光栅化中,其实就是构建网格,然后在像素网格中放入物体。对于每个物体,通常会观察该物体所覆盖的每个像素。

在光线追踪中,则颠倒此循环过程,首先确定每个像素,然后去查看每个物体,判断物体能否覆盖相应像素。换言之,将相机(起点)与一个像素点连线,发出射线,然后观察每个物体被光源照亮情况,将每个交点的着色值加权和写入像素值。

2、Whitted-Style Ray Tracing

解释了Whitted-Style Ray Tracing的原理,并讲解了如何进行光线和场景中物体求交问题。

二、包围盒

1、之前方法问题

之前每一个像素都需要与场景中所有三角形求交。
即:algorithm = pixels ✖️ traingles
可以向想象:一个成像平面上有很多个像素,一个场景中由很多三角形构成。每一个像素都要与场景中全部三角形求交,非常慢。

2、包围盒基本原理

使用包围盒进行加速。


1627887833128-ee2cbcdc-f1f5-423e-a4c2-7eb2615bb24b.png

3、对包围盒理解

一般使用的包围盒是长方体。
对长方体的理解:由三个不同的对面形成的交集。如下图


1627888158941-d57fbd59-612a-4ec5-a272-7c4d468917a8.png

使用包围盒计算更方便。使用轴对齐包围盒,计算更方便。如下图:


1627888546110-5b27c6ca-f20a-4b55-923c-e1a20fcb31b3.png

4、光线与包围盒求交

先以2D的为例。
1、光线先与x轴上两对面,求交点。
2、光线再与y轴上两对面,求交点。
3、将1和2求交集,即光线在2D包围盒里的区域。
如下图:


1627888711493-5a3c33bf-4901-4d16-8257-13d54afe3f0a.png

扩展到3D:
1、当光线进入了全部的对面时,则光线进入包围盒。
2、当光线只要离开任意一个对面时,则光线离开包围盒。
即:Tenter = max{tmin} Texit = min{tmax}
当Tenter < Texit 时,说明光线在包围盒内一段时间。

由于光线是一条射线。
当 Texit< 0 时,说明光线在包围盒的背后,不会有交点。
当 Tenter < 0 且 Texit> 0 时,说明光线在包围盒里,有交点。
总结:光线与包围盒(AABB)有交点,当且仅当 Tenter < Texit && Texit > 0

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Problem Formulation Ray Tracing的目标是生成一张包含场景内物体,具有真实感的图像,因...
    Manster阅读 12,963评论 4 8
  • 一、为什么要引入光线追踪? 1、理解 光栅化和光线追踪是两种不同的成像方式。光栅化是一种很快的近似方法,生成的图像...
    Cwwng阅读 5,770评论 0 1
  • 基于物理的渲染和光线追踪算法 基于物理模型的渲染的目的是为了渲染出一张跟某个真实的3D场景一模一样的图片,就仿佛你...
    东汉书院阅读 3,780评论 0 0
  • 4 更多渲染技术 传统的向前渲染方式需要一个完整的图像渲染管线,以顶点着色器为起点,气候跟随多个后续阶段,通常以片...
    RichardJieChen阅读 6,426评论 0 3
  • Note 这是对MIT Foundation of 3D Computer Graphics第20章的翻译,本章讲...
    绿风烟阅读 6,495评论 0 3