Games101-光线追踪(基本原理)

在这里插入图片描述
光线追踪和光栅化是两个不同的成像方式。
光栅化最大的问题是无法很好的表示全局的效果。
全局效果包括 软阴影(shadow mapping后来被改进成能够支持软阴影,阴影随着离物体越远越来越模糊),glossy反射(类似镜子,但没有镜子那么光滑,打磨的比较光滑的金属),间接光照(光线在到达人眼前会弹射很多次)
在这里插入图片描述
光栅化是一种很快的,但是质量较低,近似的渲染方法
在这里插入图片描述
光学追踪是种准确的渲染方法,但是非常慢。1帧就需要1万个cpu小时
光栅化通常用来做实时的应用,光学追踪通常被用来离线的应用(电影)

Basic Ray-Tracing Algorithm

在这里插入图片描述
光线;

  1. 光线沿直线传播(现实物理是错的,但计算机图形学离这样假设)
  2. 光线和光线不会碰撞(现实物理是错的,但计算机图形学离这样假设)
  3. 光线肯定从光源发出来,打到场景中,在场景中不断反射折射最终进入到人眼(光线的可逆性,可以理解为从人眼发出感知的光线,打到物体上,最终打到光源。即如果光源可以通过某种办法看到相机,则相机也能看到光源,可以形成一条反过来的光路)

在这里插入图片描述
光线追踪实际是从眼睛/相机出发,往世界中投射光线,把这些光线在世界中弹来弹去,最终到达光源。
在这里插入图片描述
首先做光线的投射:假设往一个虚拟的世界中看,眼前放了一个成像的平面,平面被画成了不同的像素格子。对每个像素可以从摄像机连一条线穿过像素,可以打出一根光线,这跟光线一定会打到场景中的某个位置或者和场景中什么都不相交,如果光线和场景中某一物体相交,说明沿着这个方向看到了某点,然后把这个点与光源做连线(判断点是否对光源也可见,即是否在阴影里),如果不在阴影里,则形成一条有效的光路。可以计算光路上光的能量,进行着色。
在这里插入图片描述
光线追踪认为眼睛永远是一个针孔摄像机,即一个点。光源也假设是个点光源。对于光线中的物体,认为光线打上去,会发生完美的反射或折射。
eye ray/camera ray:打出的光线找到场景中最近的物体相交的点
在这里插入图片描述
shadow ray:从交点到光源的连线。
通过法线,入射方向,出射方向可以算该点的着色,写入像素

Whitted-Style Ray Tracing

在这里插入图片描述
在这里插入图片描述
依然是找到最近的相交点,当光打到点上时,有一部分能量会被反射,另一部分能量会被折射进去
在这里插入图片描述
从眼睛投射出来的光线打到一个点时,如果是个玻璃材质,这个点应该做一个完美的镜面反射
在这里插入图片描述
同时对于玻璃球,可以折射进去,在内部继续传播,打到另外一个点,在折射出来

即在任何一个点,可以继续传播光线,只要正确的算出反射方向,折射方向
在这里插入图片描述
由于光线弹射的次数多了,在每一个弹射的点,都会计算着色的值,如上图每一个和光线的交点,都与光源做一条连线。看在这个点上,能否被光源照亮
如果光源可以照亮任何一个弹射的点,就把弹射的点内部算出着色的值,都加到最后着色的像素
在这里插入图片描述
eye ray/camera ray又称作primary ray
之后弹射的光线都称为secondary ray
往光源连线为了判定可见性的称为shadow ray
在这里插入图片描述

Ray-Surface Intersection

在这里插入图片描述
数学上的光线就是一个射线。一个起点,一个方向
点光源o,传播方向d。光线上的任意点r: o + t d o+td o+td,由于只往一个方向,所以 0 ≤ t ≤ ∞ 0{\leq}t{\leq}∞ 0t
图形学很少考虑边界,所以是否等于0影响不大

Ray Intersection With Sphere

在这里插入图片描述
球上任一点p到球心c的距离,都等于R
在这里插入图片描述
t需要为正,并且为实数,即 b 2 ≥ 4 a c b^2{\geq}4ac b24ac

Ray Intersection With Implicit Surface

在这里插入图片描述
光线与隐式表面求交与球求交同理,求t,t需大于0,并且为实数

Ray Intersection With Triangle Mesh

在这里插入图片描述
光线与显式表面三角形求交:一个一个三角形判断
对于无洞物体
点在物体内,交点数一定是奇数
点在物体外,交点数一定是偶数

Ray Intersection With Triangle

在这里插入图片描述
光线和三角形求交:先求光线和三角形所在平面交点,再判断交点是否在三角形内

