Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bd5b1fa
caustics project
jesusdoesnotloveyou Dec 7, 2025
48a8e92
main files to falcor 8.0
jesusdoesnotloveyou Dec 27, 2025
a7543cb
data files: shaders, pictures, ini
jesusdoesnotloveyou Dec 27, 2025
9f8f271
falcor 3.1 ->8.0
jesusdoesnotloveyou Jan 4, 2026
e089e0f
fix Nvidia HelloDXR project
jesusdoesnotloveyou Jan 9, 2026
1f59eb3
AAPS Falcor 8.0
jesusdoesnotloveyou Mar 11, 2026
8057b36
hello DXR stuff
jesusdoesnotloveyou Mar 11, 2026
7460763
ReSTIR FG Lite algorithm to Falcor 8.0
jesusdoesnotloveyou Mar 11, 2026
33eedee
initial ReSTIR FPDG
jesusdoesnotloveyou Mar 14, 2026
7e49e87
photon differentials stuff
jesusdoesnotloveyou Mar 17, 2026
12b8d33
photon differentials stuff
jesusdoesnotloveyou Mar 17, 2026
a8dac9f
the main passes intial code, resource setup
jesusdoesnotloveyou Mar 17, 2026
d3cce36
Pipeline setup finished (almost)
jesusdoesnotloveyou Mar 20, 2026
3cda085
Helpes extended: evaluate photon differential weight function has bee…
jesusdoesnotloveyou Mar 20, 2026
2e98a01
Resampling and evaluation changed to photon differentials approach.
jesusdoesnotloveyou Mar 20, 2026
f114597
pack photon differentials struct 80 bytes->64 bytes
jesusdoesnotloveyou Mar 21, 2026
473fc60
Separate rendering of caustic and global photons (photon differential…
jesusdoesnotloveyou Mar 21, 2026
de13cde
Default normal threshold has been changed:
jesusdoesnotloveyou Apr 1, 2026
4df2f61
Sagnificant changes:
jesusdoesnotloveyou Apr 1, 2026
3e2b13a
1.'evaluatePhotonFootprint' function changes (take a look at the simi…
jesusdoesnotloveyou Apr 1, 2026
6359f90
function 'getVertexAttributes' for getting non-interpolated parameter…
jesusdoesnotloveyou Apr 1, 2026
25f72a0
1. normal derivative calculation function
jesusdoesnotloveyou Apr 1, 2026
4548fa9
Path threshold has been commented (resampling doesn't work correctly …
jesusdoesnotloveyou Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions Models/ReSTIR_FG_Bistro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Graphs
from pathlib import WindowsPath, PosixPath
from falcor import *

def render_graph_ReSTIR_FG():
g = RenderGraph('ReSTIR_FG')
g.create_pass('AccumulatePass', 'AccumulatePass', {'enabled': False, 'outputSize': 'Default', 'autoReset': True, 'precisionMode': 'Single', 'maxFrameCount': 0, 'overflowMode': 'Stop'})
g.create_pass('ToneMapper', 'ToneMapper', {'outputSize': 'Default', 'useSceneMetadata': True, 'exposureCompensation': 0.0, 'autoExposure': False, 'filmSpeed': 100.0, 'whiteBalance': False, 'whitePoint': 6500.0, 'operator': 'Linear', 'clamp': True, 'whiteMaxLuminance': 1.0, 'whiteScale': 11.199999809265137, 'fNumber': 1.0, 'shutter': 1.0, 'exposureMode': 'AperturePriority'})
g.create_pass('VBufferRT', 'VBufferRT', {'outputSize': 'Default', 'samplePattern': 'Center', 'sampleCount': 16, 'useAlphaTest': True, 'adjustShadingNormals': True, 'forceCullMode': False, 'cull': 'Back', 'useTraceRayInline': False, 'useDOF': True})
g.create_pass('ReSTIR_FG', 'ReSTIR_FG', {'PhotonBufferSizeGlobal': 400000, 'PhotonBufferSizeCaustic': 100000, 'AnalyticEmissiveRatio': 0.3499999940395355, 'PhotonBouncesGlobal': 10, 'PhotonBouncesCaustic': 10, 'PhotonRadiusGlobal': 0.019999999552965164, 'PhotonRadiusCaustic': 0.008500000461935997, 'EnableStochCollect': True, 'StochCollectK': 3, 'EnablePhotonCullingGlobal': False, 'EnablePhotonCullingCaustic': False, 'CullingRadius': 0.10000000149011612, 'CullingBits': 20, 'CausticCollectionMode': 3, 'CausticResamplingMode': 2, 'EnableDynamicDispatch': True, 'NumDispatchedPhotons': 1263104})
g.add_edge('AccumulatePass.output', 'ToneMapper.src')
g.add_edge('VBufferRT.mvec', 'ReSTIR_FG.mvec')
g.add_edge('VBufferRT.vbuffer', 'ReSTIR_FG.vbuffer')
g.add_edge('ReSTIR_FG.color', 'AccumulatePass.input')
g.mark_output('ToneMapper.dst')
g.mark_output('AccumulatePass.output')
return g
m.addGraph(render_graph_ReSTIR_FG())

# Scene
m.loadScene('Bistro_ReSTIRFG/BistroInterior_Wine_EmissiveLight.pyscene')
m.scene.renderSettings = SceneRenderSettings(useEnvLight=True, useAnalyticLights=True, useEmissiveLights=True, useGridVolumes=True, diffuseAlbedoMultiplier=1)
m.scene.camera.position = float3(0.675186, 4.154675, -2.284865)
m.scene.camera.target = float3(1.602494, 3.902547, -2.561509)
m.scene.camera.up = float3(0.000859, 1.000000, -0.000256)
m.scene.cameraSpeed = 1.0

# Window Configuration
m.resizeFrameBuffer(1920, 1080)
m.ui = True

# Clock Settings
m.clock.time = 0
m.clock.framerate = 0
# If framerate is not zero, you can use the frame property to set the start frame
# m.clock.frame = 0

# Frame Capture
m.frameCapture.outputDir = '.'
m.frameCapture.baseFilename = 'Mogwai'

38 changes: 38 additions & 0 deletions Models/ReSTIR_FG_Kitchen.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Graphs
from pathlib import WindowsPath, PosixPath
from falcor import *

def render_graph_ReSTIR_FG():
g = RenderGraph('ReSTIR_FG')
g.create_pass('AccumulatePass', 'AccumulatePass', {'enabled': False, 'outputSize': 'Default', 'autoReset': True, 'precisionMode': 'Single', 'maxFrameCount': 0, 'overflowMode': 'Stop'})
g.create_pass('ToneMapper', 'ToneMapper', {'outputSize': 'Default', 'useSceneMetadata': True, 'exposureCompensation': 0.0, 'autoExposure': False, 'filmSpeed': 100.0, 'whiteBalance': False, 'whitePoint': 6500.0, 'operator': 'Linear', 'clamp': True, 'whiteMaxLuminance': 1.0, 'whiteScale': 11.199999809265137, 'fNumber': 1.0, 'shutter': 1.0, 'exposureMode': 'AperturePriority'})
g.create_pass('VBufferRT', 'VBufferRT', {'outputSize': 'Default', 'samplePattern': 'Center', 'sampleCount': 16, 'useAlphaTest': True, 'adjustShadingNormals': True, 'forceCullMode': False, 'cull': 'Back', 'useTraceRayInline': False, 'useDOF': True})
g.create_pass('ReSTIR_FG', 'ReSTIR_FG', {'PhotonBufferSizeGlobal': 800000, 'PhotonBufferSizeCaustic': 400000, 'AnalyticEmissiveRatio': 0.3499999940395355, 'PhotonBouncesGlobal': 10, 'PhotonBouncesCaustic': 10, 'PhotonRadiusGlobal': 0.01600000075995922, 'PhotonRadiusCaustic': 0.004000000189989805, 'EnableStochCollect': True, 'StochCollectK': 3, 'EnablePhotonCullingGlobal': True, 'EnablePhotonCullingCaustic': True, 'CullingRadius': 0.10000000149011612, 'CullingBits': 20, 'CausticCollectionMode': 3, 'CausticResamplingMode': 2, 'EnableDynamicDispatch': False, 'NumDispatchedPhotons': 1199616})
g.add_edge('AccumulatePass.output', 'ToneMapper.src')
g.add_edge('VBufferRT.mvec', 'ReSTIR_FG.mvec')
g.add_edge('VBufferRT.vbuffer', 'ReSTIR_FG.vbuffer')
g.add_edge('ReSTIR_FG.color', 'AccumulatePass.input')
g.mark_output('ToneMapper.dst')
g.mark_output('AccumulatePass.output')
return g
m.addGraph(render_graph_ReSTIR_FG())

# Scene
m.loadScene('Kitchen_ReSTIRFG/KitchenReSTIRFG.pyscene')
m.scene.renderSettings = SceneRenderSettings(useEnvLight=True, useAnalyticLights=True, useEmissiveLights=True, useGridVolumes=True, diffuseAlbedoMultiplier=1)
m.scene.cameraSpeed = 1.0

# Window Configuration
m.resizeFrameBuffer(1920, 1080)
m.ui = True

# Clock Settings
m.clock.time = 0
m.clock.framerate = 0
# If framerate is not zero, you can use the frame property to set the start frame
# m.clock.frame = 0

# Frame Capture
m.frameCapture.outputDir = '.'
m.frameCapture.baseFilename = 'Mogwai'

59 changes: 59 additions & 0 deletions Models/ReSTIR_FG_NRD_Bistro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Graphs
from pathlib import WindowsPath, PosixPath
from falcor import *

def render_graph_ReSTIR_FG_NRD():
g = RenderGraph('ReSTIR_FG_NRD')
g.create_pass('ModulateIllumination', 'ModulateIllumination', {'useEmission': True, 'useDiffuseReflectance': True, 'useDiffuseRadiance': True, 'useSpecularReflectance': True, 'useSpecularRadiance': True, 'useDeltaReflectionEmission': False, 'useDeltaReflectionReflectance': False, 'useDeltaReflectionRadiance': False, 'useDeltaTransmissionEmission': False, 'useDeltaTransmissionReflectance': False, 'useDeltaTransmissionRadiance': False, 'useResidualRadiance': True, 'outputSize': 'Default', 'useDebug': True, 'inputInYCoCg': False})
g.create_pass('AccumulatePass', 'AccumulatePass', {'enabled': False, 'outputSize': 'Default', 'autoReset': True, 'precisionMode': 'Single', 'maxFrameCount': 0, 'overflowMode': 'Stop'})
g.create_pass('DLSSPass', 'DLSSPass', {'enabled': True, 'outputSize': 'Default', 'profile': 'Balanced', 'motionVectorScale': 'Relative', 'isHDR': True, 'useJitteredMV': False, 'sharpness': 0.0, 'exposure': 0.0})
g.create_pass('ReSTIR_FG', 'ReSTIR_FG', {'PhotonBufferSizeGlobal': 400000, 'PhotonBufferSizeCaustic': 100000, 'AnalyticEmissiveRatio': 0.3499999940395355, 'PhotonBouncesGlobal': 10, 'PhotonBouncesCaustic': 10, 'PhotonRadiusGlobal': 0.019999999552965164, 'PhotonRadiusCaustic': 0.008500000461935997, 'EnableStochCollect': True, 'StochCollectK': 3, 'EnablePhotonCullingGlobal': False, 'EnablePhotonCullingCaustic': False, 'CullingRadius': 0.10000000149011612, 'CullingBits': 20, 'CausticCollectionMode': 3, 'CausticResamplingMode': 2, 'EnableDynamicDispatch': True, 'NumDispatchedPhotons': 1263104})
g.create_pass('NRD', 'NRD_Normal', {'enabled': True, 'method': 'RelaxDiffuseSpecular', 'outputSize': 'Default', 'worldSpaceMotion': True, 'disocclusionThreshold': 2.0, 'maxIntensity': 250.0, 'RelaxAntilagAccelerationAmount': 0.30000001192092896, 'RelaxAntilagSpatialSigmaScale': 4.0, 'RelaxAntilagTemporalSigmaScale': 0.20000000298023224, 'RelaxAntilagResetAmount': 0.699999988079071, 'RelaxDiffusePrepassBlurRadius': 16.0, 'RelaxSpecularPrepassBlurRadius': 16.0, 'RelaxDiffuseMaxAccumulatedFrameNum': 40, 'RelaxSpecularMaxAccumulatedFrameNum': 40, 'RelaxEnableAntiFirefly': True})
g.create_pass('GBufferRT', 'GBufferRT', {'outputSize': 'Default', 'samplePattern': 'Center', 'sampleCount': 16, 'useAlphaTest': True, 'adjustShadingNormals': True, 'forceCullMode': False, 'cull': 'Back', 'texLOD': 'Mip0', 'useTraceRayInline': False, 'useDOF': True})
g.create_pass('ToneMapper', 'ToneMapper', {'outputSize': 'Default', 'useSceneMetadata': True, 'exposureCompensation': 0.0, 'autoExposure': False, 'filmSpeed': 100.0, 'whiteBalance': False, 'whitePoint': 6500.0, 'operator': 'Linear', 'clamp': True, 'whiteMaxLuminance': 1.0, 'whiteScale': 11.199999809265137, 'fNumber': 1.0, 'shutter': 1.0, 'exposureMode': 'AperturePriority'})
g.add_edge('ReSTIR_FG.residualRadiance', 'ModulateIllumination.residualRadiance')
g.add_edge('AccumulatePass.output', 'ToneMapper.src')
g.add_edge('NRD.filteredSpecularRadianceHitDist', 'ModulateIllumination.specularRadiance')
g.add_edge('ReSTIR_FG.emission', 'ModulateIllumination.emission')
g.add_edge('ReSTIR_FG.diffuseReflectance', 'ModulateIllumination.diffuseReflectance')
g.add_edge('ReSTIR_FG.specularReflectance', 'ModulateIllumination.specularReflectance')
g.add_edge('NRD.filteredDiffuseRadianceHitDist', 'ModulateIllumination.diffuseRadiance')
g.add_edge('ReSTIR_FG.diffuseRadiance', 'NRD.diffuseRadianceHitDist')
g.add_edge('ReSTIR_FG.specularRadiance', 'NRD.specularRadianceHitDist')
g.add_edge('GBufferRT.linearZ', 'NRD.viewZ')
g.add_edge('GBufferRT.normWRoughnessMaterialID', 'NRD.normWRoughnessMaterialID')
g.add_edge('ModulateIllumination.output', 'DLSSPass.color')
g.add_edge('DLSSPass.output', 'AccumulatePass.input')
g.add_edge('GBufferRT.depth', 'DLSSPass.depth')
g.add_edge('GBufferRT.mvecW', 'NRD.mvec')
g.add_edge('GBufferRT.mvec', 'DLSSPass.mvec')
g.add_edge('GBufferRT.vbuffer', 'ReSTIR_FG.vbuffer')
g.add_edge('GBufferRT.mvec', 'ReSTIR_FG.mvec')
g.add_edge('NRD.outValidation', 'ModulateIllumination.debugLayer')
g.mark_output('ToneMapper.dst')
g.mark_output('AccumulatePass.output')
return g
m.addGraph(render_graph_ReSTIR_FG_NRD())

# Scene
m.loadScene('Bistro_ReSTIRFG/BistroInterior_Wine_EmissiveLight.pyscene')
m.scene.renderSettings = SceneRenderSettings(useEnvLight=True, useAnalyticLights=True, useEmissiveLights=True, useGridVolumes=True, diffuseAlbedoMultiplier=1)
m.scene.camera.position = float3(0.675186, 4.154675, -2.284865)
m.scene.camera.target = float3(1.602494, 3.902547, -2.561509)
m.scene.camera.up = float3(0.000859, 1.000000, -0.000256)
m.scene.cameraSpeed = 1.0

# Window Configuration
m.resizeFrameBuffer(1920, 1080)
m.ui = True

# Clock Settings
m.clock.time = 0
m.clock.framerate = 0
# If framerate is not zero, you can use the frame property to set the start frame
# m.clock.frame = 0

# Frame Capture
m.frameCapture.outputDir = '.'
m.frameCapture.baseFilename = 'Mogwai'

56 changes: 56 additions & 0 deletions Models/ReSTIR_FG_NRD_Kitchen.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Graphs
from pathlib import WindowsPath, PosixPath
from falcor import *

def render_graph_ReSTIR_FG_NRD():
g = RenderGraph('ReSTIR_FG_NRD')
g.create_pass('ModulateIllumination', 'ModulateIllumination', {'useEmission': True, 'useDiffuseReflectance': True, 'useDiffuseRadiance': True, 'useSpecularReflectance': True, 'useSpecularRadiance': True, 'useDeltaReflectionEmission': False, 'useDeltaReflectionReflectance': False, 'useDeltaReflectionRadiance': False, 'useDeltaTransmissionEmission': False, 'useDeltaTransmissionReflectance': False, 'useDeltaTransmissionRadiance': False, 'useResidualRadiance': True, 'outputSize': 'Default', 'useDebug': True, 'inputInYCoCg': False})
g.create_pass('AccumulatePass', 'AccumulatePass', {'enabled': False, 'outputSize': 'Default', 'autoReset': True, 'precisionMode': 'Single', 'maxFrameCount': 0, 'overflowMode': 'Stop'})
g.create_pass('DLSSPass', 'DLSSPass', {'enabled': True, 'outputSize': 'Default', 'profile': 'Balanced', 'motionVectorScale': 'Relative', 'isHDR': True, 'useJitteredMV': False, 'sharpness': 0.0, 'exposure': 0.0})
g.create_pass('ReSTIR_FG', 'ReSTIR_FG', {'PhotonBufferSizeGlobal': 800000, 'PhotonBufferSizeCaustic': 400000, 'AnalyticEmissiveRatio': 0.3499999940395355, 'PhotonBouncesGlobal': 10, 'PhotonBouncesCaustic': 10, 'PhotonRadiusGlobal': 0.01600000075995922, 'PhotonRadiusCaustic': 0.004000000189989805, 'EnableStochCollect': True, 'StochCollectK': 3, 'EnablePhotonCullingGlobal': True, 'EnablePhotonCullingCaustic': True, 'CullingRadius': 0.10000000149011612, 'CullingBits': 20, 'CausticCollectionMode': 3, 'CausticResamplingMode': 2, 'EnableDynamicDispatch': False, 'NumDispatchedPhotons': 1199616})
g.create_pass('NRD', 'NRD_Normal', {'enabled': True, 'method': 'RelaxDiffuseSpecular', 'outputSize': 'Default', 'worldSpaceMotion': True, 'disocclusionThreshold': 2.0, 'maxIntensity': 250.0, 'RelaxAntilagAccelerationAmount': 0.30000001192092896, 'RelaxAntilagSpatialSigmaScale': 4.0, 'RelaxAntilagTemporalSigmaScale': 0.20000000298023224, 'RelaxAntilagResetAmount': 0.699999988079071, 'RelaxDiffusePrepassBlurRadius': 16.0, 'RelaxSpecularPrepassBlurRadius': 16.0, 'RelaxDiffuseMaxAccumulatedFrameNum': 40, 'RelaxSpecularMaxAccumulatedFrameNum': 40, 'RelaxEnableAntiFirefly': True})
g.create_pass('GBufferRT', 'GBufferRT', {'outputSize': 'Default', 'samplePattern': 'Center', 'sampleCount': 16, 'useAlphaTest': True, 'adjustShadingNormals': True, 'forceCullMode': False, 'cull': 'Back', 'texLOD': 'Mip0', 'useTraceRayInline': False, 'useDOF': True})
g.create_pass('ToneMapper', 'ToneMapper', {'outputSize': 'Default', 'useSceneMetadata': True, 'exposureCompensation': 0.0, 'autoExposure': False, 'filmSpeed': 100.0, 'whiteBalance': False, 'whitePoint': 6500.0, 'operator': 'Aces', 'clamp': True, 'whiteMaxLuminance': 1.0, 'whiteScale': 11.199999809265137, 'fNumber': 1.0, 'shutter': 1.0, 'exposureMode': 'AperturePriority'})
g.add_edge('ReSTIR_FG.residualRadiance', 'ModulateIllumination.residualRadiance')
g.add_edge('AccumulatePass.output', 'ToneMapper.src')
g.add_edge('NRD.filteredSpecularRadianceHitDist', 'ModulateIllumination.specularRadiance')
g.add_edge('ReSTIR_FG.emission', 'ModulateIllumination.emission')
g.add_edge('ReSTIR_FG.diffuseReflectance', 'ModulateIllumination.diffuseReflectance')
g.add_edge('ReSTIR_FG.specularReflectance', 'ModulateIllumination.specularReflectance')
g.add_edge('NRD.filteredDiffuseRadianceHitDist', 'ModulateIllumination.diffuseRadiance')
g.add_edge('ReSTIR_FG.diffuseRadiance', 'NRD.diffuseRadianceHitDist')
g.add_edge('ReSTIR_FG.specularRadiance', 'NRD.specularRadianceHitDist')
g.add_edge('GBufferRT.linearZ', 'NRD.viewZ')
g.add_edge('GBufferRT.normWRoughnessMaterialID', 'NRD.normWRoughnessMaterialID')
g.add_edge('ModulateIllumination.output', 'DLSSPass.color')
g.add_edge('DLSSPass.output', 'AccumulatePass.input')
g.add_edge('GBufferRT.depth', 'DLSSPass.depth')
g.add_edge('GBufferRT.mvecW', 'NRD.mvec')
g.add_edge('GBufferRT.mvec', 'DLSSPass.mvec')
g.add_edge('GBufferRT.vbuffer', 'ReSTIR_FG.vbuffer')
g.add_edge('GBufferRT.mvec', 'ReSTIR_FG.mvec')
g.add_edge('NRD.outValidation', 'ModulateIllumination.debugLayer')
g.mark_output('ToneMapper.dst')
g.mark_output('AccumulatePass.output')
return g
m.addGraph(render_graph_ReSTIR_FG_NRD())

# Scene
m.loadScene('Kitchen_ReSTIRFG/KitchenReSTIRFG.pyscene')
m.scene.renderSettings = SceneRenderSettings(useEnvLight=True, useAnalyticLights=True, useEmissiveLights=True, useGridVolumes=True, diffuseAlbedoMultiplier=1)
m.scene.cameraSpeed = 1.0

# Window Configuration
m.resizeFrameBuffer(1920, 1080)
m.ui = True

# Clock Settings
m.clock.time = 0
m.clock.framerate = 0
# If framerate is not zero, you can use the frame property to set the start frame
# m.clock.frame = 0

# Frame Capture
m.frameCapture.outputDir = '.'
m.frameCapture.baseFilename = 'Mogwai'

Loading