6.6 KiB
title, date, excerpt, tags, rating
title | date | excerpt | tags | rating |
---|---|---|---|---|
Untitled | 2024-12-28 21:56:29 | ⭐ |
前言
相关论文地址:
- 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:
- SSGI: https://www.ea.com/frostbite/news/stochastic-screen-space-reflections
- DDGI:
HIZ Tracing
!# 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 Volumeshj
"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
!
!
中间的RayCast使用RayMarching进行。但使用LinearRayMarching相对比较消耗资源,所以采用HierachicalTracing。
!
最低层级
!
层级+1,相当于RayMarching2个像素。
!
层级+2,相当于RayMarching4个像素。此时RayHit。
!
回退当前HiZ像素的上一层级。
!
回退当前HiZ像素的上上一层级。
!
找到RayHit位置。
!
Ray Reuse among Neighbor Pixels
- Store hitpoint data
- Assume visibility is the same between neighbors
- Regard ray to neighbor's hitpoint as valid
Lumen
Phase1: Fast Ray Track in Any Hardward
Signed Distance Field(SDF)
- 它是均匀的。
- 在空间上是连续的。
Cone Tracing with SDF(ie. Soft Shadow)
Phase2:Radiance Injection and Cacheing
!
MeshCard的目的是为了将直接光照存储在模型上(Surface Cache)
最终目的是通过SurfaceCache这4张图渲染出SurfaceCache FinalLighting
!
- 计算SurfaceCache DirectLighting
- 通过1计算体素光照。
- 通过体素光照来计算间接照明。
- 最终计算Surface Cache FinalLighting。
针对多个光源会渲染对应数量的cache,之后累加在一起。
!
Voxel Lighting to Sample
!
对于近处的物体可以准确拿到Hit到物体的上一点的Radiance;对于远处的物体,会以相机坐标轴生成一个Voxel形式的表达,之后通过Global SDF拿到对应的Radiance。
PS. 该Voxel存储的数据为:每个面对应方向上被其他直接照明照亮的亮度。
!
在SurfaceCache中 8x8的tile中(行与列间隔4个像素,放置2个探针),进行4次空间Voxel采样。
之后进行球谐插值:
!
!
!
Phase3:Build a lot of probes with Different Kinds
每隔 16 * 16 个像素采样一个ScreenSpaceProbe。采样的内容是Radiance与HitDistance,以8面体(Octahedron Mapping)的方式进行存储。
!!
!
!
将重采样的结果(部分区域的屏幕空间探针因为实际空间距离太远,进行插值没有意义,所以需要额外填充探针进行重采样)存在Atlas下面的空出来的区域。
重要性采样
Denoise
WorldSpace Probes and Ray Connecting
Phase4:Shading Full Pixels with Screen Space Probes
在ScreenSpaceProbes将场景Radiance都收集好。
!