图形学 -- Ray Tracing 光线追踪

参考视频:Lecture 13 Ray Tracing 1_哔哩哔哩_bilibili

Ray tracing

原因

Rasterization 格栅话不能处理好global effects,如↓

简介反射:光线在到达人眼前不止弹射一次

基本假设

1)光是沿着直线传播

2)光线交叉的时候不会发生碰撞

3)reciprocity 可逆性- 光线从光源发出并进入人眼

 Ray Casting- Generating Eye Rays

Pinghole Camera Model

眼睛发出的光线只能看到最近的!

有入射方向,出射方向就可以算法线,然后算着色

shadow mapping

实现步骤

 步骤1:从光源出发看场景,记录看到场景的深度

步骤2:从相机角度观察,再投影回光源

 

实际操作

1)光源记录深度

step2:实际到光源看到的集合形状

问题

硬vs软阴影

本影/半影原理

Whitted-Style Ray Tracing

1)光滑表面,光线折射

2)漫反射物体,光线停止

Recursive Ray Tracing

每一个弹射的点都去算它着色的值

Ray-Surface Intersection 交点

Ray Euation

Ray Intersection with sphere

 Ray Intersection with Implicit Surface 隐式表面

 Ray Intersection with Triangle Mesh 显式表面

!随便在一个封闭图形内取一个点,从中间作一条射线,和这个图形的交点一定是奇数个!

解决三角形和光线的交点问题

定义平面(好熟悉的内容啊,好像高数学过...?)

 光和平面交点

再判定点是否在三角形内

Moller Trumbore Algorithm

克拉默法则有点忘了

Accelerating Ray-Surface Intersection 

Bounding Box 包围盒,包围体积(AABB)

光线如果盒都碰不到,哪里碰得到物体呢↓

此处理解:长方体是三个对面形成的交集

看光线和包围盒有没有交点

2D

取交集!↓

3D

三个对面都满足光线已经进去了,才能说光线在盒子内;只要光线离开任意一个对面就已经离开盒子了

第三种情况就是光源在盒子里!

Uniform partitions (Grids)

一般划分的个数

Spatial Partitions

 解决场景中格子分布不均匀的问题

Oct-Tree效果不好,BSP-Tree不好计算

KD-Tree(对空间划分)

*实际物体不存放在中间节点上,只存放在叶子节点上

 光线和格子没交点,不用判定;有交点则和盒子里所有的物体求交点

缺点:

1)同一个物体

2)kt tree 建立并不简单,需要考虑三角形和盒子的相交

解决方法↓

Object Partitions & Bounding Volumen Hierarchy(BVH) (对物体的划分)

划分的不是空间,是把物体划分成两个部分

步骤

划分小技巧

尽量沿着最长轴,并且保证里面三角形数目差不多

伪代码

Spacial vs Object Partitions

Basic radiometry(辐射度量学)

在物理上准确定义光照

Radiant Energy and Flux(Power)

能量和功率

 几个重要概念,后面详细介绍

Radiant Intensity 

每个角度分到的能量

Solid Angles 立体角 

Differential Solid Angles 单位立体角

Isotropic Point Source

如果一个点光源均匀往各个方向上辐射出光,任何方向上的能量都是power/4Π

Irradiance

一个物体表面接受到多少光的能量 

随着距离增加intensity没变,irradiance衰减

Radiance

光线在传播中的度量

能量在单位立体角并且在单位的面积上

和Irradiance的区别是是否有方向性

da从每一个可能的方向获取的能量求和

Bidirectional Reflectance Distribution Function (BRDF) 双向反射分布函数

单位 面积中吸收多少入射能量再原样发射回去,不同方向的能量分布

Recursive Equation

递归:任何一个出射光线都有可能是其他平面的入射光线,其中这个H^2指的是半球

Rendering Equation

物体自己会发光怎么办:把自己发的光加上去就ok

Reflection Equation

点光源

面光源

简写

物体所辐射出来的所有能量=所有光源辐射出来的能量+辐射出来的能量被反射之后的

黄色部分是光栅化能实现的范围,而后面的多次反射则是光追范围

Probability Review 概率论回顾

Random Variable 随机变量

Probability 概率

Expected Value 期望

概率密度函数

Monte Carlo Integration 蒙特卡罗积分

算任何一个函数的定积分

在pdf上以一定的蒙特卡洛积分进行采样,每个样本算f(x)/p(x)然后进行平均

Path Tracing 路径追踪

witted style解决不了这个glossy的问题

能比较好的处理漫反射效果

已经可以算出任意一个着色点的出射!

间接光照 Global llumination

但是!以↑方式解决全局光光线数量会爆炸!

所以N=1的时候不会指数级增长!路径追踪就是N=1!

Ray Generation

Russian Roulette(RR)

解决光线弹射多少次的问题

一定的概率停下追踪

效率

在物体上采样效率低?

不如直接在光源上采样

所以要对光源面积进行积分

已经开始头疼了...........

所以光线来自:光源,以及其他所有非光源

如果中间有遮挡物:

直接算光源与被观测物连线