Ray Intersection With Plane

在这里插入图片描述
平面:可以定义成一个方向(法线)和一个点
平面上任一点p,满足 p − p 、 p-p^、 pp的向量和法线垂直
在这里插入图片描述

Möller Trumbore Algorithm

在这里插入图片描述
MT算法:3维向量可以得出3个方程组,解3个未知量
克拉默法则求解线性方程组

Accelerating Ray-Surface Intersection

加速求交(和三角形)
在这里插入图片描述
原始方法每次弹射都要和场景里所有三角形求交,找出最近点,非常慢
在这里插入图片描述
一千多万个三角形
在这里插入图片描述
两千万个三角形

Bounding Volumes

在这里插入图片描述
包围盒:用一个简单形状把物体包围起来,如果物体连包围盒都无法碰撞,一定无法碰撞包围盒内的物体
在这里插入图片描述
将长方体理解成三个不同对面形成的交集,一定是在x,y,z轴上的范围。没有旋转

Ray Intersection with Axis-Aligned Box

在这里插入图片描述
光线和包围盒求交
给定任何一根光线,可以求出光线何时和无限大的两个面有交点
之后看水平的对面,求两个面的交点
即对任何一个对面,可以求出进入的时间和出去的时间。
求交即可求出,光线何时进入盒子,何时出去盒子
在这里插入图片描述
对于3维空间,有3组对面,各计算一次光线进入对面的最小,最大时间·。求出最大的进入时间和最小的离开时间。如果进入时间小于离开时间,说明这段时间光线在盒子里
在这里插入图片描述
光线是射线不是直线,如果光线离开盒子时间小于0,说明盒子是在光线背后
当离开的时间是正的,进入盒子的时间是负的,说明光线起点在盒子里
当且仅当进入时间小于离开时间,且离开时间大于0,则光线与包围盒有交点
在这里插入图片描述
之所以用横平竖直的包围盒,因为光线与和xyz轴垂直的面求交比较方便
如上图,当对面与x轴垂直时,可以直接求光线在x轴方向上的传播

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2023年第十四届省赛真题-棋盘

solution1(暴力) 暴力蓝桥杯可以过&#xff0c;虽然理论上会超时~ #include<iostream> using namespace std; const int maxn 2010; int a[maxn][maxn] {0};//0白棋&#xff0c;1黑棋 int main(){int n, m, x1, x2, y1, y2;scanf("%d%d", &n, &m)…

基于单片机水塔水位检测控制系统设计

**单片机设计介绍&#xff0c; 基于单片机水塔水位检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水塔水位检测控制系统设计的主要目标是实现水塔水位的自动监测与控制&#xff0c;确保水塔内的水位始…

代码随想录第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;看上去复杂&#xff0c;其实逻辑都是固定的&#xff01;LeetCode&#xff1a;860.柠檬水找零_哔哩哔哩_bilibili 在柠檬水摊上&#xff0c;每…

如何在 iOS 项目中集成 MiniApp SDK,快速构建智能小程序?

本文介绍如何在 iOS 项目中&#xff0c;集成 MiniApp SDK&#xff0c;使之能够构建智能生活小程序&#xff0c;运行在你的 IoT App 上。 准备工作 在集成 MiniApp SDK 之前&#xff0c;您需要在 涂鸦 IoT 开发平台 上&#xff1a; 注册开发者账号、创建产品、创建功能点等。…

【静态分析】静态分析笔记02 - Intermediate Representation

参考&#xff1a; [南京大学]-[软件分析]课程学习笔记(二)-IR_ast和ir的区别-CSDN博客 ------------------------------------------------------------------------------------------------------------ 1. compilers and static analyzers compiler 是将 Source Code 转…

实时云渲染视频流化Webgl引擎模型技术原理

数字孪生领域很多项目B/S架构下交付使用的是webgl方案&#xff0c;该方案有其自身的优势&#xff0c;降低了用户在使用数字孪生或者虚拟仿真模型时需要的高性能显卡。但其也有自身无法忽视的困境&#xff0c;比如一些数据量大的模型&#xff0c;需要验证依赖下载时的网络环境&a…

c语言驾驶员理论课程模拟考试与学习系统1300

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 1问题描述 2功能要求 【选做要求】 【其他要求】 部分代码展示 效果展示 程序设计题4:驾驶员理论课程模拟考试与学习系统 1问题描述 要求编写一个程序&#xff0c;模拟驾驶员科目一的考试&#xff0c;要求具有良…

Android获取连接到手机热点上的设备信息

