高质量实时渲染笔记

文章目录

  • Real-time shadows
    • 1 自遮挡问题
    • 2 解决阴影detach问题?
    • 3 Aliasing
    • 4 近似积分
    • 5 percentage closer soft shadows(PCSS)
      • percenta closer filtering(PCF)
      • PCSS的思想
    • 6 Variance Soft Shadow Mapping (VSSM)
      • 步骤
      • Moment Shadow Mapping
    • 7 Distance field shadow
  • Real-time Environment Mapping
    • 1 The Split Sum
      • 1. 计算入射光的积分:prefilter the environment
      • 2. 计算brdf的积分:
    • 2 Spherical Harmonics
      • Spherical harmonics的性质
    • 3 得到环境光照下的阴影
      • 3.1 解决方案1
      • 3.2 在环境光照下的渲染
      • PRT
        • Diffuse Case
        • Glossy Case
        • 缺点
  • Real-time Global Illumination
    • Reflective Shadow Maps(RSM)
      • 注意事项
      • 缺点
    • Light Propagation Volumes(LPV)
      • 步骤
    • Voxel Global Illumination(VXGI)
      • pass from light(决定哪些patch会被照亮)
      • pass from camera
      • 注意事项
    • Screen Space Ambient Occlusion(SSAO)
      • 特点
      • 主要思想
      • AO部分
      • SS部分
    • Screen Space Directional Occlusion SSDO
      • SSAO和SSDO的比较
    • Screen Space Reflection(SSR)
      • 改进
  • Physically-based Material(surface models)
    • Cook-Torrance reflectance equation
    • Normal distribution function(NDF)
    • Geometry function
    • Fresnel equation
      • 解决能量不守恒问题
    • Linearly Transformed Cosines线性变换余弦(LTC)
    • Disney Principal BRDF
      • PBR材质的缺点
  • Non-Photorealistic Rendering(NPR)
    • Outline Rendering
      • shading 方法做描边
      • 用图像的方法描边
    • Color blocks
    • Strokes Surface Stylization
  • Real-time Raytracing
    • 目标1. Quality(如果滤波太重了会有overblur,no artifac,keep all details)
    • 工业界的解决方案
    • The G-Buffers
    • Back Projection
    • 降噪过程
    • Temporal失败的场景
    • 解决方法
    • 滤波的实现
      • 高斯滤波
      • Bilateral filtering 双边滤波
      • Joint Bilateral Filtering
      • filter的加速方法
        • Separate Passes
        • Progressively Growing Sizes
          • 为什么可以这么做?
    • Outlier Removal
      • Temporal Clamping
    • SVGF - Spatiotemporal Variance-Guided Filtering
      • Depth
      • Normal
      • Luminance
    • RAE - Recurrent denoising AutoEncoder
      • Key architecture design
    • 比较
  • 工业界的一些解决方案
    • Temporal Anti-Aliasing(TAA)
    • SSAA(supersampling) vs MSAA(Multisample)
    • Image based anti-aliasing solution
    • Temporal Super Resolution
    • Deferred Shading
      • 步骤
      • 问题
    • Tiled Shading
    • Cluster Shading
    • Level of Detail Solutions
      • key challenge
    • Lumen
      • Software ray tracing
      • Hardware ray tracing
  • 剩余的内容

Real-time shadows

1 自遮挡问题

加bias

2 解决阴影detach问题?

20231009101942
存次小深度,计算中间深度,和中间深度比较。

问题:要求water tight(地板就不行)

3 Aliasing

cascade

4 近似积分

20231009102918
乘积的积分近似于积分的乘积

  1. g的support很小,积分域较小(small support point/directional lighting)
  2. g足够光滑 smooth integrand(diffuse bsdf/constant radiance area lighting)

20231009103228
渲染方程,把visibility拆出来,拆成visibility部分和shading部分。

5 percentage closer soft shadows(PCSS)

shadow mapping是硬阴影。

percenta closer filtering(PCF)

PCF主要用来做抗锯齿的,但是可以用来做软阴影。
在阴影判断的时候做filtering。

对每一个着色点,采样周围一圈深度(比如3x3),和实际采样点深度比较,对这些深度取平均。

PCSS的思想

20231009104622