总算看完了,感觉一刷有点一知半解的(摊

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

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

相关文章

2023年山东省安全员B证证模拟考试题库及山东省安全员B证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年山东省安全员B证证模拟考试题库及山东省安全员B证理论考试试题是由安全生产模拟考试一点通提供,山东省安全员B证证模拟考试题库是根据山东省安全员B证最新版教材,山东省安全员B证大纲整理…

CMap数据库筛选化学药物

数据库clue.io 文献链接:连接图谱:使用基因表达特征连接小分子、基因和疾病 |科学 (science.org) 基本模式:利用CMap将差异基因列表与数据库参考数据集比对;根据差异表达基因在参考基因表达谱富集情况得到一个相关性分数&#…

YOLOv7训练:_pickle.UnpicklingError: STACK_GLOBAL requires str

在YOLOv7训练过程中,出现以下错误: 原因就是: 这个数据集在其他地方运行过产生了**.cache**文件 解决方案(亲测有效): 删除数据集中的所有 label.cache文件,比如训练集、验证集、测试集都删…

SpingBoot原理

目录 配置优先级Bean管理 (掌握)Bean的获取 ApplicationContext.getBeanBean的作用域 Scope("prototype") Lazy第三方Bean Bean Configuration SpringBoot底层原理 起步依赖与自动配置(无需手撸但面试高频知识点)自动配置引入第三方依赖常见方案方案1:Com…

hook io异常注入

文中code https://gitee.com/bbjg001/darcy_common/tree/master/io_hook 需求引入 最近工作需要,需要验证一下我们的服务在硬盘故障下的鲁棒性。 从同事大佬哪里了解到hook技术,可以通过LD_PRELOAD这个环境变量拦截依赖库的调用链,将对标准…

PowerShell无人参与安装最新版本SQL Server Management Studio (SSMS)

文章目录 下载SQL Server Management Studio (SSMS)Power Shell实现无人安装推荐阅读 下载SQL Server Management Studio (SSMS) SSMS 19.2 是最新的正式发布 (GA) 版本。 如果已经安装了 SSMS 19 预览版,需要在安装 SSMS 19.2 之前将其卸载。 如果安装了 SSMS 19.…

【Java】多线程-单例模式/volatile-指令重排序

单例模式即代码中只有一个实例的模式 适用场景:有些场景下,有的类只能有一个对象,不能有多个 要注意:在单例模式下,要保证不能产生多个实例 1、饿汉模式 class Singleton{private static Singleton instance new …

人员定位系统人员聚集风险监测预警功能为企业安全生产保驾护航!

危化企业生产区域由于装置设施开停工、设备检维修或其它原因,会导致在局部作业区域出现作业操作人员、指挥管理人员不定时、不定点的聚集情况,一旦发生泄漏中毒、火灾爆炸、高温高热物质喷溅等事故,人员聚集将会在一定程度上加重事故后果的严…

【Echart】Echart设置label太长隐藏:

文章目录 第一种:竖排显示第二种:显示部分第三种:强制显示所有标签并旋转 第一种:竖排显示 xAxis: {type: category,data: res.data.data.sz.xAxis,axisLabel:{fontSize:12,formatter: function(value) {return value.split().joi…

nginx基础组件的使用

文章目录 一、Nginx 的相关组件介绍1.1、ngx_palloc相关源码1.2、ngx_array组件的相关源码1.3、ngx_array的数据结构1.4、ngx_cycle简介和相关源码1.5、ngx_list相关源码1.6、ngx_list 的数据结构 二、Nginx 组件的使用2.1、makefile的编写2.2、ngx_pallocngx_array的使用2.3、…

【代码随想录】刷题笔记Day33

前言 Day33虽说是一个月,但是从第一篇开始实际上已经过了8个月了,得抓紧啊 46. 全排列 - 力扣(LeetCode) 前面组合就强调过差别了,这道题是排序,因此每次要从头到尾扫,结合used数组 class So…

ky10 server aarch64 离线安装openssl3.1.4

离线程序 https://gitcode.net/zengliguang/ky10_aarch64_openssl_install.git 输入下面命令执行离线安装脚本 source openssl_offline_install.sh 安装完成

对比学习15篇顶会论文及代码合集,2023最新

对比学习(contrastive learning)是现在无监督学习中一种常用的学习机制,它可以在没有标签的数据上进行学习,避免依赖大量标签数据,从而帮助我们更好地理解和利用数据集中的信息,提高模型的性能和表现。 作…

做医疗影像心脏方面的看过来:医学图像重建的心脏 MRI 数据集

本文发布了CMRxRecon数据集,包括来自 300 名受试者的多对比度、多视图、多切片和多通道 CMR 成像数据,还由经验丰富的放射科医生提供了所有受试者的心肌和心室的手动分割。单位:复旦, 香港理工大学, 厦大等 心脏磁共振成像(CMR&a…

线程池有几种创建方式?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

【开源】基于微信小程序的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

(02)vite环境变量配置

文章目录 将开发环境和生产环境区分开环境变量vite处理环境变量loadEnv 业务代码需要使用环境变量.env.env.development.env.test修改VITE_前缀 将开发环境和生产环境区分开 分别创建三个vite 的配置文件,并将它们引入vite.config.js vite.base.config.js import…

【OpenGauss源码学习 —— 列存储(ColumnTableSample)】

执行算子(ColumnTableSample) 概述ColumnTableSample 类ColumnTableSample::ColumnTableSample 构造函数ColumnTableSample::~ColumnTableSample 析构函数ExecCStoreScan 函数ColumnTableSample::scanVecSample 函数ColumnTableSample::getMaxOffset 函数…