@babylonjs/core 7.23.1 → 7.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animation.js +3 -3
- package/Animations/animation.js.map +1 -1
- package/Audio/sound.js +15 -7
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +3 -3
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Compute/computeEffect.js +4 -4
- package/Compute/computeEffect.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js +2 -3
- package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +2 -2
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -2
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +12 -10
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +3 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +2 -0
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +2 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +17 -8
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -2
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -2
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -2
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.d.ts +0 -2
- package/Materials/Textures/Filtering/hdrFiltering.js +12 -4
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/textureLoaderManager.d.ts +14 -1
- package/Materials/Textures/Loaders/textureLoaderManager.js +50 -21
- package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +15 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +24 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/index.d.ts +6 -0
- package/Materials/Textures/index.js +8 -0
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/texture.js +2 -2
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/effect.functions.js +4 -4
- package/Materials/effect.functions.js.map +1 -1
- package/Maths/math.color.js +6 -7
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.path.js +5 -5
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.scalar.d.ts +33 -191
- package/Maths/math.scalar.functions.d.ts +147 -0
- package/Maths/math.scalar.functions.js +247 -0
- package/Maths/math.scalar.functions.js.map +1 -1
- package/Maths/math.scalar.js +15 -303
- package/Maths/math.scalar.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +3 -3
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +8 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +30 -13
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/Node/Blocks/conditionBlock.js +2 -2
- package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js +4 -4
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/noiseBlock.js +3 -3
- package/Meshes/Node/Blocks/noiseBlock.js.map +1 -1
- package/Meshes/geodesicMesh.js +3 -3
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/trailMesh.js +4 -4
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +7 -7
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/basis.js +2 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dds.js +9 -9
- package/Misc/dds.js.map +1 -1
- package/Misc/dumpTools.js +2 -2
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/environmentTextureTools.js +4 -4
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/reflector.js +3 -3
- package/Misc/reflector.js.map +1 -1
- package/Misc/screenshotTools.d.ts +2 -1
- package/Misc/screenshotTools.js +3 -2
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/tools.d.ts +6 -3
- package/Misc/tools.js +5 -3
- package/Misc/tools.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +10 -10
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js +9 -9
- package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js +7 -7
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +4 -4
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js +4 -4
- package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js +10 -10
- package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
- package/Particles/gpuParticleSystem.js +2 -2
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +8 -8
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +2 -2
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +2 -2
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +4 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +4 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +6 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +4 -0
- package/PostProcesses/postProcess.js +1 -0
- package/PostProcesses/postProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +0 -2
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +46 -3
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts +0 -5
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js +33 -5
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +8 -3
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +56 -18
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +0 -2
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +20 -2
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +2 -14
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +108 -36
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +0 -2
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +23 -11
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +7 -3
- package/Rendering/depthPeelingRenderer.js +38 -3
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/index.d.ts +44 -0
- package/Rendering/index.js +46 -0
- package/Rendering/index.js.map +1 -1
- package/Shaders/iblCombineVoxelGrids.fragment.d.ts +5 -0
- package/Shaders/{combineVoxelGrids.fragment.js → iblCombineVoxelGrids.fragment.js} +3 -3
- package/Shaders/iblCombineVoxelGrids.fragment.js.map +1 -0
- package/Shaders/iblGenerateVoxelMip.fragment.d.ts +5 -0
- package/Shaders/{generateVoxelMip.fragment.js → iblGenerateVoxelMip.fragment.js} +3 -3
- package/Shaders/iblGenerateVoxelMip.fragment.js.map +1 -0
- package/Shaders/iblShadowVoxelTracing.fragment.js +18 -10
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js +2 -1
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +1 -1
- package/Shaders/{voxelGrid.fragment.d.ts → iblVoxelGrid.fragment.d.ts} +1 -1
- package/Shaders/{voxelGrid.fragment.js → iblVoxelGrid.fragment.js} +3 -3
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -0
- package/Shaders/{voxelSlabDebug.fragment.d.ts → iblVoxelGrid.vertex.d.ts} +1 -1
- package/Shaders/{voxelGrid.vertex.js → iblVoxelGrid.vertex.js} +8 -4
- package/Shaders/iblVoxelGrid.vertex.js.map +1 -0
- package/Shaders/iblVoxelGrid2dArrayDebug.fragment.d.ts +5 -0
- package/Shaders/{voxelGrid2dArrayDebug.fragment.js → iblVoxelGrid2dArrayDebug.fragment.js} +3 -3
- package/Shaders/iblVoxelGrid2dArrayDebug.fragment.js.map +1 -0
- package/Shaders/iblVoxelGrid3dDebug.fragment.d.ts +5 -0
- package/Shaders/{voxelGrid3dDebug.fragment.js → iblVoxelGrid3dDebug.fragment.js} +3 -3
- package/Shaders/iblVoxelGrid3dDebug.fragment.js.map +1 -0
- package/Shaders/{combineVoxelGrids.fragment.d.ts → iblVoxelSlabDebug.fragment.d.ts} +1 -1
- package/Shaders/{voxelSlabDebug.fragment.js → iblVoxelSlabDebug.fragment.js} +3 -3
- package/Shaders/iblVoxelSlabDebug.fragment.js.map +1 -0
- package/Shaders/iblVoxelSlabDebug.vertex.d.ts +5 -0
- package/Shaders/{voxelSlabDebug.vertex.js → iblVoxelSlabDebug.vertex.js} +3 -3
- package/Shaders/iblVoxelSlabDebug.vertex.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +7 -7
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/copyTexture3DLayerToTexture.fragment.d.ts +5 -0
- package/ShadersWGSL/copyTexture3DLayerToTexture.fragment.js +10 -0
- package/ShadersWGSL/copyTexture3DLayerToTexture.fragment.js.map +1 -0
- package/ShadersWGSL/default.fragment.js +4 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/hdrFiltering.fragment.d.ts +9 -0
- package/ShadersWGSL/hdrFiltering.fragment.js +18 -0
- package/ShadersWGSL/hdrFiltering.fragment.js.map +1 -0
- package/ShadersWGSL/hdrFiltering.vertex.d.ts +5 -0
- package/ShadersWGSL/hdrFiltering.vertex.js +16 -0
- package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -0
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.d.ts +5 -0
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js +10 -0
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js.map +1 -0
- package/ShadersWGSL/iblGenerateVoxelMip.fragment.d.ts +5 -0
- package/ShadersWGSL/iblGenerateVoxelMip.fragment.js +26 -0
- package/ShadersWGSL/iblGenerateVoxelMip.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowAccumulation.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowAccumulation.fragment.js +24 -0
- package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowDebug.fragment.js +16 -0
- package/ShadersWGSL/iblShadowDebug.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowGBufferDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowGBufferDebug.fragment.js +17 -0
- package/ShadersWGSL/iblShadowGBufferDebug.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js +20 -0
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +163 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsCdfx.fragment.js +12 -0
- package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsCdfy.fragment.js +33 -0
- package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsCombine.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsCombine.fragment.js +10 -0
- package/ShadersWGSL/iblShadowsCombine.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsIcdfx.fragment.js +18 -0
- package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsIcdfy.fragment.js +17 -0
- package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +1 -0
- package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js +41 -0
- package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js.map +1 -0
- package/{Shaders/voxelGrid3dDebug.fragment.d.ts → ShadersWGSL/iblVoxelGrid.fragment.d.ts} +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +15 -0
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -0
- package/ShadersWGSL/iblVoxelGrid.vertex.d.ts +5 -0
- package/ShadersWGSL/iblVoxelGrid.vertex.js +14 -0
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -0
- package/ShadersWGSL/iblVoxelGrid2dArrayDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblVoxelGrid2dArrayDebug.fragment.js +10 -0
- package/ShadersWGSL/iblVoxelGrid2dArrayDebug.fragment.js.map +1 -0
- package/ShadersWGSL/iblVoxelGrid3dDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblVoxelGrid3dDebug.fragment.js +22 -0
- package/ShadersWGSL/iblVoxelGrid3dDebug.fragment.js.map +1 -0
- package/ShadersWGSL/iblVoxelSlabDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/iblVoxelSlabDebug.fragment.js +12 -0
- package/ShadersWGSL/iblVoxelSlabDebug.fragment.js.map +1 -0
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.d.ts +5 -0
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +10 -0
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -0
- package/{Shaders/generateVoxelMip.fragment.d.ts → ShadersWGSL/oitBackBlend.fragment.d.ts} +1 -1
- package/ShadersWGSL/oitBackBlend.fragment.js +11 -0
- package/ShadersWGSL/oitBackBlend.fragment.js.map +1 -0
- package/{Shaders/voxelGrid.vertex.d.ts → ShadersWGSL/oitFinal.fragment.d.ts} +1 -1
- package/ShadersWGSL/oitFinal.fragment.js +14 -0
- package/ShadersWGSL/oitFinal.fragment.js.map +1 -0
- package/ShadersWGSL/pbr.fragment.js +17 -8
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/{Shaders/voxelSlabDebug.vertex.d.ts → ShadersWGSL/procedural.vertex.d.ts} +1 -1
- package/ShadersWGSL/procedural.vertex.js +16 -0
- package/ShadersWGSL/procedural.vertex.js.map +1 -0
- package/XR/features/WebXRHandTracking.d.ts +5 -0
- package/XR/features/WebXRHandTracking.js +34 -12
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/package.json +2 -2
- package/Shaders/combineVoxelGrids.fragment.js.map +0 -1
- package/Shaders/generateVoxelMip.fragment.js.map +0 -1
- package/Shaders/voxelGrid.fragment.js.map +0 -1
- package/Shaders/voxelGrid.vertex.js.map +0 -1
- package/Shaders/voxelGrid2dArrayDebug.fragment.d.ts +0 -5
- package/Shaders/voxelGrid2dArrayDebug.fragment.js.map +0 -1
- package/Shaders/voxelGrid3dDebug.fragment.js.map +0 -1
- package/Shaders/voxelSlabDebug.fragment.js.map +0 -1
- package/Shaders/voxelSlabDebug.vertex.js.map +0 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowVoxelTracingPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;
|
|
6
|
+
#define DISABLE_UNIFORMITY_ANALYSIS
|
|
7
|
+
var depthSampler: texture_2d<f32>;var worldNormalSampler: texture_2d<f32>;var worldPositionSampler: texture_2d<f32>;var blueNoiseSampler: texture_2d<f32>;var icdfxSamplerSampler: sampler;var icdfxSampler: texture_2d<f32>;var icdfySamplerSampler: sampler;var icdfySampler: texture_2d<f32>;var voxelGridSamplerSampler: sampler;var voxelGridSampler: texture_3d<f32>;uniform shadowParameters: vec4f;
|
|
8
|
+
#define SHADOWdirs uniforms.shadowParameters.x
|
|
9
|
+
#define SHADOWframe uniforms.shadowParameters.y
|
|
10
|
+
#define SHADOWdownscale uniforms.shadowParameters.z
|
|
11
|
+
#define SHADOWenvRot uniforms.shadowParameters.w
|
|
12
|
+
uniform offsetDataParameters: vec4f;
|
|
13
|
+
#define PixelOffset uniforms.offsetDataParameters.xy
|
|
14
|
+
#define highestMipLevel uniforms.offsetDataParameters.z
|
|
15
|
+
uniform sssParameters: vec4f;
|
|
16
|
+
#define SSSsamples uniforms.sssParameters.x
|
|
17
|
+
#define SSSstride uniforms.sssParameters.y
|
|
18
|
+
#define SSSmaxDistance uniforms.sssParameters.z
|
|
19
|
+
#define SSSthickness uniforms.sssParameters.w
|
|
20
|
+
uniform shadowOpacity: vec4f;uniform projMtx: mat4x4f;uniform viewMtx: mat4x4f;uniform invProjMtx: mat4x4f;uniform invViewMtx: mat4x4f;uniform wsNormalizationMtx: mat4x4f;uniform invVPMtx: mat4x4f;
|
|
21
|
+
#define PI 3.1415927
|
|
22
|
+
#define GOLD 0.618034
|
|
23
|
+
struct AABB3f {m_min: vec3f,
|
|
24
|
+
m_max: vec3f,};struct Ray {orig: vec3f,
|
|
25
|
+
dir: vec3f,
|
|
26
|
+
dir_rcp: vec3f,
|
|
27
|
+
t_min: f32,
|
|
28
|
+
t_max: f32,};fn make_ray(origin: vec3f,direction: vec3f,tmin: f32,
|
|
29
|
+
tmax: f32)->Ray {var ray: Ray;ray.orig=origin;ray.dir=direction;ray.dir_rcp=1.0f/direction;ray.t_min=tmin;ray.t_max=tmax;return ray;}
|
|
30
|
+
fn ray_box_intersection(aabb: AABB3f,ray: Ray ,
|
|
31
|
+
distance_near: ptr<function,f32>,distance_far: ptr<function,f32>)->bool{var tbot: vec3f=ray.dir_rcp*(aabb.m_min-ray.orig);var ttop: vec3f=ray.dir_rcp*(aabb.m_max-ray.orig);var tmin: vec3f=min(ttop,tbot);var tmax: vec3f=max(ttop,tbot);*distance_near=max(ray.t_min,max(tmin.x,max(tmin.y,tmin.z)));*distance_far=min(ray.t_max,min(tmax.x,min(tmax.y,tmax.z)));return *distance_near<=*distance_far;}
|
|
32
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
33
|
+
struct VoxelMarchDiagnosticInfo {heat: f32,
|
|
34
|
+
voxel_intersect_coords: vec3i,};
|
|
35
|
+
#endif
|
|
36
|
+
fn hash(i: u32)->u32 {var temp=i ^ (i>>16u);temp*=0x7FEB352Du;temp ^= temp>>15u;temp*=0x846CA68Bu;temp ^= temp>>16u;return temp;}
|
|
37
|
+
fn uintBitsToFloat(x: u32)->f32 {return bitcast<f32>(x);}
|
|
38
|
+
fn uint2float(i: u32)->f32 {return uintBitsToFloat(0x3F800000u | (i>>9u))-1.0;}
|
|
39
|
+
fn uv_to_normal(uv: vec2f)->vec3f {var N: vec3f;var uvRange: vec2f=uv;var theta: f32=uvRange.x*2.0*PI;var phi: f32=uvRange.y*PI;N.x=cos(theta)*sin(phi);N.z=sin(theta)*sin(phi);N.y=cos(phi);return N;}
|
|
40
|
+
fn plasticSequence(rstate: u32)->vec2f {return vec2f(uint2float(rstate*3242174889u),
|
|
41
|
+
uint2float(rstate*2447445414u));}
|
|
42
|
+
fn goldenSequence(rstate: u32)->f32 {return uint2float(rstate*2654435769u);}
|
|
43
|
+
fn distanceSquared(a: vec2f,b: vec2f)->f32 {var diff: vec2f=a-b;return dot(diff,diff);}
|
|
44
|
+
fn genTB(N: vec3f,T: ptr<function,vec3f>,B: ptr<function,vec3f>) {var s: f32=select(1.0,-1.0,N.z<0.0);var a: f32=-1.0/(s+N.z);var b: f32=N.x*N.y*a;*T= vec3f(1.0+s*N.x*N.x*a,s*b,-s*N.x);*B= vec3f(b,s+N.y*N.y*a,-N.y);}
|
|
45
|
+
fn lessThan(x: vec3f,y: vec3f)->vec3<bool> {return x<y;}
|
|
46
|
+
#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
47
|
+
fn anyHitVoxels(ray_vs: Ray,
|
|
48
|
+
voxel_march_diagnostic_info: ptr<function,VoxelMarchDiagnosticInfo>)->bool {
|
|
49
|
+
#else
|
|
50
|
+
fn anyHitVoxels(ray_vs: Ray)->bool {
|
|
51
|
+
#endif
|
|
52
|
+
var stack=array<i32,24>();
|
|
53
|
+
var invD: vec3f=ray_vs.dir_rcp;var D: vec3f=ray_vs.dir;var O: vec3f=ray_vs.orig;var negD=vec3i(lessThan(D, vec3f(0,0,0)));var voxel0: i32=negD.x | (negD.y<<1) | (negD.z<<2);var t0: vec3f=-O*invD;var t1=(vec3f(1.0)-O)*invD;var maxLod: i32= i32(highestMipLevel);var stackLevel: i32=0;
|
|
54
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
55
|
+
var steps: u32=0u;
|
|
56
|
+
#endif
|
|
57
|
+
stack[stackLevel]=maxLod<<24;stackLevel++;while (stackLevel>0) {stackLevel=stackLevel-1;var elem: i32=stack[stackLevel];var Coords: vec4i =
|
|
58
|
+
vec4i(elem & 0xFF,(elem>>8) & 0xFF,(elem>>16) & 0xFF,elem>>24);if (Coords.w==0) {
|
|
59
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
60
|
+
*voxel_march_diagnostic_info.heat= f32(steps)/24.0;
|
|
61
|
+
#endif
|
|
62
|
+
return true;}
|
|
63
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
64
|
+
++steps;
|
|
65
|
+
#endif
|
|
66
|
+
var invRes: f32=exp2(f32(Coords.w-maxLod));var bbmin: vec3f=invRes*vec3f(Coords.xyz+negD);var bbmax: vec3f=invRes*vec3f(Coords.xyz-negD+vec3i(1));var mint: vec3f=mix(t0,t1,bbmin);var maxt: vec3f=mix(t0,t1,bbmax);var midt: vec3f=0.5*(mint+maxt);mint.x=max(0.0,mint.x);midt.x=max(0.0,midt.x);var nodeMask: u32= u32(
|
|
67
|
+
round(textureLoad(voxelGridSampler,Coords.xyz,Coords.w).x*255.0));Coords.w--;var voxelBit: u32=u32(voxel0);Coords=vec4i((Coords.xyz<<vec3u(1))+negD,Coords.w);var packedCoords: i32 =
|
|
68
|
+
Coords.x | (Coords.y<<8) | (Coords.z<<16) | (Coords.w<<24);if (max(mint.x,max(mint.y,mint.z))<min(midt.x,min(midt.y,midt.z)) &&
|
|
69
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
70
|
+
voxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(midt.x,max(mint.y,mint.z))<min(maxt.x,min(midt.y,midt.z)) &&
|
|
71
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
72
|
+
voxelBit ^= 0x2;packedCoords ^= 0x00100;if (max(midt.x,max(midt.y,mint.z))<min(maxt.x,min(maxt.y,midt.z)) &&
|
|
73
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
74
|
+
voxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(mint.x,max(midt.y,mint.z))<min(midt.x,min(maxt.y,midt.z)) &&
|
|
75
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
76
|
+
voxelBit ^= 0x4;packedCoords ^= 0x10000;if (max(mint.x,max(midt.y,midt.z))<min(midt.x,min(maxt.y,maxt.z)) &&
|
|
77
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
78
|
+
voxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(midt.x,max(midt.y,midt.z))<min(maxt.x,min(maxt.y,maxt.z)) &&
|
|
79
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
80
|
+
voxelBit ^= 0x2;packedCoords ^= 0x00100;if (max(midt.x,max(mint.y,midt.z))<min(maxt.x,min(midt.y,maxt.z)) &&
|
|
81
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}
|
|
82
|
+
voxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(mint.x,max(mint.y,midt.z))<min(midt.x,min(midt.y,maxt.z)) &&
|
|
83
|
+
((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}}
|
|
84
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
85
|
+
*voxel_march_diagnostic_info.heat= f32(steps)/24.0;
|
|
86
|
+
#endif
|
|
87
|
+
return false;}
|
|
88
|
+
fn screenSpaceShadow(csOrigin: vec3f,csDirection: vec3f,csZBufferSize: vec2f,
|
|
89
|
+
nearPlaneZ: f32,noise: f32)->f32 {var csZDir: f32=select(-1.0,1.0,uniforms.projMtx[2][2]>0.0);var ssSamples: f32=SSSsamples;var ssMaxDist: f32=SSSmaxDistance;var ssStride: f32=SSSstride;var ssThickness: f32=SSSthickness;var rayLength: f32 =
|
|
90
|
+
select(ssMaxDist,(nearPlaneZ-csOrigin.z)/csDirection.z,
|
|
91
|
+
csZDir*(csOrigin.z+ssMaxDist*csDirection.z)<csZDir*nearPlaneZ);var csEndPoint: vec3f=csOrigin+rayLength*csDirection;var H0: vec4f=uniforms.projMtx* vec4f(csOrigin,1.0);var H1: vec4f=uniforms.projMtx* vec4f(csEndPoint,1.0);
|
|
92
|
+
#ifndef IS_NDC_HALF_ZRANGE
|
|
93
|
+
var Z0=(0.5*H0.z/H0.w+0.5);var Z1=(0.5*H1.z/H1.w+0.5);
|
|
94
|
+
#else
|
|
95
|
+
var Z0=(H0.z/H0.w);var Z1=(H1.z/H1.w);
|
|
96
|
+
#endif
|
|
97
|
+
var P0=csZBufferSize*(0.5*H0.xy/H0.w+0.5);var P1=csZBufferSize*(0.5*H1.xy/H1.w+0.5);P1+= vec2f(select(0.0,0.01,distanceSquared(P0,P1)<0.0001));var delta: vec2f=P1-P0;var permute: bool=false;if (abs(delta.x)<abs(delta.y)) {permute=true;P0=P0.yx;P1=P1.yx;delta=delta.yx;}
|
|
98
|
+
var stepDirection: f32=sign(delta.x);var invdx: f32=stepDirection/delta.x;var dP: vec2f=ssStride* vec2f(stepDirection,invdx*delta.y);var dZ=ssStride*invdx*(Z1-Z0);var opacity: f32=0.0;var P: vec2f=P0+noise*dP;var Z=Z0+noise*dZ;var end: f32=P1.x*stepDirection;Z+=dZ;for (var stepCount: f32=0.0;
|
|
99
|
+
opacity<1.0 && P.x*stepDirection<end && stepCount<ssSamples;stepCount+=1) {
|
|
100
|
+
var coords=vec2i(select(P,P.yx,permute));var sceneDepth=textureLoad(depthSampler,coords,0).x;var thicknessScale=pow(1.0-sceneDepth,1.6);opacity +=
|
|
101
|
+
max(opacity,step(Z+dZ,sceneDepth+thicknessScale*ssThickness) *
|
|
102
|
+
step(sceneDepth,Z));P+=dP;Z+=dZ;}
|
|
103
|
+
return opacity;}
|
|
104
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
105
|
+
fn voxelShadow(wsOrigin: vec3f,wsDirection: vec3f,wsNormal: vec3f,
|
|
106
|
+
DitherNoise: vec2f,
|
|
107
|
+
voxel_march_diagnostic_info: ptr<function,VoxelMarchDiagnosticInfo>)->f32 {
|
|
108
|
+
#else
|
|
109
|
+
fn voxelShadow(wsOrigin: vec3f,wsDirection: vec3f,wsNormal: vec3f,
|
|
110
|
+
DitherNoise: vec2f)->f32 {
|
|
111
|
+
#endif
|
|
112
|
+
var vxResolution: f32=f32(textureDimensions(voxelGridSampler,0).x);var T: vec3f;var B: vec3f;genTB(wsDirection,&T,&B);var DitherXY: vec2f=sqrt(DitherNoise.x)* vec2f(cos(2.0*PI*DitherNoise.y),
|
|
113
|
+
sin(2.0*PI*DitherNoise.y));var Dithering: vec3f =
|
|
114
|
+
(2.0*wsNormal+3.0*wsDirection+DitherXY.x*T+DitherXY.y*B) /
|
|
115
|
+
vxResolution;var O: vec3f=0.5*wsOrigin+0.5+Dithering;var ray_vs=make_ray(O,wsDirection,0.0,10.0);var voxel_aabb: AABB3f;voxel_aabb.m_min=vec3f(0);voxel_aabb.m_max=vec3f(1);var near: f32=0;var far: f32=0;if (!ray_box_intersection(voxel_aabb,ray_vs,&near,&far)) {return 0.0;}
|
|
116
|
+
ray_vs.t_min=max(ray_vs.t_min,near);ray_vs.t_max=min(ray_vs.t_max,far);
|
|
117
|
+
#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
118
|
+
return select(0.0f,1.0f,anyHitVoxels(ray_vs,voxel_march_diagnostic_info));
|
|
119
|
+
#else
|
|
120
|
+
return select(0.0f,1.0f,anyHitVoxels(ray_vs));
|
|
121
|
+
#endif
|
|
122
|
+
}
|
|
123
|
+
@fragment
|
|
124
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var nbDirs=u32(SHADOWdirs);var frameId=u32(SHADOWframe);var downscale=i32(SHADOWdownscale);var envRot: f32=SHADOWenvRot;var Resolution: vec2f= vec2f(textureDimensions(depthSampler,0));var currentPixel=vec2i(fragmentInputs.vUV*Resolution);var PixelCoord=vec2i(vec2f(currentPixel*downscale)+PixelOffset.xy);var GlobalIndex =
|
|
125
|
+
(frameId*u32(Resolution.y)+u32(PixelCoord.y))*u32(Resolution.x) +
|
|
126
|
+
u32(PixelCoord.x);var N: vec3f=textureLoad(worldNormalSampler,PixelCoord,0).xyz;N=N* vec3f(2.0)-vec3f(1.0);if (length(N)<0.01) {fragmentOutputs.color=vec4f(1.0,1.0,0.0,1.0);return fragmentOutputs;}
|
|
127
|
+
var normalizedRotation: f32=envRot/(2.0*PI);var depth: f32=textureLoad(depthSampler,PixelCoord,0).x;
|
|
128
|
+
#ifndef IS_NDC_HALF_ZRANGE
|
|
129
|
+
depth=depth*2.0-1.0;
|
|
130
|
+
#endif
|
|
131
|
+
var temp: vec2f=(vec2f(PixelCoord)+vec2f(0.5))*2.0/Resolution-vec2f(1.0);var temp2: vec2f=fragmentInputs.vUV*vec2f(2.0)-vec2f(1.0);var VP: vec4f=uniforms.invProjMtx*vec4f(temp.x,-temp.y,depth,1.0);VP/=VP.w;N=normalize(N);var noise: vec3f=textureLoad(blueNoiseSampler,PixelCoord & vec2i(0xFF),0).xyz;noise.z=fract(noise.z+goldenSequence(frameId*nbDirs));
|
|
132
|
+
#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
133
|
+
var heat: f32=0.0f;
|
|
134
|
+
#endif
|
|
135
|
+
var shadowAccum: f32=0.0;for (var i: u32=0; i<nbDirs; i++) {var dirId: u32=nbDirs*GlobalIndex+i;var L: vec4f;{var r: vec2f=plasticSequence(frameId*nbDirs+i);r=fract(r+ vec2f(2.0)*abs(noise.xy- vec2f(0.5)));var T: vec2f;T.x=textureSampleLevel(icdfxSampler,icdfxSamplerSampler,vec2f(r.x,0.0),0.0).x;T.y=textureSampleLevel(icdfySampler,icdfySamplerSampler,vec2f(T.x,r.y),0.0).x;T.x-=normalizedRotation;L= vec4f(uv_to_normal(T),0);}
|
|
136
|
+
var edge_tint_const=-0.001;var cosNL: f32=dot(N,L.xyz);var opacity: f32=select(0.0,1.0,cosNL<edge_tint_const);if (cosNL>edge_tint_const) {var VP2: vec4f=VP;VP2.y*=-1.0;var unormWP: vec4f=uniforms.invViewMtx*VP2;var WP: vec3f=(uniforms.wsNormalizationMtx*unormWP).xyz;var vxNoise: vec2f =
|
|
137
|
+
vec2f(uint2float(hash(dirId*2)),uint2float(hash(dirId*2+1)));
|
|
138
|
+
#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
139
|
+
VoxelMarchDiagnosticInfo voxel_march_diagnostic_info;opacity=max(opacity,
|
|
140
|
+
uniforms.shadowOpacity.x*voxelShadow(WP,L.xyz,N,vxNoise,
|
|
141
|
+
voxel_march_diagnostic_info));heat+=voxel_march_diagnostic_info.heat;
|
|
142
|
+
#else
|
|
143
|
+
opacity =
|
|
144
|
+
max(opacity,uniforms.shadowOpacity.x*voxelShadow(WP,L.xyz,N,vxNoise));
|
|
145
|
+
#endif
|
|
146
|
+
var VL: vec3f=(uniforms.viewMtx*L).xyz;var nearPlaneZ: f32 =
|
|
147
|
+
-uniforms.projMtx[3][2]/uniforms.projMtx[2][2];
|
|
148
|
+
var ssShadow: f32=uniforms.shadowOpacity.y *
|
|
149
|
+
screenSpaceShadow(VP2.xyz,VL,Resolution,nearPlaneZ,
|
|
150
|
+
abs(2.0*noise.z-1.0));opacity=max(opacity,ssShadow);shadowAccum+=min(1.0-opacity,smoothstep(-0.1,0.2,cosNL));} else {shadowAccum+=min(1.0-opacity,smoothstep(-0.1,0.2,cosNL));}
|
|
151
|
+
noise.z=fract(noise.z+GOLD);}
|
|
152
|
+
#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION
|
|
153
|
+
fragmentOutputs.color =
|
|
154
|
+
vec4f(shadowAccum/ f32(nbDirs),heat/ f32(nbDirs),0.0,1.0);
|
|
155
|
+
#else
|
|
156
|
+
fragmentOutputs.color= vec4f(shadowAccum/ f32(nbDirs),0.0,0.0,1.0);
|
|
157
|
+
#endif
|
|
158
|
+
}`;
|
|
159
|
+
// Sideeffect
|
|
160
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
161
|
+
/** @internal */
|
|
162
|
+
export const iblShadowVoxelTracingPixelShaderWGSL = { name, shader };
|
|
163
|
+
//# sourceMappingURL=iblShadowVoxelTracing.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowVoxelTracing.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowVoxelTracing.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,kCAAkC,CAAC;AAChD,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0Jb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowVoxelTracingPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;\n#define DISABLE_UNIFORMITY_ANALYSIS\nvar depthSampler: texture_2d<f32>;var worldNormalSampler: texture_2d<f32>;var worldPositionSampler: texture_2d<f32>;var blueNoiseSampler: texture_2d<f32>;var icdfxSamplerSampler: sampler;var icdfxSampler: texture_2d<f32>;var icdfySamplerSampler: sampler;var icdfySampler: texture_2d<f32>;var voxelGridSamplerSampler: sampler;var voxelGridSampler: texture_3d<f32>;uniform shadowParameters: vec4f;\n#define SHADOWdirs uniforms.shadowParameters.x\n#define SHADOWframe uniforms.shadowParameters.y\n#define SHADOWdownscale uniforms.shadowParameters.z\n#define SHADOWenvRot uniforms.shadowParameters.w\nuniform offsetDataParameters: vec4f;\n#define PixelOffset uniforms.offsetDataParameters.xy\n#define highestMipLevel uniforms.offsetDataParameters.z\nuniform sssParameters: vec4f;\n#define SSSsamples uniforms.sssParameters.x\n#define SSSstride uniforms.sssParameters.y\n#define SSSmaxDistance uniforms.sssParameters.z\n#define SSSthickness uniforms.sssParameters.w\nuniform shadowOpacity: vec4f;uniform projMtx: mat4x4f;uniform viewMtx: mat4x4f;uniform invProjMtx: mat4x4f;uniform invViewMtx: mat4x4f;uniform wsNormalizationMtx: mat4x4f;uniform invVPMtx: mat4x4f;\n#define PI 3.1415927\n#define GOLD 0.618034\nstruct AABB3f {m_min: vec3f,\nm_max: vec3f,};struct Ray {orig: vec3f,\ndir: vec3f,\ndir_rcp: vec3f,\nt_min: f32,\nt_max: f32,};fn make_ray(origin: vec3f,direction: vec3f,tmin: f32,\ntmax: f32)->Ray {var ray: Ray;ray.orig=origin;ray.dir=direction;ray.dir_rcp=1.0f/direction;ray.t_min=tmin;ray.t_max=tmax;return ray;}\nfn ray_box_intersection(aabb: AABB3f,ray: Ray ,\ndistance_near: ptr<function,f32>,distance_far: ptr<function,f32>)->bool{var tbot: vec3f=ray.dir_rcp*(aabb.m_min-ray.orig);var ttop: vec3f=ray.dir_rcp*(aabb.m_max-ray.orig);var tmin: vec3f=min(ttop,tbot);var tmax: vec3f=max(ttop,tbot);*distance_near=max(ray.t_min,max(tmin.x,max(tmin.y,tmin.z)));*distance_far=min(ray.t_max,min(tmax.x,min(tmax.y,tmax.z)));return *distance_near<=*distance_far;}\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nstruct VoxelMarchDiagnosticInfo {heat: f32,\nvoxel_intersect_coords: vec3i,};\n#endif\nfn hash(i: u32)->u32 {var temp=i ^ (i>>16u);temp*=0x7FEB352Du;temp ^= temp>>15u;temp*=0x846CA68Bu;temp ^= temp>>16u;return temp;}\nfn uintBitsToFloat(x: u32)->f32 {return bitcast<f32>(x);}\nfn uint2float(i: u32)->f32 {return uintBitsToFloat(0x3F800000u | (i>>9u))-1.0;}\nfn uv_to_normal(uv: vec2f)->vec3f {var N: vec3f;var uvRange: vec2f=uv;var theta: f32=uvRange.x*2.0*PI;var phi: f32=uvRange.y*PI;N.x=cos(theta)*sin(phi);N.z=sin(theta)*sin(phi);N.y=cos(phi);return N;}\nfn plasticSequence(rstate: u32)->vec2f {return vec2f(uint2float(rstate*3242174889u),\nuint2float(rstate*2447445414u));}\nfn goldenSequence(rstate: u32)->f32 {return uint2float(rstate*2654435769u);}\nfn distanceSquared(a: vec2f,b: vec2f)->f32 {var diff: vec2f=a-b;return dot(diff,diff);}\nfn genTB(N: vec3f,T: ptr<function,vec3f>,B: ptr<function,vec3f>) {var s: f32=select(1.0,-1.0,N.z<0.0);var a: f32=-1.0/(s+N.z);var b: f32=N.x*N.y*a;*T= vec3f(1.0+s*N.x*N.x*a,s*b,-s*N.x);*B= vec3f(b,s+N.y*N.y*a,-N.y);}\nfn lessThan(x: vec3f,y: vec3f)->vec3<bool> {return x<y;}\n#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nfn anyHitVoxels(ray_vs: Ray,\nvoxel_march_diagnostic_info: ptr<function,VoxelMarchDiagnosticInfo>)->bool {\n#else\nfn anyHitVoxels(ray_vs: Ray)->bool {\n#endif\nvar stack=array<i32,24>(); \nvar invD: vec3f=ray_vs.dir_rcp;var D: vec3f=ray_vs.dir;var O: vec3f=ray_vs.orig;var negD=vec3i(lessThan(D, vec3f(0,0,0)));var voxel0: i32=negD.x | (negD.y<<1) | (negD.z<<2);var t0: vec3f=-O*invD;var t1=(vec3f(1.0)-O)*invD;var maxLod: i32= i32(highestMipLevel);var stackLevel: i32=0;\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nvar steps: u32=0u;\n#endif\nstack[stackLevel]=maxLod<<24;stackLevel++;while (stackLevel>0) {stackLevel=stackLevel-1;var elem: i32=stack[stackLevel];var Coords: vec4i =\nvec4i(elem & 0xFF,(elem>>8) & 0xFF,(elem>>16) & 0xFF,elem>>24);if (Coords.w==0) {\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\n*voxel_march_diagnostic_info.heat= f32(steps)/24.0;\n#endif\nreturn true;}\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\n++steps;\n#endif\nvar invRes: f32=exp2(f32(Coords.w-maxLod));var bbmin: vec3f=invRes*vec3f(Coords.xyz+negD);var bbmax: vec3f=invRes*vec3f(Coords.xyz-negD+vec3i(1));var mint: vec3f=mix(t0,t1,bbmin);var maxt: vec3f=mix(t0,t1,bbmax);var midt: vec3f=0.5*(mint+maxt);mint.x=max(0.0,mint.x);midt.x=max(0.0,midt.x);var nodeMask: u32= u32(\nround(textureLoad(voxelGridSampler,Coords.xyz,Coords.w).x*255.0));Coords.w--;var voxelBit: u32=u32(voxel0);Coords=vec4i((Coords.xyz<<vec3u(1))+negD,Coords.w);var packedCoords: i32 =\nCoords.x | (Coords.y<<8) | (Coords.z<<16) | (Coords.w<<24);if (max(mint.x,max(mint.y,mint.z))<min(midt.x,min(midt.y,midt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(midt.x,max(mint.y,mint.z))<min(maxt.x,min(midt.y,midt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x2;packedCoords ^= 0x00100;if (max(midt.x,max(midt.y,mint.z))<min(maxt.x,min(maxt.y,midt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(mint.x,max(midt.y,mint.z))<min(midt.x,min(maxt.y,midt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x4;packedCoords ^= 0x10000;if (max(mint.x,max(midt.y,midt.z))<min(midt.x,min(maxt.y,maxt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(midt.x,max(midt.y,midt.z))<min(maxt.x,min(maxt.y,maxt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x2;packedCoords ^= 0x00100;if (max(midt.x,max(mint.y,midt.z))<min(maxt.x,min(midt.y,maxt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}\nvoxelBit ^= 0x1;packedCoords ^= 0x00001;if (max(mint.x,max(mint.y,midt.z))<min(midt.x,min(midt.y,maxt.z)) &&\n((1u<<voxelBit) & nodeMask) != 0) {stack[stackLevel]=packedCoords;stackLevel++;}}\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\n*voxel_march_diagnostic_info.heat= f32(steps)/24.0;\n#endif\nreturn false;}\nfn screenSpaceShadow(csOrigin: vec3f,csDirection: vec3f,csZBufferSize: vec2f,\nnearPlaneZ: f32,noise: f32)->f32 {var csZDir: f32=select(-1.0,1.0,uniforms.projMtx[2][2]>0.0);var ssSamples: f32=SSSsamples;var ssMaxDist: f32=SSSmaxDistance;var ssStride: f32=SSSstride;var ssThickness: f32=SSSthickness;var rayLength: f32 =\nselect(ssMaxDist,(nearPlaneZ-csOrigin.z)/csDirection.z,\ncsZDir*(csOrigin.z+ssMaxDist*csDirection.z)<csZDir*nearPlaneZ);var csEndPoint: vec3f=csOrigin+rayLength*csDirection;var H0: vec4f=uniforms.projMtx* vec4f(csOrigin,1.0);var H1: vec4f=uniforms.projMtx* vec4f(csEndPoint,1.0);\n#ifndef IS_NDC_HALF_ZRANGE\nvar Z0=(0.5*H0.z/H0.w+0.5);var Z1=(0.5*H1.z/H1.w+0.5);\n#else\nvar Z0=(H0.z/H0.w);var Z1=(H1.z/H1.w);\n#endif\nvar P0=csZBufferSize*(0.5*H0.xy/H0.w+0.5);var P1=csZBufferSize*(0.5*H1.xy/H1.w+0.5);P1+= vec2f(select(0.0,0.01,distanceSquared(P0,P1)<0.0001));var delta: vec2f=P1-P0;var permute: bool=false;if (abs(delta.x)<abs(delta.y)) {permute=true;P0=P0.yx;P1=P1.yx;delta=delta.yx;}\nvar stepDirection: f32=sign(delta.x);var invdx: f32=stepDirection/delta.x;var dP: vec2f=ssStride* vec2f(stepDirection,invdx*delta.y);var dZ=ssStride*invdx*(Z1-Z0);var opacity: f32=0.0;var P: vec2f=P0+noise*dP;var Z=Z0+noise*dZ;var end: f32=P1.x*stepDirection;Z+=dZ;for (var stepCount: f32=0.0; \nopacity<1.0 && P.x*stepDirection<end && stepCount<ssSamples;stepCount+=1) { \nvar coords=vec2i(select(P,P.yx,permute));var sceneDepth=textureLoad(depthSampler,coords,0).x;var thicknessScale=pow(1.0-sceneDepth,1.6);opacity +=\nmax(opacity,step(Z+dZ,sceneDepth+thicknessScale*ssThickness) *\nstep(sceneDepth,Z));P+=dP;Z+=dZ;}\nreturn opacity;}\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nfn voxelShadow(wsOrigin: vec3f,wsDirection: vec3f,wsNormal: vec3f,\nDitherNoise: vec2f,\nvoxel_march_diagnostic_info: ptr<function,VoxelMarchDiagnosticInfo>)->f32 {\n#else\nfn voxelShadow(wsOrigin: vec3f,wsDirection: vec3f,wsNormal: vec3f,\nDitherNoise: vec2f)->f32 {\n#endif\nvar vxResolution: f32=f32(textureDimensions(voxelGridSampler,0).x);var T: vec3f;var B: vec3f;genTB(wsDirection,&T,&B);var DitherXY: vec2f=sqrt(DitherNoise.x)* vec2f(cos(2.0*PI*DitherNoise.y),\nsin(2.0*PI*DitherNoise.y));var Dithering: vec3f =\n(2.0*wsNormal+3.0*wsDirection+DitherXY.x*T+DitherXY.y*B) /\nvxResolution;var O: vec3f=0.5*wsOrigin+0.5+Dithering;var ray_vs=make_ray(O,wsDirection,0.0,10.0);var voxel_aabb: AABB3f;voxel_aabb.m_min=vec3f(0);voxel_aabb.m_max=vec3f(1);var near: f32=0;var far: f32=0;if (!ray_box_intersection(voxel_aabb,ray_vs,&near,&far)) {return 0.0;}\nray_vs.t_min=max(ray_vs.t_min,near);ray_vs.t_max=min(ray_vs.t_max,far);\n#if VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nreturn select(0.0f,1.0f,anyHitVoxels(ray_vs,voxel_march_diagnostic_info));\n#else\nreturn select(0.0f,1.0f,anyHitVoxels(ray_vs));\n#endif\n}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var nbDirs=u32(SHADOWdirs);var frameId=u32(SHADOWframe);var downscale=i32(SHADOWdownscale);var envRot: f32=SHADOWenvRot;var Resolution: vec2f= vec2f(textureDimensions(depthSampler,0));var currentPixel=vec2i(fragmentInputs.vUV*Resolution);var PixelCoord=vec2i(vec2f(currentPixel*downscale)+PixelOffset.xy);var GlobalIndex =\n(frameId*u32(Resolution.y)+u32(PixelCoord.y))*u32(Resolution.x) +\nu32(PixelCoord.x);var N: vec3f=textureLoad(worldNormalSampler,PixelCoord,0).xyz;N=N* vec3f(2.0)-vec3f(1.0);if (length(N)<0.01) {fragmentOutputs.color=vec4f(1.0,1.0,0.0,1.0);return fragmentOutputs;}\nvar normalizedRotation: f32=envRot/(2.0*PI);var depth: f32=textureLoad(depthSampler,PixelCoord,0).x;\n#ifndef IS_NDC_HALF_ZRANGE\ndepth=depth*2.0-1.0;\n#endif\nvar temp: vec2f=(vec2f(PixelCoord)+vec2f(0.5))*2.0/Resolution-vec2f(1.0);var temp2: vec2f=fragmentInputs.vUV*vec2f(2.0)-vec2f(1.0);var VP: vec4f=uniforms.invProjMtx*vec4f(temp.x,-temp.y,depth,1.0);VP/=VP.w;N=normalize(N);var noise: vec3f=textureLoad(blueNoiseSampler,PixelCoord & vec2i(0xFF),0).xyz;noise.z=fract(noise.z+goldenSequence(frameId*nbDirs));\n#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nvar heat: f32=0.0f;\n#endif\nvar shadowAccum: f32=0.0;for (var i: u32=0; i<nbDirs; i++) {var dirId: u32=nbDirs*GlobalIndex+i;var L: vec4f;{var r: vec2f=plasticSequence(frameId*nbDirs+i);r=fract(r+ vec2f(2.0)*abs(noise.xy- vec2f(0.5)));var T: vec2f;T.x=textureSampleLevel(icdfxSampler,icdfxSamplerSampler,vec2f(r.x,0.0),0.0).x;T.y=textureSampleLevel(icdfySampler,icdfySamplerSampler,vec2f(T.x,r.y),0.0).x;T.x-=normalizedRotation;L= vec4f(uv_to_normal(T),0);}\nvar edge_tint_const=-0.001;var cosNL: f32=dot(N,L.xyz);var opacity: f32=select(0.0,1.0,cosNL<edge_tint_const);if (cosNL>edge_tint_const) {var VP2: vec4f=VP;VP2.y*=-1.0;var unormWP: vec4f=uniforms.invViewMtx*VP2;var WP: vec3f=(uniforms.wsNormalizationMtx*unormWP).xyz;var vxNoise: vec2f =\nvec2f(uint2float(hash(dirId*2)),uint2float(hash(dirId*2+1)));\n#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nVoxelMarchDiagnosticInfo voxel_march_diagnostic_info;opacity=max(opacity,\nuniforms.shadowOpacity.x*voxelShadow(WP,L.xyz,N,vxNoise,\nvoxel_march_diagnostic_info));heat+=voxel_march_diagnostic_info.heat;\n#else\nopacity =\nmax(opacity,uniforms.shadowOpacity.x*voxelShadow(WP,L.xyz,N,vxNoise));\n#endif\nvar VL: vec3f=(uniforms.viewMtx*L).xyz;var nearPlaneZ: f32 =\n-uniforms.projMtx[3][2]/uniforms.projMtx[2][2]; \nvar ssShadow: f32=uniforms.shadowOpacity.y *\nscreenSpaceShadow(VP2.xyz,VL,Resolution,nearPlaneZ,\nabs(2.0*noise.z-1.0));opacity=max(opacity,ssShadow);shadowAccum+=min(1.0-opacity,smoothstep(-0.1,0.2,cosNL));} else {shadowAccum+=min(1.0-opacity,smoothstep(-0.1,0.2,cosNL));}\nnoise.z=fract(noise.z+GOLD);}\n#ifdef VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION\nfragmentOutputs.color =\nvec4f(shadowAccum/ f32(nbDirs),heat/ f32(nbDirs),0.0,1.0);\n#else\nfragmentOutputs.color= vec4f(shadowAccum/ f32(nbDirs),0.0,0.0,1.0);\n#endif\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowVoxelTracingPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsCdfxPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;var cdfy: texture_2d<f32>;@fragment
|
|
6
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var cdfyRes=textureDimensions(cdfy,0);var currentPixel=vec2u(fragmentInputs.position.xy);var cdfx: f32=0.0;for (var x: u32=1; x<=currentPixel.x; x++) {cdfx+=textureLoad(cdfy, vec2u(x-1,cdfyRes.y-1),0).x;}
|
|
7
|
+
fragmentOutputs.color= vec4f( vec3f(cdfx),1.0);}`;
|
|
8
|
+
// Sideeffect
|
|
9
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const iblShadowsCdfxPixelShaderWGSL = { name, shader };
|
|
12
|
+
//# sourceMappingURL=iblShadowsCdfx.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsCdfx.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsCdfx.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,2BAA2B,CAAC;AACzC,MAAM,MAAM,GAAG;;;iDAGkC,CAAC;AAClD,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsCdfxPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;var cdfy: texture_2d<f32>;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var cdfyRes=textureDimensions(cdfy,0);var currentPixel=vec2u(fragmentInputs.position.xy);var cdfx: f32=0.0;for (var x: u32=1; x<=currentPixel.x; x++) {cdfx+=textureLoad(cdfy, vec2u(x-1,cdfyRes.y-1),0).x;}\nfragmentOutputs.color= vec4f( vec3f(cdfx),1.0);}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsCdfxPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsCdfyPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;
|
|
6
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
7
|
+
var iblSourceSampler: sampler;var iblSource: texture_cube<f32>;
|
|
8
|
+
#else
|
|
9
|
+
var iblSourceSampler: sampler;var iblSource: texture_2d<f32>;
|
|
10
|
+
#endif
|
|
11
|
+
uniform iblHeight: i32;
|
|
12
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
13
|
+
fn equirectangularToCubemapDirection(uv: vec2f)->vec3f {var longitude: f32=uv.x*2.0*PI-PI;var latitude: f32=PI*0.5-uv.y*PI;var direction: vec3f;direction.x=cos(latitude)*sin(longitude);direction.y=sin(latitude);direction.z=cos(latitude)*cos(longitude);return direction;}
|
|
14
|
+
fn fetchCube(uv: vec2f)->f32 {var direction: vec3f=equirectangularToCubemapDirection(uv);return sin(PI*uv.y)*dot(textureSampleLevel(iblSource,iblSourceSampler,direction,0.0).rgb,
|
|
15
|
+
vec3f(0.3,0.6,0.1));}
|
|
16
|
+
#else
|
|
17
|
+
fn fetchPanoramic(Coords: vec2i,envmapHeight: f32)->f32 {return sin(PI*( f32(Coords.y)+0.5)/envmapHeight) *
|
|
18
|
+
dot(textureLoad(iblSource,Coords,0).rgb, vec3f(0.3,0.6,0.1));}
|
|
19
|
+
#endif
|
|
20
|
+
@fragment
|
|
21
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var coords: vec2i= vec2i(fragmentInputs.position.xy);var cdfy: f32=0.0;for (var y: i32=1; y<=coords.y; y++) {
|
|
22
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
23
|
+
var uv: vec2f= vec2f(input.vUV.x,( f32(y-1)+0.5)/ f32(uniforms.iblHeight));cdfy+=fetchCube(uv);
|
|
24
|
+
#else
|
|
25
|
+
cdfy+=fetchPanoramic( vec2i(coords.x,y-1), f32(uniforms.iblHeight));
|
|
26
|
+
#endif
|
|
27
|
+
}
|
|
28
|
+
fragmentOutputs.color= vec4f(cdfy,0.0,0.0,1.0);}`;
|
|
29
|
+
// Sideeffect
|
|
30
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
31
|
+
/** @internal */
|
|
32
|
+
export const iblShadowsCdfyPixelShaderWGSL = { name, shader };
|
|
33
|
+
//# sourceMappingURL=iblShadowsCdfy.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsCdfy.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsCdfy.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,2BAA2B,CAAC;AACzC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;iDAwBkC,CAAC;AAClD,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsCdfyPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;\n#ifdef IBL_USE_CUBE_MAP\nvar iblSourceSampler: sampler;var iblSource: texture_cube<f32>;\n#else\nvar iblSourceSampler: sampler;var iblSource: texture_2d<f32>;\n#endif\nuniform iblHeight: i32;\n#ifdef IBL_USE_CUBE_MAP\nfn equirectangularToCubemapDirection(uv: vec2f)->vec3f {var longitude: f32=uv.x*2.0*PI-PI;var latitude: f32=PI*0.5-uv.y*PI;var direction: vec3f;direction.x=cos(latitude)*sin(longitude);direction.y=sin(latitude);direction.z=cos(latitude)*cos(longitude);return direction;}\nfn fetchCube(uv: vec2f)->f32 {var direction: vec3f=equirectangularToCubemapDirection(uv);return sin(PI*uv.y)*dot(textureSampleLevel(iblSource,iblSourceSampler,direction,0.0).rgb,\nvec3f(0.3,0.6,0.1));}\n#else\nfn fetchPanoramic(Coords: vec2i,envmapHeight: f32)->f32 {return sin(PI*( f32(Coords.y)+0.5)/envmapHeight) *\ndot(textureLoad(iblSource,Coords,0).rgb, vec3f(0.3,0.6,0.1));}\n#endif\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var coords: vec2i= vec2i(fragmentInputs.position.xy);var cdfy: f32=0.0;for (var y: i32=1; y<=coords.y; y++) {\n#ifdef IBL_USE_CUBE_MAP\nvar uv: vec2f= vec2f(input.vUV.x,( f32(y-1)+0.5)/ f32(uniforms.iblHeight));cdfy+=fetchCube(uv);\n#else\ncdfy+=fetchPanoramic( vec2i(coords.x,y-1), f32(uniforms.iblHeight));\n#endif\n}\nfragmentOutputs.color= vec4f(cdfy,0.0,0.0,1.0);}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsCdfyPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsCombinePixelShader";
|
|
4
|
+
const shader = `varying vUV: vec2f;var sceneTextureSampler: sampler;var sceneTexture: texture_2d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform shadowOpacity: f32;@fragment
|
|
5
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var color: vec3f=textureSample(sceneTexture,sceneTextureSampler,input.vUV).rgb;var shadow: vec3f=textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb;var shadowValue: f32=mix(1.0,shadow.x,uniforms.shadowOpacity);fragmentOutputs.color=vec4f(color*shadowValue,1.0);}`;
|
|
6
|
+
// Sideeffect
|
|
7
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
8
|
+
/** @internal */
|
|
9
|
+
export const iblShadowsCombinePixelShaderWGSL = { name, shader };
|
|
10
|
+
//# sourceMappingURL=iblShadowsCombine.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsCombine.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsCombine.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG;uUACwT,CAAC;AACxU,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsCombinePixelShader\";\nconst shader = `varying vUV: vec2f;var sceneTextureSampler: sampler;var sceneTexture: texture_2d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform shadowOpacity: f32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var color: vec3f=textureSample(sceneTexture,sceneTextureSampler,input.vUV).rgb;var shadow: vec3f=textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb;var shadowValue: f32=mix(1.0,shadow.x,uniforms.shadowOpacity);fragmentOutputs.color=vec4f(color*shadowValue,1.0);}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsCombinePixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsIcdfxPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;var cdfx: texture_2d<f32>;fn fetchCDF(x: u32)->f32 {return textureLoad(cdfx, vec2u(x,0),0).x;}
|
|
6
|
+
fn bisect(size: u32,targetValue: f32)->f32
|
|
7
|
+
{var a: u32=0;var b=size-1;while (b-a>1) {var c: u32=(a+b)>>1;if (fetchCDF(c)<targetValue) {a=c;}
|
|
8
|
+
else {b=c;}}
|
|
9
|
+
return mix( f32(a), f32(b),(targetValue-fetchCDF(a))/(fetchCDF(b)-fetchCDF(a)))/ f32(size-1);}
|
|
10
|
+
@fragment
|
|
11
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var cdfSize: vec2u=textureDimensions(cdfx,0);var cdfWidth: u32=cdfSize.x;var icdfWidth: u32=cdfWidth-1;var currentPixel: vec2u= vec2u(fragmentInputs.position.xy);if (currentPixel.x==0)
|
|
12
|
+
{fragmentOutputs.color= vec4f(0.0);}
|
|
13
|
+
else if (currentPixel.x==icdfWidth-1) {fragmentOutputs.color= vec4f(1.0);} else {var targetValue: f32=fetchCDF(cdfWidth-1)*input.vUV.x;fragmentOutputs.color= vec4f( vec3f(bisect(cdfWidth,targetValue)),1.0);}}`;
|
|
14
|
+
// Sideeffect
|
|
15
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
16
|
+
/** @internal */
|
|
17
|
+
export const iblShadowsIcdfxPixelShaderWGSL = { name, shader };
|
|
18
|
+
//# sourceMappingURL=iblShadowsIcdfx.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsIcdfx.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsIcdfx.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;;iNASkM,CAAC;AAClN,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsIcdfxPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;var cdfx: texture_2d<f32>;fn fetchCDF(x: u32)->f32 {return textureLoad(cdfx, vec2u(x,0),0).x;}\nfn bisect(size: u32,targetValue: f32)->f32\n{var a: u32=0;var b=size-1;while (b-a>1) {var c: u32=(a+b)>>1;if (fetchCDF(c)<targetValue) {a=c;}\nelse {b=c;}}\nreturn mix( f32(a), f32(b),(targetValue-fetchCDF(a))/(fetchCDF(b)-fetchCDF(a)))/ f32(size-1);}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var cdfSize: vec2u=textureDimensions(cdfx,0);var cdfWidth: u32=cdfSize.x;var icdfWidth: u32=cdfWidth-1;var currentPixel: vec2u= vec2u(fragmentInputs.position.xy);if (currentPixel.x==0)\n{fragmentOutputs.color= vec4f(0.0);}\nelse if (currentPixel.x==icdfWidth-1) {fragmentOutputs.color= vec4f(1.0);} else {var targetValue: f32=fetchCDF(cdfWidth-1)*input.vUV.x;fragmentOutputs.color= vec4f( vec3f(bisect(cdfWidth,targetValue)),1.0);}}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsIcdfxPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsIcdfyPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;var cdfy: texture_2d<f32>;fn fetchCDF(y: u32,invocationId: u32)->f32 {return textureLoad(cdfy, vec2u(invocationId,y),0).x;}
|
|
6
|
+
fn bisect(size: u32,targetValue: f32,invocationId: u32)->f32
|
|
7
|
+
{var a: u32=0;var b=size-1;while (b-a>1) {var c=(a+b)>>1;if (fetchCDF(c,invocationId)<targetValue) {a=c;}
|
|
8
|
+
else {b=c;}}
|
|
9
|
+
return mix( f32(a), f32(b),(targetValue-fetchCDF(a,invocationId))/(fetchCDF(b,invocationId)-fetchCDF(a,invocationId)))/ f32(size-1);}
|
|
10
|
+
@fragment
|
|
11
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var cdfSize: vec2u=textureDimensions(cdfy,0);var cdfHeight: u32=cdfSize.y;var currentPixel: vec2u= vec2u(fragmentInputs.position.xy);if (currentPixel.y==0) {fragmentOutputs.color= vec4f(0.0);}
|
|
12
|
+
else if (currentPixel.y==cdfHeight-2) {fragmentOutputs.color= vec4f(1.0);} else {var targetValue: f32=fetchCDF(cdfHeight-1,currentPixel.x)*input.vUV.y;fragmentOutputs.color= vec4f( vec3f(bisect(cdfHeight,targetValue,currentPixel.x)),1.0);}}`;
|
|
13
|
+
// Sideeffect
|
|
14
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
15
|
+
/** @internal */
|
|
16
|
+
export const iblShadowsIcdfyPixelShaderWGSL = { name, shader };
|
|
17
|
+
//# sourceMappingURL=iblShadowsIcdfy.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsIcdfy.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsIcdfy.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;iPAQkO,CAAC;AAClP,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsIcdfyPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;var cdfy: texture_2d<f32>;fn fetchCDF(y: u32,invocationId: u32)->f32 {return textureLoad(cdfy, vec2u(invocationId,y),0).x;}\nfn bisect(size: u32,targetValue: f32,invocationId: u32)->f32\n{var a: u32=0;var b=size-1;while (b-a>1) {var c=(a+b)>>1;if (fetchCDF(c,invocationId)<targetValue) {a=c;}\nelse {b=c;}}\nreturn mix( f32(a), f32(b),(targetValue-fetchCDF(a,invocationId))/(fetchCDF(b,invocationId)-fetchCDF(a,invocationId)))/ f32(size-1);}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var cdfSize: vec2u=textureDimensions(cdfy,0);var cdfHeight: u32=cdfSize.y;var currentPixel: vec2u= vec2u(fragmentInputs.position.xy);if (currentPixel.y==0) {fragmentOutputs.color= vec4f(0.0);}\nelse if (currentPixel.y==cdfHeight-2) {fragmentOutputs.color= vec4f(1.0);} else {var targetValue: f32=fetchCDF(cdfHeight-1,currentPixel.x)*input.vUV.y;fragmentOutputs.color= vec4f( vec3f(bisect(cdfHeight,targetValue,currentPixel.x)),1.0);}}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsIcdfyPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblShadowsImportanceSamplingDebugPixelShader";
|
|
4
|
+
const shader = `#define PI 3.1415927
|
|
5
|
+
varying vUV: vec2f;var cdfySampler: sampler;var cdfy: texture_2d<f32>;var icdfySampler: sampler;var icdfy: texture_2d<f32>;var cdfxSampler: sampler;var cdfx: texture_2d<f32>;var icdfxSampler: sampler;var icdfx: texture_2d<f32>;
|
|
6
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
7
|
+
var iblSourceSampler: sampler;var iblSource: texture_cube<f32>;
|
|
8
|
+
#else
|
|
9
|
+
var iblSourceSampler: sampler;var iblSource: texture_2d<f32>;
|
|
10
|
+
#endif
|
|
11
|
+
var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;
|
|
12
|
+
#define cdfyVSize 0.4
|
|
13
|
+
#define cdfxVSize 0.1
|
|
14
|
+
#define cdfyHSize 0.5
|
|
15
|
+
uniform sizeParams: vec4f;
|
|
16
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
17
|
+
fn equirectangularToCubemapDirection(uv: vec2f)->vec3f {var longitude: f32=uv.x*2.0*PI-PI;var latitude: f32=PI*0.5-uv.y*PI;var direction: vec3f;direction.x=cos(latitude)*sin(longitude);direction.y=sin(latitude);direction.z=cos(latitude)*cos(longitude);return direction;}
|
|
18
|
+
#endif
|
|
19
|
+
@fragment
|
|
20
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
21
|
+
var colour: vec3f= vec3f(0.0);var uv: vec2f =
|
|
22
|
+
vec2f((uniforms.sizeParams.x+input.vUV.x)*uniforms.sizeParams.z,(uniforms.sizeParams.y+input.vUV.y)*uniforms.sizeParams.w);var backgroundColour: vec3f=textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb;const iblStart: f32=1.0-cdfyVSize;const cdfyStart: f32=1.0-2.0*cdfyVSize;const cdfxStart: f32=1.0-2.0*cdfyVSize-cdfxVSize;const icdfxStart: f32=1.0-2.0*cdfyVSize-2.0*cdfxVSize;
|
|
23
|
+
#ifdef IBL_USE_CUBE_MAP
|
|
24
|
+
var direction: vec3f=equirectangularToCubemapDirection(
|
|
25
|
+
(uv- vec2f(0.0,iblStart))* vec2f(1.0,1.0/cdfyVSize));var iblColour: vec3f=textureSampleLevel(iblSource,iblSourceSampler,direction,0.0).rgb;
|
|
26
|
+
#else
|
|
27
|
+
var iblColour: vec3f=textureSample(iblSource,iblSourceSampler,(uv- vec2f(0.0,iblStart)) *
|
|
28
|
+
vec2f(1.0,1.0/cdfyVSize))
|
|
29
|
+
.rgb;
|
|
30
|
+
#endif
|
|
31
|
+
var cdfyColour: f32 =
|
|
32
|
+
textureSample(cdfy,cdfySampler,(uv- vec2f(0.0,cdfyStart))* vec2f(2.0,1.0/cdfyVSize)).r;var icdfyColour: f32 =
|
|
33
|
+
textureSample(icdfy,icdfySampler,(uv- vec2f(0.5,cdfyStart))* vec2f(2.0,1.0/cdfyVSize)).r;var cdfxColour: f32 =
|
|
34
|
+
textureSample(cdfx,cdfxSampler,(uv- vec2f(0.0,cdfxStart))* vec2f(1.0,1.0/cdfxVSize)).r;var icdfxColour: f32=textureSample(icdfx,icdfxSampler,(uv- vec2f(0.0,icdfxStart)) *
|
|
35
|
+
vec2f(1.0,1.0/cdfxVSize)).r;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {colour=backgroundColour;} else if (uv.y>iblStart) {colour+=iblColour;} else if (uv.y>cdfyStart && uv.x<0.5) {colour.r+=0.003*cdfyColour;} else if (uv.y>cdfyStart && uv.x>0.5) {colour.r+=icdfyColour;} else if (uv.y>cdfxStart) {colour.r+=0.00003*cdfxColour;} else if (uv.y>icdfxStart) {colour.r+=icdfxColour;}
|
|
36
|
+
fragmentOutputs.color =vec4(mix(colour,backgroundColour,0.5),1.0);}`;
|
|
37
|
+
// Sideeffect
|
|
38
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
39
|
+
/** @internal */
|
|
40
|
+
export const iblShadowsImportanceSamplingDebugPixelShaderWGSL = { name, shader };
|
|
41
|
+
//# sourceMappingURL=iblShadowsImportanceSamplingDebug.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblShadowsImportanceSamplingDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,8CAA8C,CAAC;AAC5D,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAgCqD,CAAC;AACrE,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,gDAAgD,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblShadowsImportanceSamplingDebugPixelShader\";\nconst shader = `#define PI 3.1415927\nvarying vUV: vec2f;var cdfySampler: sampler;var cdfy: texture_2d<f32>;var icdfySampler: sampler;var icdfy: texture_2d<f32>;var cdfxSampler: sampler;var cdfx: texture_2d<f32>;var icdfxSampler: sampler;var icdfx: texture_2d<f32>;\n#ifdef IBL_USE_CUBE_MAP\nvar iblSourceSampler: sampler;var iblSource: texture_cube<f32>;\n#else\nvar iblSourceSampler: sampler;var iblSource: texture_2d<f32>;\n#endif\nvar textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;\n#define cdfyVSize 0.4\n#define cdfxVSize 0.1\n#define cdfyHSize 0.5\nuniform sizeParams: vec4f;\n#ifdef IBL_USE_CUBE_MAP\nfn equirectangularToCubemapDirection(uv: vec2f)->vec3f {var longitude: f32=uv.x*2.0*PI-PI;var latitude: f32=PI*0.5-uv.y*PI;var direction: vec3f;direction.x=cos(latitude)*sin(longitude);direction.y=sin(latitude);direction.z=cos(latitude)*cos(longitude);return direction;}\n#endif\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs { \nvar colour: vec3f= vec3f(0.0);var uv: vec2f =\nvec2f((uniforms.sizeParams.x+input.vUV.x)*uniforms.sizeParams.z,(uniforms.sizeParams.y+input.vUV.y)*uniforms.sizeParams.w);var backgroundColour: vec3f=textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb;const iblStart: f32=1.0-cdfyVSize;const cdfyStart: f32=1.0-2.0*cdfyVSize;const cdfxStart: f32=1.0-2.0*cdfyVSize-cdfxVSize;const icdfxStart: f32=1.0-2.0*cdfyVSize-2.0*cdfxVSize;\n#ifdef IBL_USE_CUBE_MAP\nvar direction: vec3f=equirectangularToCubemapDirection(\n(uv- vec2f(0.0,iblStart))* vec2f(1.0,1.0/cdfyVSize));var iblColour: vec3f=textureSampleLevel(iblSource,iblSourceSampler,direction,0.0).rgb;\n#else\nvar iblColour: vec3f=textureSample(iblSource,iblSourceSampler,(uv- vec2f(0.0,iblStart)) *\nvec2f(1.0,1.0/cdfyVSize))\n.rgb;\n#endif\nvar cdfyColour: f32 =\ntextureSample(cdfy,cdfySampler,(uv- vec2f(0.0,cdfyStart))* vec2f(2.0,1.0/cdfyVSize)).r;var icdfyColour: f32 =\ntextureSample(icdfy,icdfySampler,(uv- vec2f(0.5,cdfyStart))* vec2f(2.0,1.0/cdfyVSize)).r;var cdfxColour: f32 =\ntextureSample(cdfx,cdfxSampler,(uv- vec2f(0.0,cdfxStart))* vec2f(1.0,1.0/cdfxVSize)).r;var icdfxColour: f32=textureSample(icdfx,icdfxSampler,(uv- vec2f(0.0,icdfxStart)) *\nvec2f(1.0,1.0/cdfxVSize)).r;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {colour=backgroundColour;} else if (uv.y>iblStart) {colour+=iblColour;} else if (uv.y>cdfyStart && uv.x<0.5) {colour.r+=0.003*cdfyColour;} else if (uv.y>cdfyStart && uv.x>0.5) {colour.r+=icdfyColour;} else if (uv.y>cdfxStart) {colour.r+=0.00003*cdfxColour;} else if (uv.y>icdfxStart) {colour.r+=icdfxColour;}\nfragmentOutputs.color =vec4(mix(colour,backgroundColour,0.5),1.0);}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblShadowsImportanceSamplingDebugPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelGridPixelShader";
|
|
4
|
+
const shader = `varying vNormalizedPosition: vec3f;uniform nearPlane: f32;uniform farPlane: f32;uniform stepSize: f32;@fragment
|
|
5
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var normPos: vec3f=input.vNormalizedPosition.xyz;if (normPos.z<uniforms.nearPlane || normPos.z>uniforms.farPlane) {discard;}
|
|
6
|
+
fragmentOutputs.fragData0=select(vec4f(0.0),vec4f(1.0),normPos.z<uniforms.nearPlane+uniforms.stepSize);fragmentOutputs.fragData1=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+uniforms.stepSize && normPos.z<uniforms.nearPlane+2.0*uniforms.stepSize);fragmentOutputs.fragData2=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+2.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+3.0*uniforms.stepSize);fragmentOutputs.fragData3=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+3.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+4.0*uniforms.stepSize);
|
|
7
|
+
#if MAX_DRAW_BUFFERS>4
|
|
8
|
+
fragmentOutputs.fragData4=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+4.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+5.0*uniforms.stepSize);fragmentOutputs.fragData5=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+5.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+6.0*uniforms.stepSize);fragmentOutputs.fragData6=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+6.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+7.0*uniforms.stepSize);fragmentOutputs.fragData7=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+7.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+8.0*uniforms.stepSize);
|
|
9
|
+
#endif
|
|
10
|
+
}`;
|
|
11
|
+
// Sideeffect
|
|
12
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
13
|
+
/** @internal */
|
|
14
|
+
export const iblVoxelGridPixelShaderWGSL = { name, shader };
|
|
15
|
+
//# sourceMappingURL=iblVoxelGrid.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,MAAM,GAAG;;;;;;EAMb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGridPixelShader\";\nconst shader = `varying vNormalizedPosition: vec3f;uniform nearPlane: f32;uniform farPlane: f32;uniform stepSize: f32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var normPos: vec3f=input.vNormalizedPosition.xyz;if (normPos.z<uniforms.nearPlane || normPos.z>uniforms.farPlane) {discard;}\nfragmentOutputs.fragData0=select(vec4f(0.0),vec4f(1.0),normPos.z<uniforms.nearPlane+uniforms.stepSize);fragmentOutputs.fragData1=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+uniforms.stepSize && normPos.z<uniforms.nearPlane+2.0*uniforms.stepSize);fragmentOutputs.fragData2=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+2.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+3.0*uniforms.stepSize);fragmentOutputs.fragData3=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+3.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+4.0*uniforms.stepSize);\n#if MAX_DRAW_BUFFERS>4\nfragmentOutputs.fragData4=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+4.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+5.0*uniforms.stepSize);fragmentOutputs.fragData5=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+5.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+6.0*uniforms.stepSize);fragmentOutputs.fragData6=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+6.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+7.0*uniforms.stepSize);fragmentOutputs.fragData7=select(vec4f(0.0),vec4f(1.0),normPos.z>=uniforms.nearPlane+7.0*uniforms.stepSize && normPos.z<uniforms.nearPlane+8.0*uniforms.stepSize);\n#endif\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblVoxelGridPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelGridVertexShader";
|
|
4
|
+
const shader = `attribute position: vec3f;attribute normal: vec3f;varying vNormalizedPosition: vec3f;uniform world: mat4x4f;uniform invWorldScale: mat4x4f;uniform viewMatrix: mat4x4f;@vertex
|
|
5
|
+
fn main(input : VertexInputs)->FragmentInputs {vertexOutputs.position=uniforms.viewMatrix*uniforms.invWorldScale*uniforms.world* vec4f(input.position,1.);vertexOutputs.vNormalizedPosition=vertexOutputs.position.xyz*0.5+0.5;
|
|
6
|
+
#ifdef IS_NDC_HALF_ZRANGE
|
|
7
|
+
vertexOutputs.position=vec4f(vertexOutputs.position.x,vertexOutputs.position.y,vertexOutputs.position.z*0.5+0.5,vertexOutputs.position.w);
|
|
8
|
+
#endif
|
|
9
|
+
}`;
|
|
10
|
+
// Sideeffect
|
|
11
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const iblVoxelGridVertexShaderWGSL = { name, shader };
|
|
14
|
+
//# sourceMappingURL=iblVoxelGrid.vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;;;EAKb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGridVertexShader\";\nconst shader = `attribute position: vec3f;attribute normal: vec3f;varying vNormalizedPosition: vec3f;uniform world: mat4x4f;uniform invWorldScale: mat4x4f;uniform viewMatrix: mat4x4f;@vertex\nfn main(input : VertexInputs)->FragmentInputs {vertexOutputs.position=uniforms.viewMatrix*uniforms.invWorldScale*uniforms.world* vec4f(input.position,1.);vertexOutputs.vNormalizedPosition=vertexOutputs.position.xyz*0.5+0.5;\n#ifdef IS_NDC_HALF_ZRANGE\nvertexOutputs.position=vec4f(vertexOutputs.position.x,vertexOutputs.position.y,vertexOutputs.position.z*0.5+0.5,vertexOutputs.position.w);\n#endif\n}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblVoxelGridVertexShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelGrid2dArrayDebugPixelShader";
|
|
4
|
+
const shader = `varying vUV: vec2f;var voxelTextureSampler: sampler;var voxelTexture: texture_3d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform slice: i32;@fragment
|
|
5
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var size: vec3u=textureDimensions(voxelTexture,0);var dimension: f32=sqrt( f32(size.z));var samplePos: vec2f=fract(input.vUV.xy* vec2f(dimension));var sampleIndex: u32= u32(floor(input.vUV.x* f32(dimension))+floor(input.vUV.y* f32(dimension))*dimension);var color=textureSample(voxelTexture,voxelTextureSampler, vec3f(samplePos.xy,sampleIndex)).rrr;color+=textureSample(textureSampler,textureSamplerSampler,input.vUV.xy).rgb;fragmentOutputs.color=vec4f(color,1.0);}`;
|
|
6
|
+
// Sideeffect
|
|
7
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
8
|
+
/** @internal */
|
|
9
|
+
export const iblVoxelGrid2dArrayDebugPixelShaderWGSL = { name, shader };
|
|
10
|
+
//# sourceMappingURL=iblVoxelGrid2dArrayDebug.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid2dArrayDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid2dArrayDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,qCAAqC,CAAC;AACnD,MAAM,MAAM,GAAG;mgBACof,CAAC;AACpgB,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,uCAAuC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGrid2dArrayDebugPixelShader\";\nconst shader = `varying vUV: vec2f;var voxelTextureSampler: sampler;var voxelTexture: texture_3d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform slice: i32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var size: vec3u=textureDimensions(voxelTexture,0);var dimension: f32=sqrt( f32(size.z));var samplePos: vec2f=fract(input.vUV.xy* vec2f(dimension));var sampleIndex: u32= u32(floor(input.vUV.x* f32(dimension))+floor(input.vUV.y* f32(dimension))*dimension);var color=textureSample(voxelTexture,voxelTextureSampler, vec3f(samplePos.xy,sampleIndex)).rrr;color+=textureSample(textureSampler,textureSamplerSampler,input.vUV.xy).rgb;fragmentOutputs.color=vec4f(color,1.0);}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblVoxelGrid2dArrayDebugPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelGrid3dDebugPixelShader";
|
|
4
|
+
const shader = `varying vUV: vec2f;var voxelTextureSampler: sampler;var voxelTexture: texture_3d<f32>;var voxelSlabTextureSampler: sampler;var voxelSlabTexture: texture_2d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform sizeParams: vec4f;
|
|
5
|
+
#define offsetX uniforms.sizeParams.x
|
|
6
|
+
#define offsetY uniforms.sizeParams.y
|
|
7
|
+
#define widthScale uniforms.sizeParams.z
|
|
8
|
+
#define heightScale uniforms.sizeParams.w
|
|
9
|
+
uniform mipNumber: f32;@fragment
|
|
10
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var uv: vec2f =
|
|
11
|
+
vec2f((offsetX+input.vUV.x)*widthScale,(offsetY+input.vUV.y)*heightScale);var background: vec4f=textureSample(textureSampler,textureSamplerSampler,input.vUV);var voxelSlab: vec4f=textureSample(voxelSlabTexture,voxelSlabTextureSampler,input.vUV);var size: vec3u=textureDimensions(voxelTexture, i32(uniforms.mipNumber));var dimension: f32=ceil(sqrt( f32(size.z)));var samplePos: vec2f=fract(uv.xy* vec2f(dimension));var sampleIndex: u32= u32(floor(uv.x* f32(dimension)) +
|
|
12
|
+
floor(uv.y* f32(dimension))*dimension);var mip_separator: f32=0.0;if (samplePos.x<0.01 || samplePos.y<0.01) {mip_separator=1.0;}
|
|
13
|
+
var outBounds: bool=select(false,true,sampleIndex>size.z-1);sampleIndex=clamp(sampleIndex,0,size.z-1);var samplePosInt: vec2i= vec2i(samplePos.xy* vec2f(size.xy));var voxel: vec3f=textureLoad(voxelTexture,
|
|
14
|
+
vec3i(i32(samplePosInt.x),i32(samplePosInt.y),i32(sampleIndex)),
|
|
15
|
+
i32(uniforms.mipNumber)).rgb;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {fragmentOutputs.color=background;} else {if (outBounds) {voxel= vec3f(0.15,0.0,0.0);} else {if (voxel.r>0.001) {voxel.g=1.0;}
|
|
16
|
+
voxel.r+=mip_separator;}
|
|
17
|
+
fragmentOutputs.color=vec4f(mix(background.rgb,voxelSlab.rgb,voxelSlab.a)+voxel,1.0);}}`;
|
|
18
|
+
// Sideeffect
|
|
19
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
20
|
+
/** @internal */
|
|
21
|
+
export const iblVoxelGrid3dDebugPixelShaderWGSL = { name, shader };
|
|
22
|
+
//# sourceMappingURL=iblVoxelGrid3dDebug.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid3dDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid3dDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAC9C,MAAM,MAAM,GAAG;;;;;;;;;;;;;wFAayE,CAAC;AACzF,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,kCAAkC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelGrid3dDebugPixelShader\";\nconst shader = `varying vUV: vec2f;var voxelTextureSampler: sampler;var voxelTexture: texture_3d<f32>;var voxelSlabTextureSampler: sampler;var voxelSlabTexture: texture_2d<f32>;var textureSamplerSampler: sampler;var textureSampler: texture_2d<f32>;uniform sizeParams: vec4f;\n#define offsetX uniforms.sizeParams.x\n#define offsetY uniforms.sizeParams.y\n#define widthScale uniforms.sizeParams.z\n#define heightScale uniforms.sizeParams.w\nuniform mipNumber: f32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var uv: vec2f =\nvec2f((offsetX+input.vUV.x)*widthScale,(offsetY+input.vUV.y)*heightScale);var background: vec4f=textureSample(textureSampler,textureSamplerSampler,input.vUV);var voxelSlab: vec4f=textureSample(voxelSlabTexture,voxelSlabTextureSampler,input.vUV);var size: vec3u=textureDimensions(voxelTexture, i32(uniforms.mipNumber));var dimension: f32=ceil(sqrt( f32(size.z)));var samplePos: vec2f=fract(uv.xy* vec2f(dimension));var sampleIndex: u32= u32(floor(uv.x* f32(dimension)) +\nfloor(uv.y* f32(dimension))*dimension);var mip_separator: f32=0.0;if (samplePos.x<0.01 || samplePos.y<0.01) {mip_separator=1.0;}\nvar outBounds: bool=select(false,true,sampleIndex>size.z-1);sampleIndex=clamp(sampleIndex,0,size.z-1);var samplePosInt: vec2i= vec2i(samplePos.xy* vec2f(size.xy));var voxel: vec3f=textureLoad(voxelTexture,\nvec3i(i32(samplePosInt.x),i32(samplePosInt.y),i32(sampleIndex)),\ni32(uniforms.mipNumber)).rgb;if (uv.x<0.0 || uv.x>1.0 || uv.y<0.0 || uv.y>1.0) {fragmentOutputs.color=background;} else {if (outBounds) {voxel= vec3f(0.15,0.0,0.0);} else {if (voxel.r>0.001) {voxel.g=1.0;}\nvoxel.r+=mip_separator;}\nfragmentOutputs.color=vec4f(mix(background.rgb,voxelSlab.rgb,voxelSlab.a)+voxel,1.0);}}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblVoxelGrid3dDebugPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelSlabDebugPixelShader";
|
|
4
|
+
const shader = `varying vNormalizedPosition: vec3f;uniform nearPlane: f32;uniform farPlane: f32;uniform stepSize: f32;@fragment
|
|
5
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var normPos: vec3f=input.vNormalizedPosition.xyz;var chunkSize: f32=uniforms.stepSize* f32(MAX_DRAW_BUFFERS);var numChunks: f32=1.0/chunkSize;var positionInChunk: f32=fract(normPos.z/chunkSize);var slab: f32=floor(positionInChunk* f32(MAX_DRAW_BUFFERS)) /
|
|
6
|
+
f32(MAX_DRAW_BUFFERS);if (normPos.x<0.0 || normPos.y<0.0 || normPos.z<0.0 ||
|
|
7
|
+
normPos.x>1.0 || normPos.y>1.0 || normPos.z>1.0) {fragmentOutputs.color= vec4f(0.0,0.0,0.0,0.0);} else {fragmentOutputs.color= vec4f(slab,0.0,0.0,0.75);}}`;
|
|
8
|
+
// Sideeffect
|
|
9
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const iblVoxelSlabDebugPixelShaderWGSL = { name, shader };
|
|
12
|
+
//# sourceMappingURL=iblVoxelSlabDebug.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iblVoxelSlabDebug.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelSlabDebug.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,MAAM,MAAM,GAAG;;;2JAG4I,CAAC;AAC5J,aAAa;AACb,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,gBAAgB;AAChB,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"iblVoxelSlabDebugPixelShader\";\nconst shader = `varying vNormalizedPosition: vec3f;uniform nearPlane: f32;uniform farPlane: f32;uniform stepSize: f32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var normPos: vec3f=input.vNormalizedPosition.xyz;var chunkSize: f32=uniforms.stepSize* f32(MAX_DRAW_BUFFERS);var numChunks: f32=1.0/chunkSize;var positionInChunk: f32=fract(normPos.z/chunkSize);var slab: f32=floor(positionInChunk* f32(MAX_DRAW_BUFFERS)) /\nf32(MAX_DRAW_BUFFERS);if (normPos.x<0.0 || normPos.y<0.0 || normPos.z<0.0 ||\nnormPos.x>1.0 || normPos.y>1.0 || normPos.z>1.0) {fragmentOutputs.color= vec4f(0.0,0.0,0.0,0.0);} else {fragmentOutputs.color= vec4f(slab,0.0,0.0,0.75);}}`;\n// Sideeffect\nShaderStore.ShadersStoreWGSL[name] = shader;\n/** @internal */\nexport const iblVoxelSlabDebugPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
const name = "iblVoxelSlabDebugVertexShader";
|
|
4
|
+
const shader = `attribute position: vec3f;varying vNormalizedPosition: vec3f;uniform world: mat4x4f;uniform invWorldScale: mat4x4f;uniform cameraViewMatrix: mat4x4f;uniform projection: mat4x4f;uniform viewMatrix: mat4x4f;@vertex
|
|
5
|
+
fn main(input : VertexInputs)->FragmentInputs {var worldPosition: vec4f=(uniforms.world* vec4f(input.position,1.));vertexOutputs.position=uniforms.projection*uniforms.cameraViewMatrix*worldPosition;vertexOutputs.vNormalizedPosition=(uniforms.viewMatrix*uniforms.invWorldScale*worldPosition).rgb;vertexOutputs.vNormalizedPosition=vertexOutputs.vNormalizedPosition* vec3f(0.5)+ vec3f(0.5);}`;
|
|
6
|
+
// Sideeffect
|
|
7
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
8
|
+
/** @internal */
|
|
9
|
+
export const iblVoxelSlabDebugVertexShaderWGSL = { name, shader };
|
|
10
|
+
//# sourceMappingURL=iblVoxelSlabDebug.vertex.js.map
|