SkillAgentSearch skills...

Vxpg

Real-Time Path Guiding Using Bounding Voxel Sampling

Install / Use

/learn @SuikaSibyl/Vxpg
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

vxpg

code for SIGGRAPH 2024 paper "Real-Time Path Guiding Using Bounding Voxel Sampling".

project page: https://suikasibyl.github.io/vxpg


Noteice: The current codebase is a bit messy,
and there could be problems to build the project.
Please contact me through hal128@ucsd.edu for any questions.
I'll probably upload a clean and more easy to build version latter.

Our implementation bases on my toy renderer SIByL2023, and <u>the code is already in the 👈 repo</u>.

Here is a walkthrough of relevant files and codes:


Render Graphs

The render pipelines in SIByL are defined and scheduled with Render Dependency Graph (RDG).

For simplicity, I serialize the pipeline and show them below. In the paper, we present 3 variants of vxpg pipeline:

1. vanilla vxpg [cpp]

| High-Level Pipeline | Actual Pass | Description | Code | |------|-------|-------|----| | Render VBuffer | RayTraceVBuffer | render and hold V-Buffer for further reuse of 1st shading points | [cpp][slang] | | Geometry Injection | PrebakeDummyPass | load prebake geometry information from external resources | [cpp]| | | VXGuiderClearPass | clear relevant resources for geometry & light injection | [cpp][slang] | | | VXGuiderGeometryDynamicPass | dynamic objects geometry injection | [cpp][slang] | Light Injection | VXGuider1stBounceInjection | draw 1st path sample, inject the irradiance to voxels | [cpp][slang]| | | VXGuiderCompactPass | compact all populated voxels for faster manupulation later | [cpp][slang]| | Superpixel Clustering | InitClusterCenterPass | set 64x64 pixel tile center as cluster center | [cpp][slang] | | | FindCenterAssociationPass | use gSLICr to find nearst pixel cluster in local 3x3 field | [cpp][slang]| | Supervoxel Clustering | VXInfoClearPass | clear data relevant to voxel clustering | [cpp][slang]| | | RowColumnPresamplePass | randomly select 1 pixel per superpixel & 1 vertex per populated voxel | [cpp][slang]| | | RowVisibilityPass | for each voxel, use the selected vertex to evaluate the mutual visibility with every representative pixels proposed in 👆 pass; then pack the visiblity as a unsigned int bitfield | [cpp][slang]| | | RowKmppCenterPass | use kmpp to initialize voxel cluster center by visibility bitfield | [cpp][slang]| | | RowFindCenterPass | find the nearest voxel cluster, which has most similar visibility bitfield | [cpp][slang] | | Supervoxel Merging (optional) | VXTreeEncodePass | encode the voxels with cluster and position information | [cpp][slang] | | | BitonicSort Subgraph | sort the voxels as tree leaves for parallel tree building | [cpp][slang] | | | VXTreeIIntializePass | initialize tree leaves and nodes for parallel tree building | [cpp][slang] | | | VXTreeInternalPass | and this is parallel binary tree building | [cpp][slang] | | | VXTreeMergePass | merge voxel nodes along the binary tree to get cluster information (bounding box, irradiance sum)| [cpp][slang] | | LightSlice Building | VXInfoRearrangePass | rearange voxel information for further visibility check | [cpp][slang] | | | SPixelClearPass | clear the data structure relavent to superpixel samples | [cpp][slang] | | | SPixelGatherPass | each superpixel draw some sample pixels from its domain | [[cpp](https://github.com/SuikaSibyl/SIByLEngine2023/blob/8c1adad28c16e07592bc79122cb9d0c9738699bc/Engine/Source/Addon/VXGuid

View on GitHub
GitHub Stars33
CategoryDevelopment
Updated3mo ago
Forks2

Security Score

77/100

Audited on Dec 14, 2025

No findings