当前位置: 首页 > news >正文

Ray_Tracing_The_Next_Week

1`动态模糊

动态模糊在摄影中就是快门的速度慢,捕捉光的时间长,物体运动时进行捕捉成像,拍出来的结果是这个运动过程每一帧的平均值

我们的思路是:

每一条光线都拥有自己存在的一个时间点。随着时间变化随机生成光线,一般来说我们让摄像机和物体同时运动,然后取在那个时间点的精确平均值

首先,我们让每个光线都拥有自己存在的一个时间点

double tm;

现在我们需要让摄像机在time1到time2的时间段中随机生成光线,通过函数设置光线在范围随机时间点

random_double(time0, time1)

 我们还需要一个运动中的物体,和普通非运动球体来说,其实就多了center(double time)函数,负责线性插值在time时刻下的球体运动的位置,我们传入r.time()也就是光线自己的时间点

moving_sphere : public hittable

材质在运算光线散射(反射 / 折射)时,填入散射光线的时间

r_in.time()

 接着在场景加入运动球体,设置为漫反射材质

2·Bounding Volume Hierarchies 层次包围盒BVH

为了加速求交的过程,我们使用二叉树搜索方法查找,我们首先应该对模型排序,有两种节点分割方式:分割节点:空间分割 / 按物体分割方式(实现起来更简单并且运行速度不错),从而形成一个个包围盒AABB

现在问题包括:

怎样分割物体?

定义BVH加速类,包括数据结构bvh_node节点(二叉树),

怎样和包围盒求交?

我们一直3个轴的xyz坐标,对应每个轴对齐平面,我们有隐式的表示x0, x1,y0,y1,z0,z1

并且我们直到光线的表示,那么x0 = Ax + to * BX,光线从起点A,经过to时间延B方向,到达轴对齐x的某个平面xO,那么我们可以表示to和t1

当3个轴方向t区间发生重叠的情况,则表示这段t区间光线位于包围盒内

并且要注意如下3点:

bool hit(const ray &r, double tmin, double tmax) const
{for (int a = 0; a < 3; a++)/* 看每个轴 */{/* 光线有可能从比如x0->x1方向入射,也有可能反向,因此,to获得的总应是最小值,t1同理 */auto t0 = ffmin((_min[a] - r.origin()[a]) / r.direction()[a],(_max[a] - r.origin()[a]) / r.direction()[a]);auto t1 = ffmax((_min[a] - r.origin()[a]) / r.direction()[a],(_max[a] - r.origin()[a]) / r.direction()[a]);/* 那么3个轴都进入了光线才进入包围盒,其中任意一个离开光线就离开包围盒 */tmin = ffmax(t0, tmin);tmax = ffmin(t1, tmax);/* 光线如果和包围盒不相交则: */if (tmax <= tmin)return false;}return true;
}

对于物体我们建立bounding_box() 纯虚函数,负责定义物体的包围盒,通过两个点

3·Solid Texture 固体贴图

4·Perlin Noise 柏林噪声

5·mage Texture Mapping 图像纹理映射

6·Rectangles and Lights 矩形和光源

7·instance 实例

8`volumes 体积体

http://www.lryc.cn/news/453155.html

相关文章:

  • DBT hook 实战教程
  • SpringBoot整合JPA详解
  • 【微服务】springboot 实现动态修改接口返回值
  • 【前端开发入门】html快速入门
  • python配置环境变量
  • 从0到1:培训机构排课小程序开发笔记一
  • 方法重载(Overload)
  • [论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search
  • 基于微信小程序的旅游拼团系统
  • 富格林:警悟可信经验安全投资
  • 【Linux】使Ubuntu自适应窗口大小并与主机共享文件
  • C++ 语言特性18 - static_assert 介绍
  • centos 7.9系统redis6.2.6哨兵模式部署
  • 编程基础:详解 C++ 中的 `std::sort` 函数
  • 51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】
  • MongoDB快速实战与基本原理
  • 编程技巧:优化
  • pycharm中使用anaconda创建多环境,无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 【Linux】进程周边之优先级
  • Linux高级编程_29_信号
  • uniapp修改uni-ui组件样式(对微信小程序/H5有效,vue3)
  • Python 封装 socket 为 [TCP/UDP/MULTICAST] 服务端
  • c++ STL库 unordered_map
  • 【接口测试】任务1:登录接口
  • 二、Spring Boot集成Spring Security之实现原理
  • 基于深度学习的点云处理模型PointNet++学习记录
  • Javascript Object.assgin()详解以及深浅拷贝
  • Redis篇(应用案例 - UV统计)(持续更新迭代)
  • 解锁微信小程序新技能:ECharts动态折线图搭配WebSocket,数据刷新快人一步!
  • 上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X