2024-12-28 21:58:12 +08:00
|
|
|
|
---
|
|
|
|
|
title: Untitled
|
|
|
|
|
date: 2024-12-28 21:56:29
|
|
|
|
|
excerpt:
|
|
|
|
|
tags:
|
|
|
|
|
rating: ⭐
|
|
|
|
|
---
|
2024-12-30 20:17:42 +08:00
|
|
|
|
# 前言
|
|
|
|
|
相关论文地址:
|
|
|
|
|
- Reflective Shadow Maps: https://users.soe.ucsc.edu/~pang/160/s13/proposal/mijallen/proposal/media/p203-dachsbacher.pdf
|
|
|
|
|
- Light Propagation Volumes: https://ericpolman.com/
|
|
|
|
|
- VXGI:
|
|
|
|
|
- https://on-demand.gputechconf.com/gtc/2014/preseintations/S4552-rt-voxel-based-global-illumination-gpus.pdf
|
|
|
|
|
- https://docs.nvidia.com/gameworks/content/gameworkslibrary/visualfx/vxgi/product.html
|
|
|
|
|
- https://developer.download.nvidia.com/assets/gameworks/downloads/secure/GDC18_Slides/Advances%20in%20Real-Time%20Voxel-Based%20GI%20-%20GDC%202018.pdf?HAwkc19IdhKMFWUs8jSk-If6y4QowlgUUrY8F9SL1-4qnhWWo-u5_gptg4ITWjMJCd1JrFbGmBw4-ztQCJ4M9Bh61am6lFCerKQVApEjN-HQ4chiSb5MLRLY41TyIse6_XW2DpNAe0_4inrYkZqxVb2iGiyZQhxwzfZ40dByP-X8jRYfWhJVsC1aSIqZ8BkooGkjUoUUGw2r7AAxyWVQole9a4je_76g04KtUwlONQ==
|
|
|
|
|
- Lumen:
|
|
|
|
|
- [https://youtu.be/2GYXuM10riw](https://youtu.be/2GYXuM10riw)
|
|
|
|
|
- https://www.advances.realtimerendering.com/s2021/Radiance%20Caching%20for%20real-time%20Global%20Illumination%20(SIGGRAPH%202021).pptx
|
|
|
|
|
- SSGI: https://www.ea.com/frostbite/news/stochastic-screen-space-reflections
|
|
|
|
|
- DDGI:
|
|
|
|
|
- https://zhuanlan.zhihu.com/p/404520592
|
|
|
|
|
- https://developer.download.nvidia.com/video/gputechconf/gtc/2019/presentation/s9900irradiance-fields-rtx-diffuse-global-illumination-for-local-and-cloud-graphics.pdf
|
|
|
|
|
- https://www.jcgt.org/published/0008/02/01/paper-lowress.pdf
|
|
|
|
|
# HIZ Tracing
|
|
|
|
|
|
2024-12-28 21:58:12 +08:00
|
|
|
|
![[HierachicalTracing2.png]]
|
|
|
|
|
|
|
|
|
|
![[HierachicalTracing3.png]]
|
|
|
|
|
|
|
|
|
|
![[HierachicalTracing1.png]]# Reflective Shadow Maps(RSM,2005)
|
|
|
|
|
论文地址:https://users.soe.ucsc.edu/~pang/160/s13/proposal/mijallen/proposal/media/p203-dachsbacher.pdf
|
|
|
|
|
|
|
|
|
|
Let's inject light in. (Photon Mapping?)
|
|
|
|
|
解决如何把“光”注入到场景中。
|
|
|
|
|
|
|
|
|
|
**Cool Ideas**
|
|
|
|
|
- Easy to be implemented
|
|
|
|
|
- Photon Injection with RSM
|
|
|
|
|
- Cone sampling in mipmap
|
|
|
|
|
- Low-res Indirect illumination with error check
|
|
|
|
|
**Cons**
|
|
|
|
|
- Single bounce
|
|
|
|
|
- No visibility check for indirect illumination
|
|
|
|
|
|
|
|
|
|
# Light Propagation Volumes
|
|
|
|
|
|
|
|
|
|
**"Freeze" the Radiance in Voxel**
|
|
|
|
|
Light Injection
|
|
|
|
|
- Pre-subdivide the scene into a 3D grid
|
|
|
|
|
- For each grid cell, find enclosed virtual light sources
|
|
|
|
|
- Sum up their directional radiance distribution
|
|
|
|
|
- Project to first 2 orders of SHs (4 in total)
|
|
|
|
|
|
|
|
|
|
# Sparse Voxel Octree for Real-time Global Illumination (SVOGI)
|
|
|
|
|
|
|
|
|
|
## Shading with Cone Tracing in Voxel Tree
|
|
|
|
|
Pass 2 from the camera
|
|
|
|
|
- Emit some cones based on diffuse+specular BRDF
|
|
|
|
|
- Query in octree based on the (growing) size of the cone
|
|
|
|
|
|
|
|
|
|
# VXGI(Nvidia UE4 Plugins)
|
|
|
|
|
**Problems in VXGI**
|
|
|
|
|
Incorrect Occlusion(opacity)
|
|
|
|
|
- naively combine the opacity with alpha blending.
|
|
|
|
|
Light Leaking
|
|
|
|
|
- when occlusion wall is much smaller than voxel size
|
|
|
|
|
|
|
|
|
|
# SSGI
|
|
|
|
|
SIGGRAPH2015:Advances in Real-Time Rendering course
|
|
|
|
|
|
|
|
|
|
**Radiance Sampling in Screen Space**
|
|
|
|
|
For each fragment:
|
|
|
|
|
- **Step 1**: compute many reflection
|
|
|
|
|
rays
|
|
|
|
|
- **Step 2**: march along ray direction
|
|
|
|
|
**(in depth gbuffer)**
|
|
|
|
|
- **Step3**: use color of hit point as
|
|
|
|
|
indirect lighting
|
|
|
|
|
![[SSGI1.png]]
|
|
|
|
|
|
|
|
|
|
![[SSGI2.png]]
|
|
|
|
|
中间的RayCast使用RayMarching进行。但使用LinearRayMarching相对比较消耗资源,所以采用HierachicalTracing。
|
|
|
|
|
|
|
|
|
|
![[SSGI3.png]]
|
|
|
|
|
最低层级
|
|
|
|
|
![[HierachicalTracing1.png]]
|
|
|
|
|
层级+1,相当于RayMarching2个像素。
|
|
|
|
|
![[HierachicalTracing2.png]]
|
|
|
|
|
层级+2,相当于RayMarching4个像素。此时RayHit。
|
|
|
|
|
![[HierachicalTracing3.png]]
|
|
|
|
|
回退当前HiZ像素的上一层级。
|
|
|
|
|
![[HierachicalTracing4.png]]
|
|
|
|
|
回退当前HiZ像素的上上一层级。
|
|
|
|
|
![[HierachicalTracing5.png]]
|
|
|
|
|
找到RayHit位置。
|
|
|
|
|
![[HierachicalTracing6.png]]
|
|
|
|
|
|
|
|
|
|
## Ray Reuse among Neighbor Pixels
|
|
|
|
|
- Store **hitpoint data**
|
|
|
|
|
- Assume visibility is the same between neighbors
|
|
|
|
|
- Regard **ray to neighbor's hitpoint** as valid
|
|
|
|
|
|
|
|
|
|
![[ConeTracingWithMipmapFiltering1.png]]
|
|
|
|
|
|
|
|
|
|
# Lumen
|
|
|
|
|
## Phase1: Fast Ray Track in Any Hardward
|
|
|
|
|
Signed Distance Field(SDF)
|
|
|
|
|
1. 它是均匀的。
|
|
|
|
|
2. 在空间上是连续的。
|
|
|
|
|
|
|
|
|
|
### Cone Tracing with SDF(ie. Soft Shadow)
|
|
|
|
|
|
|
|
|
|
## Phase2:Radiance Injection and Cacheing
|
|
|
|
|
![[MeshCard1.png]]
|
|
|
|
|
MeshCard的目的是为了将直接光照存储在模型上(Surface Cache)
|
|
|
|
|
|
|
|
|
|
![[GenerateSurfaceCache1.png]]
|
|
|
|
|
![[GenerateSurfaceCache2.png]]
|
|
|
|
|
|
|
|
|
|
最终目的是通过SurfaceCache这4张图渲染出SurfaceCache FinalLighting
|
|
|
|
|
![[LightingCachePipeline1.png]]
|
|
|
|
|
1. 计算SurfaceCache DirectLighting
|
|
|
|
|
2. 通过1计算体素光照。
|
|
|
|
|
3. 通过体素光照来计算间接照明。
|
|
|
|
|
4. 最终计算Surface Cache FinalLighting。
|
|
|
|
|
|
|
|
|
|
以此进行循环。![[DirectLighting1.png]]
|
|
|
|
|
|
|
|
|
|
针对多个光源会渲染对应数量的cache,之后累加在一起。
|
|
|
|
|
![[MultiLightSurfaceCache.png]]
|
|
|
|
|
|
|
|
|
|
### Voxel Lighting to Sample
|
|
|
|
|
![[VoxelLightingToSample.png]]
|
|
|
|
|
对于近处的物体可以准确拿到Hit到物体的上一点的Radiance;对于远处的物体,会以相机坐标轴生成一个Voxel形式的表达,之后通过Global SDF拿到对应的Radiance。
|
|
|
|
|
***PS. 该Voxel存储的数据为:每个面对应方向上被其他直接照明照亮的亮度。***
|
|
|
|
|
|
|
|
|
|
![[VoxelClipmap.png]]![[BuildVoxelFaces.png]]
|
|
|
|
|
其Voxel的计算是基于SDF的。
|
|
|
|
|
|
|
|
|
|
![[InjectLightIntoClipmap.png]]
|
|
|
|
|
|
|
|
|
|
![[IndirectLighting.png]]
|
|
|
|
|
在SurfaceCache中 8x8的tile中(行与列间隔4个像素,放置2个探针),进行4次空间Voxel采样。
|
|
|
|
|
之后进行球谐插值:
|
|
|
|
|
![[IndirectLighting_SHLerp.png]]![[Per-PixelIndirectLighting.png]]![[CombineLighting.png]]
|
|
|
|
|
|
|
|
|
|
## Phase3:Build a lot of probes with Different Kinds
|
|
|
|
|
![[ScreenProbeStructure.png]]
|
|
|
|
|
|
|
|
|
|
每隔 16 * 16 个像素采样一个ScreenSpaceProbe。采样的内容是Radiance与HitDistance,以8面体(Octahedron Mapping)的方式进行存储。
|
|
|
|
|
|
|
|
|
|
![[ScreenProbePlacement.png]]![[PlaneDistanceWeightingOfProbeInterpolation.png]]![[DetectNon-InterpolatableCases.png]]![[ScreenProbeAtlas.png]]
|
|
|
|
|
将重采样的结果(部分区域的屏幕空间探针因为实际空间距离太远,进行插值没有意义,所以需要额外填充探针进行重采样)存在Atlas下面的空出来的区域。
|
|
|
|
|
|
|
|
|
|
![[ScreenProbeJitter.png]]
|
|
|
|
|
|
|
|
|
|
### 重要性采样
|
|
|
|
|
![[ApproximateRadianceImportanceFromLastFrameProbes.png]]![[AccumulateNormalDistributionNearby.png]]![[NearbyNormalAccumulation.png]]![[StructuredImportanceSampling.png]]![[FixBudgetImportanceSampling.png]]
|
|
|
|
|
|
|
|
|
|
### Denoise
|
|
|
|
|
![[Denoise_SpatialFilteringForProbe.png]]![[Denoise_GatherRadianceFromNeightbors.png]]![[ClampDistanceMismatching.png]]
|
|
|
|
|
|
|
|
|
|
### WorldSpace Probes and Ray Connecting
|
|
|
|
|
![[WorldSapceRadianceCache.png]]![[WorldSpaceRadianceCache.png]]![[ConnectingRays.png]]![[ConnectingRays2.png]]![[ConnectingRay3.png]]![[PlacementAndCacheing.png]]
|
|
|
|
|
|
|
|
|
|
## Phase4:Shading Full Pixels with Screen Space Probes
|
2024-12-30 20:17:42 +08:00
|
|
|
|
在ScreenSpaceProbes将场景Radiance都收集好。
|
|
|
|
|
![[ConvertProbeRadianceTo3rdOrderSphericalHarmonic.png]]
|
|
|
|
|
|
|
|
|
|
![[FinalIntegarationWithSH.png]]
|
|
|
|
|
|
|
|
|
|
## 性能问题
|
|
|
|
|
![[LumenTrackMethod.png]]
|