阴影的接受物和阴影的投射物,即遮挡的距离越近,阴影越近。
relative average projected blocker depth
20231009104859

  1. 计算blocker深度(找到一定范围区域的平均blocker深度),具体做法是着色点和点光源连线(面光源近似成点光源)
  2. penumbra esimation
  3. percentage closer filter

如何判断blocker的采样大小?(其实是平均的blocker size)
20231009105649

6 Variance Soft Shadow Mapping (VSSM)

解决PCSS中blocker search和filter慢的问题。
问题是采样太多,利用分布函数解决采样问题。
通过计算均值和方差的方式,计算采样区域的正态分布。
均值可以利用mipmap获得均值,利用平方的期望-期望的平方计算方差。

VSSM用的是切比雪夫,而不是正态分布。

步骤

  1. 生成depth map的同时生成square depth map。
  2. 计算遮挡物的平均深度。可以通过mipmap获得整个区域的平均深度,但是要计算的是遮挡物的平均深度。
    N 1 / N N_1/N N1/N:切比雪夫
    N 2 / N N_2/N N2/N:1-切比雪夫
    z u n o c c z_{unocc} zunocc:着色点的深度。
    20231009142652

问题:如果切比雪夫近似失败会产生light leaky问题,导致部分阴影错误变亮。

Moment Shadow Mapping

多加几项,使用不同的矩进行更精确的近似。
问题:如何根据前4阶的矩,得出近似函数?
20231009145329
VSSM实际上就是用了前2阶的矩。

7 Distance field shadow

SDF的应用

  1. 加速ray marching
    安全距离,查询一个点的sdf,在这个半径内就可以放心ray marching。
    20231009150522

  2. 生成软阴影。
    安全角度:角度越小阴影越黑。
    20231009150806
    沿着边缘找最小的安全角度。
    20231009150914
    为了避免反三角函数计算,使用以下近似:
    20231009151048
    k可以用来控制软阴影程度。k越大越硬。

Real-time Environment Mapping

为了计算环境光照,在渲染方程中拆分入射光和brdf。
20231009153124

1 The Split Sum

20231010113111

1. 计算入射光的积分:prefilter the environment

20231010111641
不同的材质有不同的brdf,glossy的材质采样角度小,越镜面,较为集中,diffuse的材质采样均匀。可以体现为不同filter size过滤的environment map。
这样只需要根据材质在不同filter过滤后的环境贴图在镜面反射方向上采样一次就可以了。

2. 计算brdf的积分:

20231010111912
假设是微表面模型。
20231010112143
20231010112433
有三个变量需要考虑,需要进行三维的预计算。

把fresnel项代入渲染方程中,将 R 0 R_0 R0移到积分外面。
20231010112736
把后面的两个积分烘焙成两张纹理(2个通道),就避免了采样。
20231010112901

2 Spherical Harmonics

定义在球面上的一系列二维的基函数
20231010133740
每一阶有2l+1个基函数。范围是[-l,l]。前n阶有 n 2 n^2 n2个基函数。适用于分析球面上的性质。
Legendre多项式来计算基函数。
可以用SH来描述光照和BRDF,适合用于描述低频光照(前3阶)。

Spherical harmonics的性质

  1. orthonormal
  2. simple projection(把要投影的函数做乘积)/reconstruction
  3. simple rotation(旋转每个基函数相同的角度,任意的旋转都可以被同阶基函数的线性组合得到)
  4. simple convolution
  5. few basic functions: low freqs

SH只适合描述低频的函数。

3 得到环境光照下的阴影

3.1 解决方案1

选最重要的几个光源(比如太阳),生成阴影。

3.2 在环境光照下的渲染

20231010140903
最复杂的方法:每个shading point,存储3张贴图。
20231010141103

PRT

precompute lighting and lighting transport.

基本思想:假设场景中只有光照变化,把可见性和brdf都固定住。
渲染方程分为lighting和light transport两部分,把lighting拆成basis function。

假设场景中所有东西都不变,除了lighting,light transport对于每个点是固定的东西。

使用的工具:spherical harmonics

Diffuse Case

先把光照描述成Spherical Harmonics
20231010143532
假设diffuse材质,即brdf常数,也可以写成以下形式:

20231010161906

Glossy Case

brdf不再是常数,每一个o给一组vector。从向量点乘向量变成向量点乘矩阵。
20231010163239

