| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图形学笔记(十一)光线追踪——Shadow Mapping、光线追踪、光线投射、软硬阴影、光线与物体交点、AABB包围盒 -> 正文阅读 |
|
[人工智能]图形学笔记(十一)光线追踪——Shadow Mapping、光线追踪、光线投射、软硬阴影、光线与物体交点、AABB包围盒 |
1 Shadow Mapping与光线追踪1.1 Shadow Mapping1.1.1 概览Shadow Mapping本质是一种图像空间的算法。 关键思想 1.1.2 Shadow Mapping步骤1> 从光源渲染从光源看场景,获得深度图(z-buffer)。 2> 从摄像机渲染从摄像机看场景,对于每一个看到的点,将其映射回光源渲染的深度图上, 比较从光源到这个看到的点的深度和其在深度图上对应的深度,若深度一致,说明这个点可以同时被光源和摄像机看到。 1.1.3 Shadow Mapping结果如下图非绿色的是阴影应该在的地方。 1.1.4 Shadow Mapping的问题
1.2 软阴影和硬阴影1.2.1 概览如下图,左边是硬阴影(界限比较清晰),右边是软阴影。 1.2.2 软阴影的原理由于点光源有大小,会形成如图所示的(Umbra)本影区域和半影(Penumbra)区域。所以会形成阴影的过渡。 1.3 进行光线追踪(Ray Tracing)的原因光栅化不能很好的处理全局效果(如下图所示)。
2 光线追踪算法2.1 光线(图形学角度做的假设)
2.2 光线投射(Ray Casting)光线投射是光线追踪中用于生成初始光线的第一步。
从视点开始经过像素获得与场景中物体最近的交点。 2.3 Recursive(Whitted- Style) Ray Tracing此算法在79年渲染1帧用了74min、06年PC需要6s、12年的GPU需要1/30s。 此算法要考虑反射和折射的光线,如下图所示。 3 光线与物体的交点 Ray-Object intersections3.1 基本概念3.1.1 光线光线在数学上是有起点和方向的射线,表达式如下,t代表时间。 3.1.2 平面通过一个法向量和一个平面上的点来进行定义。 3.2 光线与球求交光线与球的交点p,必须要满足p既在光线上也在球上。 3.3 光线和隐式表面求交如果隐式表面的表达式 解出来结果t,即可得到交点(t必须是实数,也要是正数)。 3.4 光线和三角形面求交3.4.1 原因光线和三角形求交有如下作用:
3.4.2 算法(与平面求交再判断是否在三角形内)简单的办法是让场景中的每个三角形与光线进行求交计算,但是有如下严重问题。
如果想要计算光线和三角形面的交点,因为三角形在平面内,所以可以把光线和三角形求交拆成两个问题:
3.4.3 Moller Trumbore算法Moller Trumbore算法是一种使用重心坐标计算的一种更快的方法。在下面的式子中,左边是光线的表达式,右边是三角形上一点的重心坐标形式。 4 包围盒(Bounding Volumes)原始的做法是让每个像素的光线要和所有三角形面求交点,计算量太大,那么如何让这个过程加速呢?如果我们圈定包围盒,连与包围盒都不相交的三角形就不用接着算了,那么就可以很大的减少计算量。 4.1 概览基本思想 使用一个简单的几何体来包围一个复杂的物体,如果光线不饿能碰到包围盒,那么就不用再计算其与里面物体的交点。 4.2 求光线与长方体的交点3D物体通常的包围盒是长方体。 4.3 求光线和轴对齐包围盒的交点4.3.1 2维的情况首先从简单的问题开始分析,先计算二维的长方形。由于前面提到的光线方程是参数方程,所以只要我们计算光线什么时候会和一对平行的边有交点(计算 t m i n t m a x t_{min} t_{max} tmin?tmax?),就可以求出光线进入和离开这个边的时间。 因为一个长方形有两对边,所以会得到两对解,然后求这两对解的交集,此时 t m i n t m a x t_{min} t_{max} tmin?tmax?就分别代表着光线进入和离开长方体的时间。
4.3.2 3维的情况1> 根据2维的结果,我们观察发现
2> 计算 t e n t e r t_{enter} tenter?(光线进入物体时的t)与 t e x i t t_{exit} texit?(光线离开物体时的t):
3> t为负时的意义
4> 结论 4.4 使用轴对齐(AABB)概念的原因主要目的是简化计算。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 4:36:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |