├── .clang-format ├── .clang-format-ignore ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .gitmodules ├── .vscode-default ├── extensions.json ├── launch.json └── settings.json ├── CMakeLists.txt ├── CMakePresets.json ├── LICENSE.md ├── README-Falcor.md ├── README.md ├── Source ├── Falcor │ ├── CMakeLists.txt │ ├── Core │ │ ├── API │ │ │ ├── API.h │ │ │ ├── BlendState.cpp │ │ │ ├── BlendState.h │ │ │ ├── BlitContext.cpp │ │ │ ├── BlitContext.h │ │ │ ├── BlitReduction.3d.slang │ │ │ ├── Buffer.cpp │ │ │ ├── Buffer.h │ │ │ ├── Common.cpp │ │ │ ├── Common.h │ │ │ ├── ComputeContext.cpp │ │ │ ├── ComputeContext.h │ │ │ ├── ComputeStateObject.cpp │ │ │ ├── ComputeStateObject.h │ │ │ ├── CopyContext.cpp │ │ │ ├── CopyContext.h │ │ │ ├── D3D12 │ │ │ │ ├── D3D12API.cpp │ │ │ │ ├── D3D12API.h │ │ │ │ ├── D3D12ApiData.h │ │ │ │ ├── D3D12Buffer.cpp │ │ │ │ ├── D3D12ComputeContext.cpp │ │ │ │ ├── D3D12ComputeStateObject.cpp │ │ │ │ ├── D3D12CopyContext.cpp │ │ │ │ ├── D3D12DescriptorSet.cpp │ │ │ │ ├── D3D12Device.cpp │ │ │ │ ├── D3D12Fbo.cpp │ │ │ │ ├── D3D12Formats.cpp │ │ │ │ ├── D3D12GpuFence.cpp │ │ │ │ ├── D3D12GpuMemoryHeap.cpp │ │ │ │ ├── D3D12GpuTimer.cpp │ │ │ │ ├── D3D12GraphicsStateObject.cpp │ │ │ │ ├── D3D12Handles.h │ │ │ │ ├── D3D12IndirectCommands.cpp │ │ │ │ ├── D3D12LowLevelContextData.cpp │ │ │ │ ├── D3D12NvApiExDesc.h │ │ │ │ ├── D3D12ParameterBlock.cpp │ │ │ │ ├── D3D12ProgramVars.cpp │ │ │ │ ├── D3D12QueryHeap.cpp │ │ │ │ ├── D3D12RasterizerState.cpp │ │ │ │ ├── D3D12RenderContext.cpp │ │ │ │ ├── D3D12Resource.cpp │ │ │ │ ├── D3D12Resource.h │ │ │ │ ├── D3D12ResourceViews.cpp │ │ │ │ ├── D3D12RtAccelerationStructure.cpp │ │ │ │ ├── D3D12RtAccelerationStructure.h │ │ │ │ ├── D3D12RtAccelerationStructurePostBuildInfoPool.cpp │ │ │ │ ├── D3D12RtStateObject.cpp │ │ │ │ ├── D3D12Sampler.cpp │ │ │ │ ├── D3D12Shader.cpp │ │ │ │ ├── D3D12ShaderTable.cpp │ │ │ │ ├── D3D12State.cpp │ │ │ │ ├── D3D12State.h │ │ │ │ ├── D3D12Texture.cpp │ │ │ │ └── D3D12Vao.cpp │ │ │ ├── DXGIFormats.h │ │ │ ├── DepthStencilState.cpp │ │ │ ├── DepthStencilState.h │ │ │ ├── Device.cpp │ │ │ ├── Device.h │ │ │ ├── FBO.cpp │ │ │ ├── FBO.h │ │ │ ├── FencedPool.h │ │ │ ├── Formats.cpp │ │ │ ├── Formats.h │ │ │ ├── GFX │ │ │ │ ├── GFXAPI.cpp │ │ │ │ ├── GFXAPI.h │ │ │ │ ├── GFXBuffer.cpp │ │ │ │ ├── GFXComputeContext.cpp │ │ │ │ ├── GFXComputeStateObject.cpp │ │ │ │ ├── GFXCopyContext.cpp │ │ │ │ ├── GFXD3D12DescriptorSet.cpp │ │ │ │ ├── GFXDevice.cpp │ │ │ │ ├── GFXDeviceApiData.h │ │ │ │ ├── GFXFbo.cpp │ │ │ │ ├── GFXFormats.cpp │ │ │ │ ├── GFXFormats.h │ │ │ │ ├── GFXGpuFence.cpp │ │ │ │ ├── GFXGpuMemoryHeap.cpp │ │ │ │ ├── GFXGpuTimer.cpp │ │ │ │ ├── GFXGraphicsStateObject.cpp │ │ │ │ ├── GFXHandles.h │ │ │ │ ├── GFXLowLevelContextApiData.h │ │ │ │ ├── GFXLowLevelContextData.cpp │ │ │ │ ├── GFXParameterBlock.cpp │ │ │ │ ├── GFXProgramVars.cpp │ │ │ │ ├── GFXQueryHeap.cpp │ │ │ │ ├── GFXRasterizerState.cpp │ │ │ │ ├── GFXRenderContext.cpp │ │ │ │ ├── GFXResource.cpp │ │ │ │ ├── GFXResource.h │ │ │ │ ├── GFXResourceViews.cpp │ │ │ │ ├── GFXRtAccelerationStructure.cpp │ │ │ │ ├── GFXRtAccelerationStructure.h │ │ │ │ ├── GFXRtAccelerationStructurePostBuildInfoPool.cpp │ │ │ │ ├── GFXRtStateObject.cpp │ │ │ │ ├── GFXSampler.cpp │ │ │ │ ├── GFXShader.cpp │ │ │ │ ├── GFXTexture.cpp │ │ │ │ └── GFXVao.cpp │ │ │ ├── GpuFence.h │ │ │ ├── GpuMemoryHeap.cpp │ │ │ ├── GpuMemoryHeap.h │ │ │ ├── GpuTimer.cpp │ │ │ ├── GpuTimer.h │ │ │ ├── GraphicsStateObject.cpp │ │ │ ├── GraphicsStateObject.h │ │ │ ├── Handles.h │ │ │ ├── IndirectCommands.h │ │ │ ├── LowLevelContextData.h │ │ │ ├── ParameterBlock.cpp │ │ │ ├── ParameterBlock.h │ │ │ ├── QueryHeap.h │ │ │ ├── RasterizerState.cpp │ │ │ ├── RasterizerState.h │ │ │ ├── Raytracing.h │ │ │ ├── RenderContext.cpp │ │ │ ├── RenderContext.h │ │ │ ├── Resource.cpp │ │ │ ├── Resource.h │ │ │ ├── ResourceViews.cpp │ │ │ ├── ResourceViews.h │ │ │ ├── RtAccelerationStructure.cpp │ │ │ ├── RtAccelerationStructure.h │ │ │ ├── RtAccelerationStructurePostBuildInfoPool.cpp │ │ │ ├── RtAccelerationStructurePostBuildInfoPool.h │ │ │ ├── RtStateObject.cpp │ │ │ ├── RtStateObject.h │ │ │ ├── Sampler.cpp │ │ │ ├── Sampler.h │ │ │ ├── Shader.h │ │ │ ├── ShaderResourceType.h │ │ │ ├── ShaderTable.h │ │ │ ├── Shared │ │ │ │ ├── D3D12DescriptorData.h │ │ │ │ ├── D3D12DescriptorHeap.cpp │ │ │ │ ├── D3D12DescriptorHeap.h │ │ │ │ ├── D3D12DescriptorPool.cpp │ │ │ │ ├── D3D12DescriptorPool.h │ │ │ │ ├── D3D12DescriptorSet.h │ │ │ │ ├── D3D12Handles.h │ │ │ │ ├── D3D12RootSignature.cpp │ │ │ │ ├── D3D12RootSignature.h │ │ │ │ ├── MockedD3D12StagingBuffer.cpp │ │ │ │ └── MockedD3D12StagingBuffer.h │ │ │ ├── Texture.cpp │ │ │ ├── Texture.h │ │ │ ├── VAO.cpp │ │ │ ├── VAO.h │ │ │ ├── VertexLayout.cpp │ │ │ └── VertexLayout.h │ │ ├── Assert.h │ │ ├── ErrorHandling.cpp │ │ ├── ErrorHandling.h │ │ ├── Errors.cpp │ │ ├── Errors.h │ │ ├── FalcorConfig.h │ │ ├── GLFW.h │ │ ├── HotReloadFlags.h │ │ ├── Macros.h │ │ ├── Platform │ │ │ ├── Linux │ │ │ │ ├── Linux.cpp │ │ │ │ └── ProgressBarLinux.cpp │ │ │ ├── MonitorInfo.cpp │ │ │ ├── MonitorInfo.h │ │ │ ├── OS.cpp │ │ │ ├── OS.h │ │ │ ├── PlatformHandles.h │ │ │ ├── ProgressBar.cpp │ │ │ ├── ProgressBar.h │ │ │ └── Windows │ │ │ │ ├── ProgressBarWin.cpp │ │ │ │ └── Windows.cpp │ │ ├── Program │ │ │ ├── ComputeProgram.cpp │ │ │ ├── ComputeProgram.h │ │ │ ├── GraphicsProgram.cpp │ │ │ ├── GraphicsProgram.h │ │ │ ├── Program.cpp │ │ │ ├── Program.h │ │ │ ├── ProgramReflection.cpp │ │ │ ├── ProgramReflection.h │ │ │ ├── ProgramVars.cpp │ │ │ ├── ProgramVars.h │ │ │ ├── ProgramVersion.cpp │ │ │ ├── ProgramVersion.h │ │ │ ├── RtBindingTable.cpp │ │ │ ├── RtBindingTable.h │ │ │ ├── RtProgram.cpp │ │ │ ├── RtProgram.h │ │ │ ├── ShaderVar.cpp │ │ │ └── ShaderVar.h │ │ ├── SampleApp.cpp │ │ ├── SampleApp.h │ │ ├── State │ │ │ ├── ComputeState.cpp │ │ │ ├── ComputeState.h │ │ │ ├── GraphicsState.cpp │ │ │ ├── GraphicsState.h │ │ │ └── StateGraph.h │ │ ├── Testbed.cpp │ │ ├── Testbed.h │ │ ├── Version.cpp │ │ ├── Version.h │ │ ├── Window.cpp │ │ └── Window.h │ ├── Falcor.h │ ├── Falcor.manifest │ ├── Falcor.natvis │ ├── FalcorPython.cpp │ ├── RenderGraph │ │ ├── BasePasses │ │ │ ├── BaseGraphicsPass.cpp │ │ │ ├── BaseGraphicsPass.h │ │ │ ├── ComputePass.cpp │ │ │ ├── ComputePass.h │ │ │ ├── FullScreenPass.cpp │ │ │ ├── FullScreenPass.gs.slang │ │ │ ├── FullScreenPass.h │ │ │ ├── FullScreenPass.vs.slang │ │ │ ├── RasterPass.cpp │ │ │ ├── RasterPass.h │ │ │ ├── RasterScenePass.cpp │ │ │ └── RasterScenePass.h │ │ ├── RenderGraph.cpp │ │ ├── RenderGraph.h │ │ ├── RenderGraphCompiler.cpp │ │ ├── RenderGraphCompiler.h │ │ ├── RenderGraphExe.cpp │ │ ├── RenderGraphExe.h │ │ ├── RenderGraphIR.cpp │ │ ├── RenderGraphIR.h │ │ ├── RenderGraphImportExport.cpp │ │ ├── RenderGraphImportExport.h │ │ ├── RenderGraphUI.cpp │ │ ├── RenderGraphUI.h │ │ ├── RenderPass.cpp │ │ ├── RenderPass.h │ │ ├── RenderPassHelpers.cpp │ │ ├── RenderPassHelpers.h │ │ ├── RenderPassLibrary.cpp │ │ ├── RenderPassLibrary.h │ │ ├── RenderPassReflection.cpp │ │ ├── RenderPassReflection.h │ │ ├── RenderPassStandardFlags.h │ │ ├── ResourceCache.cpp │ │ └── ResourceCache.h │ ├── RenderPasses │ │ ├── ResolvePass.cpp │ │ ├── ResolvePass.h │ │ └── Shared │ │ │ └── Denoising │ │ │ ├── NRDBuffers.slang │ │ │ ├── NRDConstants.slang │ │ │ ├── NRDData.slang │ │ │ └── NRDHelpers.slang │ ├── Rendering │ │ ├── ConditionalReSTIR │ │ │ ├── ConditionalReSTIR.slang │ │ │ ├── ConditionalReSTIRPass.cpp │ │ │ ├── ConditionalReSTIRPass.h │ │ │ ├── HybridShiftTraceRays.slang │ │ │ ├── LoadShadingData.slang │ │ │ ├── Params.slang │ │ │ ├── PathReservoir.slang │ │ │ ├── PathState.slang │ │ │ ├── PathTracer.slang │ │ │ ├── PrefixNeighborSearch.cs.slang │ │ │ ├── PrefixPathRetrace.cs.slang │ │ │ ├── PrefixProduceRetraceWorkload.cs.slang │ │ │ ├── PrefixResampling.cs.slang │ │ │ ├── ReflectTypes.cs.slang │ │ │ ├── ResamplingCommon.slang │ │ │ ├── RetraceScheduleDefinition.slangh │ │ │ ├── RetraceWorkloadQueue.slang │ │ │ ├── Shift.slang │ │ │ ├── StaticParams.slang │ │ │ ├── SubpathReuse.slang │ │ │ ├── SuffixPathRetrace.cs.slang │ │ │ ├── SuffixPathRetraceTalbot.cs.slang │ │ │ ├── SuffixProduceRetraceTalbotWorkload.cs.slang │ │ │ ├── SuffixProduceRetraceWorkload.cs.slang │ │ │ ├── SuffixResampling.cs.slang │ │ │ ├── TraceNewPrefixes.cs.slang │ │ │ └── TraceNewSuffixes.cs.slang │ │ ├── Lights │ │ │ ├── EmissiveLightSampler.cpp │ │ │ ├── EmissiveLightSampler.h │ │ │ ├── EmissiveLightSampler.slang │ │ │ ├── EmissiveLightSamplerHelpers.slang │ │ │ ├── EmissiveLightSamplerInterface.slang │ │ │ ├── EmissiveLightSamplerType.slangh │ │ │ ├── EmissivePowerSampler.cpp │ │ │ ├── EmissivePowerSampler.h │ │ │ ├── EmissivePowerSampler.slang │ │ │ ├── EmissiveUniformSampler.cpp │ │ │ ├── EmissiveUniformSampler.h │ │ │ ├── EmissiveUniformSampler.slang │ │ │ ├── EnvMapSampler.cpp │ │ │ ├── EnvMapSampler.h │ │ │ ├── EnvMapSampler.slang │ │ │ ├── EnvMapSamplerSetup.cs.slang │ │ │ ├── LightBVH.cpp │ │ │ ├── LightBVH.h │ │ │ ├── LightBVH.slang │ │ │ ├── LightBVHBuilder.cpp │ │ │ ├── LightBVHBuilder.h │ │ │ ├── LightBVHRefit.cs.slang │ │ │ ├── LightBVHSampler.cpp │ │ │ ├── LightBVHSampler.h │ │ │ ├── LightBVHSampler.slang │ │ │ ├── LightBVHSamplerSharedDefinitions.slang │ │ │ ├── LightBVHTypes.slang │ │ │ └── LightHelpers.slang │ │ ├── Materials │ │ │ ├── AnisotropicGGX.slang │ │ │ ├── BCSDFConfig.slangh │ │ │ ├── BSDFConfig.slangh │ │ │ ├── BSDFIntegrator.cpp │ │ │ ├── BSDFIntegrator.cs.slang │ │ │ ├── BSDFIntegrator.h │ │ │ ├── BSDFs │ │ │ │ ├── DisneyDiffuseBRDF.slang │ │ │ │ ├── FrostbiteDiffuseBRDF.slang │ │ │ │ ├── LambertDiffuseBRDF.slang │ │ │ │ ├── LambertDiffuseBTDF.slang │ │ │ │ ├── OrenNayarBRDF.slang │ │ │ │ ├── SimpleBTDF.slang │ │ │ │ ├── SpecularMicrofacet.slang │ │ │ │ └── StandardBSDF.slang │ │ │ ├── BxDF.slang │ │ │ ├── ClothBRDF.slang │ │ │ ├── ClothMaterial.slang │ │ │ ├── ClothMaterialInstance.slang │ │ │ ├── Fresnel.slang │ │ │ ├── HairChiang16.slang │ │ │ ├── HairMaterial.slang │ │ │ ├── HairMaterialInstance.slang │ │ │ ├── IBSDF.slang │ │ │ ├── IMaterial.slang │ │ │ ├── IMaterialInstance.slang │ │ │ ├── INDF.slang │ │ │ ├── InteriorList.slang │ │ │ ├── InteriorListHelpers.slang │ │ │ ├── IsotropicGGX.slang │ │ │ ├── LayeredBSDF.slang │ │ │ ├── LobeType.slang │ │ │ ├── MERLMaterial.slang │ │ │ ├── MERLMaterialInstance.slang │ │ │ ├── Microfacet.slang │ │ │ ├── NDF.slang │ │ │ ├── PBRT │ │ │ │ ├── PBRTCoatedConductorMaterial.slang │ │ │ │ ├── PBRTCoatedConductorMaterialInstance.slang │ │ │ │ ├── PBRTCoatedDiffuseMaterial.slang │ │ │ │ ├── PBRTCoatedDiffuseMaterialInstance.slang │ │ │ │ ├── PBRTConductorMaterial.slang │ │ │ │ ├── PBRTConductorMaterialInstance.slang │ │ │ │ ├── PBRTDielectricMaterial.slang │ │ │ │ ├── PBRTDielectricMaterialInstance.slang │ │ │ │ ├── PBRTDiffuseMaterial.slang │ │ │ │ ├── PBRTDiffuseMaterialInstance.slang │ │ │ │ ├── PBRTDiffuseTransmissionMaterial.slang │ │ │ │ └── PBRTDiffuseTransmissionMaterialInstance.slang │ │ │ ├── RGLAcquisition.cpp │ │ │ ├── RGLAcquisition.cs.slang │ │ │ ├── RGLAcquisition.h │ │ │ ├── RGLCommon.slang │ │ │ ├── RGLMaterial.slang │ │ │ ├── RGLMaterialInstance.slang │ │ │ ├── StandardMaterial.slang │ │ │ ├── StandardMaterialInstance.slang │ │ │ ├── TexLODHelpers.slang │ │ │ ├── TexLODTypes.cpp │ │ │ └── TexLODTypes.slang │ │ ├── RTXDI │ │ │ ├── EnvLightUpdater.cs.slang │ │ │ ├── LightUpdater.cs.slang │ │ │ ├── PackedTypes.slang │ │ │ ├── PolymorphicLight.slang │ │ │ ├── RTXDI.cpp │ │ │ ├── RTXDI.h │ │ │ ├── RTXDI.slang │ │ │ ├── RTXDIApplicationBridge.slangh │ │ │ ├── RTXDISDK.cpp │ │ │ ├── RTXDISetup.cs.slang │ │ │ ├── ReflectTypes.cs.slang │ │ │ └── SurfaceData.slang │ │ ├── Utils │ │ │ ├── PixelStats.cpp │ │ │ ├── PixelStats.cs.slang │ │ │ ├── PixelStats.h │ │ │ ├── PixelStats.slang │ │ │ └── PixelStatsShared.slang │ │ └── Volumes │ │ │ ├── GridVolumeSampler.cpp │ │ │ ├── GridVolumeSampler.h │ │ │ ├── GridVolumeSampler.slang │ │ │ ├── GridVolumeSamplerParams.slang │ │ │ ├── HomogeneousVolumeSampler.slang │ │ │ ├── IPhaseFunction.slang │ │ │ └── PhaseFunction.slang │ ├── Scene │ │ ├── Animation │ │ │ ├── Animatable.cpp │ │ │ ├── Animatable.h │ │ │ ├── AnimatedVertexCache.cpp │ │ │ ├── AnimatedVertexCache.h │ │ │ ├── Animation.cpp │ │ │ ├── Animation.h │ │ │ ├── AnimationController.cpp │ │ │ ├── AnimationController.h │ │ │ ├── SharedTypes.slang │ │ │ ├── Skinning.slang │ │ │ ├── UpdateCurveAABBs.slang │ │ │ ├── UpdateCurvePolyTubeVertices.slang │ │ │ ├── UpdateCurveVertices.slang │ │ │ └── UpdateMeshVertices.slang │ │ ├── BoundingBoxAccelerationStructureBuilder.cpp │ │ ├── BoundingBoxAccelerationStructureBuilder.h │ │ ├── Camera │ │ │ ├── Camera.cpp │ │ │ ├── Camera.h │ │ │ ├── Camera.slang │ │ │ ├── CameraController.cpp │ │ │ ├── CameraController.h │ │ │ └── CameraData.slang │ │ ├── Curves │ │ │ ├── CurveConfig.h │ │ │ ├── CurveTessellation.cpp │ │ │ └── CurveTessellation.h │ │ ├── Displacement │ │ │ ├── DisplacementData.slang │ │ │ ├── DisplacementMapping.slang │ │ │ ├── DisplacementUpdate.cs.slang │ │ │ └── DisplacementUpdateTask.slang │ │ ├── HitInfo.cpp │ │ ├── HitInfo.h │ │ ├── HitInfo.slang │ │ ├── HitInfoType.slang │ │ ├── Importer.cpp │ │ ├── Importer.h │ │ ├── Importers │ │ │ ├── AssimpImporter.cpp │ │ │ ├── AssimpImporter.h │ │ │ ├── PBRTImporter │ │ │ │ ├── Builder.cpp │ │ │ │ ├── Builder.h │ │ │ │ ├── EnvMapConverter.cs.slang │ │ │ │ ├── EnvMapConverter.h │ │ │ │ ├── Helpers.h │ │ │ │ ├── LoopSubdivide.cpp │ │ │ │ ├── LoopSubdivide.h │ │ │ │ ├── PBRTImporter.cpp │ │ │ │ ├── PBRTImporter.h │ │ │ │ ├── Parameters.cpp │ │ │ │ ├── Parameters.h │ │ │ │ ├── Parser.cpp │ │ │ │ ├── Parser.h │ │ │ │ ├── README.md │ │ │ │ └── Types.h │ │ │ ├── PythonImporter.cpp │ │ │ ├── PythonImporter.h │ │ │ └── USDImporter │ │ │ │ ├── CreateSpecularTexture.cs.slang │ │ │ │ ├── CreateSpecularTransmissionTexture.cs.slang │ │ │ │ ├── ImporterContext.cpp │ │ │ │ ├── ImporterContext.h │ │ │ │ ├── PackBaseColorAlpha.cs.slang │ │ │ │ ├── PreviewSurfaceConverter.cpp │ │ │ │ ├── PreviewSurfaceConverter.h │ │ │ │ ├── SampleTexture.slang │ │ │ │ ├── StandardMaterialSpec.h │ │ │ │ ├── USDHelpers.h │ │ │ │ ├── USDImporter.cpp │ │ │ │ ├── USDImporter.h │ │ │ │ └── Utils.h │ │ ├── Intersection.slang │ │ ├── Lights │ │ │ ├── BakeIesProfile.cs.slang │ │ │ ├── BuildTriangleList.cs.slang │ │ │ ├── EmissiveIntegrator.3d.slang │ │ │ ├── EnvMap.cpp │ │ │ ├── EnvMap.h │ │ │ ├── EnvMap.slang │ │ │ ├── EnvMapData.slang │ │ │ ├── FinalizeIntegration.cs.slang │ │ │ ├── Light.cpp │ │ │ ├── Light.h │ │ │ ├── LightCollection.cpp │ │ │ ├── LightCollection.h │ │ │ ├── LightCollection.slang │ │ │ ├── LightCollectionShared.slang │ │ │ ├── LightData.slang │ │ │ ├── LightProfile.cpp │ │ │ ├── LightProfile.h │ │ │ ├── LightProfile.slang │ │ │ ├── MeshLightData.slang │ │ │ └── UpdateTriangleVertices.cs.slang │ │ ├── Material │ │ │ ├── AlphaTest.slang │ │ │ ├── BasicMaterial.cpp │ │ │ ├── BasicMaterial.h │ │ │ ├── BasicMaterialData.slang │ │ │ ├── ClothMaterial.cpp │ │ │ ├── ClothMaterial.h │ │ │ ├── HairMaterial.cpp │ │ │ ├── HairMaterial.h │ │ │ ├── HomogeneousVolumeData.slang │ │ │ ├── MERLMaterial.cpp │ │ │ ├── MERLMaterial.h │ │ │ ├── MERLMaterialData.slang │ │ │ ├── Material.cpp │ │ │ ├── Material.h │ │ │ ├── MaterialData.slang │ │ │ ├── MaterialFactory.slang │ │ │ ├── MaterialSystem.cpp │ │ │ ├── MaterialSystem.h │ │ │ ├── MaterialSystem.slang │ │ │ ├── MaterialTextureLoader.cpp │ │ │ ├── MaterialTextureLoader.h │ │ │ ├── MaterialTypeRegistry.cpp │ │ │ ├── MaterialTypeRegistry.h │ │ │ ├── MaterialTypes.slang │ │ │ ├── PBRT │ │ │ │ ├── PBRTCoatedConductorMaterial.cpp │ │ │ │ ├── PBRTCoatedConductorMaterial.h │ │ │ │ ├── PBRTCoatedDiffuseMaterial.cpp │ │ │ │ ├── PBRTCoatedDiffuseMaterial.h │ │ │ │ ├── PBRTConductorMaterial.cpp │ │ │ │ ├── PBRTConductorMaterial.h │ │ │ │ ├── PBRTDielectricMaterial.cpp │ │ │ │ ├── PBRTDielectricMaterial.h │ │ │ │ ├── PBRTDiffuseMaterial.cpp │ │ │ │ ├── PBRTDiffuseMaterial.h │ │ │ │ ├── PBRTDiffuseTransmissionMaterial.cpp │ │ │ │ └── PBRTDiffuseTransmissionMaterial.h │ │ │ ├── RGLCommon.cpp │ │ │ ├── RGLCommon.h │ │ │ ├── RGLFile.cpp │ │ │ ├── RGLFile.h │ │ │ ├── RGLMaterial.cpp │ │ │ ├── RGLMaterial.h │ │ │ ├── RGLMaterialData.slang │ │ │ ├── ShadingUtils.slang │ │ │ ├── StandardMaterial.cpp │ │ │ ├── StandardMaterial.h │ │ │ ├── TextureHandle.slang │ │ │ └── TextureSampler.slang │ │ ├── NullTrace.cs.slang │ │ ├── Raster.slang │ │ ├── Raytracing.slang │ │ ├── RaytracingInline.slang │ │ ├── SDFs │ │ │ ├── EvaluateSDFPrimitives.cs.slang │ │ │ ├── NormalizedDenseSDFGrid │ │ │ │ ├── NDSDFGrid.cpp │ │ │ │ ├── NDSDFGrid.h │ │ │ │ └── NDSDFGrid.slang │ │ │ ├── SDF3DPrimitive.slang │ │ │ ├── SDF3DPrimitiveCommon.slang │ │ │ ├── SDF3DPrimitiveFactory.cpp │ │ │ ├── SDF3DPrimitiveFactory.h │ │ │ ├── SDFGrid.cpp │ │ │ ├── SDFGrid.h │ │ │ ├── SDFGrid.slang │ │ │ ├── SDFGridBase.slang │ │ │ ├── SDFGridHitData.slang │ │ │ ├── SDFGridNoDefines.slangh │ │ │ ├── SDFSurfaceVoxelCounter.cs.slang │ │ │ ├── SDFVoxelCommon.slang │ │ │ ├── SDFVoxelHitUtils.slang │ │ │ ├── SDFVoxelTypes.slang │ │ │ ├── SparseBrickSet │ │ │ │ ├── BC4Encode.slang │ │ │ │ ├── SDFSBS.cpp │ │ │ │ ├── SDFSBS.h │ │ │ │ ├── SDFSBS.slang │ │ │ │ ├── SDFSBSAssignBrickValidityFromSDFieldPass.cs.slang │ │ │ │ ├── SDFSBSCompactifyChunks.cs.slang │ │ │ │ ├── SDFSBSComputeIntervalSDFieldFromGrid.cs.slang │ │ │ │ ├── SDFSBSCopyIndirectionBuffer.cs.slang │ │ │ │ ├── SDFSBSCreateBricksFromChunks.cs.slang │ │ │ │ ├── SDFSBSCreateBricksFromSDField.cs.slang │ │ │ │ ├── SDFSBSCreateChunksFromPrimitives.cs.slang │ │ │ │ ├── SDFSBSExpandSDFieldData.cs.slang │ │ │ │ ├── SDFSBSPruneEmptyBricks.cs.slang │ │ │ │ └── SDFSBSResetBrickValidity.cs.slang │ │ │ ├── SparseVoxelOctree │ │ │ │ ├── SDFSVO.cpp │ │ │ │ ├── SDFSVO.h │ │ │ │ ├── SDFSVO.slang │ │ │ │ ├── SDFSVOBuildLevelFromTexture.cs.slang │ │ │ │ ├── SDFSVOBuildOctree.cs.slang │ │ │ │ ├── SDFSVOHashTable.slang │ │ │ │ ├── SDFSVOLocationCodeSorter.cs.slang │ │ │ │ └── SDFSVOWriteSVOOffsets.cs.slang │ │ │ └── SparseVoxelSet │ │ │ │ ├── SDFSVS.cpp │ │ │ │ ├── SDFSVS.h │ │ │ │ ├── SDFSVS.slang │ │ │ │ └── SDFSVSVoxelizer.cs.slang │ │ ├── Scene.cpp │ │ ├── Scene.h │ │ ├── Scene.slang │ │ ├── SceneBlock.slang │ │ ├── SceneBuilder.cpp │ │ ├── SceneBuilder.h │ │ ├── SceneCache.cpp │ │ ├── SceneCache.h │ │ ├── SceneDefines.slangh │ │ ├── SceneIDs.h │ │ ├── SceneRayQueryInterface.slang │ │ ├── SceneTypes.slang │ │ ├── Shading.slang │ │ ├── ShadingData.slang │ │ ├── Transform.cpp │ │ ├── Transform.h │ │ ├── TriangleMesh.cpp │ │ ├── TriangleMesh.h │ │ ├── VertexAttrib.slangh │ │ └── Volume │ │ │ ├── BC4Encode.h │ │ │ ├── BrickedGrid.h │ │ │ ├── Grid.cpp │ │ │ ├── Grid.h │ │ │ ├── Grid.slang │ │ │ ├── GridConverter.h │ │ │ ├── GridVolume.cpp │ │ │ ├── GridVolume.h │ │ │ ├── GridVolume.slang │ │ │ └── GridVolumeData.slang │ ├── Testing │ │ ├── UnitTest.cpp │ │ ├── UnitTest.cs.slang │ │ └── UnitTest.h │ └── Utils │ │ ├── Algorithm │ │ ├── BitonicSort.cpp │ │ ├── BitonicSort.cs.slang │ │ ├── BitonicSort.h │ │ ├── ComputeParallelReduction.cpp │ │ ├── ComputeParallelReduction.h │ │ ├── DirectedGraph.h │ │ ├── DirectedGraphTraversal.h │ │ ├── ParallelReduction.cpp │ │ ├── ParallelReduction.cs.slang │ │ ├── ParallelReduction.h │ │ ├── ParallelReduction.ps.slang │ │ ├── ParallelReductionType.slangh │ │ ├── PrefixSum.cpp │ │ ├── PrefixSum.cs.slang │ │ └── PrefixSum.h │ │ ├── AlignedAllocator.h │ │ ├── Attributes.slang │ │ ├── BinaryFileStream.h │ │ ├── BufferAllocator.cpp │ │ ├── BufferAllocator.h │ │ ├── Color │ │ ├── ColorHelpers.slang │ │ ├── ColorMap.slang │ │ ├── ColorUtils.h │ │ ├── SampledSpectrum.h │ │ ├── Spectra.inl │ │ ├── Spectrum.cpp │ │ ├── Spectrum.h │ │ ├── SpectrumUtils.cpp │ │ ├── SpectrumUtils.h │ │ └── SpectrumUtils.slang │ │ ├── CryptoUtils.cpp │ │ ├── CryptoUtils.h │ │ ├── Debug │ │ ├── DebugConsole.h │ │ ├── PixelDebug.cpp │ │ ├── PixelDebug.h │ │ ├── PixelDebug.slang │ │ ├── PixelDebugTypes.slang │ │ ├── ReflectPixelDebugTypes.cs.slang │ │ ├── WarpProfiler.cpp │ │ ├── WarpProfiler.h │ │ └── WarpProfiler.slang │ │ ├── Geometry │ │ ├── GeometryHelpers.slang │ │ └── IntersectionHelpers.slang │ │ ├── HostDeviceShared.slangh │ │ ├── Image │ │ ├── AsyncTextureLoader.cpp │ │ ├── AsyncTextureLoader.h │ │ ├── Bitmap.cpp │ │ ├── Bitmap.h │ │ ├── CopyColorChannel.cs.slang │ │ ├── ImageIO.cpp │ │ ├── ImageIO.h │ │ ├── ImageProcessing.cpp │ │ ├── ImageProcessing.h │ │ ├── TextureAnalyzer.cpp │ │ ├── TextureAnalyzer.cs.slang │ │ ├── TextureAnalyzer.h │ │ ├── TextureManager.cpp │ │ └── TextureManager.h │ │ ├── InternalDictionary.h │ │ ├── Logger.cpp │ │ ├── Logger.h │ │ ├── Math │ │ ├── AABB.cpp │ │ ├── AABB.h │ │ ├── AABB.slang │ │ ├── BitTricks.slang │ │ ├── Common.h │ │ ├── CubicSpline.h │ │ ├── FNVHash.h │ │ ├── FalcorMath.h │ │ ├── Float16.h │ │ ├── FormatConversion.slang │ │ ├── HalfUtils.slang │ │ ├── HashUtils.slang │ │ ├── IntervalArithmetic.slang │ │ ├── MathConstants.slangh │ │ ├── MathHelpers.h │ │ ├── MathHelpers.slang │ │ ├── Matrix.h │ │ ├── Matrix │ │ │ └── Matrix.h │ │ ├── MatrixUtils.slang │ │ ├── PackedFormats.h │ │ ├── PackedFormats.slang │ │ ├── Quaternion.slang │ │ ├── Ray.h │ │ ├── Ray.slang │ │ ├── SphericalHarmonics.slang │ │ └── Vector.h │ │ ├── NVAPI.slang │ │ ├── NVAPI.slangh │ │ ├── NumericRange.h │ │ ├── ObjectID.h │ │ ├── SDF │ │ ├── SDF2DDraw.slang │ │ ├── SDF2DPrimitives.slang │ │ ├── SDF3DShapes.slang │ │ ├── SDFOperationType.slang │ │ └── SDFOperations.slang │ │ ├── SampleGenerators │ │ ├── CPUSampleGenerator.h │ │ ├── DxSamplePattern.cpp │ │ ├── DxSamplePattern.h │ │ ├── HaltonSamplePattern.cpp │ │ ├── HaltonSamplePattern.h │ │ ├── StratifiedSamplePattern.cpp │ │ └── StratifiedSamplePattern.h │ │ ├── Sampling │ │ ├── AliasTable.cpp │ │ ├── AliasTable.h │ │ ├── AliasTable.slang │ │ ├── LowDiscrepancy │ │ │ └── HammersleySequence.slang │ │ ├── Pseudorandom │ │ │ ├── LCG.slang │ │ │ ├── SplitMix64.slang │ │ │ ├── Xorshift32.slang │ │ │ └── Xoshiro.slang │ │ ├── SampleGenerator.cpp │ │ ├── SampleGenerator.h │ │ ├── SampleGenerator.slang │ │ ├── SampleGeneratorInterface.slang │ │ ├── SampleGeneratorType.slangh │ │ ├── TemporarySampleGenerator.slang │ │ ├── TinyUniformSampleGenerator.slang │ │ └── UniformSampleGenerator.slang │ │ ├── Scripting │ │ ├── Console.cpp │ │ ├── Console.h │ │ ├── Dictionary.h │ │ ├── ScriptBindings.cpp │ │ ├── ScriptBindings.h │ │ ├── ScriptWriter.h │ │ ├── Scripting.cpp │ │ └── Scripting.h │ │ ├── Settings.h │ │ ├── SlangUtils.slang │ │ ├── StringFormatters.h │ │ ├── StringUtils.cpp │ │ ├── StringUtils.h │ │ ├── TermColor.cpp │ │ ├── TermColor.h │ │ ├── Threading.cpp │ │ ├── Threading.h │ │ ├── Timing │ │ ├── Clock.cpp │ │ ├── Clock.h │ │ ├── CpuTimer.h │ │ ├── FrameRate.cpp │ │ ├── FrameRate.h │ │ ├── GpuTimer.slang │ │ ├── Profiler.cpp │ │ ├── Profiler.h │ │ ├── ProfilerUI.cpp │ │ ├── ProfilerUI.h │ │ ├── TimeReport.cpp │ │ └── TimeReport.h │ │ ├── UI │ │ ├── Font.cpp │ │ ├── Font.h │ │ ├── Gui.cpp │ │ ├── Gui.h │ │ ├── Gui.slang │ │ ├── InputState.cpp │ │ ├── InputState.h │ │ ├── InputTypes.h │ │ ├── PixelZoom.cpp │ │ ├── PixelZoom.h │ │ ├── SpectrumUI.cpp │ │ ├── SpectrumUI.h │ │ ├── TextRenderer.3d.slang │ │ ├── TextRenderer.cpp │ │ └── TextRenderer.h │ │ └── Video │ │ ├── VideoEncoder.cpp │ │ ├── VideoEncoder.h │ │ ├── VideoEncoderUI.cpp │ │ └── VideoEncoderUI.h ├── Mogwai │ ├── AppData.cpp │ ├── AppData.h │ ├── CMakeLists.txt │ ├── Extensions │ │ ├── Capture │ │ │ ├── CaptureTrigger.cpp │ │ │ ├── CaptureTrigger.h │ │ │ ├── FrameCapture.cpp │ │ │ ├── FrameCapture.h │ │ │ ├── VideoCapture.cpp │ │ │ └── VideoCapture.h │ │ └── Profiler │ │ │ ├── TimingCapture.cpp │ │ │ └── TimingCapture.h │ ├── Mogwai.cpp │ ├── Mogwai.h │ ├── MogwaiScripting.cpp │ ├── MogwaiSettings.cpp │ └── MogwaiSettings.h ├── RenderPasses │ ├── AccumulatePass │ │ ├── Accumulate.cs.slang │ │ ├── AccumulatePass.cpp │ │ ├── AccumulatePass.h │ │ └── CMakeLists.txt │ ├── BSDFViewer │ │ ├── BSDFViewer.cpp │ │ ├── BSDFViewer.cs.slang │ │ ├── BSDFViewer.h │ │ ├── BSDFViewerParams.slang │ │ └── CMakeLists.txt │ ├── BlitPass │ │ ├── BlitPass.cpp │ │ ├── BlitPass.h │ │ └── CMakeLists.txt │ ├── CMakeLists.txt │ ├── DLSSPass │ │ ├── CMakeLists.txt │ │ ├── DLSSPass.cpp │ │ ├── DLSSPass.h │ │ ├── NGXWrapper.cpp │ │ └── NGXWrapper.h │ ├── DebugPasses │ │ ├── CMakeLists.txt │ │ ├── ColorMapPass │ │ │ ├── ColorMapParams.slang │ │ │ ├── ColorMapPass.cpp │ │ │ ├── ColorMapPass.h │ │ │ └── ColorMapPass.ps.slang │ │ ├── Comparison.ps.slang │ │ ├── ComparisonPass.cpp │ │ ├── ComparisonPass.h │ │ ├── DebugPasses.cpp │ │ ├── InvalidPixelDetectionPass │ │ │ ├── InvalidPixelDetection.ps.slang │ │ │ ├── InvalidPixelDetectionPass.cpp │ │ │ └── InvalidPixelDetectionPass.h │ │ ├── SideBySidePass │ │ │ ├── SideBySide.ps.slang │ │ │ ├── SideBySidePass.cpp │ │ │ └── SideBySidePass.h │ │ └── SplitScreenPass │ │ │ ├── SplitScreen.ps.slang │ │ │ ├── SplitScreenPass.cpp │ │ │ └── SplitScreenPass.h │ ├── ErrorMeasurePass │ │ ├── CMakeLists.txt │ │ ├── ErrorMeasurePass.cpp │ │ ├── ErrorMeasurePass.h │ │ └── ErrorMeasurer.cs.slang │ ├── FLIPPass │ │ ├── CMakeLists.txt │ │ ├── ComputeLuminance.cs.slang │ │ ├── FLIPPass.cpp │ │ ├── FLIPPass.cs.slang │ │ ├── FLIPPass.h │ │ ├── ToneMappers.slang │ │ └── flip.hlsli │ ├── GBuffer │ │ ├── CMakeLists.txt │ │ ├── GBuffer │ │ │ ├── DepthPass.3d.slang │ │ │ ├── GBuffer.cpp │ │ │ ├── GBuffer.h │ │ │ ├── GBufferHelpers.slang │ │ │ ├── GBufferRT.cpp │ │ │ ├── GBufferRT.cs.slang │ │ │ ├── GBufferRT.h │ │ │ ├── GBufferRT.rt.slang │ │ │ ├── GBufferRT.slang │ │ │ ├── GBufferRaster.3d.slang │ │ │ ├── GBufferRaster.cpp │ │ │ └── GBufferRaster.h │ │ ├── GBufferBase.cpp │ │ ├── GBufferBase.h │ │ └── VBuffer │ │ │ ├── VBufferRT.cpp │ │ │ ├── VBufferRT.cs.slang │ │ │ ├── VBufferRT.h │ │ │ ├── VBufferRT.rt.slang │ │ │ ├── VBufferRT.slang │ │ │ ├── VBufferRaster.3d.slang │ │ │ ├── VBufferRaster.cpp │ │ │ └── VBufferRaster.h │ ├── ImageLoader │ │ ├── CMakeLists.txt │ │ ├── ImageLoader.cpp │ │ └── ImageLoader.h │ ├── MinimalPathTracer │ │ ├── CMakeLists.txt │ │ ├── MinimalPathTracer.cpp │ │ ├── MinimalPathTracer.h │ │ └── MinimalPathTracer.rt.slang │ ├── ModulateIllumination │ │ ├── CMakeLists.txt │ │ ├── ModulateIllumination.cpp │ │ ├── ModulateIllumination.cs.slang │ │ └── ModulateIllumination.h │ ├── NRDPass │ │ ├── CMakeLists.txt │ │ ├── NRDPass.cpp │ │ ├── NRDPass.h │ │ └── PackRadiance.cs.slang │ ├── OptixDenoiser │ │ ├── BootstrapUtils.cpp │ │ ├── CMakeLists.txt │ │ ├── ConvertBufToTex.ps.slang │ │ ├── ConvertMotionVectorInputs.cs.slang │ │ ├── ConvertNormalsToBuf.cs.slang │ │ ├── ConvertTexToBuf.cs.slang │ │ ├── CudaUtils.cpp │ │ ├── CudaUtils.h │ │ ├── OptixDenoiser.cpp │ │ ├── OptixDenoiser.h │ │ └── README.txt │ ├── PassLibraryTemplate │ │ ├── CMakeLists.txt │ │ ├── PassLibraryTemplate.cpp │ │ └── PassLibraryTemplate.h │ ├── PathTracer │ │ ├── CMakeLists.txt │ │ ├── ColorType.slang │ │ ├── ConditionalReSTIRData.slang │ │ ├── GeneratePaths.cs.slang │ │ ├── GuideData.slang │ │ ├── LoadShadingData.slang │ │ ├── NRDHelpers.slang │ │ ├── Params.slang │ │ ├── PathState.slang │ │ ├── PathTracer.cpp │ │ ├── PathTracer.h │ │ ├── PathTracer.slang │ │ ├── PathTracerNRD.slang │ │ ├── ReflectTypes.cs.slang │ │ ├── ResolvePass.cs.slang │ │ ├── StaticParams.slang │ │ ├── TracePass.cs.slang │ │ └── UserInteractionRecorder.h │ ├── PixelInspectorPass │ │ ├── CMakeLists.txt │ │ ├── PixelInspector.cs.slang │ │ ├── PixelInspectorData.slang │ │ ├── PixelInspectorPass.cpp │ │ └── PixelInspectorPass.h │ ├── RTXDIPass │ │ ├── CMakeLists.txt │ │ ├── FinalShading.cs.slang │ │ ├── LoadShadingData.slang │ │ ├── PrepareSurfaceData.cs.slang │ │ ├── README.txt │ │ ├── RTXDIPass.cpp │ │ └── RTXDIPass.h │ ├── SDFEditor │ │ ├── CMakeLists.txt │ │ ├── GUIPass.ps.slang │ │ ├── Marker2DSet.cpp │ │ ├── Marker2DSet.h │ │ ├── Marker2DSet.slang │ │ ├── Marker2DTypes.slang │ │ ├── SDFEditor.cpp │ │ ├── SDFEditor.h │ │ ├── SDFEditorTypes.slang │ │ ├── SelectionWheel.cpp │ │ └── SelectionWheel.h │ ├── SVGFPass │ │ ├── CMakeLists.txt │ │ ├── SVGFAtrous.ps.slang │ │ ├── SVGFCommon.slang │ │ ├── SVGFFilterMoments.ps.slang │ │ ├── SVGFFinalModulate.ps.slang │ │ ├── SVGFPackLinearZAndNormal.ps.slang │ │ ├── SVGFPass.cpp │ │ ├── SVGFPass.h │ │ └── SVGFReproject.ps.slang │ ├── SceneDebugger │ │ ├── CMakeLists.txt │ │ ├── SceneDebugger.cpp │ │ ├── SceneDebugger.cs.slang │ │ ├── SceneDebugger.h │ │ └── SharedTypes.slang │ ├── SimplePostFX │ │ ├── CMakeLists.txt │ │ ├── SimplePostFX.cpp │ │ ├── SimplePostFX.cs.slang │ │ └── SimplePostFX.h │ ├── TAA │ │ ├── CMakeLists.txt │ │ ├── TAA.cpp │ │ ├── TAA.h │ │ └── TAA.ps.slang │ ├── TestPasses │ │ ├── CMakeLists.txt │ │ ├── TestPasses.cpp │ │ ├── TestRtProgram.cpp │ │ ├── TestRtProgram.h │ │ └── TestRtProgram.rt.slang │ ├── ToneMapper │ │ ├── CMakeLists.txt │ │ ├── Luminance.ps.slang │ │ ├── ToneMapper.cpp │ │ ├── ToneMapper.h │ │ ├── ToneMapperParams.slang │ │ └── ToneMapping.ps.slang │ ├── Utils │ │ ├── CMakeLists.txt │ │ ├── Composite │ │ │ ├── Composite.cpp │ │ │ ├── Composite.cs.slang │ │ │ ├── Composite.h │ │ │ └── CompositeMode.slangh │ │ ├── GaussianBlur │ │ │ ├── GaussianBlur.cpp │ │ │ ├── GaussianBlur.h │ │ │ └── GaussianBlur.ps.slang │ │ └── Utils.cpp │ └── WhittedRayTracer │ │ ├── CMakeLists.txt │ │ ├── WhittedRayTracer.cpp │ │ ├── WhittedRayTracer.h │ │ ├── WhittedRayTracer.rt.slang │ │ └── WhittedRayTracerTypes.slang ├── Samples │ ├── CMakeLists.txt │ ├── CudaInterop │ │ ├── CMakeLists.txt │ │ ├── CopySurface.cu │ │ ├── CopySurface.h │ │ ├── CudaInterop.cpp │ │ ├── CudaInterop.h │ │ ├── FalcorCUDA.cpp │ │ └── FalcorCUDA.h │ ├── HelloDXR │ │ ├── CMakeLists.txt │ │ ├── HelloDXR.3d.slang │ │ ├── HelloDXR.cpp │ │ ├── HelloDXR.h │ │ └── HelloDXR.rt.slang │ ├── ProjectTemplate │ │ ├── CMakeLists.txt │ │ ├── ProjectTemplate.cpp │ │ └── ProjectTemplate.h │ ├── ShaderToy │ │ ├── CMakeLists.txt │ │ ├── ShaderToy.cpp │ │ ├── ShaderToy.h │ │ └── Toy.ps.slang │ └── Visualization2D │ │ ├── CMakeLists.txt │ │ ├── Visualization2D.cpp │ │ ├── Visualization2D.h │ │ ├── Visualization2d.ps.slang │ │ └── VoxelNormals.ps.slang └── Tools │ ├── CMakeLists.txt │ ├── FalcorTest │ ├── CMakeLists.txt │ ├── FalcorTest.cpp │ ├── FalcorTest.h │ └── Tests │ │ ├── Core │ │ ├── BlitTests.cpp │ │ ├── BlitTests.cs.slang │ │ ├── BufferAccessTests.cpp │ │ ├── BufferAccessTests.cs.slang │ │ ├── BufferTests.cpp │ │ ├── BufferTests.cs.slang │ │ ├── ConstantBufferTests.cpp │ │ ├── ConstantBufferTests.cs.slang │ │ ├── DDSReadTests.cpp │ │ ├── DDSReadTests.cs.slang │ │ ├── LargeBuffer.cpp │ │ ├── LargeBuffer.cs.slang │ │ ├── ParamBlockCB.cpp │ │ ├── ParamBlockCB.cs.slang │ │ ├── ParamBlockDefinition.slang │ │ ├── ParamBlockReflection.cs.slang │ │ ├── RootBufferParamBlockTests.cpp │ │ ├── RootBufferParamBlockTests.cs.slang │ │ ├── RootBufferStructTests.cpp │ │ ├── RootBufferStructTests.cs.slang │ │ ├── RootBufferTests.cpp │ │ ├── RootBufferTests.cs.slang │ │ ├── TextureTests.cpp │ │ ├── TextureTests.cs.slang │ │ ├── UserConstantBufferTests.cpp │ │ └── UserConstantBufferTests.cs.slang │ │ ├── DebugPasses │ │ └── InvalidPixelDetectionTests.cpp │ │ ├── Platform │ │ ├── MonitorInfoTests.cpp │ │ └── OSTests.cpp │ │ ├── Rendering │ │ └── Materials │ │ │ ├── MicrofacetTests.cpp │ │ │ ├── MicrofacetTests.cs.slang │ │ │ ├── TestBSDFIntegrator.cpp │ │ │ └── TestRGLAcquisition.cpp │ │ ├── Sampling │ │ ├── AliasTableTests.cpp │ │ ├── AliasTableTests.cs.slang │ │ ├── LowDiscrepancyTests.cpp │ │ ├── LowDiscrepancyTests.cs.slang │ │ ├── PointSetsTests.cpp │ │ ├── PointSetsTests.cs.slang │ │ ├── PseudorandomTests.cpp │ │ ├── PseudorandomTests.cs.slang │ │ ├── SampleGeneratorTests.cpp │ │ └── SampleGeneratorTests.cs.slang │ │ ├── Scene │ │ ├── EnvMapTests.cpp │ │ └── Material │ │ │ ├── BSDFTests.cpp │ │ │ ├── BSDFTests.cs.slang │ │ │ ├── HairChiang16Tests.cpp │ │ │ └── HairChiang16Tests.cs.slang │ │ ├── Slang │ │ ├── CastFloat16.cpp │ │ ├── CastFloat16.cs.slang │ │ ├── Float16Tests.cpp │ │ ├── Float16Tests.cs.slang │ │ ├── Float64Tests.cpp │ │ ├── Float64Tests.cs.slang │ │ ├── Int64Tests.cpp │ │ ├── Int64Tests.cs.slang │ │ ├── NestedStructs.cpp │ │ ├── NestedStructs.cs.slang │ │ ├── ShaderModel.cpp │ │ ├── ShaderModel.cs.slang │ │ ├── ShaderString.cpp │ │ ├── ShaderStringDynamic.cs.slang │ │ ├── ShaderStringDynamicType.slang │ │ ├── ShaderStringImport.cs.slang │ │ ├── ShaderStringImported.cs.slang │ │ ├── ShaderStringImported.slang │ │ ├── ShaderStringInline.cs.slang │ │ ├── ShaderStringModule.cs.slang │ │ ├── ShaderStringUtil.slang │ │ ├── SlangInheritance.cpp │ │ ├── SlangInheritance.cs.slang │ │ ├── SlangMutatingTests.cpp │ │ ├── SlangMutatingTests.cs.slang │ │ ├── SlangReinterpretCast.cpp │ │ ├── SlangReinterpretCast.cs.slang │ │ ├── SlangShared.slang │ │ ├── SlangTests.cpp │ │ ├── SlangTests.cs.slang │ │ ├── StructuredBufferMatrix.cpp │ │ ├── StructuredBufferMatrix.cs.slang │ │ ├── TemplatedLoad.cpp │ │ ├── TemplatedLoad.cs.slang │ │ ├── TraceRayFlags.cpp │ │ ├── TraceRayFlags.cs.slang │ │ ├── TraceRayInline.cpp │ │ ├── TraceRayInline.cs.slang │ │ ├── UnboundedDescriptorArray.cpp │ │ ├── UnboundedDescriptorArray.cs.slang │ │ ├── WaveOps.cpp │ │ └── WaveOps.cs.slang │ │ └── Utils │ │ ├── AABBTests.cpp │ │ ├── AABBTests.cs.slang │ │ ├── AlignedAllocatorTests.cpp │ │ ├── BitTricksTests.cpp │ │ ├── BitTricksTests.cs.slang │ │ ├── BitonicSortTests.cpp │ │ ├── BufferAllocatorTests.cpp │ │ ├── Color │ │ ├── SampledSpectrumTests.cpp │ │ ├── SpectrumTests.cpp │ │ ├── SpectrumUtilsTests.cpp │ │ └── SpectrumUtilsTests.cs.slang │ │ ├── ColorUtilsTests.cpp │ │ ├── CryptoUtilsTests.cpp │ │ ├── Debug │ │ ├── WarpProfilerTests.cpp │ │ └── WarpProfilerTests.cs.slang │ │ ├── Float16TypesTests.cpp │ │ ├── GeometryHelpersTests.cpp │ │ ├── GeometryHelpersTests.cs.slang │ │ ├── HalfUtilsTests.cpp │ │ ├── HalfUtilsTests.cs.slang │ │ ├── HashUtilsTests.cpp │ │ ├── HashUtilsTests.cs.slang │ │ ├── ImageProcessing.cpp │ │ ├── IntersectionHelpersTests.cpp │ │ ├── IntersectionHelpersTests.cs.slang │ │ ├── MathHelpersTests.cpp │ │ ├── MathHelpersTests.cs.slang │ │ ├── PackedFormatsTests.cpp │ │ ├── PackedFormatsTests.cs.slang │ │ ├── ParallelReductionTests.cpp │ │ ├── PrefixSumTests.cpp │ │ ├── SettingsTest.cpp │ │ ├── StringUtilsTests.cpp │ │ └── TextureAnalyzerTests.cpp │ ├── ImageCompare │ ├── CMakeLists.txt │ └── ImageCompare.cpp │ └── RenderGraphEditor │ ├── CMakeLists.txt │ ├── RenderGraphEditor.cpp │ └── RenderGraphEditor.h ├── build_scripts ├── deploycommon.bat ├── deploycommon.sh ├── generate_stubs.py ├── setpath.bat.in ├── setpath.ps1.in ├── setpath.sh.in └── wrap_setpath.sh ├── cmake ├── FindGTK3.cmake ├── git_version.cmake ├── git_version.h.in ├── mt-retry.bat.in └── mt-retry.cmake ├── data ├── VeachAjar │ ├── VeachAjar.pyscene │ ├── VeachAjarAnimated.pyscene │ ├── models │ │ ├── DoorHandleTranslated.obj │ │ ├── DoorTranslated.obj │ │ ├── Light.obj │ │ ├── Mesh000_Pot1.obj │ │ ├── Mesh000_Pot2.obj │ │ ├── Mesh000_Pot3.obj │ │ ├── Mesh001.obj │ │ ├── Mesh002.obj │ │ ├── Mesh003.obj │ │ ├── Mesh004.obj │ │ ├── Mesh005.obj │ │ ├── Mesh006.obj │ │ ├── Mesh007.obj │ │ ├── Mesh008.obj │ │ ├── Mesh009_Pot1.obj │ │ ├── Mesh009_Pot2.obj │ │ ├── Mesh009_Pot3.obj │ │ ├── Mesh010.obj │ │ ├── Mesh011.obj │ │ ├── Mesh012.obj │ │ ├── Mesh013.obj │ │ ├── Mesh014.obj │ │ ├── Mesh015.obj │ │ └── Mesh016.obj │ └── textures │ │ ├── Good Textures_005844.jpg │ │ ├── checkerboxsmall.png │ │ ├── cherry-wood-texture.jpg │ │ └── landscape-with-a-lake.jpg ├── bluenoise │ └── 64_64 │ │ ├── HDR_L_0.png │ │ ├── HDR_L_1.png │ │ ├── HDR_L_10.png │ │ ├── HDR_L_11.png │ │ ├── HDR_L_12.png │ │ ├── HDR_L_13.png │ │ ├── HDR_L_14.png │ │ ├── HDR_L_15.png │ │ ├── HDR_L_16.png │ │ ├── HDR_L_17.png │ │ ├── HDR_L_18.png │ │ ├── HDR_L_19.png │ │ ├── HDR_L_2.png │ │ ├── HDR_L_20.png │ │ ├── HDR_L_21.png │ │ ├── HDR_L_22.png │ │ ├── HDR_L_23.png │ │ ├── HDR_L_24.png │ │ ├── HDR_L_25.png │ │ ├── HDR_L_26.png │ │ ├── HDR_L_27.png │ │ ├── HDR_L_28.png │ │ ├── HDR_L_29.png │ │ ├── HDR_L_3.png │ │ ├── HDR_L_30.png │ │ ├── HDR_L_31.png │ │ ├── HDR_L_32.png │ │ ├── HDR_L_33.png │ │ ├── HDR_L_34.png │ │ ├── HDR_L_35.png │ │ ├── HDR_L_36.png │ │ ├── HDR_L_37.png │ │ ├── HDR_L_38.png │ │ ├── HDR_L_39.png │ │ ├── HDR_L_4.png │ │ ├── HDR_L_40.png │ │ ├── HDR_L_41.png │ │ ├── HDR_L_42.png │ │ ├── HDR_L_43.png │ │ ├── HDR_L_44.png │ │ ├── HDR_L_45.png │ │ ├── HDR_L_46.png │ │ ├── HDR_L_47.png │ │ ├── HDR_L_48.png │ │ ├── HDR_L_49.png │ │ ├── HDR_L_5.png │ │ ├── HDR_L_50.png │ │ ├── HDR_L_51.png │ │ ├── HDR_L_52.png │ │ ├── HDR_L_53.png │ │ ├── HDR_L_54.png │ │ ├── HDR_L_55.png │ │ ├── HDR_L_56.png │ │ ├── HDR_L_57.png │ │ ├── HDR_L_58.png │ │ ├── HDR_L_59.png │ │ ├── HDR_L_6.png │ │ ├── HDR_L_60.png │ │ ├── HDR_L_61.png │ │ ├── HDR_L_62.png │ │ ├── HDR_L_63.png │ │ ├── HDR_L_7.png │ │ ├── HDR_L_8.png │ │ └── HDR_L_9.png ├── framework │ ├── fonts │ │ ├── consolab.ttf │ │ ├── dejavu-sans-mono14.000000.bin │ │ ├── dejavu-sans-mono14.000000.dds │ │ └── trebucbd.ttf │ ├── images │ │ ├── next-frame.jpg │ │ ├── pass-icon.png │ │ ├── pause.jpg │ │ ├── play.jpg │ │ ├── prev-frame.jpg │ │ ├── rewind.jpg │ │ └── stop.jpg │ ├── meshes │ │ ├── cube.obj │ │ └── sphere.fbx │ └── nvidia.ico └── tests │ ├── BC1Unorm-ref.png │ ├── BC1Unorm.dds │ ├── BC1UnormSrgb-ref.png │ ├── BC1UnormSrgb.dds │ ├── BC2Unorm-ref.png │ ├── BC2Unorm.dds │ ├── BC2UnormSrgb-ref.png │ ├── BC2UnormSrgb.dds │ ├── BC2UnormSrgbTiny-ref.png │ ├── BC2UnormSrgbTiny.dds │ ├── BC3Unorm-ref.png │ ├── BC3Unorm.dds │ ├── BC3UnormAlpha-ref.png │ ├── BC3UnormAlpha.dds │ ├── BC3UnormAlphaTiny-ref.png │ ├── BC3UnormAlphaTiny.dds │ ├── BC3UnormSrgb-ref.png │ ├── BC3UnormSrgb.dds │ ├── BC3UnormSrgbOdd-ref.png │ ├── BC3UnormSrgbOdd.dds │ ├── BC3UnormSrgbTiny-ref.png │ ├── BC3UnormSrgbTiny.dds │ ├── BC4Unorm-ref.png │ ├── BC4Unorm.dds │ ├── BC5Unorm-ref.png │ ├── BC5Unorm.dds │ ├── BC5UnormTiny-ref.png │ ├── BC5UnormTiny.dds │ ├── BC6HU16-ref.png │ ├── BC6HU16.dds │ ├── BC7Unorm-ref.png │ ├── BC7Unorm.dds │ ├── BC7UnormBroken.dds │ ├── BC7UnormOdd-ref.png │ ├── BC7UnormOdd.dds │ ├── BC7UnormSrgb-ref.png │ ├── BC7UnormSrgb.dds │ ├── BC7UnormTiny-ref.png │ ├── BC7UnormTiny.dds │ ├── pbrt_hair_bsdf.dat │ ├── texture1.png │ ├── texture2.png │ ├── texture3.png │ ├── texture4.png │ ├── texture5.png │ ├── texture6.png │ ├── texture7.exr │ └── texture8.exr ├── dependencies.xml ├── docs ├── development │ ├── cmake.md │ ├── coding-conventions.md │ ├── error-handling.md │ ├── index.md │ └── unit-testing.md ├── getting-started.md ├── images │ └── teaser.png ├── index.md ├── known-issues.md ├── tutorials │ ├── 01-mogwai-usage.md │ ├── 02-implementing-a-render-pass.md │ ├── 03-creating-and-editing-render-graphs.md │ ├── 04-writing-shaders.md │ ├── images │ │ ├── example-blit-pass-graph.png │ │ ├── example-blit-pass-with-renderer.png │ │ ├── graph-edits.png │ │ ├── mogwai-ui.png │ │ ├── render-graph-editor.png │ │ └── wireframe-pass.png │ └── index.md └── usage │ ├── custom-primitives.md │ ├── environment-variables.md │ ├── images │ ├── example-scene.png │ └── path-tracer-overview.png │ ├── index.md │ ├── materials.md │ ├── path-tracer.md │ ├── render-passes.md │ ├── scene-creation.md │ ├── scene-formats.md │ ├── scenes.md │ ├── scripting.md │ └── sdf-editor.md ├── external ├── CMakeLists.txt ├── imgui_addons │ └── imguinodegrapheditor │ │ ├── imguinodegrapheditor.cpp │ │ └── imguinodegrapheditor.h ├── include │ ├── backward │ │ ├── LICENSE.txt │ │ └── backward.hpp │ ├── dds_header │ │ └── DDSHeader.h │ ├── fast_float │ │ └── fast_float.h │ ├── fstd │ │ ├── bit.h │ │ └── span.h │ ├── hypothesis │ │ ├── LICENSE │ │ ├── README.md │ │ ├── cephes.h │ │ └── hypothesis.h │ ├── illuminants │ │ ├── D65_5nm.h │ │ └── README.txt │ ├── lz4_stream │ │ ├── LICENSE.txt │ │ ├── README.md │ │ └── lz4_stream.h │ ├── nlohmann │ │ ├── LICENSE.MIT │ │ ├── json.hpp │ │ └── json_fwd.hpp │ ├── pybind11_json │ │ ├── LICENSE │ │ └── pybind11_json.hpp │ └── xyzcurves │ │ ├── README.txt │ │ └── ciexyzCurves1931_1nm.h └── mikktspace │ ├── README.md │ ├── mikktspace.c │ └── mikktspace.h ├── runConditionalReSTIRDemo.bat ├── scripts ├── BSDFViewer.py ├── ComputeCovariance.py ├── ConditionalReSTIR.py ├── MinimalPathTracer.py ├── PathTracer.py ├── RTXDI.py ├── SceneDebugger.py └── sdf-editor │ ├── SDFEditor.py │ ├── SDFEditorStartScene.pyscene │ ├── single_sphere.sdf │ └── test_primitives.sdf ├── setup.bat ├── setup.sh ├── setup_vs2022.bat ├── teaser.png ├── tests ├── build_falcor.bat ├── environment │ └── default.json ├── image_tests │ ├── helpers.py │ ├── renderpasses │ │ ├── graphs │ │ │ ├── BSDFViewer.py │ │ │ ├── ColorMapPass.py │ │ │ ├── CompositePass.py │ │ │ ├── DLSS.py │ │ │ ├── FLIPPass.py │ │ │ ├── GBufferRT.py │ │ │ ├── GBufferRTInline.py │ │ │ ├── GBufferRTTexGrads.py │ │ │ ├── GBufferRaster.py │ │ │ ├── GBufferRasterAlpha.py │ │ │ ├── GaussianBlur.py │ │ │ ├── HalfRes.py │ │ │ ├── MVecRT.py │ │ │ ├── MVecRaster.py │ │ │ ├── MinimalPathTracer.py │ │ │ ├── ModulateIllumination.py │ │ │ ├── OptixDenoiser.py │ │ │ ├── PathTracer.py │ │ │ ├── PathTracerAdaptive.py │ │ │ ├── PathTracerDielectrics.py │ │ │ ├── PathTracerMaterials.py │ │ │ ├── RTXDI.py │ │ │ ├── SDFEditorRenderGraphV2.py │ │ │ ├── SVGF.py │ │ │ ├── SceneDebugger.py │ │ │ ├── SideBySide.py │ │ │ ├── SimplePostFX.py │ │ │ ├── SplitScreen.py │ │ │ ├── TAA.py │ │ │ ├── ToneMapping.py │ │ │ ├── VBufferRT.py │ │ │ ├── VBufferRTInline.py │ │ │ ├── VBufferRaster.py │ │ │ ├── VBufferRasterAlpha.py │ │ │ └── WhittedRayTracer.py │ │ ├── test_BSDFViewer.py │ │ ├── test_ColorMapPass.py │ │ ├── test_CompositePass.py │ │ ├── test_DLSSPass.py │ │ ├── test_FLIPPass.py │ │ ├── test_GBufferRT.py │ │ ├── test_GBufferRTInline.py │ │ ├── test_GBufferRTTexGrads.py │ │ ├── test_GBufferRaster.py │ │ ├── test_GBufferRasterAlpha.py │ │ ├── test_GaussianBlur.py │ │ ├── test_HalfRes.py │ │ ├── test_MVecRT.py │ │ ├── test_MVecRaster.py │ │ ├── test_MinimalPathTracer.py │ │ ├── test_ModulateIllumination.py │ │ ├── test_OptixDenoiser.py │ │ ├── test_PathTracer.py │ │ ├── test_PathTracerAdaptive.py │ │ ├── test_PathTracerDielectrics.py │ │ ├── test_PathTracerMaterials.py │ │ ├── test_PathTracerReload.py │ │ ├── test_RTXDI.py │ │ ├── test_SDFEditor.py │ │ ├── test_SVGF.py │ │ ├── test_SideBySide.py │ │ ├── test_SimplePostFX.py │ │ ├── test_Skinning.py │ │ ├── test_SplitScreen.py │ │ ├── test_TAA.py │ │ ├── test_TextureLOD.py │ │ ├── test_ToneMapping.py │ │ ├── test_VBufferRT.py │ │ ├── test_VBufferRTInline.py │ │ ├── test_VBufferRaster.py │ │ └── test_VBufferRasterAlpha.py │ ├── renderscripts │ │ ├── test_BSDFViewer.py │ │ ├── test_MinimalPathTracer.py │ │ ├── test_PathTracer.py │ │ ├── test_PathTracerNRD.py │ │ ├── test_RTXDI.py │ │ └── test_SceneDebugger.py │ └── scene │ │ ├── graphs │ │ ├── GBufferRTCullBack.py │ │ ├── GBufferRasterCullBack.py │ │ ├── PathTracer.py │ │ ├── SceneDebugger.py │ │ └── TestRtProgram.py │ │ ├── scenes │ │ ├── NDSDFGrid.pyscene │ │ ├── SDFEditorSceneTwoSDFs.pyscene │ │ ├── SDFSBS.pyscene │ │ ├── SDFSVO.pyscene │ │ ├── SDFSVS.pyscene │ │ ├── Volumes.pyscene │ │ ├── smoke.pyscene │ │ └── test_primitives.sdf │ │ ├── test_AnimationBehavior.py │ │ ├── test_CameraAnimation.py │ │ ├── test_Displacement.py │ │ ├── test_NDSDFGrids.py │ │ ├── test_RtProgram.py │ │ ├── test_SDFSBS.py │ │ ├── test_SDFSVO.py │ │ ├── test_SDFSVS.py │ │ ├── test_SceneCache.py │ │ ├── test_TriangleWinding.py │ │ ├── test_USDPreviewSurface.py │ │ └── test_Volumes.py ├── run_image_tests.bat ├── run_unit_tests.bat ├── testing │ ├── build_falcor.py │ ├── core │ │ ├── __init__.py │ │ ├── config.py │ │ ├── environment.py │ │ ├── helpers.py │ │ └── termcolor.py │ ├── libs │ │ ├── __init__.py │ │ └── bottle.py │ ├── run_image_tests.py │ ├── run_unit_tests.py │ ├── view_image_tests.py │ └── viewer │ │ ├── static │ │ ├── exr-wrap.js │ │ ├── exr-wrap.wasm │ │ ├── exr.worker.js │ │ ├── jeri.min.js │ │ ├── react-dom.min.js │ │ ├── react.min.js │ │ ├── spectre.min.css │ │ └── style.css │ │ └── views │ │ ├── base.tpl │ │ ├── compare.tpl │ │ ├── error.tpl │ │ ├── index.tpl │ │ ├── run.tpl │ │ ├── snippets │ │ ├── nav.tpl │ │ ├── result.tpl │ │ └── stats.tpl │ │ └── test.tpl └── view_image_tests.bat └── tools ├── format_code.bat ├── make_new_render_pass_library.bat ├── make_new_render_pass_library.py ├── make_new_sample.bat ├── make_new_sample.py ├── ninja_log_analyzer.py ├── packman ├── bootstrap │ ├── configure.bat │ ├── download_file_from_url.ps1 │ ├── fetch_file_from_packman_bootstrap.cmd │ ├── generate_temp_file_name.ps1 │ ├── generate_temp_folder.ps1 │ └── install_package.py ├── config.packman.xml ├── packman ├── packman.cmd ├── packmanconf.py ├── python.bat └── python.sh ├── run_clang_format.py ├── update_comment_style.bat ├── update_comment_style.py ├── update_legal_headers.bat ├── update_legal_headers.py └── verify_code.bat /.clang-format-ignore: -------------------------------------------------------------------------------- 1 | Source/Falcor 2 | Source/Falcor/Core 3 | Source/Falcor/Internal 4 | Source/Falcor/RenderGraph 5 | Source/Falcor/Rendering 6 | Source/Falcor/RenderPasses 7 | Source/Falcor/Scene 8 | Source/Falcor/Testing 9 | Source/Falcor/Utils 10 | Source/Internal 11 | Source/Internal/Modules 12 | Source/Internal/Tools 13 | Source/Mogwai 14 | Source/RenderPasses 15 | Source/Tools/FalcorTest 16 | Source/Tools/RenderGraphEditor 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Allow looking at files higher up in the directory tree 2 | root = false 3 | 4 | # Set default editor config for all files: 5 | # - use utf-8 as default 6 | # - 4 spaces, no trailing whitespaces 7 | # - final newline for slightly cleaner diffs when changing the last line 8 | [*] 9 | charset = utf-8 10 | indent_size = 4 11 | indent_style = space 12 | trim_trailing_whitespace = true 13 | insert_final_newline = true 14 | 15 | # Override trailing whitespace setting for Markdown since there it's actually useful 16 | [*.{md}] 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | data/VeachAjar/models/*.obj filter=lfs diff=lfs merge=lfs -text 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build folder. 2 | /build/ 3 | 4 | # Test output folder. 5 | /tests/data/ 6 | 7 | # Media folder. 8 | /media 9 | 10 | # Packman folders. 11 | /external/packman/ 12 | /tools/.packman/ 13 | 14 | # IDE folders. 15 | /.vs/ 16 | /.vscode/ 17 | 18 | # User files. 19 | /CMakeUserPresets.json 20 | 21 | # File types. 22 | *.user 23 | *.suo 24 | *.pyc 25 | *.VC.db 26 | *.VC.opendb 27 | *.pyc 28 | *slang-dump-* 29 | *.mp4 30 | *.tlog 31 | *.bak 32 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "external/args"] 2 | path = external/args 3 | url = https://github.com/Taywee/args.git 4 | [submodule "external/fmt"] 5 | path = external/fmt 6 | url = https://github.com/fmtlib/fmt.git 7 | [submodule "external/glfw"] 8 | path = external/glfw 9 | url = https://github.com/glfw/glfw.git 10 | [submodule "external/glm"] 11 | path = external/glm 12 | url = https://github.com/g-truc/glm.git 13 | [submodule "external/imgui"] 14 | path = external/imgui 15 | url = https://github.com/ocornut/imgui.git 16 | [submodule "external/pybind11"] 17 | path = external/pybind11 18 | url = https://github.com/skallweitNV/pybind11.git 19 | [submodule "external/vulkan-headers"] 20 | path = external/vulkan-headers 21 | url = https://github.com/KhronosGroup/Vulkan-Headers 22 | -------------------------------------------------------------------------------- /.vscode-default/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "editorconfig.editorconfig", 4 | "ms-vscode.cpptools", 5 | "ms-vscode.cmake-tools", 6 | "josetr.cmake-language-support-vscode", 7 | "shader-slang.slang-language-extension" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode-default/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.pyscene": "python" 4 | }, 5 | "cmake.configureOnEdit": false, 6 | "C_Cpp.clang_format_path": "${workspaceFolder}/tools/.packman/clang-format/clang-format", 7 | "slang.format.clangFormatLocation": "${workspaceFolder}/tools/.packman/clang-format/clang-format" 8 | } 9 | -------------------------------------------------------------------------------- /Source/Falcor/Falcor.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | Falcor real-time rendering framework. 10 | 11 | 12 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Source/Falcor/Rendering/ConditionalReSTIR/ReflectTypes.cs.slang: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | # Copyright (c) 2023, NVIDIA Corporation. All rights reserved. 3 | # 4 | # This work is made available under the Nvidia Source Code License-NC. 5 | # To view a copy of this license, see LICENSE.md 6 | **************************************************************************/ 7 | 8 | /** Dummy compute program for reflection of the structured buffer types. 9 | 10 | Falcor requires reflection data to be able to create a structured buffer, 11 | but the programs are not yet ready to be used when we create the buffers. 12 | Therefore we create this dummy program to make it easier. 13 | */ 14 | 15 | import PathReservoir; 16 | import PathTracer; 17 | 18 | StructuredBuffer pathReservoirs; 19 | StructuredBuffer reconnectionDataBuffer; 20 | ParameterBlock pathTracer; 21 | StructuredBuffer neighborValidMask; 22 | StructuredBuffer prefixGBuffer; 23 | StructuredBuffer foundNeighborPixels; 24 | StructuredBuffer prefixReservoirs; 25 | StructuredBuffer prefixPathReservoirs; 26 | StructuredBuffer rcBufferOffsets; 27 | StructuredBuffer prefixThroughputs; 28 | StructuredBuffer prefixSearchKeys; 29 | StructuredBuffer searchPointBoundingBoxBuffer; 30 | StructuredBuffer prefixL2LengthBuffer; 31 | 32 | void main() {} 33 | -------------------------------------------------------------------------------- /Source/Falcor/Rendering/ConditionalReSTIR/RetraceScheduleDefinition.slangh: -------------------------------------------------------------------------------- 1 | #define RETRACE_SCHEDULE_NAIVE 0 2 | #define RETRACE_SCHEDULE_COMPACT 1 3 | -------------------------------------------------------------------------------- /Source/Falcor/Rendering/ConditionalReSTIR/RetraceWorkloadQueue.slang: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | # Copyright (c) 2023, NVIDIA Corporation. All rights reserved. 3 | # 4 | # This work is made available under the Nvidia Source Code License-NC. 5 | # To view a copy of this license, see LICENSE.md 6 | **************************************************************************/ 7 | import Utils.Attributes; 8 | 9 | struct RetraceWorkloadQueue 10 | { 11 | [root] RWByteAddressBuffer counter; 12 | RWByteAddressBuffer workload; 13 | RWByteAddressBuffer workloadExtra; 14 | 15 | uint addCounter(uint value) 16 | { 17 | uint sum = WaveActiveSum(value); 18 | uint offset = WavePrefixSum(value); 19 | uint originalValue; 20 | if (WaveIsFirstLane()) 21 | { 22 | counter.InterlockedAdd(0, sum, originalValue); 23 | } 24 | originalValue = WaveReadLaneFirst(originalValue); 25 | return originalValue + offset; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Source/Mogwai/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(Mogwai) 2 | 3 | target_sources(Mogwai PRIVATE 4 | AppData.cpp 5 | AppData.h 6 | Mogwai.cpp 7 | Mogwai.h 8 | MogwaiScripting.cpp 9 | MogwaiSettings.cpp 10 | MogwaiSettings.h 11 | 12 | Extensions/Capture/CaptureTrigger.cpp 13 | Extensions/Capture/CaptureTrigger.h 14 | Extensions/Capture/FrameCapture.cpp 15 | Extensions/Capture/FrameCapture.h 16 | Extensions/Capture/VideoCapture.cpp 17 | Extensions/Capture/VideoCapture.h 18 | Extensions/Profiler/TimingCapture.cpp 19 | Extensions/Profiler/TimingCapture.h 20 | ) 21 | 22 | target_link_libraries(Mogwai PRIVATE args) 23 | 24 | target_source_group(Mogwai "/") 25 | -------------------------------------------------------------------------------- /Source/RenderPasses/AccumulatePass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(AccumulatePass) 2 | 3 | target_sources(AccumulatePass PRIVATE 4 | Accumulate.cs.slang 5 | AccumulatePass.cpp 6 | AccumulatePass.h 7 | ) 8 | 9 | target_copy_shaders(AccumulatePass RenderPasses/AccumulatePass) 10 | 11 | target_source_group(AccumulatePass "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/BSDFViewer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(BSDFViewer) 2 | 3 | target_sources(BSDFViewer PRIVATE 4 | BSDFViewer.cpp 5 | BSDFViewer.cs.slang 6 | BSDFViewer.h 7 | BSDFViewerParams.slang 8 | ) 9 | 10 | target_copy_shaders(BSDFViewer RenderPasses/BSDFViewer) 11 | 12 | target_source_group(BSDFViewer "RenderPasses") 13 | -------------------------------------------------------------------------------- /Source/RenderPasses/BlitPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(BlitPass) 2 | 3 | target_sources(BlitPass PRIVATE 4 | BlitPass.cpp 5 | BlitPass.h 6 | ) 7 | 8 | target_source_group(BlitPass "RenderPasses") 9 | -------------------------------------------------------------------------------- /Source/RenderPasses/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(AccumulatePass) 2 | add_subdirectory(BlitPass) 3 | add_subdirectory(BSDFViewer) 4 | add_subdirectory(DebugPasses) 5 | add_subdirectory(DLSSPass) 6 | add_subdirectory(ErrorMeasurePass) 7 | add_subdirectory(FLIPPass) 8 | add_subdirectory(GBuffer) 9 | add_subdirectory(ImageLoader) 10 | add_subdirectory(MinimalPathTracer) 11 | add_subdirectory(ModulateIllumination) 12 | add_subdirectory(NRDPass) 13 | add_subdirectory(OptixDenoiser) 14 | add_subdirectory(PathTracer) 15 | add_subdirectory(PixelInspectorPass) 16 | add_subdirectory(RTXDIPass) 17 | add_subdirectory(SceneDebugger) 18 | add_subdirectory(SDFEditor) 19 | add_subdirectory(SimplePostFX) 20 | add_subdirectory(SVGFPass) 21 | add_subdirectory(TAA) 22 | add_subdirectory(TestPasses) 23 | add_subdirectory(ToneMapper) 24 | add_subdirectory(Utils) 25 | add_subdirectory(WhittedRayTracer) 26 | -------------------------------------------------------------------------------- /Source/RenderPasses/DLSSPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT FALCOR_HAS_DLSS) 2 | return() 3 | endif() 4 | 5 | add_renderpass(DLSSPass) 6 | 7 | target_sources(DLSSPass PRIVATE 8 | DLSSPass.cpp 9 | DLSSPass.h 10 | NGXWrapper.cpp 11 | NGXWrapper.h 12 | ) 13 | 14 | target_link_libraries(DLSSPass PRIVATE ngx) 15 | 16 | target_source_group(DLSSPass "RenderPasses") 17 | -------------------------------------------------------------------------------- /Source/RenderPasses/DebugPasses/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(DebugPasses) 2 | 3 | target_sources(DebugPasses PRIVATE 4 | Comparison.ps.slang 5 | ComparisonPass.cpp 6 | ComparisonPass.h 7 | DebugPasses.cpp 8 | 9 | ColorMapPass/ColorMapParams.slang 10 | ColorMapPass/ColorMapPass.cpp 11 | ColorMapPass/ColorMapPass.h 12 | ColorMapPass/ColorMapPass.ps.slang 13 | 14 | InvalidPixelDetectionPass/InvalidPixelDetection.ps.slang 15 | InvalidPixelDetectionPass/InvalidPixelDetectionPass.cpp 16 | InvalidPixelDetectionPass/InvalidPixelDetectionPass.h 17 | 18 | SideBySidePass/SideBySide.ps.slang 19 | SideBySidePass/SideBySidePass.cpp 20 | SideBySidePass/SideBySidePass.h 21 | 22 | SplitScreenPass/SplitScreen.ps.slang 23 | SplitScreenPass/SplitScreenPass.cpp 24 | SplitScreenPass/SplitScreenPass.h 25 | ) 26 | 27 | target_copy_shaders(DebugPasses RenderPasses/DebugPasses) 28 | 29 | target_source_group(DebugPasses "RenderPasses") 30 | -------------------------------------------------------------------------------- /Source/RenderPasses/ErrorMeasurePass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(ErrorMeasurePass) 2 | 3 | target_sources(ErrorMeasurePass PRIVATE 4 | ErrorMeasurePass.cpp 5 | ErrorMeasurePass.h 6 | ErrorMeasurer.cs.slang 7 | ) 8 | 9 | target_copy_shaders(ErrorMeasurePass RenderPasses/ErrorMeasurePass) 10 | 11 | target_source_group(ErrorMeasurePass "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/FLIPPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(FLIPPass) 2 | 3 | target_sources(FLIPPass PRIVATE 4 | ComputeLuminance.cs.slang 5 | flip.hlsli 6 | FLIPPass.cpp 7 | FLIPPass.cs.slang 8 | FLIPPass.h 9 | ToneMappers.slang 10 | ) 11 | 12 | target_copy_shaders(FLIPPass RenderPasses/FLIPPass) 13 | 14 | target_source_group(FLIPPass "RenderPasses") 15 | -------------------------------------------------------------------------------- /Source/RenderPasses/GBuffer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(GBuffer) 2 | 3 | target_sources(GBuffer PRIVATE 4 | GBufferBase.cpp 5 | GBufferBase.h 6 | 7 | GBuffer/DepthPass.3d.slang 8 | GBuffer/GBuffer.cpp 9 | GBuffer/GBuffer.h 10 | GBuffer/GBufferHelpers.slang 11 | GBuffer/GBufferRaster.3d.slang 12 | GBuffer/GBufferRaster.cpp 13 | GBuffer/GBufferRaster.h 14 | GBuffer/GBufferRT.cpp 15 | GBuffer/GBufferRT.cs.slang 16 | GBuffer/GBufferRT.h 17 | GBuffer/GBufferRT.rt.slang 18 | GBuffer/GBufferRT.slang 19 | 20 | VBuffer/VBufferRaster.3d.slang 21 | VBuffer/VBufferRaster.cpp 22 | VBuffer/VBufferRaster.h 23 | VBuffer/VBufferRT.cpp 24 | VBuffer/VBufferRT.cs.slang 25 | VBuffer/VBufferRT.h 26 | VBuffer/VBufferRT.rt.slang 27 | VBuffer/VBufferRT.slang 28 | ) 29 | 30 | target_copy_shaders(GBuffer RenderPasses/GBuffer) 31 | 32 | target_source_group(GBuffer "RenderPasses") 33 | -------------------------------------------------------------------------------- /Source/RenderPasses/ImageLoader/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(ImageLoader) 2 | 3 | target_sources(ImageLoader PRIVATE 4 | ImageLoader.cpp 5 | ImageLoader.h 6 | ) 7 | 8 | target_source_group(ImageLoader "RenderPasses") 9 | -------------------------------------------------------------------------------- /Source/RenderPasses/MinimalPathTracer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(MinimalPathTracer) 2 | 3 | target_sources(MinimalPathTracer PRIVATE 4 | MinimalPathTracer.cpp 5 | MinimalPathTracer.h 6 | MinimalPathTracer.rt.slang 7 | ) 8 | 9 | target_copy_shaders(MinimalPathTracer RenderPasses/MinimalPathTracer) 10 | 11 | target_source_group(MinimalPathTracer "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/ModulateIllumination/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(ModulateIllumination) 2 | 3 | target_sources(ModulateIllumination PRIVATE 4 | ModulateIllumination.cpp 5 | ModulateIllumination.h 6 | ModulateIllumination.cs.slang 7 | ) 8 | 9 | target_copy_shaders(ModulateIllumination RenderPasses/ModulateIllumination) 10 | 11 | target_source_group(ModulateIllumination "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/NRDPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT (FALCOR_HAS_NRD AND FALCOR_HAS_D3D12)) 2 | return() 3 | endif() 4 | 5 | add_renderpass(NRDPass) 6 | 7 | target_sources(NRDPass PRIVATE 8 | NRDPass.cpp 9 | NRDPass.h 10 | PackRadiance.cs.slang 11 | ) 12 | 13 | target_link_libraries(NRDPass PRIVATE nrd) 14 | 15 | target_copy_shaders(NRDPass RenderPasses/NRDPass) 16 | 17 | target_source_group(NRDPass "RenderPasses") 18 | -------------------------------------------------------------------------------- /Source/RenderPasses/OptixDenoiser/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT (FALCOR_HAS_CUDA AND FALCOR_HAS_OPTIX)) 2 | return() 3 | endif() 4 | 5 | add_renderpass(OptixDenoiser) 6 | 7 | target_sources(OptixDenoiser PRIVATE 8 | BootstrapUtils.cpp 9 | ConvertBufToTex.ps.slang 10 | ConvertMotionVectorInputs.cs.slang 11 | ConvertNormalsToBuf.cs.slang 12 | ConvertTexToBuf.cs.slang 13 | CudaUtils.cpp 14 | CudaUtils.h 15 | OptixDenoiser.cpp 16 | OptixDenoiser.h 17 | ) 18 | 19 | target_copy_shaders(OptixDenoiser RenderPasses/OptixDenoiser) 20 | 21 | target_link_libraries(OptixDenoiser PRIVATE optix) 22 | 23 | target_source_group(OptixDenoiser "RenderPasses") 24 | -------------------------------------------------------------------------------- /Source/RenderPasses/PassLibraryTemplate/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(PassLibraryTemplate) 2 | 3 | target_sources(PassLibraryTemplate PRIVATE 4 | PassLibraryTemplate.cpp 5 | PassLibraryTemplate.h 6 | ) 7 | 8 | target_source_group(PassLibraryTemplate "RenderPasses") 9 | -------------------------------------------------------------------------------- /Source/RenderPasses/PathTracer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(PathTracer) 2 | 3 | target_sources(PathTracer PRIVATE 4 | ColorType.slang 5 | GeneratePaths.cs.slang 6 | GuideData.slang 7 | LoadShadingData.slang 8 | NRDHelpers.slang 9 | ConditionalReSTIRData.slang 10 | Params.slang 11 | PathState.slang 12 | PathTracer.slang 13 | PathTracer.cpp 14 | PathTracer.h 15 | PathTracerNRD.slang 16 | ReflectTypes.cs.slang 17 | ResolvePass.cs.slang 18 | StaticParams.slang 19 | TracePass.cs.slang 20 | UserInteractionRecorder.h 21 | ) 22 | 23 | target_copy_shaders(PathTracer RenderPasses/PathTracer) 24 | 25 | target_source_group(PathTracer "RenderPasses") 26 | -------------------------------------------------------------------------------- /Source/RenderPasses/PathTracer/ConditionalReSTIRData.slang: -------------------------------------------------------------------------------- 1 | /*************************************************************************** 2 | # Copyright (c) 2023, NVIDIA Corporation. All rights reserved. 3 | # 4 | # This work is made available under the Nvidia Source Code License-NC. 5 | # To view a copy of this license, see LICENSE.md 6 | **************************************************************************/ 7 | #include "Utils/Math/MathConstants.slangh" 8 | __exported import StaticParams; 9 | __exported import Rendering.ConditionalReSTIR.PathReservoir; 10 | __exported import Rendering.ConditionalReSTIR.ConditionalReSTIR; 11 | 12 | // maximum: 160 bytes 13 | struct ConditionalReSTIRData 14 | { 15 | PathRisState pathRis; 16 | PathRcInfo pathRcInfo; 17 | float lastScatterPdf; 18 | float3 lastScatterWeight; 19 | float rrPdf; 20 | float pathTotalLength; 21 | 22 | __init() 23 | { 24 | pathRis = PathRisState(); 25 | pathRcInfo = {}; 26 | lastScatterPdf = 0.f; 27 | lastScatterWeight = 0.f; 28 | rrPdf = 1.f; 29 | pathTotalLength = 0.f; 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /Source/RenderPasses/PixelInspectorPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(PixelInspectorPass) 2 | 3 | target_sources(PixelInspectorPass PRIVATE 4 | PixelInspector.cs.slang 5 | PixelInspectorData.slang 6 | PixelInspectorPass.cpp 7 | PixelInspectorPass.h 8 | ) 9 | 10 | target_copy_shaders(PixelInspectorPass RenderPasses/PixelInspectorPass) 11 | 12 | target_source_group(PixelInspectorPass "RenderPasses") 13 | -------------------------------------------------------------------------------- /Source/RenderPasses/RTXDIPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(RTXDIPass) 2 | 3 | target_sources(RTXDIPass PRIVATE 4 | FinalShading.cs.slang 5 | LoadShadingData.slang 6 | PrepareSurfaceData.cs.slang 7 | RTXDIPass.cpp 8 | RTXDIPass.h 9 | ) 10 | 11 | target_copy_shaders(RTXDIPass RenderPasses/RTXDIPass) 12 | 13 | target_source_group(RTXDIPass "RenderPasses") 14 | -------------------------------------------------------------------------------- /Source/RenderPasses/RTXDIPass/README.txt: -------------------------------------------------------------------------------- 1 | This directory contains an example of using the RTXDI integration built into Falcor. 2 | 3 | Note: RTXDI is *not* distributed with (public) Falcor releases, so users desiring RTXDI 4 | need to register for access to the SDK code on Github on the NVIDIA Developer site: 5 | https://developer.nvidia.com/rtxdi 6 | 7 | Once registered, you should be able to get the SDK from this Github repository: 8 | https://github.com/NVIDIAGameWorks/RTXDI 9 | 10 | See the main README for installation details. 11 | 12 | A Simple Example Using RTXDI: 13 | ----------------------------- 14 | 15 | A sample render script that configures Falcor to use this render pass is in: 16 | `Source\Mogwai\Data\RTXDI.py` 17 | 18 | To test this simple example: 19 | 20 | 1) Build Falcor (see main README for help). 21 | 22 | 2) Run Mogwai.exe, which allows you to load Falcor scenes and render scripts. 23 | 24 | 3) Load the RTXDI.py render script from one of the locations listed above (you can do this 25 | via the Mogwai command line, from the menu after running Mogwai, or dragging & dropping the 26 | .py file into a running Mogwai window). 27 | 28 | 4) Load an appropriate scene. After building, Visual Studio will have pulled a default scene 29 | as part of the package dependencies it downloads. You can use this scene, located in: 30 | `media\Arcade\Arcade.pyscene` 31 | You can (also) load this scene via the Mogwai command line, from the menu after running Mogwai, 32 | or by dragging and dropping the `.pyscene` into a running Mogwai window. 33 | -------------------------------------------------------------------------------- /Source/RenderPasses/SDFEditor/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(SDFEditor) 2 | 3 | target_sources(SDFEditor PRIVATE 4 | GUIPass.ps.slang 5 | Marker2DSet.cpp 6 | Marker2DSet.h 7 | Marker2DSet.slang 8 | Marker2DTypes.slang 9 | SDFEditor.cpp 10 | SDFEditor.h 11 | SDFEditorTypes.slang 12 | SelectionWheel.cpp 13 | SelectionWheel.h 14 | ) 15 | 16 | target_copy_shaders(SDFEditor RenderPasses/SDFEditor) 17 | 18 | target_source_group(SDFEditor "RenderPasses") 19 | -------------------------------------------------------------------------------- /Source/RenderPasses/SVGFPass/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(SVGFPass) 2 | 3 | target_sources(SVGFPass PRIVATE 4 | SVGFAtrous.ps.slang 5 | SVGFCommon.slang 6 | SVGFFilterMoments.ps.slang 7 | SVGFFinalModulate.ps.slang 8 | SVGFPackLinearZAndNormal.ps.slang 9 | SVGFPass.cpp 10 | SVGFPass.h 11 | SVGFReproject.ps.slang 12 | ) 13 | 14 | target_copy_shaders(SVGFPass RenderPasses/SVGFPass) 15 | 16 | target_source_group(SVGFPass "RenderPasses") 17 | -------------------------------------------------------------------------------- /Source/RenderPasses/SceneDebugger/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(SceneDebugger) 2 | 3 | target_sources(SceneDebugger PRIVATE 4 | SceneDebugger.cpp 5 | SceneDebugger.cs.slang 6 | SceneDebugger.h 7 | SharedTypes.slang 8 | ) 9 | 10 | target_copy_shaders(SceneDebugger RenderPasses/SceneDebugger) 11 | 12 | target_source_group(SceneDebugger "RenderPasses") 13 | -------------------------------------------------------------------------------- /Source/RenderPasses/SimplePostFX/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(SimplePostFX) 2 | 3 | target_sources(SimplePostFX PRIVATE 4 | SimplePostFX.cpp 5 | SimplePostFX.cs.slang 6 | SimplePostFX.h 7 | ) 8 | 9 | target_copy_shaders(SimplePostFX RenderPasses/SimplePostFX) 10 | 11 | target_source_group(SimplePostFX "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/TAA/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(TAA) 2 | 3 | target_sources(TAA PRIVATE 4 | TAA.cpp 5 | TAA.h 6 | TAA.ps.slang 7 | ) 8 | 9 | target_copy_shaders(TAA RenderPasses/TAA) 10 | 11 | target_source_group(TAA "RenderPasses") 12 | -------------------------------------------------------------------------------- /Source/RenderPasses/TestPasses/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(TestPasses) 2 | 3 | target_sources(TestPasses PRIVATE 4 | TestPasses.cpp 5 | TestRtProgram.cpp 6 | TestRtProgram.h 7 | TestRtProgram.rt.slang 8 | ) 9 | 10 | target_copy_shaders(TestPasses RenderPasses/TestPasses) 11 | 12 | target_source_group(TestPasses "RenderPasses") 13 | -------------------------------------------------------------------------------- /Source/RenderPasses/ToneMapper/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(ToneMapper) 2 | 3 | target_sources(ToneMapper PRIVATE 4 | Luminance.ps.slang 5 | ToneMapper.cpp 6 | ToneMapper.h 7 | ToneMapperParams.slang 8 | ToneMapping.ps.slang 9 | ) 10 | 11 | target_copy_shaders(ToneMapper RenderPasses/ToneMapper) 12 | 13 | target_source_group(ToneMapper "RenderPasses") 14 | -------------------------------------------------------------------------------- /Source/RenderPasses/Utils/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(Utils) 2 | 3 | target_sources(Utils PRIVATE 4 | Utils.cpp 5 | 6 | Composite/Composite.cpp 7 | Composite/Composite.cs.slang 8 | Composite/Composite.h 9 | Composite/CompositeMode.slangh 10 | 11 | GaussianBlur/GaussianBlur.cpp 12 | GaussianBlur/GaussianBlur.h 13 | GaussianBlur/GaussianBlur.ps.slang 14 | ) 15 | 16 | target_copy_shaders(Utils RenderPasses/Utils) 17 | 18 | target_source_group(Utils "RenderPasses") 19 | -------------------------------------------------------------------------------- /Source/RenderPasses/WhittedRayTracer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_renderpass(WhittedRayTracer) 2 | 3 | target_sources(WhittedRayTracer PRIVATE 4 | WhittedRayTracer.cpp 5 | WhittedRayTracer.h 6 | WhittedRayTracer.rt.slang 7 | WhittedRayTracerTypes.slang 8 | ) 9 | 10 | target_copy_shaders(WhittedRayTracer RenderPasses/WhittedRayTracer) 11 | 12 | target_source_group(WhittedRayTracer "RenderPasses") 13 | -------------------------------------------------------------------------------- /Source/Samples/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(CudaInterop) 2 | add_subdirectory(HelloDXR) 3 | add_subdirectory(ShaderToy) 4 | add_subdirectory(Visualization2D) 5 | -------------------------------------------------------------------------------- /Source/Samples/CudaInterop/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT FALCOR_HAS_CUDA) 2 | return() 3 | endif() 4 | 5 | add_falcor_executable(CudaInterop) 6 | 7 | target_sources(CudaInterop PRIVATE 8 | CopySurface.cu 9 | CopySurface.h 10 | CudaInterop.cpp 11 | CudaInterop.h 12 | FalcorCUDA.cpp 13 | FalcorCUDA.h 14 | ) 15 | 16 | set_target_properties(CudaInterop PROPERTIES CUDA_SEPARABLE_COMPILATION ON) 17 | 18 | target_source_group(CudaInterop "Samples") 19 | -------------------------------------------------------------------------------- /Source/Samples/HelloDXR/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(HelloDXR) 2 | 3 | target_sources(HelloDXR PRIVATE 4 | HelloDXR.cpp 5 | HelloDXR.h 6 | HelloDXR.3d.slang 7 | HelloDXR.rt.slang 8 | ) 9 | 10 | target_copy_shaders(HelloDXR Samples/HelloDXR) 11 | 12 | target_source_group(HelloDXR "Samples") 13 | -------------------------------------------------------------------------------- /Source/Samples/ProjectTemplate/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(ProjectTemplate) 2 | 3 | target_sources(ProjectTemplate PRIVATE 4 | ProjectTemplate.cpp 5 | ProjectTemplate.h 6 | ) 7 | 8 | target_copy_shaders(ProjectTemplate Samples/ProjectTemplate) 9 | 10 | target_source_group(ProjectTemplate "Samples") 11 | -------------------------------------------------------------------------------- /Source/Samples/ShaderToy/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(ShaderToy) 2 | 3 | target_sources(ShaderToy PRIVATE 4 | ShaderToy.cpp 5 | ShaderToy.h 6 | Toy.ps.slang 7 | ) 8 | 9 | target_copy_shaders(ShaderToy Samples/ShaderToy) 10 | 11 | target_source_group(ShaderToy "Samples") 12 | -------------------------------------------------------------------------------- /Source/Samples/Visualization2D/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(Visualization2D) 2 | 3 | target_sources(Visualization2D PRIVATE 4 | Visualization2D.cpp 5 | Visualization2D.h 6 | Visualization2d.ps.slang 7 | VoxelNormals.ps.slang 8 | ) 9 | 10 | target_copy_shaders(Visualization2D Samples/Visualization2D) 11 | 12 | target_source_group(Visualization2D "Samples") 13 | -------------------------------------------------------------------------------- /Source/Tools/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(FalcorTest) 2 | add_subdirectory(ImageCompare) 3 | add_subdirectory(RenderGraphEditor) 4 | -------------------------------------------------------------------------------- /Source/Tools/ImageCompare/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(ImageCompare) 2 | 3 | target_sources(ImageCompare PRIVATE 4 | ImageCompare.cpp 5 | ) 6 | 7 | target_link_libraries(ImageCompare PRIVATE args FreeImage) 8 | 9 | target_source_group(ImageCompare "Tools") 10 | -------------------------------------------------------------------------------- /Source/Tools/RenderGraphEditor/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_falcor_executable(RenderGraphEditor) 2 | 3 | set_target_properties(RenderGraphEditor PROPERTIES WIN32_EXECUTABLE TRUE) 4 | 5 | target_sources(RenderGraphEditor PRIVATE 6 | RenderGraphEditor.cpp 7 | RenderGraphEditor.h 8 | ) 9 | 10 | target_link_libraries(RenderGraphEditor PRIVATE args) 11 | 12 | target_source_group(RenderGraphEditor "Tools") 13 | -------------------------------------------------------------------------------- /build_scripts/deploycommon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # $1 -> Project directory 4 | # $2 -> Binary output directory 5 | # $3 -> Build configuration 6 | 7 | ExtDir=$1/external/packman/ 8 | OutDir=$2 9 | 10 | IsDebug=false 11 | if [ "$3" = "Debug" ]; then 12 | IsDebug=true 13 | fi 14 | 15 | # Copy externals 16 | if [ "${IsDebug}" = false ]; then 17 | cp -frp ${ExtDir}/deps/lib/*.so* ${OutDir} 18 | else 19 | cp -frp ${ExtDir}/deps/debug/lib/*.so* ${OutDir} 20 | cp -fp ${ExtDir}/deps/lib/libassimp.so* ${OutDir} 21 | cp -fp ${ExtDir}/deps/lib/libtbb.so* ${OutDir} 22 | fi 23 | 24 | cp -fp ${ExtDir}/python/lib/libpython*.so* ${OutDir} 25 | mkdir -p ${OutDir}/pythondist 26 | cp -frp ${ExtDir}/python/* ${OutDir}/pythondist 27 | 28 | # Copy slang 29 | cp -f ${ExtDir}/slang/bin/linux-x64/release/lib*.so ${OutDir} 30 | 31 | # Copy RTXDI SDK shaders 32 | RtxdiSDKDir=${ExtDir}/rtxdi/rtxdi-sdk/include/rtxdi 33 | RtxdiSDKTargetDir=${OutDir}/shaders/rtxdi 34 | if [ -d ${RtxdiSDKDir} ]; then 35 | mkdir -p ${RtxdiSDKTargetDir} 36 | cp ${RtxdiSDKDir}/ResamplingFunctions.hlsli ${RtxdiSDKTargetDir} 37 | cp ${RtxdiSDKDir}/Reservoir.hlsli ${RtxdiSDKTargetDir} 38 | cp ${RtxdiSDKDir}/RtxdiHelpers.hlsli ${RtxdiSDKTargetDir} 39 | cp ${RtxdiSDKDir}/RtxdiMath.hlsli ${RtxdiSDKTargetDir} 40 | cp ${RtxdiSDKDir}/RtxdiParameters.h ${RtxdiSDKTargetDir} 41 | cp ${RtxdiSDKDir}/RtxdiTypes.h ${RtxdiSDKTargetDir} 42 | fi 43 | 44 | # Copy NanoVDB 45 | NanoVDBDir=${ExtDir}/nanovdb 46 | NanoVDBTargetDir=${OutDir}/shaders/nanovdb 47 | if [ -d ${NanoVDBDir} ]; then 48 | mkdir -p ${NanoVDBTargetDir} 49 | cp ${NanoVDBDir}/include/nanovdb/PNanoVDB.h ${NanoVDBTargetDir} 50 | fi 51 | 52 | # Copy NVTT 53 | cp ${ExtDir}/nvtt/libcudart.so.11.0 ${OutDir} 54 | cp ${ExtDir}/nvtt/libnvtt.so ${OutDir} 55 | -------------------------------------------------------------------------------- /build_scripts/setpath.bat.in: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | REM *************************************************************** 4 | REM * This script adds Falcor to the current path on Windows. 5 | REM *************************************************************** 6 | 7 | set FALCOR_DIR=%~dp0 8 | set PATH=%FALCOR_DIR%;%PATH% 9 | set PYTHONPATH=%FALCOR_DIR%python;%PYTHONPATH% 10 | -------------------------------------------------------------------------------- /build_scripts/setpath.ps1.in: -------------------------------------------------------------------------------- 1 | # *************************************************************** 2 | # * This script adds Falcor to the current path on Windows. 3 | # *************************************************************** 4 | 5 | $env:FALCOR_DIR = Get-Location 6 | $env:PATH = $env:FALCOR_DIR + ";" + $env:PATH 7 | $env:PYTHONPATH = $env:FALCOR_DIR + "\python" + ";" + $env:PYTHONPATH 8 | -------------------------------------------------------------------------------- /build_scripts/setpath.sh.in: -------------------------------------------------------------------------------- 1 | # This script adds Falcor to the current path on Linux. 2 | # It must be executed via the 'source' command so that 3 | # it can modify the relevant environment variables. 4 | 5 | FALCOR_DIR="" 6 | 7 | if [ "$BASH_VERSION" ]; then 8 | if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then 9 | FALCOR_DIR=$(dirname "$BASH_SOURCE") 10 | FALCOR_DIR=$(builtin cd "$FALCOR_DIR"; builtin pwd) 11 | fi 12 | elif [ "$ZSH_VERSION" ]; then 13 | if [[ -n ${(M)zsh_eval_context:#file} ]]; then 14 | FALCOR_DIR=$(dirname "$0:A") 15 | fi 16 | fi 17 | 18 | if [ -z "$FALCOR_DIR" ]; then 19 | echo "This script must be executed via the 'source' command, i.e.:" 20 | echo "$ source ${0}" 21 | exit 0 22 | fi 23 | 24 | export PYTHONPATH="$FALCOR_DIR/python:$PYTHONPATH" 25 | export PATH="$FALCOR_DIR:$PATH" 26 | export LD_LIBRARY_PATH="$FALCOR_DIR:$LD_LIBRARY_PATH" 27 | -------------------------------------------------------------------------------- /build_scripts/wrap_setpath.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source ./setpath.sh 3 | $* 4 | -------------------------------------------------------------------------------- /cmake/git_version.h.in: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define GIT_VERSION_AVAILABLE @GIT_AVAILABLE@ 4 | #define GIT_VERSION_COMMIT "@GIT_COMMIT@" 5 | #define GIT_VERSION_BRANCH "@GIT_BRANCH@" 6 | #define GIT_VERSION_DIRTY @GIT_DIRTY@ 7 | -------------------------------------------------------------------------------- /cmake/mt-retry.bat.in: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enabledelayedexpansion 3 | 4 | for /l %%x in (1, 1, 10) do ( 5 | "${CMAKE_MT_ORIGINAL}" %* 6 | if !errorlevel! equ 0 exit /b 0 7 | echo mt.exe failed with error code !errorlevel!, retrying ... 8 | rem workaround for waiting for 1 second 9 | ping -n 0 127.0.0.1 >nul 10 | ) 11 | 12 | endlocal 13 | 14 | exit /b !errorlevel! 15 | -------------------------------------------------------------------------------- /cmake/mt-retry.cmake: -------------------------------------------------------------------------------- 1 | # Ninja can fail when embedding manifests just after building an executable or library. 2 | # mt.exe may not be able to open the file because AV software has already locked it. 3 | # msbuild presumably has some retry mechanism in place to deal with this, but when 4 | # building with Ninja this problem can still emerge. 5 | # To fix this, we set CMAKE_MT to execute a wrapper batch script which does re-run 6 | # mt.exe in case it fails the first time. 7 | 8 | if(WIN32 AND CMAKE_GENERATOR MATCHES "Ninja") 9 | message(STATUS "Setting up mt-retry workaround.") 10 | set(CMAKE_MT_ORIGINAL ${CMAKE_MT} CACHE FILEPATH "" FORCE) 11 | # Write out a wrapper batch script to re-run mt.exe when it fails. 12 | configure_file(${CMAKE_CURRENT_LIST_DIR}/mt-retry.bat.in ${CMAKE_CURRENT_BINARY_DIR}/mt-retry.bat) 13 | # Set CMAKE_MT to execute the wrapper batch script. 14 | set(CMAKE_MT ${CMAKE_CURRENT_BINARY_DIR}/mt-retry.bat CACHE FILEPATH "" FORCE) 15 | endif() 16 | -------------------------------------------------------------------------------- /data/VeachAjar/models/DoorHandleTranslated.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6d8fb71c03e38eff868dbe5f309763817e9218ac0989934b7a1f4cf857eae91b 3 | size 253826 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/DoorTranslated.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7807f04dde588513382be4a38b9d6d484065462a71c393553c6b1bbc5993c25b 3 | size 1820 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Light.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6447d87de4d2e8816c45579e72d70b7a7338cf280e272b5c13bc053fa1690cc7 3 | size 266 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh000_Pot1.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:00f7bdf8322c47ef9e7bc123e8df30ab6f71c00152f62a1cd198eb288e698b7a 3 | size 4452947 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh000_Pot2.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b2a22cc17397dc7c26ad7cb9a5d107043eb73c32a0eabb2604a5c5352544ff1b 3 | size 4453493 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh000_Pot3.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9c869efc69288c6021738284cf814a5ec2e62ecdd7598a23ae4591307033eacd 3 | size 4454472 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh001.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9b10163519669d1cb38a3a124d54a88a1985ed6fd3717415401acf5ebf456893 3 | size 2382 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh002.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:74fe05be29b81cf0f91213161ff2167f7bbebb53afd10e154b5058ebc6b2319e 3 | size 2382 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh003.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7a9e1c7f42b00f7be262a55e19b2cd6dd2e7d9e3bef2ce8c70bca0557db1aeb7 3 | size 2382 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh004.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6d798a38590b523236799ad27632cfac263d9d0eada0500b95703c45bada8033 3 | size 2370 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh005.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7405b03cc9689d5b9451472c4a6fc4540b46c59ab987db6c439af1cd31a71783 3 | size 6743 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh006.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6f14540d150b1f44a233be3f459a164832451d86a43613c0c40f674c399ac3c7 3 | size 2396 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh007.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ce35e10422050c40fbac9c0568fc230494a578a5bd5d6de309fcf98743e07491 3 | size 2382 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh008.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e718862d9047f729cb7888ccbefa03bc65da8c36968d984a10be602c03a669b5 3 | size 382 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh009_Pot1.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:16b835a7cfdd459ad77e7f8c7de4c6d8ae94b3622813369719d106c8c0f72c7f 3 | size 7359822 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh009_Pot2.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4b482958e4c88059136426a3e73fc84c8c243f7460c5ab08574e3c5d3bddf658 3 | size 7360180 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh009_Pot3.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9c150bd9eaa429e87515f77fba50a0f73bde0b72be8e130b758c2eb38fcf0814 3 | size 7359777 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh010.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:cffb9b77110d44b29616b93ce3903a6e619637eb8aae48451fab525a198b247d 3 | size 63555 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh011.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4242eed394bef41cf31026e2a628680ad078819aaa3fef47150d22d337a4887f 3 | size 366 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh012.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a3a171ee64e3c3c9e85c70703b8f290a7d3691450e2a910a36f91e66eb9ede3c 3 | size 106091 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh013.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:65fe7da345d08bc45f6b796596d0566b70c9e827170a901199fc287d4d43e8fa 3 | size 2370 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh014.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9397944e01f347350adb91a7af9863e105f8544243e1c76011ccd0ac9c9a9f53 3 | size 9071 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh015.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:70cb6a373f5917d8093a4891e83e7e1d49f4be227c211bde79ad856cd90ad46a 3 | size 255289 4 | -------------------------------------------------------------------------------- /data/VeachAjar/models/Mesh016.obj: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ac74f76c4b6918281479b7688de9d541b3ac0cf7447f46d48ce803f285767b05 3 | size 63651 4 | -------------------------------------------------------------------------------- /data/VeachAjar/textures/Good Textures_005844.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/VeachAjar/textures/Good Textures_005844.jpg -------------------------------------------------------------------------------- /data/VeachAjar/textures/checkerboxsmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/VeachAjar/textures/checkerboxsmall.png -------------------------------------------------------------------------------- /data/VeachAjar/textures/cherry-wood-texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/VeachAjar/textures/cherry-wood-texture.jpg -------------------------------------------------------------------------------- /data/VeachAjar/textures/landscape-with-a-lake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/VeachAjar/textures/landscape-with-a-lake.jpg -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_0.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_1.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_10.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_11.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_12.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_13.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_14.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_15.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_16.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_17.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_18.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_19.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_2.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_20.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_21.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_22.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_23.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_24.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_25.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_26.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_27.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_28.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_29.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_3.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_30.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_31.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_32.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_33.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_34.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_35.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_36.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_37.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_38.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_39.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_4.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_40.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_41.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_42.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_43.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_44.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_45.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_46.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_47.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_48.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_49.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_5.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_50.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_51.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_52.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_53.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_54.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_55.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_56.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_57.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_58.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_59.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_6.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_60.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_61.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_62.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_63.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_7.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_8.png -------------------------------------------------------------------------------- /data/bluenoise/64_64/HDR_L_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/bluenoise/64_64/HDR_L_9.png -------------------------------------------------------------------------------- /data/framework/fonts/consolab.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/fonts/consolab.ttf -------------------------------------------------------------------------------- /data/framework/fonts/dejavu-sans-mono14.000000.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/fonts/dejavu-sans-mono14.000000.bin -------------------------------------------------------------------------------- /data/framework/fonts/dejavu-sans-mono14.000000.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/fonts/dejavu-sans-mono14.000000.dds -------------------------------------------------------------------------------- /data/framework/fonts/trebucbd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/fonts/trebucbd.ttf -------------------------------------------------------------------------------- /data/framework/images/next-frame.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/next-frame.jpg -------------------------------------------------------------------------------- /data/framework/images/pass-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/pass-icon.png -------------------------------------------------------------------------------- /data/framework/images/pause.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/pause.jpg -------------------------------------------------------------------------------- /data/framework/images/play.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/play.jpg -------------------------------------------------------------------------------- /data/framework/images/prev-frame.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/prev-frame.jpg -------------------------------------------------------------------------------- /data/framework/images/rewind.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/rewind.jpg -------------------------------------------------------------------------------- /data/framework/images/stop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/images/stop.jpg -------------------------------------------------------------------------------- /data/framework/meshes/cube.obj: -------------------------------------------------------------------------------- 1 | o Cube 2 | v 1.000000 -1.000000 -1.000000 3 | v 1.000000 -1.000000 1.000000 4 | v -1.000000 -1.000000 1.000000 5 | v -1.000000 -1.000000 -1.000000 6 | v 1.000000 1.000000 -1.000000 7 | v 1.000000 1.000000 1.000000 8 | v -1.000000 1.000000 1.000000 9 | v -1.000000 1.000000 -1.000000 10 | s off 11 | f 1//1 2//1 3//1 4//1 12 | f 5//2 8//2 7//2 6//2 13 | f 1//3 5//3 6//3 2//3 14 | f 2//4 6//4 7//4 3//4 15 | f 3//5 7//5 8//5 4//5 16 | f 5//6 1//6 4//6 8//6 17 | -------------------------------------------------------------------------------- /data/framework/meshes/sphere.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/meshes/sphere.fbx -------------------------------------------------------------------------------- /data/framework/nvidia.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/framework/nvidia.ico -------------------------------------------------------------------------------- /data/tests/BC1Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC1Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC1Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC1Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC1UnormSrgb-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC1UnormSrgb-ref.png -------------------------------------------------------------------------------- /data/tests/BC1UnormSrgb.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC1UnormSrgb.dds -------------------------------------------------------------------------------- /data/tests/BC2Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC2Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC2UnormSrgb-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2UnormSrgb-ref.png -------------------------------------------------------------------------------- /data/tests/BC2UnormSrgb.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2UnormSrgb.dds -------------------------------------------------------------------------------- /data/tests/BC2UnormSrgbTiny-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2UnormSrgbTiny-ref.png -------------------------------------------------------------------------------- /data/tests/BC2UnormSrgbTiny.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC2UnormSrgbTiny.dds -------------------------------------------------------------------------------- /data/tests/BC3Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC3Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC3UnormAlpha-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormAlpha-ref.png -------------------------------------------------------------------------------- /data/tests/BC3UnormAlpha.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormAlpha.dds -------------------------------------------------------------------------------- /data/tests/BC3UnormAlphaTiny-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormAlphaTiny-ref.png -------------------------------------------------------------------------------- /data/tests/BC3UnormAlphaTiny.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormAlphaTiny.dds -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgb-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgb-ref.png -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgb.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgb.dds -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgbOdd-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgbOdd-ref.png -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgbOdd.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgbOdd.dds -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgbTiny-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgbTiny-ref.png -------------------------------------------------------------------------------- /data/tests/BC3UnormSrgbTiny.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC3UnormSrgbTiny.dds -------------------------------------------------------------------------------- /data/tests/BC4Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC4Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC4Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC4Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC5Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC5Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC5Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC5Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC5UnormTiny-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC5UnormTiny-ref.png -------------------------------------------------------------------------------- /data/tests/BC5UnormTiny.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC5UnormTiny.dds -------------------------------------------------------------------------------- /data/tests/BC6HU16-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC6HU16-ref.png -------------------------------------------------------------------------------- /data/tests/BC6HU16.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC6HU16.dds -------------------------------------------------------------------------------- /data/tests/BC7Unorm-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7Unorm-ref.png -------------------------------------------------------------------------------- /data/tests/BC7Unorm.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7Unorm.dds -------------------------------------------------------------------------------- /data/tests/BC7UnormBroken.dds: -------------------------------------------------------------------------------- 1 | DDS | 2 | -------------------------------------------------------------------------------- /data/tests/BC7UnormOdd-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormOdd-ref.png -------------------------------------------------------------------------------- /data/tests/BC7UnormOdd.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormOdd.dds -------------------------------------------------------------------------------- /data/tests/BC7UnormSrgb-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormSrgb-ref.png -------------------------------------------------------------------------------- /data/tests/BC7UnormSrgb.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormSrgb.dds -------------------------------------------------------------------------------- /data/tests/BC7UnormTiny-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormTiny-ref.png -------------------------------------------------------------------------------- /data/tests/BC7UnormTiny.dds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/BC7UnormTiny.dds -------------------------------------------------------------------------------- /data/tests/pbrt_hair_bsdf.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/pbrt_hair_bsdf.dat -------------------------------------------------------------------------------- /data/tests/texture1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture1.png -------------------------------------------------------------------------------- /data/tests/texture2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture2.png -------------------------------------------------------------------------------- /data/tests/texture3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture3.png -------------------------------------------------------------------------------- /data/tests/texture4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture4.png -------------------------------------------------------------------------------- /data/tests/texture5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture5.png -------------------------------------------------------------------------------- /data/tests/texture6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture6.png -------------------------------------------------------------------------------- /data/tests/texture7.exr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture7.exr -------------------------------------------------------------------------------- /data/tests/texture8.exr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/data/tests/texture8.exr -------------------------------------------------------------------------------- /docs/development/index.md: -------------------------------------------------------------------------------- 1 | ### [Index](../index.md) | Development 2 | 3 | -------- 4 | 5 | # Development 6 | 7 | - [Coding Conventions](./coding-conventions.md) 8 | - [CMake](./cmake.md) 9 | - [Error Handling](./error-handling.md) 10 | - [Unit Testing](./unit-testing.md) 11 | -------------------------------------------------------------------------------- /docs/images/teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/images/teaser.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | - [README](../README.md) 4 | - [Getting Started](./getting-started.md) 5 | - [Tutorials](./tutorials/index.md) 6 | - [Usage](./usage/index.md) 7 | - [Development](./development/index.md) 8 | - [Known Issues](./known-issues.md) 9 | -------------------------------------------------------------------------------- /docs/known-issues.md: -------------------------------------------------------------------------------- 1 | ### [Index](./index.md) | Known Issues 2 | 3 | -------- 4 | 5 | # Known Issues 6 | 7 | ## USD Support 8 | 9 | Falcor's USD importer implements a subset of the full [USD specification](https://graphics.pixar.com/usd/release/index.html). The following provides an overview of some of the USD features not supported by the Falcor USD importer. 10 | 11 | ### General 12 | - `UsdPhysics` is unsupported. 13 | - `UsdVariantSets` do not function properly. 14 | - Animation of camera parameters (aperture size, etc.) is not supported. 15 | - Only per-vertex skinning data is supported. In particular, constant skinning data is not supported. 16 | - A maximum of 4 bones per vertex are supported. Additional bones will be ignored, and a warning issued. 17 | 18 | ### UsdGeom 19 | 20 | - `UsdGeomCapsule`, `UsdGeomCone`, `UsdGeomCube`, `UsdGeomCylinder`, `UsdGeomHermiteCurves`, `UsdGeomNurbsCurves`, `UsdGeomNurbsPatch`, and `UsdGeomPoints` are unsupported 21 | - Instancing of `UsdGeomBasisCurves` is not supported. 22 | - `DisplayColor` interpolation modes are ignored. 23 | - Pivot transformations are not supported. 24 | 25 | ### UsdLux 26 | - `UsdLuxShapingAPI` and `UsdLuxShadowAPI` are not supported. 27 | - `UsdLuxCylinderLight` and `UsdLuxPortalLight` are not supported. 28 | - Instancing of lights is not supported. 29 | 30 | ### UsdPreviewSurface 31 | 32 | - Only the `metallic` workflow is supported. A warning will be issued when `UsdPreviewSurface` shaders that use the `specular` workflow are encountered. 33 | - The `clearcoat`, `clearcloatRoughness`, `occlusion` and `displacement` inputs of `UsdPreviewSurface` are not supported. 34 | - The `bias`, `scale`, `wrapS`, and `wrapT` inputs of `UsdUVTexture` are not supported. 35 | - `Transform2d` nodes are not supported. 36 | -------------------------------------------------------------------------------- /docs/tutorials/images/example-blit-pass-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/example-blit-pass-graph.png -------------------------------------------------------------------------------- /docs/tutorials/images/example-blit-pass-with-renderer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/example-blit-pass-with-renderer.png -------------------------------------------------------------------------------- /docs/tutorials/images/graph-edits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/graph-edits.png -------------------------------------------------------------------------------- /docs/tutorials/images/mogwai-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/mogwai-ui.png -------------------------------------------------------------------------------- /docs/tutorials/images/render-graph-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/render-graph-editor.png -------------------------------------------------------------------------------- /docs/tutorials/images/wireframe-pass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/tutorials/images/wireframe-pass.png -------------------------------------------------------------------------------- /docs/tutorials/index.md: -------------------------------------------------------------------------------- 1 | ### [Index](../index.md) | Tutorials 2 | 3 | -------- 4 | 5 | # Tutorials 6 | 7 | 1. [Mogwai Usage](./01-mogwai-usage.md) 8 | 2. [Implementing Render Passes](./02-implementing-a-render-pass.md) 9 | 3. [Creating and Editing Render Graphs](./03-creating-and-editing-render-graphs.md) 10 | 4. [Writing Shaders](./04-writing-shaders.md) 11 | -------------------------------------------------------------------------------- /docs/usage/environment-variables.md: -------------------------------------------------------------------------------- 1 | ### [Index](../index.md) | [Usage](./index.md) | Environment Variables 2 | 3 | -------- 4 | 5 | # Environment Variables 6 | 7 | The following environment variables are used in Falcor: 8 | 9 | | Variable Name | Description | 10 | |-----|-----| 11 | | `FALCOR_DEVMODE` | Set to `1` to enable development mode. In development mode, shader and data files are picked up from the `Source` folder instead of the binary output directory allowing for shader hot reloading (`F5`). Note that this environment variable is set by default when launching any of the Falcor projects from Visual Studio. | 12 | | `FALCOR_MEDIA_FOLDERS` | Specifies a semi-colon (`;`) separated list of absolute path names containing Falcor scenes. Falcor will search in these paths when loading a scene from a relative path name. | 13 | | `FALCOR_GPU_VENDOR_ID` | Specify which GPU vendor to use for rendering. This is useful when having multiple GPUs in a system (e.g. laptop with both integrated and discrete GPUs). Falcor tries to select an NVIDIA GPU by default. | 14 | | `FALCOR_GPU_DEVICE_ID` | Of the GPUs matching the vendor ID specified by `FALCOR_GPU_VENDOR_ID` (or NVIDIA GPUs if unspecified), selects which GPU index to choose. This is useful when having multiple GPUs that can be used in parallel by multiple Falcor instances. By default, the first GPU (ID 0) is used. | 15 | -------------------------------------------------------------------------------- /docs/usage/images/example-scene.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/usage/images/example-scene.png -------------------------------------------------------------------------------- /docs/usage/images/path-tracer-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/docs/usage/images/path-tracer-overview.png -------------------------------------------------------------------------------- /docs/usage/index.md: -------------------------------------------------------------------------------- 1 | ### [Index](../index.md) | Usage 2 | 3 | -------- 4 | 5 | # Usage 6 | 7 | - [Environment Variables](./environment-variables.md) 8 | - [Scene Creation](./scene-creation.md) 9 | - [Scenes](./scenes.md) 10 | - [Scene Formats](./scene-formats.md) 11 | - [Materials](./materials.md) 12 | - [Scripting](./scripting.md) 13 | - [Render Passes](./render-passes.md) 14 | - [Path Tracer](./path-tracer.md) 15 | - [Custom Primitives](./custom-primitives.md) 16 | - [SDF Editor](./sdf-editor.md) 17 | -------------------------------------------------------------------------------- /external/include/backward/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2013 Google Inc. All Rights Reserved. 2 | 3 | The MIT License (MIT) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 9 | of the Software, and to permit persons to whom the Software is furnished to do 10 | so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /external/include/hypothesis/LICENSE: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions are met: 3 | * Redistributions of source code must retain the above copyright 4 | notice, this list of conditions and the following disclaimer. 5 | * Redistributions in binary form must reproduce the above copyright 6 | notice, this list of conditions and the following disclaimer in the 7 | documentation and/or other materials provided with the distribution. 8 | * Neither the name of the nor the 9 | names of its contributors may be used to endorse or promote products 10 | derived from this software without specific prior written permission. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 13 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 14 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 15 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 16 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 17 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 18 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 19 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 20 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 21 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | -------------------------------------------------------------------------------- /external/include/hypothesis/README.md: -------------------------------------------------------------------------------- 1 | # hypothesis.h 2 | ## A collection of quantiles and utility functions for running Z, Chi^2, and Student's T hypothesis tests 3 | 4 | A variety of quantile functions are needed to perform statistical hypothesis 5 | tests, but these are missing from the C++ standard library. This compact header 6 | file-only library contains the most important quantiles; it is mostly a wrapper 7 | around a C++ port of the relevant functions from the Cephes math library. 8 | -------------------------------------------------------------------------------- /external/include/illuminants/README.txt: -------------------------------------------------------------------------------- 1 | Standard illuminants data 2 | ========================= 3 | 4 | D65 5 | === 6 | Data was collected from the xls file at the bottom of: https://en.wikipedia.org/wiki/Illuminant_D65 7 | 8 | More to be added here. -------------------------------------------------------------------------------- /external/include/lz4_stream/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Kasper Laudrup 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are 6 | met: 7 | 8 | 1. Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in the 13 | documentation and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /external/include/lz4_stream/README.md: -------------------------------------------------------------------------------- 1 | lz4_stream - A C++ stream using LZ4 (de)compression 2 | =================================================== 3 | 4 | lz4_stream is a simple wrapper that uses C++ streams for compressing and decompressing data using the [LZ4 compression library] 5 | 6 | Usage 7 | ----- 8 | 9 | Look at lz4\_compress.cpp and lz4\_decompress.cpp for example command line programs that can compress and decompress using this stream library. 10 | 11 | Building 12 | -------- 13 | 14 | ``` 15 | mkdir build 16 | cd build 17 | cmake .. 18 | make 19 | ``` 20 | 21 | Requirements 22 | ------------ 23 | 24 | The [LZ4 compression library] is required to use this library. 25 | 26 | Build status 27 | ------------ 28 | 29 | Ubuntu and OSX (GCC/Clang): 30 | 31 | [![Build Status](https://travis-ci.org/laudrup/lz4_stream.png)](https://travis-ci.org/laudrup/lz4_stream) 32 | 33 | Windows (MS C++): 34 | 35 | [![Build status](https://ci.appveyor.com/api/projects/status/xrp8bjf9217broom?svg=true)](https://ci.appveyor.com/project/laudrup/lz4-stream) 36 | 37 | Code coverage (codecov.io): 38 | 39 | [![codecov](https://codecov.io/gh/laudrup/lz4_stream/branch/master/graph/badge.svg)](https://codecov.io/gh/laudrup/lz4_stream) 40 | 41 | License 42 | ------- 43 | 44 | Standard BSD 3-Clause License as used by the LZ4 library. 45 | 46 | [LZ4 compression library]: https://github.com/lz4/lz4 47 | [cmake]: http://cmake.org 48 | [Google Test Framework]: https://github.com/google/googletest 49 | -------------------------------------------------------------------------------- /external/include/nlohmann/LICENSE.MIT: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013-2022 Niels Lohmann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /external/include/pybind11_json/LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2019, 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /external/include/xyzcurves/README.txt: -------------------------------------------------------------------------------- 1 | CIE XYZ color matching curves from the paper: 2 | 3 | Wyman et al., "Simple Analytic Approximations to the CIE XYZ Color Matching Functions", 4 | Journal of Compute Graphics Techniques, vol. 2(2), pp. 1-11, 2013. 5 | 6 | Downloaded from: https://jcgt.org/published/0002/02/01/ -------------------------------------------------------------------------------- /external/mikktspace/README.md: -------------------------------------------------------------------------------- 1 | # MikkTSpace 2 | A common standard for tangent space used in baking tools to produce normal maps. 3 | 4 | More information can be found at http://www.mikktspace.com/. 5 | -------------------------------------------------------------------------------- /runConditionalReSTIRDemo.bat: -------------------------------------------------------------------------------- 1 | build\windows-vs2022\bin\Release\Mogwai.exe --script=scripts\ConditionalReSTIR.py 2 | -------------------------------------------------------------------------------- /scripts/BSDFViewer.py: -------------------------------------------------------------------------------- 1 | def render_graph_BSDFViewer(): 2 | g = RenderGraph("BSDFViewer") 3 | loadRenderPassLibrary("AccumulatePass.dll") 4 | loadRenderPassLibrary("BSDFViewer.dll") 5 | BSDFViewer = createPass("BSDFViewer", {'materialID': 0}) 6 | g.addPass(BSDFViewer, "BSDFViewer") 7 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Double}) 8 | g.addPass(AccumulatePass, "AccumulatePass") 9 | g.addEdge("BSDFViewer.output", "AccumulatePass.input") 10 | g.markOutput("AccumulatePass.output") 11 | return g 12 | 13 | BSDFViewer = render_graph_BSDFViewer() 14 | try: m.addGraph(BSDFViewer) 15 | except NameError: None 16 | -------------------------------------------------------------------------------- /scripts/ConditionalReSTIR.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_PathTracer(): 4 | g = RenderGraph("PathTracer") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("PathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1, 'maxSurfaceBounces': 9, 'maxDiffuseBounces': 9, 'maxSpecularBounces': 9, 'maxTransmissionBounces': 9, 'useRTXDI': True, 'useConditionalReSTIR': True, 'emissiveSampler': EmissiveLightSamplerType.Power, 'useLambertianDiffuse': True}) 10 | g.addPass(PathTracer, "PathTracer") 11 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Center, 'sampleCount': 1, 'useAlphaTest': True}) 12 | g.addPass(VBufferRT, "VBufferRT") 13 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Double}) 14 | g.addPass(AccumulatePass, "AccumulatePass") 15 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 16 | g.addPass(ToneMapper, "ToneMapper") 17 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 18 | g.addEdge("VBufferRT.viewW", "PathTracer.viewW") 19 | g.addEdge("VBufferRT.mvec", "PathTracer.mvec") 20 | g.addEdge("PathTracer.color", "AccumulatePass.input") 21 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 22 | g.markOutput("ToneMapper.dst") 23 | g.markOutput("AccumulatePass.output") 24 | return g 25 | 26 | PathTracer = render_graph_PathTracer() 27 | try: m.addGraph(PathTracer) 28 | except NameError: None 29 | 30 | m.setMogwaiUISceneBuilderFlag(buildFlags = SceneBuilderFlags.UseCompressedHitInfo) 31 | 32 | m.loadScene('VeachAjar/VeachAjar.pyscene') 33 | -------------------------------------------------------------------------------- /scripts/MinimalPathTracer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_MinimalPathTracer(): 4 | g = RenderGraph("MinimalPathTracer") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("MinimalPathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 10 | g.addPass(AccumulatePass, "AccumulatePass") 11 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 12 | g.addPass(ToneMapper, "ToneMapper") 13 | MinimalPathTracer = createPass("MinimalPathTracer", {'maxBounces': 3}) 14 | g.addPass(MinimalPathTracer, "MinimalPathTracer") 15 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}) 16 | g.addPass(VBufferRT, "VBufferRT") 17 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 18 | g.addEdge("VBufferRT.vbuffer", "MinimalPathTracer.vbuffer") 19 | g.addEdge("VBufferRT.viewW", "MinimalPathTracer.viewW") 20 | g.addEdge("MinimalPathTracer.color", "AccumulatePass.input") 21 | g.markOutput("ToneMapper.dst") 22 | return g 23 | 24 | MinimalPathTracer = render_graph_MinimalPathTracer() 25 | try: m.addGraph(MinimalPathTracer) 26 | except NameError: None 27 | -------------------------------------------------------------------------------- /scripts/PathTracer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_PathTracer(): 4 | g = RenderGraph("PathTracer") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("PathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1}) 10 | g.addPass(PathTracer, "PathTracer") 11 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16, 'useAlphaTest': True}) 12 | g.addPass(VBufferRT, "VBufferRT") 13 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 14 | g.addPass(AccumulatePass, "AccumulatePass") 15 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 16 | g.addPass(ToneMapper, "ToneMapper") 17 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 18 | g.addEdge("VBufferRT.viewW", "PathTracer.viewW") 19 | g.addEdge("VBufferRT.mvec", "PathTracer.mvec") 20 | g.addEdge("PathTracer.color", "AccumulatePass.input") 21 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 22 | g.markOutput("ToneMapper.dst") 23 | return g 24 | 25 | PathTracer = render_graph_PathTracer() 26 | try: m.addGraph(PathTracer) 27 | except NameError: None 28 | -------------------------------------------------------------------------------- /scripts/RTXDI.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_RTXDI(): 4 | g = RenderGraph("RTXDI") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("RTXDIPass.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | VBufferRT = createPass("VBufferRT") 10 | g.addPass(VBufferRT, "VBufferRT") 11 | RTXDIPass = createPass("RTXDIPass") 12 | g.addPass(RTXDIPass, "RTXDIPass") 13 | AccumulatePass = createPass("AccumulatePass", {'enabled': False, 'precisionMode': AccumulatePrecision.Single}) 14 | g.addPass(AccumulatePass, "AccumulatePass") 15 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 16 | g.addPass(ToneMapper, "ToneMapper") 17 | g.addEdge("VBufferRT.vbuffer", "RTXDIPass.vbuffer") 18 | g.addEdge("VBufferRT.mvec", "RTXDIPass.mvec") 19 | g.addEdge("RTXDIPass.color", "AccumulatePass.input") 20 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 21 | g.markOutput("ToneMapper.dst") 22 | return g 23 | 24 | RTXDI = render_graph_RTXDI() 25 | try: m.addGraph(RTXDI) 26 | except NameError: None 27 | -------------------------------------------------------------------------------- /scripts/SceneDebugger.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_SceneDebugger(): 4 | g = RenderGraph('SceneDebugger') 5 | loadRenderPassLibrary('SceneDebugger.dll') 6 | SceneDebugger = createPass('SceneDebugger') 7 | g.addPass(SceneDebugger, 'SceneDebugger') 8 | g.markOutput('SceneDebugger.output') 9 | return g 10 | 11 | SceneDebugger = render_graph_SceneDebugger() 12 | try: m.addGraph(SceneDebugger) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /scripts/sdf-editor/SDFEditorStartScene.pyscene: -------------------------------------------------------------------------------- 1 | # Create materials 2 | 3 | lightMaterial = Material('Light') 4 | lightMaterial.emissiveColor = float3(17, 12, 4) 5 | lightMaterial.emissiveFactor = 2 6 | 7 | floorMaterial = Material('Floor') 8 | floorMaterial.baseColor = float4(0.2, 0.2, 0.2, 1) 9 | floorMaterial.roughness = 0.2 10 | floorMaterial.metallic = 0.98 11 | 12 | sdfGridMaterial = Material('SDF Grid') 13 | sdfGridMaterial.baseColor = float4(1.0, 0.5, 0.5, 1.0) 14 | sdfGridMaterial.specularParams = float4(0.001) 15 | 16 | # Create geometry 17 | 18 | quadMesh = TriangleMesh.createQuad() 19 | 20 | sdfGrid = SDFGrid.createSBS() 21 | sdfGrid.loadPrimitivesFromFile(path="single_sphere.sdf", gridWidth=512) 22 | 23 | # Create mesh instances 24 | 25 | sceneBuilder.addMeshInstance( 26 | sceneBuilder.addNode('Floor', Transform(scaling=float3(10.0, 1.0, 10.0))), 27 | sceneBuilder.addTriangleMesh(quadMesh, floorMaterial) 28 | ) 29 | 30 | sceneBuilder.addMeshInstance( 31 | sceneBuilder.addNode('Light', Transform(scaling=4.0, translation=float3(0, 4.0, 0), rotationEulerDeg=float3(180, 0, 0))), 32 | sceneBuilder.addTriangleMesh(quadMesh, lightMaterial) 33 | ) 34 | 35 | sceneBuilder.addSDFGridInstance( 36 | sceneBuilder.addNode('SDFGrid', Transform(translation=float3(0.0, 0.6, 0))), 37 | sceneBuilder.addSDFGrid(sdfGrid, sdfGridMaterial) 38 | ) 39 | 40 | # Create camera 41 | 42 | camera = Camera() 43 | camera.position = float3(0.0, 0.6, -1.0) 44 | camera.target = float3(0.0, 0.6, 1.0) 45 | camera.up = float3(0, 1, 0) 46 | camera.focalLength = 35.0 47 | sceneBuilder.addCamera(camera) 48 | -------------------------------------------------------------------------------- /scripts/sdf-editor/single_sphere.sdf: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "shape_type": 0, 4 | "shape_data": [ 5 | 0.1, 6 | 0.0, 7 | 0.0 8 | ], 9 | "shape_blobbing": 0.0, 10 | "operation_type": 0, 11 | "operation_smoothing": 0.0, 12 | "translation": [ 13 | 0.0, 14 | 0.0, 15 | 0.0 16 | ], 17 | "inv_rot_scale": [ 18 | 1.0, 19 | 0.0, 20 | 0.0, 21 | 0.0, 22 | 1.0, 23 | 0.0, 24 | 0.0, 25 | 0.0, 26 | 1.0 27 | ] 28 | } 29 | ] -------------------------------------------------------------------------------- /setup.bat: -------------------------------------------------------------------------------- 1 | : This script is fetching all dependencies via packman. 2 | 3 | @echo off 4 | setlocal 5 | 6 | set PACKMAN=%~dp0\tools\packman\packman.cmd 7 | set PLATFORM=windows-x86_64 8 | 9 | echo Updating git submodules ... 10 | 11 | where /q git 12 | if errorlevel 1 ( 13 | echo Cannot find git on PATH! Please initialize submodules manually and rerun. 14 | exit /b 1 15 | ) ELSE ( 16 | git submodule sync --recursive 17 | git submodule update --init --recursive 18 | ) 19 | 20 | echo Fetching dependencies ... 21 | 22 | call %PACKMAN% pull --platform %PLATFORM% %~dp0\dependencies.xml 23 | if errorlevel 1 goto error 24 | 25 | if not exist %~dp0\.vscode\ ( 26 | echo Setting up VS Code workspace ... 27 | xcopy %~dp0\.vscode-default\ %~dp0\.vscode\ /y 28 | ) 29 | 30 | exit /b 0 31 | 32 | :error 33 | echo Failed to fetch dependencies! 34 | exit /b 1 35 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This script is fetching all dependencies via packman. 4 | 5 | if [ "$OSTYPE" = "msys" ]; then 6 | echo "Do not use "$0" on Windows, use setup.bat instead." 7 | exit 1 8 | fi 9 | 10 | BASE_DIR=$(dirname "$0") 11 | PACKMAN=${BASE_DIR}/tools/packman/packman 12 | PLATFORM=linux-x86_64 13 | 14 | echo "Updating git submodules ..." 15 | 16 | if ! [ -x "$(command -v git)" ]; then 17 | echo "Cannot find git on PATH! Please initialize submodules manually and rerun." 18 | exit 1 19 | else 20 | git submodule sync --recursive 21 | git submodule update --init --recursive 22 | fi 23 | 24 | echo "Fetching dependencies ..." 25 | 26 | ${PACKMAN} pull --platform ${PLATFORM} ${BASE_DIR}/dependencies.xml 27 | if [ $? -ne 0 ]; then 28 | echo "Failed to fetch dependencies!" 29 | exit 1 30 | fi 31 | 32 | if [ ! -d ${BASE_DIR}/.vscode ]; then 33 | echo "Setting up VS Code workspace ..." 34 | cp -rp ${BASE_DIR}/.vscode-default ${BASE_DIR}/.vscode 35 | fi 36 | 37 | # HACK: Copy libnvtt.so.30106 to libnvtt.so so we can use it in our build. 38 | # This changes the actual packman package, but for now, this is the easiest solution. 39 | echo "Patching NVTT package ..." 40 | cp -fp ${BASE_DIR}/external/packman/nvtt/libnvtt.so.30106 ${BASE_DIR}/external/packman/nvtt/libnvtt.so 41 | 42 | # HACK: Copy libtbb.so from release to debug so we can have a proper import target. 43 | echo "Patching falcor_deps package ..." 44 | cp -fp ${BASE_DIR}/external/packman/deps/lib/libtbb.so* ${BASE_DIR}/external/packman/deps/debug/lib 45 | 46 | exit 0 47 | -------------------------------------------------------------------------------- /setup_vs2022.bat: -------------------------------------------------------------------------------- 1 | : This script sets up a Visual Studio 2022 solution. 2 | : It takes an optional "d3d12" argument to configure the deprecated native D3D12 backend. 3 | 4 | @echo off 5 | setlocal 6 | 7 | set PRESET_SUFFIX="" 8 | 9 | if "%~1"=="d3d12" ( 10 | set PRESET_SUFFIX="-d3d12" 11 | ) 12 | 13 | : Fetch dependencies. 14 | call %~dp0\setup.bat 15 | 16 | : Configuration. 17 | set PRESET=windows-vs2022%PRESET_SUFFIX% 18 | set TOOLSET=host=x86 19 | set CMAKE_EXE=%~dp0\tools\.packman\cmake\bin\cmake.exe 20 | set CUSTOM_CUDA_DIR=%~dp0\external\packman\cuda 21 | 22 | : Check if custom CUDA directory contains a valid CUDA SDK. 23 | : Adjust toolset string to use the custom CUDA toolkit. 24 | if exist %CUSTOM_CUDA_DIR%\bin\nvcc.exe ( 25 | set TOOLSET=%TOOLSET%,cuda="%CUSTOM_CUDA_DIR%" 26 | ) 27 | 28 | : Configure solution by running cmake. 29 | echo Configuring Visual Studio solution ... 30 | %CMAKE_EXE% --preset %PRESET% -T %TOOLSET% 31 | if errorlevel 1 ( 32 | echo Failed to configure solution! 33 | exit /b 1 34 | ) 35 | 36 | : Success. 37 | exit /b 0 38 | -------------------------------------------------------------------------------- /teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/teaser.png -------------------------------------------------------------------------------- /tests/build_falcor.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%testing/build_falcor.py %* 10 | -------------------------------------------------------------------------------- /tests/environment/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Default Environment", 3 | "image_tests": { 4 | "result_dir": "${project_dir}/tests/data/results/${branch}/${build_config}", 5 | "ref_dir": "${project_dir}/tests/data/refs/${branch}/${build_config}" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/image_tests/helpers.py: -------------------------------------------------------------------------------- 1 | def render_frames(m, name, frames=[1], framerate=60, resolution=[1280,720]): 2 | m.resizeSwapChain(*resolution) 3 | m.ui = False 4 | m.clock.framerate = framerate 5 | m.clock.time = 0 6 | m.clock.pause() 7 | m.frameCapture.baseFilename = name 8 | 9 | frame = 0 10 | for capture_frame in frames: 11 | while frame < capture_frame: 12 | frame += 1 13 | m.clock.frame = frame 14 | m.renderFrame() 15 | m.frameCapture.capture() 16 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/BSDFViewer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_BSDFViewer(): 4 | g = RenderGraph("BSDFViewerGraph") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("BSDFViewer.dll") 7 | BSDFViewer = createPass("BSDFViewer") 8 | g.addPass(BSDFViewer, "BSDFViewer") 9 | AccumulatePass = createPass("AccumulatePass") 10 | g.addPass(AccumulatePass, "AccumulatePass") 11 | g.addEdge("BSDFViewer.output", "AccumulatePass.input") 12 | g.markOutput("AccumulatePass.output") 13 | return g 14 | 15 | BSDFViewer = render_graph_BSDFViewer() 16 | try: m.addGraph(BSDFViewer) 17 | except NameError: None 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/ColorMapPass.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def test_ColorMapPass(): 4 | loadRenderPassLibrary("DebugPasses.dll") 5 | imageLoader = createPass("ImageLoader", {'filename' : "LightProbes/hallstatt4_hd.hdr", 'mips': False, 'srgb': False, 'outputFormat': ResourceFormat.RGBA32Float}) 6 | colorMap = createPass("ColorMapPass") 7 | 8 | graph = RenderGraph("Color Map") 9 | graph.addPass(imageLoader, "ImageLoader") 10 | graph.addPass(colorMap, "ColorMap") 11 | 12 | graph.addEdge("ImageLoader.dst", "ColorMap.input") 13 | graph.markOutput("ColorMap.output") 14 | 15 | return graph 16 | 17 | ColorMapPass = test_ColorMapPass() 18 | try: m.addGraph(ColorMapPass) 19 | except NameError: None 20 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/CompositePass.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_CompositePass(): 4 | loadRenderPassLibrary("Utils.dll") 5 | g = RenderGraph("Composite Pass") 6 | Composite = createPass("Composite") 7 | g.addPass(Composite, "Composite") 8 | ImageLoaderA = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': True, 'arrayIndex': 0, 'mipLevel': 0}) 9 | g.addPass(ImageLoaderA, "ImageLoaderA") 10 | ImageLoaderB = createPass("ImageLoader", {'filename': 'smoke-puff.png', 'mips': False, 'srgb': True, 'arrayIndex': 0, 'mipLevel': 0}) 11 | g.addPass(ImageLoaderB, "ImageLoaderB") 12 | g.addEdge("ImageLoaderA.dst", "Composite.A") 13 | g.addEdge("ImageLoaderB.dst", "Composite.B") 14 | g.markOutput("Composite.out") 15 | return g 16 | 17 | CompositePass = render_graph_CompositePass() 18 | try: m.addGraph(CompositePass) 19 | except NameError: None 20 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/DLSS.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_DLSS(): 4 | g = RenderGraph("DLSS") 5 | loadRenderPassLibrary("DLSSPass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | GBufferRaster = createPass("GBufferRaster", {'samplePattern': SamplePattern.Halton}) 8 | g.addPass(GBufferRaster, "GBufferRaster") 9 | DLSSPass = createPass("DLSSPass", {'motionVectorScale': DLSSMotionVectorScale.Relative}) 10 | g.addPass(DLSSPass, "DLSSPass") 11 | g.addEdge("GBufferRaster.mvec", "DLSSPass.mvec") 12 | g.addEdge("GBufferRaster.depth", "DLSSPass.depth") 13 | g.addEdge("GBufferRaster.diffuseOpacity", "DLSSPass.color") 14 | g.markOutput("GBufferRaster.mvec") 15 | g.markOutput("GBufferRaster.depth") 16 | g.markOutput("GBufferRaster.diffuseOpacity") 17 | g.markOutput("DLSSPass.output") 18 | return g 19 | 20 | DLSS = render_graph_DLSS() 21 | try: m.addGraph(DLSS) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/FLIPPass.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def test_FLIPPass(): 4 | loadRenderPassLibrary("FLIPPass.dll") 5 | loadRenderPassLibrary("ImageLoader.dll") 6 | imageLoaderA = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': False}) 7 | imageLoaderB = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': True}) 8 | flip = createPass("FLIPPass") 9 | 10 | graph = RenderGraph("FLIP") 11 | graph.addPass(imageLoaderA, "ImageLoaderA") 12 | graph.addPass(imageLoaderB, "ImageLoaderB") 13 | graph.addPass(flip, "FLIP") 14 | graph.addEdge("ImageLoaderA.dst", "FLIP.referenceImage") 15 | graph.addEdge("ImageLoaderB.dst", "FLIP.testImage") 16 | graph.markOutput("FLIP.errorMapDisplay") 17 | 18 | return graph 19 | 20 | FLIPPass = test_FLIPPass() 21 | try: m.addGraph(FLIPPass) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GBufferRT.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("GBufferRT") 7 | g.addPass(createPass("GBufferRT"), "GBufferRT") 8 | 9 | g.markOutput("GBufferRT.posW") 10 | g.markOutput("GBufferRT.posW", TextureChannelFlags.Alpha) 11 | g.markOutput("GBufferRT.normW") 12 | g.markOutput("GBufferRT.tangentW") 13 | g.markOutput("GBufferRT.tangentW", TextureChannelFlags.Alpha) 14 | g.markOutput("GBufferRT.faceNormalW") 15 | g.markOutput("GBufferRT.texC") 16 | g.markOutput("GBufferRT.texGrads") 17 | g.markOutput("GBufferRT.texGrads", TextureChannelFlags.Alpha) 18 | g.markOutput("GBufferRT.mvec") 19 | g.markOutput("GBufferRT.mtlData") 20 | 21 | g.markOutput("GBufferRT.vbuffer") 22 | g.markOutput("GBufferRT.vbuffer", TextureChannelFlags.Alpha) 23 | g.markOutput("GBufferRT.depth") 24 | g.markOutput("GBufferRT.linearZ") 25 | g.markOutput("GBufferRT.mvecW") 26 | g.markOutput("GBufferRT.normWRoughnessMaterialID") 27 | g.markOutput("GBufferRT.normWRoughnessMaterialID", TextureChannelFlags.Alpha) 28 | g.markOutput("GBufferRT.diffuseOpacity") 29 | g.markOutput("GBufferRT.diffuseOpacity", TextureChannelFlags.Alpha) 30 | g.markOutput("GBufferRT.specRough") 31 | g.markOutput("GBufferRT.specRough", TextureChannelFlags.Alpha) 32 | g.markOutput("GBufferRT.emissive") 33 | g.markOutput("GBufferRT.viewW") 34 | g.markOutput("GBufferRT.disocclusion") 35 | 36 | return g 37 | 38 | GBufferRT = render_graph_GBufferRT() 39 | try: m.addGraph(GBufferRT) 40 | except NameError: None 41 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GBufferRTInline.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("GBufferRT") 7 | g.addPass(createPass("GBufferRT", {"useTraceRayInline": True}), "GBufferRT") 8 | 9 | g.markOutput("GBufferRT.posW") 10 | g.markOutput("GBufferRT.posW", TextureChannelFlags.Alpha) 11 | g.markOutput("GBufferRT.normW") 12 | g.markOutput("GBufferRT.tangentW") 13 | g.markOutput("GBufferRT.tangentW", TextureChannelFlags.Alpha) 14 | g.markOutput("GBufferRT.faceNormalW") 15 | g.markOutput("GBufferRT.texC") 16 | g.markOutput("GBufferRT.texGrads") 17 | g.markOutput("GBufferRT.texGrads", TextureChannelFlags.Alpha) 18 | g.markOutput("GBufferRT.mvec") 19 | g.markOutput("GBufferRT.mtlData") 20 | 21 | g.markOutput("GBufferRT.depth") 22 | g.markOutput("GBufferRT.vbuffer") 23 | g.markOutput("GBufferRT.vbuffer", TextureChannelFlags.Alpha) 24 | g.markOutput("GBufferRT.linearZ") 25 | g.markOutput("GBufferRT.mvecW") 26 | g.markOutput("GBufferRT.normWRoughnessMaterialID") 27 | g.markOutput("GBufferRT.normWRoughnessMaterialID", TextureChannelFlags.Alpha) 28 | g.markOutput("GBufferRT.diffuseOpacity") 29 | g.markOutput("GBufferRT.diffuseOpacity", TextureChannelFlags.Alpha) 30 | g.markOutput("GBufferRT.specRough") 31 | g.markOutput("GBufferRT.specRough", TextureChannelFlags.Alpha) 32 | g.markOutput("GBufferRT.emissive") 33 | g.markOutput("GBufferRT.viewW") 34 | g.markOutput("GBufferRT.disocclusion") 35 | 36 | return g 37 | 38 | GBufferRT = render_graph_GBufferRT() 39 | try: m.addGraph(GBufferRT) 40 | except NameError: None 41 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GBufferRTTexGrads.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("GBufferRT") 7 | g.addPass(createPass("GBufferRT"), "GBufferRT") 8 | 9 | g.markOutput("GBufferRT.texGrads") 10 | g.markOutput("GBufferRT.texGrads", TextureChannelFlags.Alpha) 11 | 12 | return g 13 | 14 | GBufferRT = render_graph_GBufferRT() 15 | try: m.addGraph(GBufferRT) 16 | except NameError: None 17 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GBufferRaster.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRaster(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("GBufferRaster") 7 | g.addPass(createPass("GBufferRaster"), "GBufferRaster") 8 | 9 | g.markOutput("GBufferRaster.posW") 10 | g.markOutput("GBufferRaster.posW", TextureChannelFlags.Alpha) 11 | g.markOutput("GBufferRaster.normW") 12 | g.markOutput("GBufferRaster.tangentW") 13 | g.markOutput("GBufferRaster.tangentW", TextureChannelFlags.Alpha) 14 | g.markOutput("GBufferRaster.faceNormalW") 15 | g.markOutput("GBufferRaster.texC") 16 | g.markOutput("GBufferRaster.texGrads") 17 | g.markOutput("GBufferRaster.texGrads", TextureChannelFlags.Alpha) 18 | g.markOutput("GBufferRaster.mvec") 19 | g.markOutput("GBufferRaster.mtlData") 20 | 21 | g.markOutput("GBufferRaster.vbuffer") 22 | g.markOutput("GBufferRaster.vbuffer", TextureChannelFlags.Alpha) 23 | g.markOutput("GBufferRaster.depth") 24 | g.markOutput("GBufferRaster.diffuseOpacity") 25 | g.markOutput("GBufferRaster.diffuseOpacity", TextureChannelFlags.Alpha) 26 | g.markOutput("GBufferRaster.specRough") 27 | g.markOutput("GBufferRaster.specRough", TextureChannelFlags.Alpha) 28 | g.markOutput("GBufferRaster.emissive") 29 | g.markOutput("GBufferRaster.viewW") 30 | g.markOutput("GBufferRaster.pnFwidth") 31 | g.markOutput("GBufferRaster.linearZ") 32 | 33 | return g 34 | 35 | GBufferRaster = render_graph_GBufferRaster() 36 | try: m.addGraph(GBufferRaster) 37 | except NameError: None 38 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GBufferRasterAlpha.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRaster(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("GBufferRaster") 7 | g.addPass(createPass("GBufferRaster"), "GBufferRaster") 8 | 9 | g.markOutput("GBufferRaster.posW") 10 | g.markOutput("GBufferRaster.posW", TextureChannelFlags.Alpha) 11 | 12 | return g 13 | 14 | GBufferRaster = render_graph_GBufferRaster() 15 | try: m.addGraph(GBufferRaster) 16 | except NameError: None 17 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/GaussianBlur.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GaussianBlur(): 4 | loadRenderPassLibrary("DebugPasses.dll") 5 | loadRenderPassLibrary("Utils.dll") 6 | testGaussianBlur = RenderGraph("Gaussian Blur") 7 | imageLoader = createPass("ImageLoader", {'filename' : "LightProbes/hallstatt4_hd.hdr", 'mips': False, 'srgb': False, 'outputFormat': ResourceFormat.RGBA32Float}) 8 | testGaussianBlur.addPass(imageLoader, "ImageLoader") 9 | GaussianBlurPass = createPass("GaussianBlur") 10 | testGaussianBlur.addPass(GaussianBlurPass, "GaussianBlur") 11 | testGaussianBlur.addEdge("ImageLoader.dst", "GaussianBlur.src") 12 | testGaussianBlur.markOutput("GaussianBlur.dst") 13 | return testGaussianBlur 14 | 15 | GaussianBlur = render_graph_GaussianBlur() 16 | try: m.addGraph(GaussianBlur) 17 | except NameError: None 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/HalfRes.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_HalfRes(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | loadRenderPassLibrary('ToneMapper.dll') 6 | loadRenderPassLibrary("SimplePostFX.dll") 7 | loadRenderPassLibrary("AccumulatePass.dll") 8 | 9 | g = RenderGraph('HalfRes') 10 | 11 | GBuffer = createPass("GBufferRaster", {'outputSize': IOSize.Half, 'samplePattern': SamplePattern.Stratified}) 12 | g.addPass(GBuffer, "GBuffer") 13 | AccumulatePass = createPass("AccumulatePass", {'outputSize': IOSize.Half, 'enabled': True}) 14 | g.addPass(AccumulatePass, "AccumulatePass") 15 | ToneMapper = createPass('ToneMapper', {'outputSize': IOSize.Half}) 16 | g.addPass(ToneMapper, 'ToneMapper') 17 | PostFXPass = createPass("SimplePostFX", {'outputSize': IOSize.Half, 'enabled': True, 'bloomAmount': 0.5}) 18 | g.addPass(PostFXPass, "SimplePostFX") 19 | 20 | g.addEdge('GBuffer.normW', 'AccumulatePass.input') 21 | g.addEdge('AccumulatePass.output', 'ToneMapper.src') 22 | g.addEdge('ToneMapper.dst', 'SimplePostFX.src') 23 | 24 | g.markOutput('SimplePostFX.dst') 25 | g.markOutput('GBuffer.normW') 26 | g.markOutput('AccumulatePass.output') 27 | g.markOutput('ToneMapper.dst') 28 | 29 | return g 30 | 31 | HalfRes = render_graph_HalfRes() 32 | try: m.addGraph(HalfRes) 33 | except NameError: None 34 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/MVecRT.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_MVecRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("MVecRT") 7 | g.addPass(createPass("GBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}), "GBufferRT") 8 | 9 | g.markOutput("GBufferRT.mvec") 10 | 11 | return g 12 | 13 | MVecRT = render_graph_MVecRT() 14 | try: m.addGraph(MVecRT) 15 | except NameError: None 16 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/MVecRaster.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_MVecRaster(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("MVecRaster") 7 | g.addPass(createPass("GBufferRaster", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}), "GBufferRaster") 8 | 9 | g.markOutput("GBufferRaster.mvec") 10 | 11 | return g 12 | 13 | MVecRaster = render_graph_MVecRaster() 14 | try: m.addGraph(MVecRaster) 15 | except NameError: None 16 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/MinimalPathTracer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_MinimalPathTracer(): 4 | g = RenderGraph("MinimalPathTracer") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("MinimalPathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | MinimalPathTracer = createPass("MinimalPathTracer") 10 | g.addPass(MinimalPathTracer, "MinimalPathTracer") 11 | VBufferRT = createPass("VBufferRT") 12 | g.addPass(VBufferRT, "VBufferRT") 13 | AccumulatePass = createPass("AccumulatePass") 14 | g.addPass(AccumulatePass, "AccumulatePass") 15 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'operator': ToneMapOp.Linear, 'clamp': False, 'outputFormat': ResourceFormat.RGBA32Float}) 16 | g.addPass(ToneMapper, "ToneMapper") 17 | g.addEdge("VBufferRT.vbuffer", "MinimalPathTracer.vbuffer") 18 | g.addEdge("VBufferRT.viewW", "MinimalPathTracer.viewW") 19 | g.addEdge("MinimalPathTracer.color", "AccumulatePass.input") 20 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 21 | g.markOutput("ToneMapper.dst") 22 | g.markOutput("ToneMapper.dst", TextureChannelFlags.Alpha) 23 | return g 24 | 25 | MinimalPathTracer = render_graph_MinimalPathTracer() 26 | try: m.addGraph(MinimalPathTracer) 27 | except NameError: None 28 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/ModulateIllumination.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_ModulateIllumination(): 4 | loadRenderPassLibrary("ModulateIllumination.dll") 5 | g = RenderGraph("ModulateIllumination") 6 | ModulateIllumination = createPass("ModulateIllumination") 7 | g.addPass(ModulateIllumination, "ModulateIllumination") 8 | ImageLoaderA = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': True, 'arrayIndex': 0, 'mipLevel': 0}) 9 | g.addPass(ImageLoaderA, "ImageLoaderA") 10 | ImageLoaderB = createPass("ImageLoader", {'filename': 'smoke-puff.png', 'mips': False, 'srgb': True, 'arrayIndex': 0, 'mipLevel': 0}) 11 | g.addPass(ImageLoaderB, "ImageLoaderB") 12 | ImageLoaderC = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posy.jpg', 'mips': False, 'srgb': True, 'arrayIndex': 0, 'mipLevel': 0}) 13 | g.addPass(ImageLoaderC, "ImageLoaderC") 14 | g.addEdge("ImageLoaderA.dst", "ModulateIllumination.diffuseReflectance") 15 | g.addEdge("ImageLoaderB.dst", "ModulateIllumination.diffuseRadiance") 16 | g.addEdge("ImageLoaderB.dst", "ModulateIllumination.specularRadiance") 17 | g.markOutput("ModulateIllumination.output") 18 | return g 19 | 20 | ModulateIllumination = render_graph_ModulateIllumination() 21 | try: m.addGraph(ModulateIllumination) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/OptixDenoiser.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_OptixDenoiser(): 4 | g = RenderGraph("OptixDenoiser") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("OptixDenoiser.dll") 8 | loadRenderPassLibrary("PathTracer.dll") 9 | loadRenderPassLibrary("ToneMapper.dll") 10 | VBufferRT = createPass("VBufferRT") 11 | g.addPass(VBufferRT, "VBufferRT") 12 | AccumulatePass = createPass("AccumulatePass") 13 | g.addPass(AccumulatePass, "AccumulatePass") 14 | ToneMappingPass = createPass("ToneMapper") 15 | g.addPass(ToneMappingPass, "ToneMappingPass") 16 | PathTracer = createPass("PathTracer") 17 | g.addPass(PathTracer, "PathTracer") 18 | OptixDenoiser = createPass("OptixDenoiser") 19 | g.addPass(OptixDenoiser, "OptixDenoiser") 20 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 21 | g.addEdge("PathTracer.color", "AccumulatePass.input") 22 | g.addEdge("AccumulatePass.output", "ToneMappingPass.src") 23 | g.addEdge("ToneMappingPass.dst", "OptixDenoiser.color") 24 | g.addEdge("PathTracer.albedo", "OptixDenoiser.albedo") 25 | g.addEdge("PathTracer.normal", "OptixDenoiser.normal") 26 | g.addEdge("VBufferRT.mvec", "OptixDenoiser.mvec") 27 | 28 | # Color outputs 29 | g.markOutput("OptixDenoiser.output") 30 | g.markOutput("PathTracer.color") 31 | 32 | # OptixDenoiser inputs 33 | g.markOutput("ToneMappingPass.dst") 34 | g.markOutput("PathTracer.albedo") 35 | g.markOutput("PathTracer.normal") 36 | g.markOutput("VBufferRT.mvec") 37 | 38 | return g 39 | 40 | OptixDenoiser = render_graph_OptixDenoiser() 41 | try: m.addGraph(OptixDenoiser) 42 | except NameError: None 43 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/PathTracerDielectrics.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_PathTracerDielectrics(): 4 | g = RenderGraph("PathTracerDielectrics") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("PathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | 10 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1, 'maxSurfaceBounces': 20}) 11 | g.addPass(PathTracer, "PathTracer") 12 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}) 13 | g.addPass(VBufferRT, "VBufferRT") 14 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 15 | g.addPass(AccumulatePass, "AccumulatePass") 16 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 17 | g.addPass(ToneMapper, "ToneMapper") 18 | 19 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 20 | g.addEdge("PathTracer.color", "AccumulatePass.input") 21 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 22 | 23 | # Final frame output 24 | g.markOutput("ToneMapper.dst") 25 | g.markOutput("ToneMapper.dst", TextureChannelFlags.Alpha) 26 | 27 | return g 28 | 29 | PathTracerDielectrics = render_graph_PathTracerDielectrics() 30 | try: m.addGraph(PathTracerDielectrics) 31 | except NameError: None 32 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/PathTracerMaterials.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_PathTracerMaterials(): 4 | g = RenderGraph("PathTracerMaterials") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("PathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | 10 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1, 'maxSurfaceBounces': 3}) 11 | g.addPass(PathTracer, "PathTracer") 12 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}) 13 | g.addPass(VBufferRT, "VBufferRT") 14 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 15 | g.addPass(AccumulatePass, "AccumulatePass") 16 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 17 | g.addPass(ToneMapper, "ToneMapper") 18 | 19 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 20 | g.addEdge("PathTracer.color", "AccumulatePass.input") 21 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 22 | 23 | # Final frame output 24 | g.markOutput("ToneMapper.dst") 25 | g.markOutput("ToneMapper.dst", TextureChannelFlags.Alpha) 26 | 27 | return g 28 | 29 | PathTracerMaterials = render_graph_PathTracerMaterials() 30 | try: m.addGraph(PathTracerMaterials) 31 | except NameError: None 32 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/RTXDI.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_RTXDI(): 4 | g = RenderGraph("RTXDI") 5 | loadRenderPassLibrary("GBuffer.dll") 6 | loadRenderPassLibrary("RTXDIPass.dll") 7 | loadRenderPassLibrary("ToneMapper.dll") 8 | ToneMappingPass = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 9 | g.addPass(ToneMappingPass, "ToneMappingPass") 10 | RTXDIPass = createPass("RTXDIPass", {'useVBuffer': False}) 11 | g.addPass(RTXDIPass, "RTXDIPass") 12 | VBuffer = createPass("VBufferRT") 13 | g.addPass(VBuffer, "VBuffer") 14 | g.addEdge("VBuffer.vbuffer", "RTXDIPass.vbuffer") 15 | g.addEdge("VBuffer.mvec", "RTXDIPass.mvec") 16 | g.addEdge("RTXDIPass.color", "ToneMappingPass.src") 17 | g.markOutput("ToneMappingPass.dst") 18 | return g 19 | 20 | RTXDI = render_graph_RTXDI() 21 | try: m.addGraph(RTXDI) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/SDFEditorRenderGraphV2.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_DefaultRenderGraph(): 4 | g = RenderGraph('DefaultRenderGraph') 5 | loadRenderPassLibrary('AccumulatePass.dll') 6 | loadRenderPassLibrary('PathTracer.dll') 7 | loadRenderPassLibrary('GBuffer.dll') 8 | loadRenderPassLibrary('SDFEditor.dll') 9 | loadRenderPassLibrary('ToneMapper.dll') 10 | GBufferRT = createPass('GBufferRT') 11 | g.addPass(GBufferRT, 'GBufferRT') 12 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 13 | g.addPass(AccumulatePass, 'AccumulatePass') 14 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 15 | g.addPass(ToneMapper, 'ToneMapper') 16 | SDFEditor = createPass('SDFEditor') 17 | g.addPass(SDFEditor, 'SDFEditor') 18 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1}) 19 | g.addPass(PathTracer, 'PathTracer') 20 | g.addEdge('GBufferRT.vbuffer', 'PathTracer.vbuffer') 21 | g.addEdge('GBufferRT.viewW', 'PathTracer.viewW') 22 | g.addEdge('GBufferRT.mvecW', 'PathTracer.mvec') 23 | g.addEdge('GBufferRT.vbuffer', 'SDFEditor.vbuffer') 24 | g.addEdge('GBufferRT.linearZ', 'SDFEditor.linearZ') 25 | g.addEdge('PathTracer.color', 'AccumulatePass.input') 26 | g.addEdge('AccumulatePass.output', 'ToneMapper.src') 27 | g.addEdge('ToneMapper.dst', 'SDFEditor.inputColor') 28 | g.markOutput('SDFEditor.output') 29 | return g 30 | 31 | DefaultRenderGraph = render_graph_DefaultRenderGraph() 32 | try: m.addGraph(DefaultRenderGraph) 33 | except NameError: None 34 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/SceneDebugger.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_SceneDebugger(): 4 | g = RenderGraph('SceneDebugger') 5 | loadRenderPassLibrary('SceneDebugger.dll') 6 | SceneDebugger = createPass('SceneDebugger') 7 | g.addPass(SceneDebugger, 'SceneDebugger') 8 | g.markOutput('SceneDebugger.output') 9 | return g 10 | 11 | SceneDebugger = render_graph_SceneDebugger() 12 | try: m.addGraph(SceneDebugger) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/SideBySide.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def test_SideBySide(): 4 | loadRenderPassLibrary("DebugPasses.dll") 5 | imageLoaderA = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': False}) 6 | imageLoaderB = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': True}) 7 | sideComparison = createPass("SideBySidePass") 8 | 9 | graph = RenderGraph("Side by Side") 10 | graph.addPass(imageLoaderA, "ImageLoaderA") 11 | graph.addPass(imageLoaderB, "ImageLoaderB") 12 | graph.addPass(sideComparison, "SideBySidePass") 13 | 14 | graph.addEdge("ImageLoaderA.dst", "SideBySidePass.leftInput") 15 | graph.addEdge("ImageLoaderB.dst", "SideBySidePass.rightInput") 16 | graph.markOutput("SideBySidePass.output") 17 | 18 | return graph 19 | 20 | SideBySide = test_SideBySide() 21 | try: m.addGraph(SideBySide) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/SimplePostFX.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_SimplePostFX(): 4 | loadRenderPassLibrary("ImageLoader.dll") 5 | loadRenderPassLibrary("BlitPass.dll") 6 | loadRenderPassLibrary("SimplePostFX.dll") 7 | testSimplePostFX = RenderGraph("SimplePostFX") 8 | ImageLoader = createPass("ImageLoader", {'filename' : "LightProbes/20060807_wells6_hd.hdr", 'mips': False, 'srgb': False}) 9 | testSimplePostFX.addPass(ImageLoader, "ImageLoader") 10 | PostFXPass = createPass("SimplePostFX", 11 | {'bloomAmount': 0.5, 12 | 'starAmount': 0.3, 13 | 'vignetteAmount': 0.3, 14 | 'chromaticAberrationAmount': 0.5, 15 | 'barrelDistortAmount': 0.1 , 16 | 'saturationCurve': float3(0.5, 0.75, 1.), 17 | 'colorOffset': float3(0.4, 0.4, 0.5), 18 | 'colorScale': float3(0.4,0.3,0.2), 19 | 'colorPower': float3(0.4,0.5,0.6), 20 | 'colorOffsetScalar': 0.1, 21 | 'colorScaleScalar': 1.0, 22 | 'colorPowerScalar': 0.13, 23 | 'enabled': True, 24 | 'wipe': 0.33}) 25 | testSimplePostFX.addPass(PostFXPass, "SimplePostFX") 26 | BlitPass = createPass("BlitPass", {'filter': SamplerFilter.Linear}) 27 | testSimplePostFX.addPass(BlitPass, "BlitPass") 28 | testSimplePostFX.addEdge("ImageLoader.dst", "SimplePostFX.src") 29 | testSimplePostFX.addEdge("SimplePostFX.dst", "BlitPass.src") 30 | testSimplePostFX.markOutput("BlitPass.dst") 31 | return testSimplePostFX 32 | 33 | SimplePostFX = render_graph_SimplePostFX() 34 | try: m.addGraph(SimplePostFX) 35 | except NameError: None 36 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/SplitScreen.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def test_SplitScreen(): 4 | loadRenderPassLibrary("DebugPasses.dll") 5 | imageLoaderA = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': False}) 6 | imageLoaderB = createPass("ImageLoader", {'filename': 'Cubemaps\\Sorsele3\\posz.jpg', 'mips': False, 'srgb': True}) 7 | splitScreen = createPass("SplitScreenPass") 8 | 9 | graph = RenderGraph("Split Screen Graph") 10 | graph.addPass(imageLoaderA, "ImageLoaderA") 11 | graph.addPass(imageLoaderB, "ImageLoaderB") 12 | graph.addPass(splitScreen, "SplitScreenPass") 13 | 14 | graph.addEdge("ImageLoaderA.dst", "SplitScreenPass.leftInput") 15 | graph.addEdge("ImageLoaderB.dst", "SplitScreenPass.rightInput") 16 | graph.markOutput("SplitScreenPass.output") 17 | 18 | return graph 19 | 20 | SplitScreen = test_SplitScreen() 21 | try: m.addGraph(SplitScreen) 22 | except NameError: None 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/TAA.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_TAA(): 4 | loadRenderPassLibrary("TAA.dll") 5 | loadRenderPassLibrary("GBuffer.dll") 6 | testTAA = RenderGraph("TAA") 7 | GBufferRaster = createPass("GBufferRaster", {"samplePattern": SamplePattern.Halton}) 8 | testTAA.addPass(GBufferRaster, "GBufferRaster") 9 | TAAPass = createPass("TAA") 10 | testTAA.addPass(TAAPass, "TAA") 11 | testTAA.addEdge("GBufferRaster.diffuseOpacity", "TAA.colorIn") 12 | testTAA.addEdge("GBufferRaster.mvec", "TAA.motionVecs") 13 | testTAA.markOutput("TAA.colorOut") 14 | return testTAA 15 | 16 | TAA = render_graph_TAA() 17 | try: m.addGraph(TAA) 18 | except NameError: None 19 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/ToneMapping.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_ToneMapping(): 4 | loadRenderPassLibrary("ImageLoader.dll") 5 | loadRenderPassLibrary("ToneMapper.dll") 6 | loadRenderPassLibrary("BlitPass.dll") 7 | testToneMapping = RenderGraph("ToneMapper") 8 | ImageLoader = createPass("ImageLoader", {'filename' : "LightProbes/hallstatt4_hd.hdr", 'mips': False, 'srgb': True}) 9 | testToneMapping.addPass(ImageLoader, "ImageLoader") 10 | ToneMapping = createPass("ToneMapper") 11 | testToneMapping.addPass(ToneMapping, "ToneMapping") 12 | BlitPass = createPass("BlitPass", {'filter': SamplerFilter.Linear}) 13 | testToneMapping.addPass(BlitPass, "BlitPass") 14 | testToneMapping.addEdge("ImageLoader.dst", "ToneMapping.src") 15 | testToneMapping.addEdge("ToneMapping.dst", "BlitPass.src") 16 | testToneMapping.markOutput("BlitPass.dst") 17 | return testToneMapping 18 | 19 | ToneMapping = render_graph_ToneMapping() 20 | try: m.addGraph(ToneMapping) 21 | except NameError: None 22 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/VBufferRT.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_VBufferRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("VBufferRT") 7 | g.addPass(createPass("VBufferRT"), "VBufferRT") 8 | 9 | g.markOutput("VBufferRT.vbuffer") 10 | g.markOutput("VBufferRT.vbuffer", TextureChannelFlags.Alpha) 11 | g.markOutput("VBufferRT.depth") 12 | g.markOutput("VBufferRT.mvec") 13 | g.markOutput("VBufferRT.viewW") 14 | 15 | return g 16 | 17 | VBufferRT = render_graph_VBufferRT() 18 | try: m.addGraph(VBufferRT) 19 | except NameError: None 20 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/VBufferRTInline.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_VBufferRT(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("VBufferRT") 7 | g.addPass(createPass("VBufferRT", {"useTraceRayInline": True}), "VBufferRT") 8 | 9 | g.markOutput("VBufferRT.vbuffer") 10 | g.markOutput("VBufferRT.vbuffer", TextureChannelFlags.Alpha) 11 | g.markOutput("VBufferRT.depth") 12 | g.markOutput("VBufferRT.mvec") 13 | g.markOutput("VBufferRT.viewW") 14 | 15 | return g 16 | 17 | VBufferRT = render_graph_VBufferRT() 18 | try: m.addGraph(VBufferRT) 19 | except NameError: None 20 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/VBufferRaster.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_VBufferRaster(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("VBufferRaster") 7 | g.addPass(createPass("VBufferRaster"), "VBufferRaster") 8 | 9 | g.markOutput("VBufferRaster.vbuffer") 10 | g.markOutput("VBufferRaster.vbuffer", TextureChannelFlags.Alpha) 11 | g.markOutput("VBufferRaster.depth") 12 | g.markOutput("VBufferRaster.mvec") 13 | 14 | return g 15 | 16 | VBufferRaster = render_graph_VBufferRaster() 17 | try: m.addGraph(VBufferRaster) 18 | except NameError: None 19 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/VBufferRasterAlpha.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_VBufferRaster(): 4 | loadRenderPassLibrary("GBuffer.dll") 5 | 6 | g = RenderGraph("VBufferRaster") 7 | g.addPass(createPass("VBufferRaster"), "VBufferRaster") 8 | 9 | g.markOutput("VBufferRaster.vbuffer") 10 | g.markOutput("VBufferRaster.vbuffer", TextureChannelFlags.Alpha) 11 | 12 | return g 13 | 14 | VBufferRaster = render_graph_VBufferRaster() 15 | try: m.addGraph(VBufferRaster) 16 | except NameError: None 17 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/graphs/WhittedRayTracer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_WhittedRayTracer(): 4 | g = RenderGraph("WhittedRayTracer") 5 | loadRenderPassLibrary("GBuffer.dll") 6 | loadRenderPassLibrary("WhittedRayTracer.dll") 7 | loadRenderPassLibrary("ToneMapper.dll") 8 | WhittedRayTracer = createPass("WhittedRayTracer", {'maxBounces': 7, 'texLODMode': TexLODMode.RayCones, 'rayConeMode': RayConeMode.Unified, 'rayConeFilterMode': RayFootprintFilterMode.AnisotropicWhenRefraction, 'useRoughnessToVariance': False}) 9 | g.addPass(WhittedRayTracer, "WhittedRayTracer") 10 | GBufferRT = createPass("GBufferRT", {'samplePattern': SamplePattern.Center, 'sampleCount': 1}) 11 | g.addPass(GBufferRT, "GBufferRT") 12 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureValue': 1.0, 'exposureCompensation': 2.2, 'operator': ToneMapOp.Linear}) 13 | g.addPass(ToneMapper, "ToneMapper") 14 | g.addEdge("WhittedRayTracer.color", "ToneMapper.src") 15 | g.addEdge("GBufferRT.posW", "WhittedRayTracer.posW") 16 | g.addEdge("GBufferRT.normW", "WhittedRayTracer.normalW") 17 | g.addEdge("GBufferRT.tangentW", "WhittedRayTracer.tangentW") 18 | g.addEdge("GBufferRT.faceNormalW", "WhittedRayTracer.faceNormalW") 19 | g.addEdge("GBufferRT.texC", "WhittedRayTracer.texC") 20 | g.addEdge("GBufferRT.texGrads", "WhittedRayTracer.texGrads") 21 | g.addEdge("GBufferRT.mtlData", "WhittedRayTracer.mtlData") 22 | g.addEdge("GBufferRT.vbuffer", "WhittedRayTracer.vbuffer") 23 | g.markOutput("ToneMapper.dst") 24 | return g 25 | 26 | WhittedRayTracer = render_graph_WhittedRayTracer() 27 | try: m.addGraph(WhittedRayTracer) 28 | except NameError: None 29 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_BSDFViewer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.BSDFViewer import BSDFViewer as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_ColorMapPass.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.ColorMapPass import ColorMapPass as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # colorMap 13 | for colorMap in [ColorMap.Grey, ColorMap.Jet, ColorMap.Viridis, ColorMap.Plasma, ColorMap.Magma, ColorMap.Inferno]: 14 | g.updatePass('ColorMap', {'colorMap': colorMap}) 15 | render_frames(m, 'colorMap.' + str(colorMap)) 16 | 17 | # channel 18 | for channel in [0, 1, 2, 3]: 19 | g.updatePass('ColorMap', {'channel': channel}) 20 | render_frames(m, 'colorMap.channel.' + str(channel)) 21 | 22 | # minValue, maxValue 23 | for (minValue, maxValue) in [(0, 1), (1, 0), (0.25, 0.75)]: 24 | g.updatePass('ColorMap', {'colorMap': ColorMap.Jet, 'minValue': minValue, 'maxValue': maxValue}) 25 | render_frames(m, 'minValue.' + str(minValue) + '.maxValue.' + str(maxValue)) 26 | 27 | # autoRange 28 | g.updatePass('ColorMap', {'autoRange': True, 'minValue': 0.4, 'maxValue': 0.6}) 29 | render_frames(m, 'colorMap.autoRange', frames=[1,2]) 30 | 31 | exit() 32 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_CompositePass.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.CompositePass import CompositePass as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # modes 13 | for mode in [CompositeMode.Add, CompositeMode.Multiply]: 14 | g.updatePass('Composite', {'mode': mode}) 15 | render_frames(m, 'mode.' + str(mode)) 16 | 17 | # scaleA, scaleB 18 | for scaleA, scaleB in [(0.5, 1.5), (1.0, 1.0), (1.5, 0.5)]: 19 | g.updatePass('Composite', {'mode': CompositeMode.Add, 'scaleA': scaleA, 'scaleB': scaleB}) 20 | render_frames(m, 'scaleA.' + str(scaleA) + '.scaleB.' + str(scaleB)) 21 | 22 | exit() 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_DLSSPass.py: -------------------------------------------------------------------------------- 1 | IMAGE_TEST = { 2 | 'tolerance': 1e-7 3 | } 4 | 5 | # NOTE: 6 | # DLSS seems to be non-deterministic in some cases even with identical inputs. 7 | # We're setting a larger threshold here to account for that. 8 | 9 | import sys 10 | sys.path.append('..') 11 | from helpers import render_frames 12 | from graphs.DLSS import DLSS as g 13 | from falcor import * 14 | 15 | m.addGraph(g) 16 | m.loadScene('Cerberus/Standard/Cerberus.pyscene') 17 | 18 | # default 19 | render_frames(m, 'default', frames=[64, 128, 192, 256]) 20 | 21 | exit() 22 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_FLIPPass.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.FLIPPass import FLIPPass as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # useMagma 13 | for useMagma in [False, True]: 14 | g.updatePass('FLIP', {'useMagma': useMagma}) 15 | render_frames(m, 'useMagma.' + str(useMagma)) 16 | 17 | # isHDR 18 | for isHDR in [False, True]: 19 | g.updatePass('FLIP', {'isHDR': isHDR}) 20 | render_frames(m, 'isHDR.' + str(isHDR)) 21 | 22 | # toneMapper 23 | for toneMapper in [FLIPToneMapperType.ACES, FLIPToneMapperType.Hable, FLIPToneMapperType.Reinhard]: 24 | g.updatePass('FLIP', {'isHDR': True, 'toneMapper': toneMapper}) 25 | render_frames(m, 'toneMapper.' + str(toneMapper)) 26 | 27 | exit() 28 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GBufferRT.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.GBufferRT import GBufferRT as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | # enable depth-of-field 14 | m.scene.camera.focalDistance = 3.0 15 | m.scene.camera.apertureRadius = 0.1 16 | render_frames(m, 'dof', frames=[1,16,64]) 17 | 18 | # re-load scene with non-indexed vertices 19 | m.loadScene('Arcade/Arcade.pyscene', buildFlags=SceneBuilderFlags.NonIndexedVertices) 20 | render_frames(m, 'non-indexed', frames=[1,16,64]) 21 | 22 | exit() 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GBufferRTInline.py: -------------------------------------------------------------------------------- 1 | IMAGE_TEST = { 2 | 'tolerance': 1e-9 3 | } 4 | 5 | import sys 6 | sys.path.append('..') 7 | from helpers import render_frames 8 | from graphs.GBufferRTInline import GBufferRT as g 9 | from falcor import * 10 | 11 | m.addGraph(g) 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | 14 | # default 15 | render_frames(m, 'default', frames=[1,16,64]) 16 | 17 | # enable depth-of-field 18 | m.scene.camera.focalDistance = 3.0 19 | m.scene.camera.apertureRadius = 0.1 20 | render_frames(m, 'dof', frames=[1,16,64]) 21 | 22 | # re-load scene with non-indexed vertices 23 | m.loadScene('Arcade/Arcade.pyscene', buildFlags=SceneBuilderFlags.NonIndexedVertices) 24 | render_frames(m, 'non-indexed', frames=[1,16,64]) 25 | 26 | exit() 27 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GBufferRTTexGrads.py: -------------------------------------------------------------------------------- 1 | # Test different texture gradient modes in GBufferRT 2 | import sys 3 | sys.path.append('..') 4 | from helpers import render_frames 5 | from graphs.GBufferRTTexGrads import GBufferRT as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene('TestScenes/texLOD/spheres_cube.pyscene') 10 | 11 | texLODModes = [TexLODMode.Mip0, TexLODMode.RayCones, TexLODMode.RayDiffs] 12 | 13 | # texGrads 14 | for mode in texLODModes: 15 | g.updatePass('GBufferRT', {'texLOD': mode, "useTraceRayInline": False}) 16 | render_frames(m, 'texGrads.' + str(mode)) 17 | 18 | # texGrads trace ray inline 19 | for mode in texLODModes: 20 | g.updatePass('GBufferRT', {'texLOD': mode, "useTraceRayInline": True}) 21 | render_frames(m, 'texGrads-inline.' + str(mode)) 22 | 23 | exit() 24 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GBufferRaster.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.GBufferRaster import GBufferRaster as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | # re-load scene with non-indexed vertices 14 | m.loadScene('Arcade/Arcade.pyscene', buildFlags=SceneBuilderFlags.NonIndexedVertices) 15 | 16 | render_frames(m, 'non-indexed', frames=[1,16,64]) 17 | 18 | exit() 19 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GBufferRasterAlpha.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.GBufferRasterAlpha import GBufferRaster as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('TestScenes/AlphaTest/AlphaTest.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1]) 12 | 13 | # force cull back 14 | g.updatePass('GBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullBack}) 15 | render_frames(m, 'cullback', frames=[1]) 16 | 17 | # force cull front 18 | g.updatePass('GBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullFront}) 19 | render_frames(m, 'cullfront', frames=[1]) 20 | 21 | # force cull none 22 | g.updatePass('GBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullNone}) 23 | render_frames(m, 'cullnone', frames=[1]) 24 | 25 | # disable alpha 26 | g.updatePass('GBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullNone, 'useAlphaTest': False}) 27 | render_frames(m, 'alphaoff', frames=[1]) 28 | 29 | exit() 30 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_GaussianBlur.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.GaussianBlur import GaussianBlur as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene("Arcade/Arcade.pyscene") 9 | 10 | # default 11 | render_frames(m, 'default') 12 | 13 | # kernelWidth, sigma 14 | for kernelWidth, sigma in [(5, 1), (9, 1.5), (15, 2)]: 15 | g.updatePass('GaussianBlur', {'kernelWidth': kernelWidth, 'sigma': sigma}) 16 | render_frames(m, 'kernelWidth.' + str(kernelWidth) + '.sigma.' + str(sigma)) 17 | 18 | exit() 19 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_HalfRes.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.HalfRes import HalfRes as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_MVecRT.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.MVecRT import MVecRT as g 5 | from falcor import * 6 | 7 | sceneFile = 'Cerberus/Standard/Cerberus.pyscene' 8 | 9 | m.addGraph(g) 10 | m.loadScene(sceneFile) 11 | 12 | # default 13 | render_frames(m, 'default', frames=[1,16,64]) 14 | 15 | # re-load scene with 32-bit indices 16 | m.loadScene(sceneFile, buildFlags=SceneBuilderFlags.Force32BitIndices) 17 | 18 | render_frames(m, '32bit-indices', frames=[1,16,64]) 19 | 20 | # re-load scene with non-indexed vertices 21 | m.loadScene(sceneFile, buildFlags=SceneBuilderFlags.NonIndexedVertices) 22 | 23 | render_frames(m, 'non-indexed', frames=[1,16,64]) 24 | 25 | exit() 26 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_MVecRaster.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.MVecRaster import MVecRaster as g 5 | from falcor import * 6 | 7 | sceneFile = 'Cerberus/Standard/Cerberus.pyscene' 8 | 9 | m.addGraph(g) 10 | m.loadScene(sceneFile) 11 | 12 | # default 13 | render_frames(m, 'default', frames=[1,16,64]) 14 | 15 | # re-load scene with 32-bit indices 16 | m.loadScene(sceneFile, buildFlags=SceneBuilderFlags.Force32BitIndices) 17 | 18 | render_frames(m, '32bit-indices', frames=[1,16,64]) 19 | 20 | # re-load scene with non-indexed vertices 21 | m.loadScene(sceneFile, buildFlags=SceneBuilderFlags.NonIndexedVertices) 22 | 23 | render_frames(m, 'non-indexed', frames=[1,16,64]) 24 | 25 | exit() 26 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_MinimalPathTracer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.MinimalPathTracer import MinimalPathTracer as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[128]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_ModulateIllumination.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.ModulateIllumination import ModulateIllumination as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | exit() 13 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_OptixDenoiser.py: -------------------------------------------------------------------------------- 1 | IMAGE_TEST = { 2 | 'skipped': 'Skipped due to instability on testing agents.' 3 | } 4 | 5 | import sys 6 | sys.path.append('..') 7 | from helpers import render_frames 8 | from graphs.OptixDenoiser import OptixDenoiser as g 9 | from falcor import * 10 | 11 | m.addGraph(g) 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | 14 | # default 15 | render_frames(m, 'default', frames=[64]) 16 | 17 | exit() 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_PathTracer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.PathTracer import PathTracer as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[128]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_PathTracerAdaptive.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.PathTracerAdaptive import PathTracerAdaptive as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_PathTracerDielectrics.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.PathTracerDielectrics import PathTracerDielectrics as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('TestScenes/NestedDielectrics.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,256]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_PathTracerMaterials.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.PathTracerMaterials import PathTracerMaterials as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # Test variations of the standard material 10 | m.loadScene('TestScenes/MaterialTest.pyscene') 11 | render_frames(m, 'default', frames=[1,256]) 12 | 13 | # Test different material types 14 | m.loadScene('TestScenes/Materials/Materials.pyscene') 15 | render_frames(m, 'types', frames=[1,256]) 16 | 17 | # Test alpha testing 18 | m.loadScene('TestScenes/AlphaTest/AlphaTest.pyscene') 19 | render_frames(m, 'alpha', frames=[1,64]) 20 | 21 | # Test disabling alpha testing on secondary hits 22 | g.updatePass('PathTracer', {'samplesPerPixel': 1, 'maxSurfaceBounces': 3, 'useAlphaTest': False}) 23 | render_frames(m, 'noalpha', frames=[1,64]) 24 | 25 | exit() 26 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_PathTracerReload.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.PathTracer import PathTracer as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | m.loadScene('TestScenes/CornellBox.pyscene') 11 | render_frames(m, 'default', frames=[1]) 12 | 13 | # load other scene 14 | m.loadScene('TestScenes/NestedDielectrics.pyscene') 15 | render_frames(m, 'nested', frames=[1]) 16 | 17 | exit() 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_RTXDI.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.RTXDI import RTXDI as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_SDFEditor.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | sys.path.append('..') 4 | from helpers import render_frames 5 | from graphs.SDFEditorRenderGraphV2 import DefaultRenderGraph as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('../scene/scenes/SDFEditorSceneTwoSDFs.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_SVGF.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SVGF import SVGF as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_SideBySide.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SideBySide import SideBySide as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # imageLeftBound 13 | for v in [250, 500, 750]: 14 | g.updatePass('SideBySidePass', {'imageLeftBound': v}) 15 | render_frames(m, 'imageLeftBound.' + str(v)) 16 | 17 | exit() 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_SimplePostFX.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SimplePostFX import SimplePostFX as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # turn off features one by one 13 | config = g.getPass('SimplePostFX').getDictionary() 14 | config['bloomAmount']= 0. 15 | g.updatePass('SimplePostFX', config) 16 | render_frames(m, 'nobloom') 17 | 18 | config['chromaticAberrationAmount'] = 0.0 19 | g.updatePass('SimplePostFX', config) 20 | render_frames(m, 'nochromatic') 21 | 22 | config['barrelDistortAmount'] = 0.0 23 | g.updatePass('SimplePostFX', config) 24 | render_frames(m, 'nodistort') 25 | 26 | config['enabled'] = False 27 | g.updatePass('SimplePostFX', config) 28 | render_frames(m, 'fullydisabled') 29 | 30 | exit() 31 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_Skinning.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SceneDebugger import SceneDebugger as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Cerberus/Standard/Cerberus.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_SplitScreen.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SplitScreen import SplitScreen as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # splitLocation 13 | for v in [0.5, 0.25, 0.75]: 14 | g.updatePass('SplitScreenPass', {'splitLocation': v}) 15 | render_frames(m, 'splitLocation.' + str(v)) 16 | 17 | exit() 18 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_TAA.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.TAA import TAA as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | # alpha 14 | for v in [0.0, 0.5, 1.0]: 15 | g.updatePass('TAA', {'alpha': v}) 16 | render_frames(m, 'alpha.' + str(v), frames=[1,16,64]) 17 | 18 | # colorBoxSigma 19 | for v in [0.0, 7.5, 15.0]: 20 | g.updatePass('TAA', {'colorBoxSigma': v}) 21 | render_frames(m, 'colorBoxSigma.' + str(v), frames=[1,16,64]) 22 | 23 | exit() 24 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_TextureLOD.py: -------------------------------------------------------------------------------- 1 | # use the WhittedRayTracer pass to test various texture LOD modes 2 | import sys 3 | sys.path.append('..') 4 | from helpers import render_frames 5 | from graphs.WhittedRayTracer import WhittedRayTracer as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene('TestScenes/texLOD/spheres_cube.pyscene') 10 | 11 | # default 12 | render_frames(m, 'default') 13 | 14 | # texLODMode 15 | for mode in [TexLODMode.Mip0, TexLODMode.RayCones, TexLODMode.RayDiffs]: 16 | g.updatePass('WhittedRayTracer', {'maxBounces': 7, 'texLODMode': mode}) 17 | render_frames(m, 'texLODMode.' + str(mode)) 18 | 19 | # rayConeFilterMode 20 | for mode in [RayFootprintFilterMode.Isotropic, RayFootprintFilterMode.Anisotropic, RayFootprintFilterMode.AnisotropicWhenRefraction]: 21 | g.updatePass('WhittedRayTracer', {'maxBounces': 7, 'texLODMode': TexLODMode.RayCones, 'rayConeFilterMode': mode}) 22 | render_frames(m, 'rayConeFilterMode.' + str(mode)) 23 | 24 | exit() 25 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_ToneMapping.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.ToneMapping import ToneMapping as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | 9 | # default 10 | render_frames(m, 'default') 11 | 12 | # operator 13 | for operator in [ToneMapOp.Linear, ToneMapOp.Reinhard, ToneMapOp.ReinhardModified, ToneMapOp.HejiHableAlu, ToneMapOp.HableUc2, ToneMapOp.Aces]: 14 | g.updatePass('ToneMapping', {'operator': operator}) 15 | render_frames(m, 'operator.' + str(operator)) 16 | 17 | # autoExposure 18 | for b in [False, True]: 19 | g.updatePass('ToneMapping', {'autoExposure': b}) 20 | render_frames(m, 'autoExposure.' + str(b)) 21 | 22 | # exposureCompensation 23 | for v in [-2, 0, 2]: 24 | g.updatePass('ToneMapping', {'exposureCompensation': v}) 25 | render_frames(m, 'exposureCompensation.' + str(v)) 26 | 27 | # fNumber 28 | for v in [0.5, 1.0, 2.0]: 29 | g.updatePass('ToneMapping', {'autoExposure': False, 'fNumber': v}) 30 | render_frames(m, 'fNumber.' + str(v)) 31 | 32 | # shutter 33 | for v in [0.5, 1.0, 2.0]: 34 | g.updatePass('ToneMapping', {'autoExposure': False, 'shutter': v}) 35 | render_frames(m, 'shutter.' + str(v)) 36 | 37 | # filmSpeed 38 | for v in [50, 100, 200]: 39 | g.updatePass('ToneMapping', {'autoExposure': False, 'filmSpeed': v}) 40 | render_frames(m, 'filmSpeed.' + str(v)) 41 | 42 | # whitePoint 43 | for v in [4000, 6500, 8000]: 44 | g.updatePass('ToneMapping', {'whiteBalance': True, 'whitePoint': v}) 45 | render_frames(m, 'whitePoint.' + str(v)) 46 | 47 | exit() 48 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_VBufferRT.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.VBufferRT import VBufferRT as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | # enable depth-of-field 14 | m.scene.camera.focalDistance = 3.0 15 | m.scene.camera.apertureRadius = 0.1 16 | render_frames(m, 'dof', frames=[1,16,64]) 17 | 18 | exit() 19 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_VBufferRTInline.py: -------------------------------------------------------------------------------- 1 | IMAGE_TEST = { 2 | 'tolerance': 5e-7 3 | } 4 | 5 | import sys 6 | sys.path.append('..') 7 | from helpers import render_frames 8 | from graphs.VBufferRTInline import VBufferRT as g 9 | from falcor import * 10 | 11 | m.addGraph(g) 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | 14 | # default 15 | render_frames(m, 'default', frames=[1,16,64]) 16 | 17 | # enable depth-of-field 18 | m.scene.camera.focalDistance = 3.0 19 | m.scene.camera.apertureRadius = 0.1 20 | render_frames(m, 'dof', frames=[1,16,64]) 21 | 22 | exit() 23 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_VBufferRaster.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.VBufferRaster import VBufferRaster as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('Arcade/Arcade.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/renderpasses/test_VBufferRasterAlpha.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.VBufferRasterAlpha import VBufferRaster as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene('TestScenes/AlphaTest/AlphaTest.pyscene') 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1]) 12 | 13 | # force cull back 14 | g.updatePass('VBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullBack}) 15 | render_frames(m, 'cullback', frames=[1]) 16 | 17 | # force cull front 18 | g.updatePass('VBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullFront}) 19 | render_frames(m, 'cullfront', frames=[1]) 20 | 21 | # force cull none 22 | g.updatePass('VBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullNone}) 23 | render_frames(m, 'cullnone', frames=[1]) 24 | 25 | # disable alpha 26 | g.updatePass('VBufferRaster', {'forceCullMode': True, 'cull': CullMode.CullNone, 'useAlphaTest': False}) 27 | render_frames(m, 'alphaoff', frames=[1]) 28 | 29 | exit() 30 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_BSDFViewer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from falcor import * 4 | from helpers import render_frames 5 | 6 | exec(open('../../../scripts/BSDFViewer.py').read()) 7 | 8 | # arcade 9 | m.loadScene('Arcade/Arcade.pyscene') 10 | render_frames(m, 'arcade', frames=[16]) 11 | 12 | # materials 13 | m.loadScene('TestScenes/MaterialTest.pyscene') 14 | render_frames(m, 'materials', frames=[16]) 15 | 16 | exit() 17 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_MinimalPathTracer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from falcor import * 4 | from helpers import render_frames 5 | 6 | exec(open('../../../scripts/MinimalPathTracer.py').read()) 7 | 8 | # default 9 | render_frames(m, 'default', frames=[64]) 10 | 11 | # arcade 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | render_frames(m, 'arcade', frames=[64]) 14 | 15 | # materials 16 | m.loadScene('TestScenes/MaterialTest.pyscene') 17 | render_frames(m, 'materials', frames=[64]) 18 | 19 | exit() 20 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_PathTracer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from falcor import * 4 | from helpers import render_frames 5 | 6 | exec(open('../../../scripts/PathTracer.py').read()) 7 | 8 | # default 9 | render_frames(m, 'default', frames=[64]) 10 | 11 | # arcade 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | render_frames(m, 'arcade', frames=[64]) 14 | 15 | exit() 16 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_PathTracerNRD.py: -------------------------------------------------------------------------------- 1 | IMAGE_TEST = { 2 | 'tolerance': 1e-6 3 | } 4 | 5 | # NOTE: 6 | # NRD seems to be non-deterministic in some cases ("filteredSpecularRadianceHitDist" output). 7 | # We're setting a larger threshold here to account for that. 8 | 9 | import sys 10 | sys.path.append('..') 11 | from falcor import * 12 | from helpers import render_frames 13 | 14 | exec(open('../../../scripts/PathTracerNRD.py').read()) 15 | 16 | # default 17 | render_frames(m, 'default', frames=[64]) 18 | 19 | # arcade 20 | m.loadScene('Arcade/Arcade.pyscene') 21 | render_frames(m, 'arcade', frames=[64]) 22 | 23 | exit() 24 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_RTXDI.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | 5 | exec(open('../../../scripts/RTXDI.py').read()) 6 | 7 | # default 8 | render_frames(m, 'default', frames=[64]) 9 | 10 | # arcade 11 | m.loadScene('Arcade/Arcade.pyscene') 12 | render_frames(m, 'arcade', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/renderscripts/test_SceneDebugger.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from falcor import * 4 | from helpers import render_frames 5 | 6 | exec(open('../../../scripts/SceneDebugger.py').read()) 7 | 8 | # default 9 | render_frames(m, 'default', frames=[64]) 10 | 11 | # arcade 12 | m.loadScene('Arcade/Arcade.pyscene') 13 | render_frames(m, 'arcade', frames=[64]) 14 | 15 | exit() 16 | -------------------------------------------------------------------------------- /tests/image_tests/scene/graphs/GBufferRTCullBack.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRTCullBack(): 4 | g = RenderGraph('GBufferRTCullBack') 5 | loadRenderPassLibrary('GBuffer.dll') 6 | GBufferRT = createPass('GBufferRT', {'samplePattern': SamplePattern.Center, 'forceCullMode': True, 'cull': CullMode.CullBack}) 7 | g.addPass(GBufferRT, 'GBufferRT') 8 | g.markOutput('GBufferRT.faceNormalW') 9 | return g 10 | 11 | GBufferRTCullBack = render_graph_GBufferRTCullBack() 12 | try: m.addGraph(GBufferRTCullBack) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /tests/image_tests/scene/graphs/GBufferRasterCullBack.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_GBufferRasterCullBack(): 4 | g = RenderGraph('GBufferRasterCullBack') 5 | loadRenderPassLibrary('GBuffer.dll') 6 | GBufferRaster = createPass('GBufferRaster', {'samplePattern': SamplePattern.Center, 'forceCullMode': True, 'cull': CullMode.CullBack}) 7 | g.addPass(GBufferRaster, 'GBufferRaster') 8 | g.markOutput('GBufferRaster.faceNormalW') 9 | return g 10 | 11 | GBufferRasterCullBack = render_graph_GBufferRasterCullBack() 12 | try: m.addGraph(GBufferRasterCullBack) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /tests/image_tests/scene/graphs/PathTracer.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_PathTracer(): 4 | g = RenderGraph("PathTracer") 5 | loadRenderPassLibrary("AccumulatePass.dll") 6 | loadRenderPassLibrary("GBuffer.dll") 7 | loadRenderPassLibrary("PathTracer.dll") 8 | loadRenderPassLibrary("ToneMapper.dll") 9 | 10 | PathTracer = createPass("PathTracer", {'samplesPerPixel': 1, 'maxSurfaceBounces': 10}) 11 | g.addPass(PathTracer, "PathTracer") 12 | VBufferRT = createPass("VBufferRT", {'samplePattern': SamplePattern.Stratified, 'sampleCount': 16}) 13 | g.addPass(VBufferRT, "VBufferRT") 14 | AccumulatePass = createPass("AccumulatePass", {'enabled': True, 'precisionMode': AccumulatePrecision.Single}) 15 | g.addPass(AccumulatePass, "AccumulatePass") 16 | ToneMapper = createPass("ToneMapper", {'autoExposure': False, 'exposureCompensation': 0.0}) 17 | g.addPass(ToneMapper, "ToneMapper") 18 | 19 | g.addEdge("VBufferRT.vbuffer", "PathTracer.vbuffer") 20 | g.addEdge("PathTracer.color", "AccumulatePass.input") 21 | g.addEdge("AccumulatePass.output", "ToneMapper.src") 22 | g.markOutput("ToneMapper.dst") 23 | g.markOutput("ToneMapper.dst", TextureChannelFlags.Alpha) 24 | return g 25 | 26 | PathTracer = render_graph_PathTracer() 27 | try: m.addGraph(PathTracer) 28 | except NameError: None 29 | -------------------------------------------------------------------------------- /tests/image_tests/scene/graphs/SceneDebugger.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_SceneDebugger(): 4 | g = RenderGraph('SceneDebugger') 5 | loadRenderPassLibrary('SceneDebugger.dll') 6 | SceneDebugger = createPass('SceneDebugger') 7 | g.addPass(SceneDebugger, 'SceneDebugger') 8 | g.markOutput('SceneDebugger.output') 9 | return g 10 | 11 | SceneDebugger = render_graph_SceneDebugger() 12 | try: m.addGraph(SceneDebugger) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /tests/image_tests/scene/graphs/TestRtProgram.py: -------------------------------------------------------------------------------- 1 | from falcor import * 2 | 3 | def render_graph_TestRtProgram(): 4 | g = RenderGraph('TestRtProgramGraph') 5 | loadRenderPassLibrary('TestPasses.dll') 6 | TestRtProgram = createPass('TestRtProgram', {'mode': 0}) 7 | g.addPass(TestRtProgram, 'TestRtProgram') 8 | g.markOutput('TestRtProgram.output') 9 | return g 10 | 11 | TestRtProgramGraph = render_graph_TestRtProgram() 12 | try: m.addGraph(TestRtProgramGraph) 13 | except NameError: None 14 | -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/NDSDFGrid.pyscene: -------------------------------------------------------------------------------- 1 | # Create materials 2 | sdfGridMaterial = Material('SDF Grid') 3 | sdfGridMaterial.baseColor = float4(1.0, 0.5, 0.5, 1.0) 4 | sdfGridMaterial.specularParams = float4(0.001) 5 | 6 | # Create SDF grids 7 | 8 | sdfGrid = SDFGrid.createNDGrid(narrowBandThickness=2.5) 9 | sdfGrid.generateCheeseValues(128, 0) 10 | 11 | sceneBuilder.addSDFGridInstance( 12 | sceneBuilder.addNode('SDFGrid', Transform()), 13 | sceneBuilder.addSDFGrid(sdfGrid, sdfGridMaterial) 14 | ) 15 | 16 | # Create camera 17 | 18 | camera = Camera() 19 | camera.position = float3(1, 1, 1) 20 | camera.target = float3(0, 0, 0) 21 | camera.up = float3(0, 1, 0) 22 | sceneBuilder.addCamera(camera) 23 | 24 | # Setup envmap 25 | 26 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 27 | sceneBuilder.envMap.intensity = 1 -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/SDFSBS.pyscene: -------------------------------------------------------------------------------- 1 | # Create materials 2 | sdfGridMaterial = Material('SDF Grid') 3 | sdfGridMaterial.baseColor = float4(1.0, 0.5, 0.5, 1.0) 4 | sdfGridMaterial.specularParams = float4(0.001) 5 | 6 | # Create SDF grids 7 | 8 | sdfGrid = SDFGrid.createSBS() 9 | sdfGrid.generateCheeseValues(128, 0) 10 | 11 | sceneBuilder.addSDFGridInstance( 12 | sceneBuilder.addNode('SDFGrid', Transform()), 13 | sceneBuilder.addSDFGrid(sdfGrid, sdfGridMaterial) 14 | ) 15 | 16 | # Create camera 17 | 18 | camera = Camera() 19 | camera.position = float3(1, 1, 1) 20 | camera.target = float3(0, 0, 0) 21 | camera.up = float3(0, 1, 0) 22 | sceneBuilder.addCamera(camera) 23 | 24 | # Setup envmap 25 | 26 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 27 | sceneBuilder.envMap.intensity = 1 -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/SDFSVO.pyscene: -------------------------------------------------------------------------------- 1 | # Create materials 2 | sdfGridMaterial = Material('SDF Grid') 3 | sdfGridMaterial.baseColor = float4(1.0, 0.5, 0.5, 1.0) 4 | sdfGridMaterial.specularParams = float4(0.001) 5 | 6 | # Create SDF grids 7 | 8 | sdfGrid = SDFGrid.createSVO() 9 | sdfGrid.generateCheeseValues(128, 0) 10 | 11 | sceneBuilder.addSDFGridInstance( 12 | sceneBuilder.addNode('SDFGrid', Transform()), 13 | sceneBuilder.addSDFGrid(sdfGrid, sdfGridMaterial) 14 | ) 15 | 16 | # Create camera 17 | 18 | camera = Camera() 19 | camera.position = float3(1, 1, 1) 20 | camera.target = float3(0, 0, 0) 21 | camera.up = float3(0, 1, 0) 22 | sceneBuilder.addCamera(camera) 23 | 24 | # Setup envmap 25 | 26 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 27 | sceneBuilder.envMap.intensity = 1 -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/SDFSVS.pyscene: -------------------------------------------------------------------------------- 1 | # Create materials 2 | sdfGridMaterial = Material('SDF Grid') 3 | sdfGridMaterial.baseColor = float4(1.0, 0.5, 0.5, 1.0) 4 | sdfGridMaterial.specularParams = float4(0.001) 5 | 6 | # Create SDF grids 7 | 8 | sdfGrid = SDFGrid.createSVS() 9 | sdfGrid.generateCheeseValues(128, 0) 10 | 11 | sceneBuilder.addSDFGridInstance( 12 | sceneBuilder.addNode('SDFGrid', Transform()), 13 | sceneBuilder.addSDFGrid(sdfGrid, sdfGridMaterial) 14 | ) 15 | 16 | # Create camera 17 | 18 | camera = Camera() 19 | camera.position = float3(1, 1, 1) 20 | camera.target = float3(0, 0, 0) 21 | camera.up = float3(0, 1, 0) 22 | sceneBuilder.addCamera(camera) 23 | 24 | # Setup envmap 25 | 26 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 27 | sceneBuilder.envMap.intensity = 1 -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/Volumes.pyscene: -------------------------------------------------------------------------------- 1 | # Create volumes 2 | 3 | sphereVolume = GridVolume('Sphere') 4 | sphereVolume.densityGrid = Grid.createSphere(1.0, 0.01) 5 | sphereVolume.densityScale = 0.5 6 | sceneBuilder.addGridVolume(sphereVolume) 7 | 8 | boxVolume = GridVolume('Box') 9 | boxVolume.densityGrid = Grid.createBox(1.0, 1.0, 1.0, 0.01) 10 | boxVolume.densityScale = 2.5 11 | sceneBuilder.addGridVolume(boxVolume) 12 | 13 | # Create camera 14 | 15 | camera = Camera() 16 | camera.position = float3(1, 1, 1) 17 | camera.target = float3(0, 0, 0) 18 | camera.up = float3(0, 1, 0) 19 | sceneBuilder.addCamera(camera) 20 | 21 | # Setup envmap 22 | 23 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 24 | sceneBuilder.envMap.intensity = 1 25 | -------------------------------------------------------------------------------- /tests/image_tests/scene/scenes/smoke.pyscene: -------------------------------------------------------------------------------- 1 | # Create volumes 2 | 3 | smokeVolume = GridVolume('smoke') 4 | smokeVolume.loadGrid(GridVolume.GridSlot.Density, 'TestScenes/smoke.vdb', 'density') 5 | smokeVolume.densityScale = 0.5 6 | smokeVolume.albedo = float3(0.5, 0.5, 0.5) 7 | sceneBuilder.addGridVolume(smokeVolume) 8 | 9 | # Create camera 10 | 11 | camera = Camera() 12 | camera.position = float3(25, 0, 55) 13 | camera.target = float3(0, 25, 0) 14 | camera.up = float3(0, 1, 0) 15 | sceneBuilder.addCamera(camera) 16 | 17 | # Setup envmap 18 | 19 | sceneBuilder.envMap = EnvMap("Arcade/BlueSky.png") 20 | sceneBuilder.envMap.intensity = 1.5 21 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_AnimationBehavior.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SceneDebugger import SceneDebugger as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene("TestScenes/AnimatedCubes/AnimatedCubes.pyscene") 9 | 10 | # preInfinityBehavior (behavior before first keyframe) 11 | render_frames(m, "preInfinity", frames=[1,90,180,270,350]) 12 | 13 | # default (behavior during defined keyframes) 14 | render_frames(m, "default", frames=[390,410,430,450,480]) 15 | 16 | # postInfinityBehavior (behavior after last keyframe) 17 | render_frames(m, "postInfinity", frames=[490,520,550,580]) 18 | 19 | # loopAnimations 20 | m.scene.loopAnimations = False 21 | m.scene.camera = m.scene.cameras[1] 22 | render_frames(m, "loopAnimations.false", frames=[850,900,950,1000]) 23 | 24 | exit() 25 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_CameraAnimation.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | from helpers import render_frames 4 | from graphs.SceneDebugger import SceneDebugger as g 5 | from falcor import * 6 | 7 | m.addGraph(g) 8 | m.loadScene("grey_and_white_room/grey_and_white_room.fbx") 9 | 10 | # default 11 | render_frames(m, 'default', frames=[1,16,64,128,256]) 12 | 13 | exit() 14 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_Displacement.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene('TestScenes/CornellBoxDisplaced.pyscene') 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_NDSDFGrids.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('scenes/NDSDFGrid.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_RtProgram.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.TestRtProgram import TestRtProgramGraph as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | 10 | # default: triangles and custom primitives 11 | m.loadScene('TestScenes/GeometryTypes.pyscene') 12 | render_frames(m, 'default', frames=[1]) 13 | 14 | # two_curves: triangles, curves, and custom primitives 15 | m.loadScene('CurveTest/two_curves.pyscene') 16 | render_frames(m, 'two_curves', frames=[1]) 17 | 18 | g.updatePass('TestRtProgram', {'mode': 1}) 19 | 20 | # test for dynamic dispatch 21 | m.loadScene('TestScenes/AlphaTest/AlphaTest.pyscene') 22 | render_frames(m, 'types', frames=[1]) 23 | 24 | exit() 25 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_SDFSBS.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('scenes/SDFSBS.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_SDFSVO.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('scenes/SDFSVO.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_SDFSVS.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('scenes/SDFSVS.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_SceneCache.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as SceneDebuggerGraph 6 | from graphs.PathTracer import PathTracer as PathTracerGraph 7 | from falcor import * 8 | 9 | m.addGraph(PathTracerGraph) 10 | 11 | # arcade 12 | m.loadScene('Arcade/Arcade.pyscene', SceneBuilderFlags.RebuildCache) 13 | render_frames(m, 'arcade', frames=[64]) 14 | m.loadScene('Arcade/Arcade.pyscene', SceneBuilderFlags.UseCache) 15 | render_frames(m, 'arcade.cached', frames=[64]) 16 | 17 | # grey_and_white_room 18 | m.loadScene('grey_and_white_room/grey_and_white_room.fbx', SceneBuilderFlags.RebuildCache) 19 | render_frames(m, 'grey_and_white_room', frames=[64]) 20 | m.loadScene('grey_and_white_room/grey_and_white_room.fbx', SceneBuilderFlags.UseCache) 21 | render_frames(m, 'grey_and_white_room.cached', frames=[64]) 22 | 23 | m.removeGraph(PathTracerGraph) 24 | m.addGraph(SceneDebuggerGraph) 25 | 26 | # volumes 27 | m.loadScene(os.path.abspath('scenes/Volumes.pyscene'), SceneBuilderFlags.RebuildCache) 28 | render_frames(m, 'volumes', frames=[1]) 29 | m.loadScene(os.path.abspath('scenes/Volumes.pyscene'), SceneBuilderFlags.UseCache) 30 | render_frames(m, 'volumes.cached', frames=[1]) 31 | 32 | exit() 33 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_TriangleWinding.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as SceneDebuggerGraph 6 | from graphs.GBufferRTCullBack import GBufferRTCullBack 7 | from graphs.GBufferRasterCullBack import GBufferRasterCullBack 8 | from falcor import * 9 | 10 | # Load test scene that has mixed triangle winding in object/world space 11 | m.loadScene('TestScenes/WindingTest.pyscene') 12 | 13 | m.addGraph(SceneDebuggerGraph) 14 | SceneDebuggerGraph.getPass('SceneDebugger').mode = SceneDebuggerMode.FrontFacingFlag 15 | 16 | render_frames(m, 'frontfacing', frames=[2]) 17 | 18 | SceneDebuggerGraph.getPass('SceneDebugger').mode = SceneDebuggerMode.FaceNormal 19 | 20 | render_frames(m, 'facenormal', frames=[2]) 21 | 22 | m.removeGraph(SceneDebuggerGraph) 23 | m.addGraph(GBufferRTCullBack) 24 | 25 | render_frames(m, 'rt_cullback', frames=[2]) 26 | 27 | m.removeGraph(GBufferRTCullBack) 28 | m.addGraph(GBufferRasterCullBack) 29 | 30 | render_frames(m, 'raster_cullback', frames=[2]) 31 | 32 | exit() 33 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_USDPreviewSurface.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.PathTracer import PathTracer as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | 10 | # Knob 11 | m.loadScene('TestScenes/MoriKnob/knob.usd') 12 | render_frames(m, 'Knob', frames=[1,64]) 13 | 14 | # KnobMaterials 15 | m.loadScene('TestScenes/MoriKnob/KnobMaterials.usda') 16 | render_frames(m, 'KnobMaterials', frames=[1,64]) 17 | 18 | exit() 19 | -------------------------------------------------------------------------------- /tests/image_tests/scene/test_Volumes.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('..') 3 | import os 4 | from helpers import render_frames 5 | from graphs.SceneDebugger import SceneDebugger as g 6 | from falcor import * 7 | 8 | m.addGraph(g) 9 | m.loadScene(os.path.abspath('scenes/Volumes.pyscene')) 10 | 11 | # default 12 | render_frames(m, 'default', frames=[64]) 13 | 14 | exit() 15 | -------------------------------------------------------------------------------- /tests/run_image_tests.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%testing/run_image_tests.py %* 10 | -------------------------------------------------------------------------------- /tests/run_unit_tests.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%testing/run_unit_tests.py %* 10 | -------------------------------------------------------------------------------- /tests/testing/core/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module for testing support. 3 | ''' 4 | 5 | from .environment import Environment 6 | -------------------------------------------------------------------------------- /tests/testing/core/termcolor.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Module for printing colored text to a VT100 terminal using ANSI escape codes. 3 | ''' 4 | 5 | import sys 6 | 7 | COLOR_BEGIN = { 8 | 'gray': '\33[90m', 9 | 'red': '\33[91m', 10 | 'green': '\33[92m', 11 | 'yellow': '\33[93m', 12 | 'blue': '\33[94m', 13 | 'magenta': '\33[95m' 14 | } 15 | 16 | COLOR_END = '\033[0m' 17 | 18 | def colored(text, color, stream=sys.stdout): 19 | ''' 20 | Returns the given text wrapped in ANSI escape color codes if stream is attached to terminal. 21 | ''' 22 | if stream.isatty() and color in COLOR_BEGIN: 23 | return COLOR_BEGIN[color] + text + COLOR_END 24 | return text 25 | 26 | def test(): 27 | ''' 28 | Print all the available colors. 29 | ''' 30 | for color in COLOR_BEGIN.keys(): 31 | print(colored(f'This is {color}', color)) 32 | 33 | 34 | # Enable VT100 support for windows terminal 35 | try: 36 | import ctypes 37 | import ctypes.wintypes 38 | 39 | kernel32 = ctypes.windll.kernel32 40 | STD_OUTPUT_HANDLE = -11 41 | STD_ERROR_HANDLE = -12 42 | ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4 43 | 44 | def enable_virtual_terminal(handle): 45 | console = kernel32.GetStdHandle(handle) 46 | mode = ctypes.wintypes.DWORD() 47 | mode = kernel32.GetConsoleMode(console, ctypes.byref(mode)) 48 | kernel32.SetConsoleMode(console, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) 49 | 50 | enable_virtual_terminal(STD_OUTPUT_HANDLE) 51 | enable_virtual_terminal(STD_ERROR_HANDLE) 52 | except: 53 | pass -------------------------------------------------------------------------------- /tests/testing/libs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/tests/testing/libs/__init__.py -------------------------------------------------------------------------------- /tests/testing/viewer/static/exr-wrap.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVlabs/conditional-restir-prototype/2188c2049aaa27b2576ce6486a51785d74db7bff/tests/testing/viewer/static/exr-wrap.wasm -------------------------------------------------------------------------------- /tests/testing/viewer/static/style.css: -------------------------------------------------------------------------------- 1 | 2 | .properties { 3 | margin-left: 0.25rem; 4 | margin-bottom: 1rem; 5 | } 6 | 7 | .property { 8 | line-height: 1.3rem; 9 | } 10 | 11 | .property-field { 12 | float: left; 13 | font-weight: bold; 14 | width: 6rem; 15 | } 16 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/base.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {{title or 'No title'}} 10 | 11 | 12 | 13 |
14 | 19 | {{!base}} 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/compare.tpl: -------------------------------------------------------------------------------- 1 | % rebase('base', title='Compare: ' + image) 2 | 3 |
4 | 11 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/error.tpl: -------------------------------------------------------------------------------- 1 | % rebase('base', title='Error') 2 | 3 |
4 | 5 |

Error

6 | 7 |

{{message}}

8 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/index.tpl: -------------------------------------------------------------------------------- 1 | % rebase('base', title='Home') 2 | 3 | % include('snippets/nav', nav=nav) 4 | 5 |

Home

6 | 7 |
8 |
9 |
Hostname
10 |
{{hostname}}
11 |
12 |
13 |
Location
14 |
{{result_dir}}
15 |
16 |
17 | 18 |
19 |
Runs
20 | 21 | % if len(runs) == 0: 22 |

No runs found.

23 | % else: 24 | 25 | 26 | 27 | 28 | 29 | % for tag in run_tags: 30 | 31 | % end 32 | 33 | 34 | 35 | 36 | 37 | % for run in runs: 38 | 39 | 40 | 41 | % for tag in run_tags: 42 | 43 | % end 44 | 45 | 48 | 49 | % end 50 | 51 |
RunDate{{tag_titles[tag]}}DurationResult
{{run['run_dir']}}{{format_date(run['date'])}}{{run['run_tags'][tag]}}{{format_duration(run['duration'])}} 46 | % include('snippets/result', result=run['result']) 47 |
52 | % end 53 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/snippets/nav.tpl: -------------------------------------------------------------------------------- 1 |
2 | 13 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/snippets/result.tpl: -------------------------------------------------------------------------------- 1 | 2 | % if result == 'PASSED': 3 | PASSED 4 | % elif result == 'FAILED': 5 | FAILED 6 | % elif result == 'SKIPPED': 7 | SKIPPED 8 | % else: 9 | {{result}} 10 | % end 11 | -------------------------------------------------------------------------------- /tests/testing/viewer/views/snippets/stats.tpl: -------------------------------------------------------------------------------- 1 | % if len(stats) > 0: 2 |
3 | % for item in stats: 4 |
{{item['percentage']}}%
5 | % end 6 |
7 | % end 8 | -------------------------------------------------------------------------------- /tests/view_image_tests.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%testing/view_image_tests.py %* 10 | -------------------------------------------------------------------------------- /tools/format_code.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | set clang_format=%project_dir%tools\.packman\clang-format\clang-format.exe 7 | 8 | if not exist %python% call %project_dir%setup.bat 9 | if not exist %clang_format% call %project_dir%setup.bat 10 | 11 | pushd %project_dir% 12 | call %python% %pwd%run_clang_format.py --clang-format-executable=%clang_format% -i -r Source 13 | popd 14 | -------------------------------------------------------------------------------- /tools/make_new_render_pass_library.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%/make_new_render_pass_library.py %* 10 | -------------------------------------------------------------------------------- /tools/make_new_sample.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%/make_new_sample.py %* 10 | -------------------------------------------------------------------------------- /tools/make_new_sample.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import argparse 3 | from pathlib import Path 4 | 5 | SAMPLES_DIR = Path(sys.argv[0]).parent.parent / "Source" / "Samples" 6 | EXCLUDE_EXT = [] 7 | TEMPLATE_NAME = 'ProjectTemplate' 8 | 9 | def create_project(name): 10 | # Source and destination directories. 11 | src_dir = SAMPLES_DIR / TEMPLATE_NAME 12 | dst_dir = SAMPLES_DIR / name 13 | 14 | print(f'Creating sample application "{name}":') 15 | 16 | # Check that destination does not exist. 17 | if dst_dir.exists(): 18 | print(f'"{name}" already exists!') 19 | return False 20 | 21 | # Create destination folder. 22 | dst_dir.mkdir() 23 | 24 | # Copy project template. 25 | for src_file in filter(lambda f: not f.suffix in EXCLUDE_EXT, src_dir.iterdir()): 26 | dst_file = dst_dir / (src_file.name.replace(TEMPLATE_NAME, name)) 27 | 28 | print(f'Writing {dst_file}.') 29 | 30 | # Replace all occurrences 'ProjectTemplate' with new project name. 31 | content = src_file.read_text() 32 | content = content.replace(TEMPLATE_NAME, name) 33 | dst_file.write_text(content) 34 | 35 | # Add new subdirectory to CMakeLists.txt. 36 | cmake_file = SAMPLES_DIR / "CMakeLists.txt" 37 | with cmake_file.open("a") as f: 38 | f.write(f'add_subdirectory({name})\n') 39 | 40 | return True 41 | 42 | 43 | def main(): 44 | parser = argparse.ArgumentParser(description='Script to create a new sample application.') 45 | parser.add_argument('name', help='Sample application name') 46 | args = parser.parse_args() 47 | 48 | success = create_project(args.name) 49 | 50 | return 0 if success else 1 51 | 52 | if __name__ == '__main__': 53 | main() 54 | -------------------------------------------------------------------------------- /tools/packman/bootstrap/download_file_from_url.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | Copyright 2019 NVIDIA CORPORATION 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | #> 16 | 17 | param( 18 | [Parameter(Mandatory=$true)][string]$source=$null, 19 | [string]$output="out.exe" 20 | ) 21 | $filename = $output 22 | 23 | $triesLeft = 4 24 | $delay = 2 25 | do 26 | { 27 | $triesLeft -= 1 28 | 29 | try 30 | { 31 | Write-Host "Downloading from bootstrap.packman.nvidia.com ..." 32 | $wc = New-Object net.webclient 33 | $wc.Downloadfile($source, $fileName) 34 | exit 0 35 | } 36 | catch 37 | { 38 | Write-Host "Error downloading $source!" 39 | Write-Host $_.Exception|format-list -force 40 | if ($triesLeft) 41 | { 42 | Write-Host "Retrying in $delay seconds ..." 43 | Start-Sleep -seconds $delay 44 | } 45 | $delay = $delay * $delay 46 | } 47 | } while ($triesLeft -gt 0) 48 | # We only get here if the retries have been exhausted, remove any left-overs: 49 | if (Test-Path $fileName) 50 | { 51 | Remove-Item $fileName 52 | } 53 | exit 1 -------------------------------------------------------------------------------- /tools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd: -------------------------------------------------------------------------------- 1 | :: Copyright 2019 NVIDIA CORPORATION 2 | :: 3 | :: Licensed under the Apache License, Version 2.0 (the "License"); 4 | :: you may not use this file except in compliance with the License. 5 | :: You may obtain a copy of the License at 6 | :: 7 | :: http://www.apache.org/licenses/LICENSE-2.0 8 | :: 9 | :: Unless required by applicable law or agreed to in writing, software 10 | :: distributed under the License is distributed on an "AS IS" BASIS, 11 | :: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | :: See the License for the specific language governing permissions and 13 | :: limitations under the License. 14 | 15 | :: You need to specify as input to this command 16 | @setlocal 17 | @set PACKAGE_NAME=%1 18 | @set TARGET_PATH=%2 19 | 20 | @echo Fetching %PACKAGE_NAME% ... 21 | 22 | @powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0download_file_from_url.ps1" ^ 23 | -source "http://bootstrap.packman.nvidia.com/%PACKAGE_NAME%" -output %TARGET_PATH% 24 | :: A bug in powershell prevents the errorlevel code from being set when using the -File execution option 25 | :: We must therefore do our own failure analysis, basically make sure the file exists: 26 | @if not exist %TARGET_PATH% goto ERROR_DOWNLOAD_FAILED 27 | 28 | @endlocal 29 | @exit /b 0 30 | 31 | :ERROR_DOWNLOAD_FAILED 32 | @echo Failed to download file from S3 33 | @echo Most likely because endpoint cannot be reached or file %PACKAGE_NAME% doesn't exist 34 | @endlocal 35 | @exit /b 1 -------------------------------------------------------------------------------- /tools/packman/config.packman.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tools/packman/python.bat: -------------------------------------------------------------------------------- 1 | :: Copyright 2019-2020 NVIDIA CORPORATION 2 | :: 3 | :: Licensed under the Apache License, Version 2.0 (the "License"); 4 | :: you may not use this file except in compliance with the License. 5 | :: You may obtain a copy of the License at 6 | :: 7 | :: http://www.apache.org/licenses/LICENSE-2.0 8 | :: 9 | :: Unless required by applicable law or agreed to in writing, software 10 | :: distributed under the License is distributed on an "AS IS" BASIS, 11 | :: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | :: See the License for the specific language governing permissions and 13 | :: limitations under the License. 14 | 15 | @echo off 16 | setlocal enableextensions 17 | 18 | call "%~dp0\packman" init 19 | set "PYTHONPATH=%PM_MODULE_DIR%;%PYTHONPATH%" 20 | 21 | if not defined PYTHONNOUSERSITE ( 22 | set PYTHONNOUSERSITE=1 23 | ) 24 | 25 | REM For performance, default to unbuffered; however, allow overriding via 26 | REM PYTHONUNBUFFERED=0 since PYTHONUNBUFFERED on windows can truncate output 27 | REM when printing long strings 28 | if not defined PYTHONUNBUFFERED ( 29 | set PYTHONUNBUFFERED=1 30 | ) 31 | 32 | "%PM_PYTHON%" %* -------------------------------------------------------------------------------- /tools/packman/python.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2019-2020 NVIDIA CORPORATION 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | set -e 18 | 19 | PACKMAN_CMD="$(dirname "${BASH_SOURCE}")/packman" 20 | if [ ! -f "$PACKMAN_CMD" ]; then 21 | PACKMAN_CMD="${PACKMAN_CMD}.sh" 22 | fi 23 | source "$PACKMAN_CMD" init 24 | export PYTHONPATH="${PM_MODULE_DIR}:${PYTHONPATH}" 25 | 26 | if [ -z "${PYTHONNOUSERSITE:-}" ]; then 27 | export PYTHONNOUSERSITE=1 28 | fi 29 | 30 | # For performance, default to unbuffered; however, allow overriding via 31 | # PYTHONUNBUFFERED=0 since PYTHONUNBUFFERED on windows can truncate output 32 | # when printing long strings 33 | if [ -z "${PYTHONUNBUFFERED:-}" ]; then 34 | export PYTHONUNBUFFERED=1 35 | fi 36 | 37 | # workaround for our python not shipping with certs 38 | if [[ -z ${SSL_CERT_DIR:-} ]]; then 39 | export SSL_CERT_DIR=/etc/ssl/certs/ 40 | fi 41 | 42 | "${PM_PYTHON}" "$@" 43 | -------------------------------------------------------------------------------- /tools/update_comment_style.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%/update_comment_style.py %* 10 | -------------------------------------------------------------------------------- /tools/update_legal_headers.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | 7 | if not exist %python% call %project_dir%setup.bat 8 | 9 | call %python% %pwd%update_legal_headers.py %* 10 | -------------------------------------------------------------------------------- /tools/verify_code.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set pwd=%~dp0 4 | set project_dir=%pwd%..\ 5 | set python=%project_dir%tools\.packman\python\python.exe 6 | set clang_format=%project_dir%tools\.packman\clang-format\clang-format.exe 7 | 8 | if not exist %python% call %project_dir%setup.bat 9 | if not exist %clang_format% call %project_dir%setup.bat 10 | 11 | pushd %project_dir% 12 | call %python% %pwd%run_clang_format.py --clang-format-executable=%clang_format% --color=never -r Source 13 | popd 14 | --------------------------------------------------------------------------------