缺点
  1. 要求是静态场景,只能做光源。
  2. 存储和读取会产生负担。

Real-time Global Illumination

Reflective Shadow Maps(RSM)

次级光源: 认为所有的反射物(次级光源)是diffuse的。
怎么使用次级光源
20231010181929

20231010182255

f r = ρ / π f_r = \rho / \pi fr=ρ/π是点q的brdf。

L i = f r ⋅ Φ d A L_i = f_r \cdot \frac{\Phi}{dA} Li=frdAΦ是对于点p而言的。出射的radiance乘以入射的irradiance。

1.不考虑遮挡问题。
2.4次方的原因是还要进行归一化。

注意事项

对每个着色点,只需要寻找足够近的次级光源。

采样技巧
那既然世界坐标比较接近不好找,那么就用shadow map的距离进行近似,假设shadow map的采样近,就是在世界坐标中距离近。
20231010184114

缺点

一个光源一个shadowmap
不计算反射物到shading point的可见性。
假设:diffuse reflectors、depth as distance。

Light Propagation Volumes(LPV)

思想:radiance在传播的过程中不会改变。
把场景分成格子,查询每个格子接收的radiance。

步骤

  1. 哪些点可以作为次级光源?
    RSM找到次级光源。

  2. 将光注入到格子中(计算初始值)。
    把场景划分成三维的格子(三维纹理)。
    格子内部的所有虚拟光源相加。
    得知空间上每个格子的radiance分布,投影到2阶的SH上。
    20231010185837

  3. 在场景给格子中传播
    每个格子传输到周围的6个格子。
    加起来,然后再投影到SH上。
    重复这个传播过程,直到稳定。
    20231010190056

  4. 通过格子渲染

找到着色点位于的格子
获取格子中所有的incident radiance,然后着色。

问题:light leaking,应该被照亮的和不该被照亮的在一个格子里(可以用自适应方法,cascade)。

20231010190308

Voxel Global Illumination(VXGI)

也是2-pass。
把次级光源变成体素。(pixel->voxel)
第二个pass的时候,对每个shading point做cone tracing(每个像素做一遍)。
把整个场景划分成格子,然后划分层级,建立一棵树。
20231010191122

pass from light(决定哪些patch会被照亮)

记录的不是出射的半球形分布,而是记录incident lighting的分布(光从哪来)与法线分布。
20231010191554
通过这种方法,就可以根据不同的材质计算不同的出射分布。

pass from camera

cone-tracing:不必计算cone经过的所有体素,因为圆锥越来越大,所以在hierarchy上找到对应的层级进行采样。
这样就不用每次都查最小纹素了。

20231010191809

注意事项

  1. diffuse怎么办?难道用180°的圆锥?不是,作者使用很多小圆锥。
    20231010191918

  2. 比LPV慢一些但是效果好一些。

  3. 难以实时体素化。

Screen Space Ambient Occlusion(SSAO)

特点

  1. 是对全局光照的近似。
  2. 在屏幕空间

主要思想

  1. 假设间接光照是常数。
  2. shading point周围的几何会起到遮挡作用。
  3. 假设物体是diffuse材质。
    20231010192908

AO部分

20231010193120
橙色的部分是常量。

蓝色的部分可以理解成平均。
20231010193328
g(x)的积分是个常数,diffuse,间接光照都是常数。

其实可以直接把常数拿出来,入射光是常数,brdf是diffuse的。
20231010193929

SS部分

选定半圆半径R,在半圆内进行trace。SSAO在球里面撒点,在物体内部表示看不见,物体外部看的见。
把撒的点和投影到camera与深度缓存做比较。
20231010194407

缺陷就是凹几何体。

红点过半才会考虑AO问题。

可以用少量的采样得到有噪声的结果,然后再滤波。

也可以根据法线只算半球,法线也可以进行cos加权(加权以后就是HBAO,可以避免凡是遮挡就变暗的问题)。

Screen Space Directional Occlusion SSDO

不必认为着色点接收到的所有入射光照都是一样的。
次级光源不来源于RSM,而是来自于相机。

SSAO和SSDO的比较

AO假设全局光照来自于远方,DO假设全局光照来自于近处。
20231011135136

