Skip to content

AirGuanZ/Rtrc

Repository files navigation

Rtrc

Personal graphics toolkits

Features

  • DirectX12 & Vulkan RHI backends, supporting RTX, mesh shader and work graph
  • Render graph with transient resource aliasing
  • Explicit binding group management in shader
  • (Experimental) compute shader DSL embedded in C++
  • Physically-based atmosphere rendering
  • Distortion-free displacement map optimizer
  • Exact floating-point computation based on arithmetic expansion
  • Exact predicates for computational geometry
  • Constrained Delaunay triangulation
  • Array-style halfedge mesh
  • Exact mesh corefinement
  • Discrete differential operators on triangle mesh

Samples

Name Thumbnail
01.TexturedQuad
Basic texture mapping
Samples01
02.ComputeShader
Basic usage of compute shader
Samples00
03.BindlessTexture
Basic usage of bindless resource array
Samples00
04.RayTracingTriangle
Basic usage of ray tracing pipeline
Samples00
05.PathTracing
Basic unidirectional path tracer using ray query
Samples00
06.DistortionFreeDisplacementMap
https://cg.ivd.kit.edu/english/undistort.php
Samples00
07.Gizmo
Basic gizmo elements
Samples00
08.FeatureAwareDisplacementMap
https://airguanz.github.io/articles/2024.02.23.VDM-Baking
Samples00
09.MeshShader
Basic usage of mesh shader
Samples00
10.FastMarchingMethod
Basic fast marching method on 2d grid
Samples00
11.GeodesicDistance
Geodesic distance field on voxels
Samples00
12.ShaderDSL
Embedded DSL in C++ for writing shader
13.HorizonMap
Basic horizon shadow described in paper
'Interactive Horizon Mapping'
14.HalfedgeMesh
Halfedge data structure for triangle mesh
15.HeatMethod
Heat method for geodesic distance computation
16.MeshCorefinement
Embed all intersection lines between meshes
17.WorkGraph
Basic example of work graph
18.ShortestGeodesicPath
Find globally shortest geodesic path on triangle mesh
19.Archive
Serialize/deserialize to/from JSON/bytes
20.MultiLayerOIT
Multi-layered order-independent transparency
WIP ...

Third-party Dependencies

avir for image resizing

boost-multiprecision for multi-precision floating-point numbers

bvh for BVH construction

Catch2 for testing

cista for counting class members

cxxopts for parsing command arguments

cyCodeBase for generating possion disk samples

D3D12MemAlloc for memory management in D3D12 backend

DearImGui for creating GUI in samples

DirectXAgilitySDK (binary) for accessing D3D12 preview features

DirectXShaderCompiler (binary) for compiling shaders

Eigen for solving linear systems

fmt for formatting strings

geometry-central for computing local parameterization (logarithmic map)

GLFW for managing windows and system events

half for conversions between float16 and float32

libigl for planar mesh parameterization in samples

magic_enum for formatting enum values

mimalloc for memory allocation

nlohmann-json for parsing & writing JSON strings

oneapi-tbb for spin locks and thread-safe containers

ryu for numer-to-string conversion

sigslot for thread-safe event broadcasting

smhasher for hash operators

spdlog for logging

SPIRV-Reflect for reflecting SPIRV codes

stb for image IO

tinyexr for EXR image IO

tinyobjloader for loading wavefront obj files

unordered_dense for replacing std::unordered_*

vk-bootstrap for Vulkan initialization

volk for loading Vulkan entry points

VulkanMemoryAllocator for memory management in Vulkan backend

WinPIXEventRuntime (binary) for generating PIX captures