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

GAMES202-高质量实时渲染(Real-Time Ray-Tracing)

目录

  • RTX
  • 降噪
    • 时间滤波
    • Back projection
  • 滤波实现
    • 空间滤波
      • 高斯滤波
      • 双边滤波(考虑边界)
      • 联合双边滤波
  • RTRT滤波解决方案
    • SVGF
    • RAE
  • 工业界问题及解法
    • TAA 时间上的抗锯齿
    • MSAA vs SSAA
    • SMAA
    • 超级分辨率
    • 延迟渲染

GitHub主页:https://github.com/sdpyy1
作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202

RTX

RTX实际做的事:
一个像素用一个样本来采样SPP

请添加图片描述
考虑了一次弹射,第一次primary Ray其实没有必要(从摄像机到着色点),只需要做一遍光栅化就可以实现一整个屏幕的primaryRay。所以一个SPP只需要考虑3条光线
请添加图片描述

降噪

时间滤波

1SPP噪声非常大。实时光线追踪在算法上并没有区别,主要原因是硬件的突破,让光线追踪达到了实时水平。所以实时光线追踪最关键的技术是降噪请添加图片描述
从这幅图可以看出,降噪的效果非常好。降噪的方法有很多,但是应用到实时的降噪技术很少
请添加图片描述
实时降噪使用的是时间上的滤波。当前帧需要前一帧已经滤波。假设运动是连续的。有一个vector叫做motion vector,记录每个点上一帧的位置
请添加图片描述
也就是当前帧用的spp,使用了上一帧的spp,上一帧的spp也用了上上帧的spp,所以作用到当前帧的spp,远大于1。
下面首先介绍一个概念,G-buffer,这东西就是延迟渲染用的
请添加图片描述

Back projection

求一个像素的内容,在上一帧中的位置
请添加图片描述
首先求一个点的世界坐标:

  • 可以提前存储在G-buffer
  • 通过MVP+viewport的逆变换变回世界坐标
  • 我们是知道每个世界坐标是如何变换的,所以通过逆变换来找到这个坐标上一帧的坐标,再把世界坐标转为屏幕坐标即可
    请添加图片描述
    得到上一帧对应像素的像素值,进行线性插值,通常a取0.1-0.2,也就是80%以上都是上一帧得到的
    请添加图片描述
    下面对比一下groundtruth和降噪结果请添加图片描述

请添加图片描述
有一些该暗的地方仍然是亮的。
基于时间的滤波是有问题的,有一下几点:

  • 第一帧/切换场景
    请添加图片描述

  • 当前帧的物体在上一帧不存在请添加图片描述

    • 当前帧的物体在上一帧被遮挡了(G-buffer中没有存储)请添加图片描述
      会出现脱尾请添加图片描述

解决思路:

  1. 混合当前帧和上一帧数据之前,把上一帧的结果拉到当前帧周围
  2. 检测要不要用上一帧的数据
    1. 检测上一帧位置是否为同一个物体
    2. 优化混合系数
    3. 增大空间滤波
      但是这样处理噪声又出现了
      请添加图片描述

滤波实现

空间滤波

请添加图片描述
滤波操作为低通滤波,保留低频信息,移除高频信息

高斯滤波

请添加图片描述

双边滤波(考虑边界)

高斯滤波会把图像均匀地糊掉,边界也会模糊 ,公式的第二项表示如果两边颜色差值很大,贡献就会变小
请添加图片描述

联合双边滤波

请添加图片描述
使用G-buffer来更好地指导滤波请添加图片描述
请添加图片描述
用深度、颜色、法向量来指导滤波
请添加图片描述
如何实现大的滤波核呢?先水平再垂直,效率从请添加图片描述

请添加图片描述
Progressively Growing Sizes请添加图片描述

RTRT滤波解决方案

SVGF

3个factors指导的滤波

  • 深度
    请添加图片描述- 法线
    请添加图片描述
  • 颜色差异
    请添加图片描述

RAE

请添加图片描述
请添加图片描述
请添加图片描述

工业界问题及解法

TAA 时间上的抗锯齿

请添加图片描述
每一帧采样一个像素的四个角之一,剩余三个角用之前的数据。这样就相当于MSAA了(静止场景)

MSAA vs SSAA

SSAA就是高分辨率渲染再变小
MSAA分辨率不变,在一个像素中采样多次,甚至可以在临近像素复用请添加图片描述

SMAA

请添加图片描述

超级分辨率

请添加图片描述

延迟渲染

节省shading的时间

http://www.xdnf.cn/news/968995.html

相关文章:

  • Minktec 柔性弯曲传感器应用:3D 脊柱姿势追踪与人体活动识别
  • 半加器和全加器
  • React19源码系列之 事件优先级
  • Netty从入门到进阶(三)
  • 淘宝SKU与视频详情API接口使用指南
  • 6月10日day50打卡
  • 鹰盾播放器禁止录屏操作的深度技术解析与全栈实现方案
  • AI写实数字人实时交互系统本地私有化部署方案
  • Java TCP网络编程核心指南
  • 服务器硬防的应用场景都有哪些?
  • V837s-sdk buildroot文件系统设置串口登录密码
  • Docker 创建及部署完整流程
  • spring jms使用
  • pnpm install 和 npm install 的区别
  • 力扣HOT100之堆:347. 前 K 个高频元素
  • 基于51单片机的三位电子密码锁
  • LDPC码的编码算法
  • 【2025CVPR】花粉识别新标杆:HieraEdgeNet多尺度边缘增强框架详解
  • C++中变量赋值有几种形式
  • [ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
  • Suna 开源 AI Agent 安装配置过程全解析(输出与交互详解)
  • 泊松圆盘采样进行随机选点
  • iOS26 深度解析:WWDC25 重磅系统的设计革新与争议焦点
  • 聊一聊 - 如何像开源项目一样,去设计一个组件
  • (五)docker环境中配置hosts
  • React19源码系列之 事件插件系统
  • 鹰盾视频的AI行为检测是怎样的风控?
  • 黑马python(二)
  • 分析VSS,VCC和VDD
  • 206. 2013年蓝桥杯省赛 - 打印十字图(困难)- 模拟