采样方式和HBAO相同,都是在法线方向的半球采样。但是只有被挡住的点才会提供间接光照(右图中的ABD)。
20231011135543

和SSAO一样,不计算从P到A能否被挡住,而是camera到A能否被挡住。

缺陷:因为是在相机位置计算是否遮挡,所以从p点本来应该当作次级光源的点可能不被计入。

Screen Space Reflection(SSR)

可以在屏幕空间上做光线追踪。
考虑任何光线和从相机罩过去的"壳"求交。

  1. 生成mipmap(存最小值),加速求交。
    20231011142505
  2. ray marching的时候使用步进的方法(hierarchical ray tracing)。
    20231011150824

改进

  1. 采样改进(重要性采样)
    20231011152508
  2. 复用采样信息(tracing的两条光线可以给别的着色点复用,计算该着色点对另一个点间接光照影响)
  3. 对于glossy的物体,可以对屏幕空间进行模糊,然后镜面方向采样(但是要考虑深度的差异)。

问题:diffuse采样过多 、只局限于屏幕空间。

Physically-based Material(surface models)

Cook-Torrance reflectance equation

20231001172243
左边是Lambert漫反射模型。
F:菲涅尔项,反射的比例(垂直反射的更多)。
K s K_s Ks:高光的比例。
K d K_d Kd:漫反射的比例。

Normal distribution function(NDF)

法线分布函数是二维的,描述微平面与半程向量对齐的量。越粗糙越不对齐,光线越发散。
Beckmann NDF
20231011155230

GGX(long tail,边缘会有一种diffuse的感觉)和beckman的对比。

20231001172605

20231011155714

ndf

Geometry function

避免在grazing angle时非常亮。
20231011160503
拆开shadowing和masking项,描述自遮挡(越和表面垂直越不遮挡)。
20231001173254
20231001173306
观察方向和光照方向都考虑:
20231001173526
geometry

Fresnel equation

20231001173915
金属反射的多,所以 F 0 F_0 F0也高一些。
20231001174042

导体和绝缘体反射的曲线是不同的。

绝缘体:
20231011154729

导体:
20231011154759

20231011154900

解决能量不守恒问题

越粗糙的表面能量损失的越多。
20231011160856

Kulla-Conty:补充多次反射损失的能量。
20231011161825
上式是半球面的积分, L i = 1 L_i=1 Li=1,f是微表面模型的brdf。
通过上式,得出能量损失: 1 − E ( μ o ) 1-E(\mu_o) 1E(μo)

所以要计算c的值,令下式和损失的能量相等。
20231011170944

20231011170929

为了计算 2 ∫ 0 1 E ( μ i ) μ i d μ i 2\int^{1}_{0}E({\mu}_i){\mu}_id{\mu}_i 201E(μi)μidμi,需要预计算。打表的变量是 μ \mu μ和roughness。

BRDF有颜色怎么办:考虑菲涅尔项 F F F
颜色就相当于能量损失,所以先通过菲涅尔项计算有多少能量被反射了。
20231011172825

所以,反射给人眼的能量是 F a v g E a v g F_{avg}E_{avg} FavgEavg。考虑多次弹射,有20231011173016

把所有项加起来,得到颜色项:

20231011172230

考虑颜色能量损失的版本是没颜色的版本乘以颜色项。

Linearly Transformed Cosines线性变换余弦(LTC)

(多边形光源情况下)用于解决microfacet models的着色问题。
将2D的BRDF lobe转化成余弦,光源的形状也一起跟着变化,在变换后的光源上进行积分是有解析解的。
20231011192904
20231011192318

假设 L i L_i Li是均匀的, ω i \omega_i ωi是原来的方向,$\omega_i’是变换过的方向。

Disney Principal BRDF

不一定是物理正确的,但易于艺术家理解。
具有强大的表现能力。
通过拟合来计算。
参数空间太大。
v2-61ad5761967d5785de22266d1ab6fcc4_720w

PBR材质的缺点

微表面模型不擅长表示真实的模型。
不利于美术理解。

Non-Photorealistic Rendering(NPR)

风格化渲染:fast and reliable stylization

Outline Rendering

什么是边?

边界、折痕、材质边界、轮廓(多个面共享的才是Sihouette)
20231011195931

shading 方法做描边

法线法: 观察的方向和法线几乎垂直的着色点,就是Sihouette边。

角度可以选不同的threshold。

20231011200439

扩大法: 可以直接用背面来描边,把背面扩大了以后渲染。

用图像的方法描边

Sobel算子提取边缘。
20231011200903

方法很灵活,也可以对法线、深度找边缘。

Color blocks

对着色结果阈值化或量化(可以划分许多色阶,比如2(阈值化)、255(量化))。
20231011201149

可以对材质的不同属性进行组合
20231011201354

Strokes Surface Stylization

根据亮度的不同转换成素描的密度。
20231011201539

  1. 分析不同的点应该用哪种密度。
  2. 每个点的笔触应该连续(可以预制好纹理)。

20231011201750
每一级有不同的密度(采样的时候对相邻位置不同密度的纹理进行采样),对每个固定密度的图做mipmap,mipmap密度不变。

Real-time Raytracing

SPP:sample per pixel
20231011203743
primary可以替换成rasterization,所以光线少了。
RTRT的关键技术:Denoising

目标1. Quality(如果滤波太重了会有overblur,no artifac,keep all details)

  1. Speed(<2/5ms to denoise one frame)

工业界的解决方案

  1. Temporal:在时间上进行滤波,认为前一帧是滤波好的,不会发生突变,重用前一帧。
  2. motion vector来寻找之前的位置。
  3. 变相的增加了SPP。
  4. 在空间上的做法。

The G-Buffers

Geometry buffer 几何缓冲区,保存屏幕空间的信息。

Back Projection