主题&#xff1a;在手机开启热点网络的情况下&#xff0c;想要获取是哪个设备已经连接上了当前开启的热点。 实现思路&#xff1a;Android通过读取 /proc/net/arp 文件可以得到连接当前热点的设备信息&#xff0c;包括Mac地址、IP地址等信息。 一. 方法逻辑&#xff1a; /*** …

Webots常用的执行器(Python版)

文章目录 1. RotationalMotor2. LinearMotor3. Brake4. Propeller5. Pen6. LED 1. RotationalMotor # -*- coding: utf-8 -*- """motor_controller controller."""from controller import Robot# 实例化机器人 robot Robot()# 获取基本仿真步长…

IDEA无法成功配置Tomcat的解决方法(IDEA版本问题)

在创建Servlet时&#xff0c;下载了Tomcat文件夹以及成功配置了环境变量之后&#xff0c;在IDEA中怎么都找不到Tomcat&#xff0c;尝试了网络中的各种方法&#xff0c;都不行&#xff0c;结果发现时IDEA版本的问题。因为我下的IDEA是社区版的&#xff0c;所以没有自带的Tomcat&…

Flutter开发之图片选择器

使用FLutter开发了一个图片选择的组件&#xff0c;功能如下&#xff1a; 1、支持设置最大可选图片的个数&#xff1b; 2、根据选择的图片个数自适应容器组件的高度&#xff1b; 3、可设置容器的最大高度&#xff1b; 4、支持点击放大和删除功能&#xff1b; 具体效果如下 …

Linux系统安装内网穿透实现固定公网地址访问本地MinIO服务

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&am…

【计算机考研】408算法大题怎么练?

先说结论&#xff1a;基础阶段学好各个数据结构与&#xff0c;重点是数组、链表、树、图。然后强化阶段突破算法提 在基础阶段&#xff0c;并不需要过于专门地练习算法。相反&#xff0c;基础阶段的重点应该放在对各种数据结构原理的深入理解上。在我个人的经验中&#xff0c;…

计算机考研择校|408还是自命题,哪个上岸难度大?

我一般是建议选择408&#xff0c;但是现在考408的同学太多了 所以408的竞争压力会比较大&#xff0c;加上复习难度大&#xff0c;复习过程中&#xff0c;心态很容易崩掉。 其实到底选自命题还是408&#xff0c;我觉得还是要看自己的目标。如果目标院校是自命题&#xff0c;那…

C语言的显式类型转换和隐式类型转换详细讲解

目录 一、类型转换 1、显式类型转换 2、隐式类型转换 二、算术转换 三、总结 每个编译器都会对表达式做两件事情&#xff0c;一是判断表达式中操作符的优先级和结合性&#xff0c;二是判断表达式中的操作数类型是否一致&#xff0c;如果不一致则需要进行类型转换。第一点在…

吴恩达机器学习实践实验室:决策树(Decision Trees)

在本练习中&#xff0c;您将从头开始实施决策树&#xff0c;并将其应用于蘑菇可食用还是有毒的分类任务。 文章目录 1-包2-问题陈述3-数据集3.1一个热编码数据集 4-决策树4.1计算熵4.2分割数据集4.3计算信息增益4.4获得最佳分割 5-构建树 1-包 首先&#xff0c;让我们运行下面…

【问题解决】ubuntu安装新版vscode报code-insiders相关错误

问题 目前 vscode官网 最新的包为 insiders_1.89.0-1712297812_amd64.deb &#xff0c;双击或者使用sudo dpkg -i code-insiders_1.89.0-1712297812_amd64.deb安装后报错&#xff0c;执行其他命令也报错。 安装环境&#xff1a;ubuntu18.04 dpkg: 处理软件包 code-insiders (…

代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、22. 买卖股票的最佳时机 II

代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、22. 买卖股票的最佳时机 II 121. 买卖股票的最佳时机题目解法 122. 买卖股票的最佳时机 II题目解法 感悟 121. 买卖股票的最佳时机 题目 解法 题解链接 没看题解想出来的&#xff1a;贪心 class Solution { pub…

归档模式下,物理删除数据文件的完全的恢复

归档模式下&#xff0c;物理删除数据文件的完全的恢复 1、实验环境 环境归档模式 SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /arch/archivelog Oldest online log seq…

用户态网络缓冲区的设计

一、网络缓冲区 在内核中也是有网络缓冲区的&#xff0c;比如使用 read 读取数据&#xff08;read 是一种系统调用&#xff0c;第一个参数为 fd&#xff09;&#xff0c;当陷入到内核态的时候&#xff0c;会通过 fd 指定 socket&#xff0c;socket 会找到对应的接收缓冲区。在…