找当前帧的像素x在上一帧的位置,计算准确的motion vector。

  1. 找到当前帧此像素的世界坐标s(从G-buffer取,或通过 s = M − 1 V − 1 P − 1 E − 1 x s=M^{-1}V^{-1}P^{-1}E^{-1}x s=M1V1P1E1x计算)。
  2. 运动是知道的,可以知道上一帧的世界坐标, s ′ = T − 1 s s^{'}=T^{-1}s s=T1s
  3. 可以计算上一帧的屏幕位置, x ′ = E ′ P ′ V ′ M ′ s ′ x' = E'P'V'M's' x=EPVMs

降噪过程

当前帧在空间上先自己降噪,然后与上一帧对应的像素进行线性混合。
20231012110927

Temporal失败的场景

  1. 切换场景、光源突变

  2. 在走廊里倒退着走(新出现的像素在上一帧中找不到对应位置)

  3. 突然出现的背景(不遮挡),强行复用会拖尾。
    20231012113025

  4. 光源在移动的时候,motion vector不变(motion vector是相机计算的),会产生shadow detach问题。

  5. glossy反射时,反射要等一会才能移动到正确的位置。

解决方法

  1. Clamping:首先将上一帧拉近到当前帧相似的结果,然后再混合。
  2. Detection:用object ID来检测对应点是否再同一个物体上。调整 α \alpha α(但是结果会更noisy,重新引入了噪声,可以增加空间上的采样范围)。

滤波的实现

一般是低通滤波(移除高频信号)。

高斯滤波

μ \mu μ周围取3 σ \sigma σ的半径就够了,因为太远的贡献太小。
高斯滤波也会把边界模糊掉,但是希望把边界保留。所以引入了双边滤波。

1个标准:像素之间的距离

Bilateral filtering 双边滤波

边界:非常剧烈的颜色改变。
比较像素i和像素j,如果像素差异太大,那就不让j的像素颜色贡献到i上。
20231012135627

2个标准:像素之间的距离、颜色的差距

Joint Bilateral Filtering

联合不同的特征,适用于路径追踪产生的噪声。
Unique advantages in rendering

  • A lot of free “features” known as G-buffers.
  • Normal, depth, position, object ID, etc.,mostly geometric

G-Buffer还是noise-free的。

比如下图,AB之间用深度做特征较好,BC之间用法线做特征较好。DE用颜色之间的差异更好。

20231012140638

filter的加速方法

Separate Passes

水平filter一边,竖直filter一遍。
高斯函数的x和y是可以拆分的。
20231012141928
但是双边滤波就不能这样实现了,因为它们不能拆分,但有时也可以强行拆分(卷积核大小小于32)。

Progressively Growing Sizes

逐步增大的filter多次滤波(a-trous wavelet)

  1. 多次,每次都是5x5的大小。
  2. samples之间的间隔按照 2 i 2^i 2i增长(eg. 6 4 2 − > 5 2 × 5 64^2->5^2\times5 642>52×5,用到第5层)。
    20231012142253
为什么可以这么做?
  1. 为什么size逐渐变大?
    更大的filter意味着要去除更低的频率。
  2. 为什么可以跳过样本?
    Sampling == repeating the spectrum(频谱)

20231012142952

Outlier Removal

有时图像会有outlier(超级亮的像素),滤波会产生更大的噪声,因此要在滤波前去除outlier。

  1. 对每个像素,取7x7的像素,计算均值和方差。
  2. 所有的之应该在 [ μ − k σ , μ + k σ ] [\mu - k \sigma,\mu + k \sigma] [μ,μ+],不在的就是outlier。
  3. 对于outlier,clamp到上述的范围。

Temporal Clamping

在当前帧的点采样,获得均值和方差,将上一帧noise free的结果clamp到 [ μ − k σ , μ + k σ ] [\mu - k \sigma,\mu + k \sigma] [μ,μ+]范围。
20231012145436

SVGF - Spatiotemporal Variance-Guided Filtering

Joint Bilateral Filtering: 3 factor3 to guide filtering

Depth

20231012151959
A和B理应彼此贡献,权重大。
所以不是直接用相机出发的深度,而是用在在切平面上的深度。

Normal

法线使用点积来赋予权重, σ n \sigma_n σn控制衰减的速度。
不使用法线贴图变换过的法线。
20231012152328

Luminance

噪声会让噪声有干扰,所以不能直接根据颜色的差异赋予权重。
所以要计算方差,先spacial,再temporal(时间上累计),再spacial。得到相对平滑的variance值。
20231012152600

RAE - Recurrent denoising AutoEncoder

  • 用Recurrent AutoEncoder的结构对RTRT进行滤波(后期处理,输入是有噪声的图,输出是没有噪声的图)。
  • 网络自动执行temporal accumulation。

Key architecture design

  • AutoEncoder(or U-Net) structure
  • Recurrent convolutional block

20231012153739

低频噪声是boiling artifact

比较

20231012154317
RAE能在多SPP的情况下显著提升效果。

工业界的一些解决方案

Temporal Anti-Aliasing(TAA)

走样的原因:采样的数量不足。
解决方案:用更多的样本(MSAA)
思想:当前这一帧复用上一帧的sample,当前帧还用一个spp。
TAA使用jittering sampling。
20231012155254
每一帧像素内部的采样点周期性改变(每一帧用不同颜色的点)。

SSAA(supersampling) vs MSAA(Multisample)

SSAA:在一个更大的分辨率渲染,然后降采样。开销很大。
MSAA:对于同一个primitive,所有的样本只做一次sampling。在空间上可以做sample reuse(比如在边界上采样,边界上一个点当两个点用,下图就是6个点当8个点)。
20231012160256

Image based anti-aliasing solution

先渲染出有锯齿的图,然后用无锯齿的替换有锯齿的。
FXAA->MLAA(Morphological AA)->SMAA(Enhanced subpixel morphological AA)

20231012160614

上面是矢量化的思想(SMAA)。

Temporal Super Resolution

超分辨率,单独训练一个识别边缘的神经网络。

  • DLSS 1.0:全靠猜。
  • DLSS 2.0:利用temporal信息填到这一帧。
    因为分辨率增加了,不能直接重用,增加了采样点,但是要寻找更好的复用上一帧的方案。

DLSS解决了如何使用temporal信息的问题。

20231012161308

Deferred Shading

节省Shading时间的方法。
原始光栅化流程的复杂度是O(fragment*light)。
Deferred Shading只着色可见的fragment。

步骤

  1. Pass 1: 不着色,只更新深度缓存。
  2. Pass 2:再做一遍光栅化(只有严格等于Pass1深度缓存的片元着色)。
  • rasterize一遍场景开销比对所有不可见fragment着色开销小。

问题

  1. 难做anti-aliasing,可以用TAA和image based AA。

Tiled Shading

把屏幕分成32x32的tile,然后对每个tile进行shading。

  • 每一个小块不用考虑全部的光源。
  • 光源的亮度是按照半径衰减的,有效区域可以看成一个球。
    20231012162845

Cluster Shading

在tile的标准上进一步划分成不同的depth segments。
20231012163013

Level of Detail Solutions

  • cascaded shadow maps
  • cascaded LPV
  • geometric LoD(Popping artifacts,可以交给TAA。)
    20231012163416

key challenge

  1. Transition between different levels
  2. Usually need some overlapping and blending near boundaries.

Lumen

hybrid solution

  1. 先做一遍SSR,得到近似的GI。
  2. Upon SSR failure,使用更复杂的光线追踪。

加粗的部分就是UE5 Lumen的实现。

Software ray tracing

SDF相较于BVH树的三角形更有利于求交。适合在GPU中求交。

  1. HQ SDF for individual objects that are closed-by.
  2. LQ SDF for the entire scene.(远处的object用低质量的SDF)
  3. RSM if there are strong directional/point lights.
  4. Probes that stores irradiance in a 3D grid.

Hardware ray tracing

  1. 用简化的模型代替原始的模型。
  2. Probes

剩余的内容

20231012165252

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

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

相关文章

LeetCode - 232.用栈实现队列 225.用队列模拟实现栈 (C语言,配图)

目录 232.用栈实现队列 225.用队列模拟实现栈 注&#xff1a;本文是基于C语言实现的代码&#xff0c;所以栈和队列是在力扣上制造实现的&#xff0c;如果你使用C等语言&#xff0c;可以忽略前面相当大部分的代码。 在栈模拟实现栈和队列之前&#xff0c;我们先来复习一下栈和…

Skywalking流程分析_4(插件的加载和不同版本的识别)

插件的结构 之前我们介绍了插件的加载&#xff0c;接下来就是真正开始进行插件的执行了&#xff0c;首先要看下插件的结构是怎么样的&#xff0c;以阿里的druid数据源为例 skywalking-plugin.def: druid-1.xorg.apache.skywalking.apm.plugin.druid.v1.define.DruidPooledCo…

【PG】PostgreSQL高可用方案repmgr部署(非常详细)

目录 简介 1 概述 1.1 术语 1.2 组件 1.2.1 repmgr 1.2.2 repmgrd 1.3 Repmgr用户与元数据 2 安装部署 2.0 部署环境 2.1 安装要求 2.1.1 操作系统 2.1.2 PostgreSQL 版本 2.1.3 操作系统用户 2.1.4 安装位置 2.1.5 版本要求 2.2 安装 2.2.1 软件包安装 2.2…

使用Filebeat+Kafka+Logstash+Elasticsearch构建日志分析系统

随着时间的积累&#xff0c;日志数据会越来越多&#xff0c;当您需要查看并分析庞杂的日志数据时&#xff0c;可通过FilebeatKafkaLogstashElasticsearch采集日志数据到Elasticsearch中&#xff0c;并通过Kibana进行可视化展示与分析。本文介绍具体的实现方法。 一、背景信息 …

科学上网导致Adobe软件运行弹出This non-genuine Adobe app will be disabled soon,尝试解决办法

之前介绍用防火墙拦截Adobe软件的出站规则可以解决软件的非正版弹窗&#xff0c;但是有的用户却不行是为什么&#xff0c;原因是使用了代理网络。因为Adobe此时跑的不是本地的流量而是代理的流量。所以防火墙拦截就不起作用了。 首先是之前介绍过的拦截方法&#xff0c;如果你没…

百度飞浆环境安装

前言&#xff1a; 在安装飞浆环境之前得先把pytorch环境安装好&#xff0c;不过关于pytorch网上教程最多的都是通过Anaconda来安装&#xff0c;但是Anaconda环境安装容易遇到安装超时导致安装失败的问题&#xff0c;本文将叫你如何通过pip安装的方式快速安装&#xff0c;其实这…

14——1

这句话的意思是&#xff0c;如图中月份12天数23时&#xff0c;就是1223&#xff1b;当月份9天数2时&#xff0c;就是0902. 可以看到在上面给出的数组元素中&#xff0c;并没有连续挨在一起的2023数字元素——就有人可能输出答案0。 所以这里要看一下—— ——子序列的含义&…

The 8th China Open Source Conference Successfully Concludes

由开源社主办的第八届中国开源年会&#xff08;COSCon23&#xff09;于 2023年10月29日在成都圆满收官。本次大会&#xff0c;为期两天&#xff0c;线下参会报名逾千人次&#xff0c;在线直播观看人数总计 168610 人&#xff0c;直播观看次数达 248725 次&#xff0c;官网累计浏…

网络编程 —— TCP 和 UDP 编程详解

目录 网络编程主要函数介绍 1. socket 函数 2. bind 函数 3. listen 函数 4. accept 函数 5. connect 函数 6. send 函数 7. recv 函数 8. recvfrom 函数 9. sendto 函数 TCP 和 UDP 原理上的区别 TCP 编程 服务端代码&#xff1a; 客户端代码&#xff1a; UDP 编…

nodejs+vue公益帮学网站的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展&#xff0c; 如何用方便快捷的方式使管理者在广阔的数据海洋里面查询、存储、管理和共享有效的数据信息&#xff0c;对我们的学习&#xff0c;工作和生活具有重要的现…

创造者设计模式

Bike package com.jmj.pattern.builder.demo01;public class Bike {private String frame;//车架private String seat;//车座public String getFrame() {return frame;}public void setFrame(String frame) {this.frame frame;}public String getSeat() {return seat;}public…

Webpack Bundle Analyzer包分析器

当我们需要分析打包文件dist里哪些资源可以进一步优化时&#xff0c;就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化 webpack 输出文件的大小。 我的是vue2项目。 1、webpack-bundle-analyzer插件的安装 $ npm install --save-dev…

接口测试vs功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什…

Kyligence 入选 Gartner® 2023 客户之声报告,高分获评“卓越表现者”

近日&#xff0c;Gartner 发布了最新的《2023 分析和商业智能平台“客户之声”报告》(Voice of the Customer for Analytics and Business Intelligence Platforms, 2023, October 2023)。跬智信息&#xff08;Kyligence&#xff09;成功入选该报告&#xff0c;并凭借 4.7 分&a…

嵌入式养成计划-54----ARM--异常处理流程

一百三十五、异常处理流程 135.1 arm处理器工作模式 135.2 异常源和异常模式关系 135.2.1 异常源 异常源就是引发处理器进入相应异常模式 135.2.2 对应关系 异常模式异常源FIQ模式FIQ类型异常源引发处理器进入FIQ模式IRQ模式IRQ类型异常源引发处理器进入IRQ模式SVC模式上电…

opencv车牌识别<一>

目录 一、概述 二、ANPR简介 一、概述 本文将介绍创建自动车牌识别(Automatic Number Plate Recognition&#xff0c;ANPR)所需的步骤。对于不同的情形&#xff0c;实现自动车牌识别会用不同的方法和技术&#xff0c;例如&#xff0c;IR 摄像机、固定汽车位置、光照条件等…

spring cloud之配置中心

Config 统一配置中心(*) 1.简介 # 统一配置中心 - 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/#_spring_cloud_config_server- config 分为 config server 和 config client。用来统一管理所有微服务的配置统一配置…

【Python 千题 —— 基础篇】欢迎光临

题目描述 题目描述 欢迎光临。为列表中的每个嘉宾打印欢迎光临语句。例如&#xff0c;有一份嘉宾列表 ["李二狗", "王子鸣"]&#xff0c;则需要根据嘉宾名单打印输出&#xff1a; 欢迎光临&#xff01;李二狗。 欢迎光临&#xff01;王子鸣。下面是一份…

基于JAX-WS的RESTful web服务返回通过JAXB注解生成的xml文档

基于JAX-WS编写的RESTful web服务&#xff0c;返回xml文档。这个xml文档可以基于JAXB注解的形式来生成&#xff0c;简化xml的生成。 例如&#xff0c;下面RegisterResponse 这个类使用了JAXB的注解&#xff1a; package com.thb.server.register;import jakarta.xml.bind.ann…

C语言--指针与数组--遍历数组的n种方式【详细】

一.一维数组名的含义 arr一般表示数组的其实地址&#xff08;除了两种例外&#xff09; 1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数 2.在定义数组的同一个函数中(不是形参),&arr1,加整个数组的大小 (经常考试) 3.除上面以外,arr都表示数组的…