@babylonjs/core 5.6.0 → 5.8.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.
Files changed (136) hide show
  1. package/Animations/animation.js +2 -1
  2. package/Animations/animation.js.map +1 -1
  3. package/Animations/easing.d.ts +14 -14
  4. package/Animations/easing.js +13 -13
  5. package/Animations/easing.js.map +1 -1
  6. package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
  7. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  8. package/DeviceInput/InputDevices/webDeviceInputSystem.js +1 -1
  9. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  10. package/Engines/Extensions/engine.dynamicBuffer.js +7 -5
  11. package/Engines/Extensions/engine.dynamicBuffer.js.map +1 -1
  12. package/Engines/Extensions/engine.multiRender.js +10 -1
  13. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  14. package/Engines/Extensions/engine.rawTexture.d.ts +4 -2
  15. package/Engines/Extensions/engine.rawTexture.js +7 -4
  16. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  17. package/Engines/Native/nativeInterfaces.d.ts +2 -0
  18. package/Engines/Native/nativeInterfaces.js.map +1 -1
  19. package/Engines/WebGPU/Extensions/engine.computeShader.js +3 -1
  20. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  21. package/Engines/WebGPU/Extensions/engine.dynamicBuffer.js +3 -21
  22. package/Engines/WebGPU/Extensions/engine.dynamicBuffer.js.map +1 -1
  23. package/Engines/WebGPU/Extensions/engine.multiRender.js +7 -0
  24. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  25. package/Engines/WebGPU/Extensions/engine.rawTexture.js +7 -3
  26. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  27. package/Engines/WebGPU/webgpuConstants.d.ts +8 -2
  28. package/Engines/WebGPU/webgpuConstants.js +15 -8
  29. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  30. package/Engines/WebGPU/webgpuTextureHelper.js +4 -0
  31. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  32. package/Engines/constants.d.ts +2 -0
  33. package/Engines/constants.js +2 -0
  34. package/Engines/constants.js.map +1 -1
  35. package/Engines/engine.d.ts +59 -51
  36. package/Engines/engine.js +2 -2
  37. package/Engines/engine.js.map +1 -1
  38. package/Engines/engineCapabilities.d.ts +2 -0
  39. package/Engines/engineCapabilities.js.map +1 -1
  40. package/Engines/engineFactory.d.ts +2 -2
  41. package/Engines/engineFactory.js.map +1 -1
  42. package/Engines/nativeEngine.d.ts +4 -4
  43. package/Engines/nativeEngine.js +12 -7
  44. package/Engines/nativeEngine.js.map +1 -1
  45. package/Engines/nullEngine.d.ts +4 -2
  46. package/Engines/nullEngine.js +9 -2
  47. package/Engines/nullEngine.js.map +1 -1
  48. package/Engines/thinEngine.d.ts +1 -0
  49. package/Engines/thinEngine.js +43 -5
  50. package/Engines/thinEngine.js.map +1 -1
  51. package/Engines/webgpuEngine.js +3 -8
  52. package/Engines/webgpuEngine.js.map +1 -1
  53. package/Gizmos/boundingBoxGizmo.js +5 -0
  54. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  55. package/Loading/Plugins/babylonFileLoader.js +1 -0
  56. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  57. package/Materials/Background/backgroundMaterial.js +1 -1
  58. package/Materials/Background/backgroundMaterial.js.map +1 -1
  59. package/Materials/Node/Blocks/Dual/index.d.ts +0 -1
  60. package/Materials/Node/Blocks/Dual/index.js +0 -1
  61. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  62. package/Materials/Node/Blocks/{Dual → Fragment}/TBNBlock.d.ts +0 -0
  63. package/Materials/Node/Blocks/{Dual → Fragment}/TBNBlock.js +4 -4
  64. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -0
  65. package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
  66. package/Materials/Node/Blocks/Fragment/index.js +1 -0
  67. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  68. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -1
  69. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  70. package/Materials/Node/Blocks/Input/inputBlock.js +7 -0
  71. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  72. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +1 -1
  73. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  74. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +1 -1
  75. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  76. package/Materials/Node/nodeMaterial.d.ts +4 -2
  77. package/Materials/Node/nodeMaterial.js +13 -5
  78. package/Materials/Node/nodeMaterial.js.map +1 -1
  79. package/Materials/PBR/pbrBaseMaterial.js +2 -2
  80. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  81. package/Materials/Textures/internalTexture.js +1 -1
  82. package/Materials/Textures/internalTexture.js.map +1 -1
  83. package/Materials/Textures/multiRenderTarget.d.ts +4 -0
  84. package/Materials/Textures/multiRenderTarget.js +16 -3
  85. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  86. package/Materials/Textures/rawTexture.d.ts +10 -4
  87. package/Materials/Textures/rawTexture.js +20 -9
  88. package/Materials/Textures/rawTexture.js.map +1 -1
  89. package/Materials/shaderMaterial.js +2 -1
  90. package/Materials/shaderMaterial.js.map +1 -1
  91. package/Materials/standardMaterial.js +7 -2
  92. package/Materials/standardMaterial.js.map +1 -1
  93. package/Maths/math.vector.js +5 -5
  94. package/Maths/math.vector.js.map +1 -1
  95. package/Meshes/Builders/groundBuilder.d.ts +1 -1
  96. package/Meshes/Builders/groundBuilder.js.map +1 -1
  97. package/Meshes/Builders/linesBuilder.js +4 -0
  98. package/Meshes/Builders/linesBuilder.js.map +1 -1
  99. package/Meshes/abstractMesh.d.ts +15 -5
  100. package/Meshes/abstractMesh.js +46 -27
  101. package/Meshes/abstractMesh.js.map +1 -1
  102. package/Meshes/instancedMesh.js +1 -0
  103. package/Meshes/instancedMesh.js.map +1 -1
  104. package/Meshes/mesh.d.ts +1 -1
  105. package/Meshes/mesh.js +60 -32
  106. package/Meshes/mesh.js.map +1 -1
  107. package/Meshes/subMesh.js +1 -1
  108. package/Meshes/subMesh.js.map +1 -1
  109. package/Morph/morphTargetManager.js +2 -1
  110. package/Morph/morphTargetManager.js.map +1 -1
  111. package/Particles/particleHelper.js +3 -2
  112. package/Particles/particleHelper.js.map +1 -1
  113. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -1
  114. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -1
  115. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  116. package/PostProcesses/depthOfFieldBlurPostProcess.d.ts +1 -1
  117. package/PostProcesses/depthOfFieldBlurPostProcess.js +2 -4
  118. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  119. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  120. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  121. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  122. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  123. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +1 -1
  124. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  125. package/Shaders/ShadersInclude/vertexColorMixing.js +1 -1
  126. package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
  127. package/Shaders/default.fragment.js +1 -1
  128. package/Shaders/default.fragment.js.map +1 -1
  129. package/Sprites/spriteManager.js +2 -1
  130. package/Sprites/spriteManager.js.map +1 -1
  131. package/XR/features/WebXRControllerPointerSelection.js +1 -1
  132. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  133. package/package.json +1 -1
  134. package/scene.d.ts +1 -1
  135. package/scene.js.map +1 -1
  136. package/Materials/Node/Blocks/Dual/TBNBlock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"defaultRenderingPipeline.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../../types\";\r\nimport { serialize, SerializationHelper } from \"../../../Misc/decorators\";\r\nimport type { Observer } from \"../../../Misc/observable\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\nimport type { IAnimatable } from \"../../../Animations/animatable.interface\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { ImageProcessingConfiguration } from \"../../../Materials/imageProcessingConfiguration\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport type { Engine } from \"../../../Engines/engine\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { IDisposable, Scene } from \"../../../scene\";\r\nimport { GlowLayer } from \"../../../Layers/glowLayer\";\r\n\r\nimport type { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { SharpenPostProcess } from \"../../../PostProcesses/sharpenPostProcess\";\r\nimport { ImageProcessingPostProcess } from \"../../../PostProcesses/imageProcessingPostProcess\";\r\nimport { ChromaticAberrationPostProcess } from \"../../../PostProcesses/chromaticAberrationPostProcess\";\r\nimport { GrainPostProcess } from \"../../../PostProcesses/grainPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { DepthOfFieldEffect, DepthOfFieldEffectBlurLevel } from \"../../../PostProcesses/depthOfFieldEffect\";\r\nimport { BloomEffect } from \"../../../PostProcesses/bloomEffect\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\ndeclare type Animation = import(\"../../../Animations/animation\").Animation;\r\n\r\n/**\r\n * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.\r\n * See https://doc.babylonjs.com/how_to/using_default_rendering_pipeline\r\n */\r\nexport class DefaultRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n private _scene: Scene;\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n /**\r\n * ID of the sharpen post process,\r\n */\r\n private readonly SharpenPostProcessId: string = \"SharpenPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the image processing post process;\r\n */\r\n readonly ImageProcessingPostProcessId: string = \"ImageProcessingPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the Fast Approximate Anti-Aliasing post process;\r\n */\r\n readonly FxaaPostProcessId: string = \"FxaaPostProcessEffect\";\r\n /**\r\n * ID of the chromatic aberration post process,\r\n */\r\n private readonly ChromaticAberrationPostProcessId: string = \"ChromaticAberrationPostProcessEffect\";\r\n /**\r\n * ID of the grain post process\r\n */\r\n private readonly GrainPostProcessId: string = \"GrainPostProcessEffect\";\r\n\r\n // Post-processes\r\n /**\r\n * Sharpen post process which will apply a sharpen convolution to enhance edges\r\n */\r\n public sharpen: SharpenPostProcess;\r\n private _sharpenEffect: PostProcessRenderEffect;\r\n private bloom: BloomEffect;\r\n /**\r\n * Depth of field effect, applies a blur based on how far away objects are from the focus distance.\r\n */\r\n public depthOfField: DepthOfFieldEffect;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaa: FxaaPostProcess;\r\n /**\r\n * Image post processing pass used to perform operations such as tone mapping or color grading.\r\n */\r\n public imageProcessing: ImageProcessingPostProcess;\r\n /**\r\n * Chromatic aberration post process which will shift rgb colors in the image\r\n */\r\n public chromaticAberration: ChromaticAberrationPostProcess;\r\n private _chromaticAberrationEffect: PostProcessRenderEffect;\r\n /**\r\n * Grain post process which add noise to the image\r\n */\r\n public grain: GrainPostProcess;\r\n private _grainEffect: PostProcessRenderEffect;\r\n /**\r\n * Glow post process which adds a glow to emissive areas of the image\r\n */\r\n private _glowLayer: Nullable<GlowLayer> = null;\r\n\r\n /**\r\n * Animations which can be used to tweak settings over a period of time\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _imageProcessingConfigurationObserver: Nullable<Observer<ImageProcessingConfiguration>> = null;\r\n // Values\r\n private _sharpenEnabled: boolean = false;\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _depthOfFieldBlurLevel = DepthOfFieldEffectBlurLevel.Low;\r\n private _fxaaEnabled: boolean = false;\r\n private _imageProcessingEnabled: boolean = true;\r\n private _defaultPipelineTextureType: number;\r\n private _bloomScale: number = 0.5;\r\n private _chromaticAberrationEnabled: boolean = false;\r\n private _grainEnabled: boolean = false;\r\n\r\n private _buildAllowed = true;\r\n\r\n /**\r\n * This is triggered each time the pipeline has been built.\r\n */\r\n public onBuildObservable = new Observable<DefaultRenderingPipeline>();\r\n\r\n /**\r\n * Gets active scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Enable or disable the sharpen process from the pipeline\r\n */\r\n public set sharpenEnabled(enabled: boolean) {\r\n if (this._sharpenEnabled === enabled) {\r\n return;\r\n }\r\n this._sharpenEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get sharpenEnabled(): boolean {\r\n return this._sharpenEnabled;\r\n }\r\n\r\n private _resizeObserver: Nullable<Observer<Engine>> = null;\r\n private _hardwareScaleLevel = 1.0;\r\n private _bloomKernel: number = 64;\r\n /**\r\n * Specifies the size of the bloom blur kernel, relative to the final output size\r\n */\r\n @serialize()\r\n public get bloomKernel(): number {\r\n return this._bloomKernel;\r\n }\r\n public set bloomKernel(value: number) {\r\n this._bloomKernel = value;\r\n this.bloom.kernel = value / this._hardwareScaleLevel;\r\n }\r\n\r\n /**\r\n * Specifies the weight of the bloom in the final rendering\r\n */\r\n @serialize()\r\n private _bloomWeight: number = 0.15;\r\n /**\r\n * Specifies the luma threshold for the area that will be blurred by the bloom\r\n */\r\n @serialize()\r\n private _bloomThreshold: number = 0.9;\r\n\r\n @serialize()\r\n private _hdr: boolean;\r\n\r\n /**\r\n * The strength of the bloom.\r\n */\r\n public set bloomWeight(value: number) {\r\n if (this._bloomWeight === value) {\r\n return;\r\n }\r\n this.bloom.weight = value;\r\n\r\n this._bloomWeight = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomWeight(): number {\r\n return this._bloomWeight;\r\n }\r\n\r\n /**\r\n * The strength of the bloom.\r\n */\r\n public set bloomThreshold(value: number) {\r\n if (this._bloomThreshold === value) {\r\n return;\r\n }\r\n this.bloom.threshold = value;\r\n this._bloomThreshold = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomThreshold(): number {\r\n return this._bloomThreshold;\r\n }\r\n\r\n /**\r\n * The scale of the bloom, lower value will provide better performance.\r\n */\r\n public set bloomScale(value: number) {\r\n if (this._bloomScale === value) {\r\n return;\r\n }\r\n this._bloomScale = value;\r\n\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n this._rebuildBloom();\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomScale(): number {\r\n return this._bloomScale;\r\n }\r\n\r\n /**\r\n * Enable or disable the bloom from the pipeline\r\n */\r\n public set bloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n this._bloomEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n private _rebuildBloom() {\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n const oldBloom = this.bloom;\r\n this.bloom = new BloomEffect(this._scene, this.bloomScale, this._bloomWeight, this.bloomKernel, this._defaultPipelineTextureType, false);\r\n this.bloom.threshold = oldBloom.threshold;\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldBloom.disposeEffects(this._cameras[i]);\r\n }\r\n }\r\n\r\n /**\r\n * If the depth of field is enabled.\r\n */\r\n @serialize()\r\n public get depthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set depthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n this._depthOfFieldEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Blur level of the depth of field effect. (Higher blur will effect performance)\r\n */\r\n @serialize()\r\n public get depthOfFieldBlurLevel(): DepthOfFieldEffectBlurLevel {\r\n return this._depthOfFieldBlurLevel;\r\n }\r\n\r\n public set depthOfFieldBlurLevel(value: DepthOfFieldEffectBlurLevel) {\r\n if (this._depthOfFieldBlurLevel === value) {\r\n return;\r\n }\r\n this._depthOfFieldBlurLevel = value;\r\n\r\n // recreate dof and dispose old as this setting is not dynamic\r\n const oldDof = this.depthOfField;\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, false);\r\n this.depthOfField.focalLength = oldDof.focalLength;\r\n this.depthOfField.focusDistance = oldDof.focusDistance;\r\n this.depthOfField.fStop = oldDof.fStop;\r\n this.depthOfField.lensSize = oldDof.lensSize;\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldDof.disposeEffects(this._cameras[i]);\r\n }\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * If the anti aliasing is enabled.\r\n */\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n this._fxaaEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n private _samples = 1;\r\n /**\r\n * MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n this._samples = sampleCount;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * If image processing is enabled.\r\n */\r\n public set imageProcessingEnabled(enabled: boolean) {\r\n if (this._imageProcessingEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._scene.imageProcessingConfiguration.isEnabled = enabled;\r\n }\r\n\r\n @serialize()\r\n public get imageProcessingEnabled(): boolean {\r\n return this._imageProcessingEnabled;\r\n }\r\n\r\n /**\r\n * If glow layer is enabled. (Adds a glow effect to emmissive materials)\r\n */\r\n public set glowLayerEnabled(enabled: boolean) {\r\n if (enabled && !this._glowLayer) {\r\n this._glowLayer = new GlowLayer(\"\", this._scene);\r\n } else if (!enabled && this._glowLayer) {\r\n this._glowLayer.dispose();\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n @serialize()\r\n public get glowLayerEnabled(): boolean {\r\n return this._glowLayer != null;\r\n }\r\n\r\n /**\r\n * Gets the glow layer (or null if not defined)\r\n */\r\n public get glowLayer() {\r\n return this._glowLayer;\r\n }\r\n\r\n /**\r\n * Enable or disable the chromaticAberration process from the pipeline\r\n */\r\n public set chromaticAberrationEnabled(enabled: boolean) {\r\n if (this._chromaticAberrationEnabled === enabled) {\r\n return;\r\n }\r\n this._chromaticAberrationEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get chromaticAberrationEnabled(): boolean {\r\n return this._chromaticAberrationEnabled;\r\n }\r\n /**\r\n * Enable or disable the grain process from the pipeline\r\n */\r\n public set grainEnabled(enabled: boolean) {\r\n if (this._grainEnabled === enabled) {\r\n return;\r\n }\r\n this._grainEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get grainEnabled(): boolean {\r\n return this._grainEnabled;\r\n }\r\n\r\n /**\r\n * @constructor\r\n * @param name - The rendering pipeline name (default: \"\")\r\n * @param hdr - If high dynamic range textures should be used (default: true)\r\n * @param scene - The scene linked to this pipeline (default: the last created scene)\r\n * @param cameras - The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)\r\n * @param automaticBuild - if false, you will have to manually call prepare() to update the pipeline (default: true)\r\n */\r\n constructor(name: string = \"\", hdr: boolean = true, scene: Scene = EngineStore.LastCreatedScene!, cameras?: Camera[], automaticBuild = true) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n this._buildAllowed = automaticBuild;\r\n\r\n // Initialize\r\n this._scene = scene;\r\n const caps = this._scene.getEngine().getCaps();\r\n this._hdr = hdr && (caps.textureHalfFloatRender || caps.textureFloatRender);\r\n\r\n // Misc\r\n if (this._hdr) {\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n } else {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n // Attach\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n\r\n const engine = this._scene.getEngine();\r\n // Create post processes before hand so they can be modified before enabled.\r\n // Block compilation flag is set to true to avoid compilation prior to use, these will be updated on first use in build pipeline.\r\n this.sharpen = new SharpenPostProcess(\"sharpen\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._sharpenEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.SharpenPostProcessId,\r\n () => {\r\n return this.sharpen;\r\n },\r\n true\r\n );\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, true);\r\n\r\n this.bloom = new BloomEffect(this._scene, this._bloomScale, this._bloomWeight, this.bloomKernel, this._defaultPipelineTextureType, true);\r\n\r\n this.chromaticAberration = new ChromaticAberrationPostProcess(\r\n \"ChromaticAberration\",\r\n engine.getRenderWidth(),\r\n engine.getRenderHeight(),\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n true\r\n );\r\n this._chromaticAberrationEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.ChromaticAberrationPostProcessId,\r\n () => {\r\n return this.chromaticAberration;\r\n },\r\n true\r\n );\r\n\r\n this.grain = new GrainPostProcess(\"Grain\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._grainEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.GrainPostProcessId,\r\n () => {\r\n return this.grain;\r\n },\r\n true\r\n );\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this.bloomKernel = this._bloomKernel;\r\n });\r\n\r\n this._imageProcessingConfigurationObserver = this._scene.imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this.bloom._downscale._exposure = this._scene.imageProcessingConfiguration.exposure;\r\n\r\n if (this.imageProcessingEnabled !== this._scene.imageProcessingConfiguration.isEnabled) {\r\n this._imageProcessingEnabled = this._scene.imageProcessingConfiguration.isEnabled;\r\n this._buildPipeline();\r\n }\r\n });\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"DefaultRenderingPipeline\"\r\n */\r\n public getClassName(): string {\r\n return \"DefaultRenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Force the compilation of the entire pipeline.\r\n */\r\n public prepare(): void {\r\n const previousState = this._buildAllowed;\r\n this._buildAllowed = true;\r\n this._buildPipeline();\r\n this._buildAllowed = previousState;\r\n }\r\n\r\n private _hasCleared = false;\r\n private _prevPostProcess: Nullable<PostProcess> = null;\r\n private _prevPrevPostProcess: Nullable<PostProcess> = null;\r\n\r\n private _setAutoClearAndTextureSharing(postProcess: PostProcess, skipTextureSharing = false) {\r\n if (this._hasCleared) {\r\n postProcess.autoClear = false;\r\n } else {\r\n postProcess.autoClear = true;\r\n this._scene.autoClear = false;\r\n this._hasCleared = true;\r\n }\r\n\r\n if (!skipTextureSharing) {\r\n if (this._prevPrevPostProcess) {\r\n postProcess.shareOutputWith(this._prevPrevPostProcess);\r\n } else {\r\n postProcess.useOwnOutput();\r\n }\r\n\r\n if (this._prevPostProcess) {\r\n this._prevPrevPostProcess = this._prevPostProcess;\r\n }\r\n this._prevPostProcess = postProcess;\r\n }\r\n }\r\n\r\n private _depthOfFieldSceneObserver: Nullable<Observer<Scene>> = null;\r\n\r\n private _buildPipeline() {\r\n if (!this._buildAllowed) {\r\n return;\r\n }\r\n this._scene.autoClear = true;\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n this._prevPostProcess = null;\r\n this._prevPrevPostProcess = null;\r\n this._hasCleared = false;\r\n\r\n if (this.depthOfFieldEnabled) {\r\n // Multi camera suport\r\n if (this._cameras.length > 1) {\r\n for (const camera of this._cameras) {\r\n const depthRenderer = this._scene.enableDepthRenderer(camera);\r\n depthRenderer.useOnlyInActiveCamera = true;\r\n }\r\n\r\n this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add((scene) => {\r\n if (this._cameras.indexOf(scene.activeCamera!) > -1) {\r\n this.depthOfField.depthTexture = scene.enableDepthRenderer(scene.activeCamera).getDepthMap();\r\n }\r\n });\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n const depthRenderer = this._scene.enableDepthRenderer(this._cameras[0]);\r\n this.depthOfField.depthTexture = depthRenderer.getDepthMap();\r\n }\r\n\r\n if (!this.depthOfField._isReady()) {\r\n this.depthOfField._updateEffects();\r\n }\r\n this.addEffect(this.depthOfField);\r\n this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n }\r\n\r\n if (this.bloomEnabled) {\r\n if (!this.bloom._isReady()) {\r\n this.bloom._updateEffects();\r\n }\r\n this.addEffect(this.bloom);\r\n this._setAutoClearAndTextureSharing(this.bloom._effects[0], true);\r\n }\r\n\r\n if (this._imageProcessingEnabled) {\r\n this.imageProcessing = new ImageProcessingPostProcess(\r\n \"imageProcessing\",\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n this.scene.imageProcessingConfiguration\r\n );\r\n if (this._hdr) {\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.ImageProcessingPostProcessId,\r\n () => {\r\n return this.imageProcessing;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.imageProcessing);\r\n } else {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.cameras || this.cameras.length === 0) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.imageProcessing.getEffect()) {\r\n this.imageProcessing._updateParameters();\r\n }\r\n }\r\n\r\n if (this.sharpenEnabled) {\r\n if (!this.sharpen.isReady()) {\r\n this.sharpen.updateEffect();\r\n }\r\n this.addEffect(this._sharpenEffect);\r\n this._setAutoClearAndTextureSharing(this.sharpen);\r\n }\r\n\r\n if (this.grainEnabled) {\r\n if (!this.grain.isReady()) {\r\n this.grain.updateEffect();\r\n }\r\n this.addEffect(this._grainEffect);\r\n this._setAutoClearAndTextureSharing(this.grain);\r\n }\r\n\r\n if (this.chromaticAberrationEnabled) {\r\n if (!this.chromaticAberration.isReady()) {\r\n this.chromaticAberration.updateEffect();\r\n }\r\n this.addEffect(this._chromaticAberrationEffect);\r\n this._setAutoClearAndTextureSharing(this.chromaticAberration);\r\n }\r\n\r\n if (this.fxaaEnabled) {\r\n this.fxaa = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.FxaaPostProcessId,\r\n () => {\r\n return this.fxaa;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.fxaa, true);\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n // In multicamera mode, the scene needs to autoclear in between cameras.\r\n if (this._scene.activeCameras && this._scene.activeCameras.length > 1) {\r\n this._scene.autoClear = true;\r\n }\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this.samples) && this.samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n private _disposePostProcesses(disposeNonRecreated = false): void {\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n const camera = this._cameras[i];\r\n\r\n if (this.imageProcessing) {\r\n this.imageProcessing.dispose(camera);\r\n }\r\n\r\n if (this.fxaa) {\r\n this.fxaa.dispose(camera);\r\n }\r\n\r\n // These are created in the constructor and should not be disposed on every pipeline change\r\n if (disposeNonRecreated) {\r\n if (this.sharpen) {\r\n this.sharpen.dispose(camera);\r\n }\r\n\r\n if (this.depthOfField) {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n this.depthOfField.disposeEffects(camera);\r\n }\r\n\r\n if (this.bloom) {\r\n this.bloom.disposeEffects(camera);\r\n }\r\n\r\n if (this.chromaticAberration) {\r\n this.chromaticAberration.dispose(camera);\r\n }\r\n\r\n if (this.grain) {\r\n this.grain.dispose(camera);\r\n }\r\n if (this._glowLayer) {\r\n this._glowLayer.dispose();\r\n }\r\n }\r\n }\r\n\r\n (<any>this.imageProcessing) = null;\r\n (<any>this.fxaa) = null;\r\n\r\n if (disposeNonRecreated) {\r\n (<any>this.sharpen) = null;\r\n (<any>this._sharpenEffect) = null;\r\n (<any>this.depthOfField) = null;\r\n (<any>this.bloom) = null;\r\n (<any>this.chromaticAberration) = null;\r\n (<any>this._chromaticAberrationEffect) = null;\r\n (<any>this.grain) = null;\r\n (<any>this._grainEffect) = null;\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a camera to the pipeline\r\n * @param camera the camera to be added\r\n */\r\n public addCamera(camera: Camera): void {\r\n this._camerasToBeAttached.push(camera);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes a camera from the pipeline\r\n * @param camera the camera to remove\r\n */\r\n public removeCamera(camera: Camera): void {\r\n const index = this._camerasToBeAttached.indexOf(camera);\r\n this._camerasToBeAttached.splice(index, 1);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public dispose(): void {\r\n this.onBuildObservable.clear();\r\n this._disposePostProcesses(true);\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n this._scene.autoClear = true;\r\n if (this._resizeObserver) {\r\n this._scene.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this._scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigurationObserver);\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"DefaultRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): DefaultRenderingPipeline {\r\n return SerializationHelper.Parse(() => new DefaultRenderingPipeline(source._name, source._name._hdr, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DefaultRenderingPipeline\", DefaultRenderingPipeline);\r\n"]}
1
+ {"version":3,"file":"defaultRenderingPipeline.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../../types\";\r\nimport { serialize, SerializationHelper } from \"../../../Misc/decorators\";\r\nimport type { Observer } from \"../../../Misc/observable\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\nimport type { IAnimatable } from \"../../../Animations/animatable.interface\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { ImageProcessingConfiguration } from \"../../../Materials/imageProcessingConfiguration\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport type { Engine } from \"../../../Engines/engine\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { IDisposable, Scene } from \"../../../scene\";\r\nimport { GlowLayer } from \"../../../Layers/glowLayer\";\r\n\r\nimport type { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { SharpenPostProcess } from \"../../../PostProcesses/sharpenPostProcess\";\r\nimport { ImageProcessingPostProcess } from \"../../../PostProcesses/imageProcessingPostProcess\";\r\nimport { ChromaticAberrationPostProcess } from \"../../../PostProcesses/chromaticAberrationPostProcess\";\r\nimport { GrainPostProcess } from \"../../../PostProcesses/grainPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { DepthOfFieldEffect, DepthOfFieldEffectBlurLevel } from \"../../../PostProcesses/depthOfFieldEffect\";\r\nimport { BloomEffect } from \"../../../PostProcesses/bloomEffect\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\ndeclare type Animation = import(\"../../../Animations/animation\").Animation;\r\n\r\n/**\r\n * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.\r\n * See https://doc.babylonjs.com/how_to/using_default_rendering_pipeline\r\n */\r\nexport class DefaultRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n private _scene: Scene;\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n /**\r\n * ID of the sharpen post process,\r\n */\r\n private readonly SharpenPostProcessId: string = \"SharpenPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the image processing post process;\r\n */\r\n readonly ImageProcessingPostProcessId: string = \"ImageProcessingPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the Fast Approximate Anti-Aliasing post process;\r\n */\r\n readonly FxaaPostProcessId: string = \"FxaaPostProcessEffect\";\r\n /**\r\n * ID of the chromatic aberration post process,\r\n */\r\n private readonly ChromaticAberrationPostProcessId: string = \"ChromaticAberrationPostProcessEffect\";\r\n /**\r\n * ID of the grain post process\r\n */\r\n private readonly GrainPostProcessId: string = \"GrainPostProcessEffect\";\r\n\r\n // Post-processes\r\n /**\r\n * Sharpen post process which will apply a sharpen convolution to enhance edges\r\n */\r\n public sharpen: SharpenPostProcess;\r\n private _sharpenEffect: PostProcessRenderEffect;\r\n private bloom: BloomEffect;\r\n /**\r\n * Depth of field effect, applies a blur based on how far away objects are from the focus distance.\r\n */\r\n public depthOfField: DepthOfFieldEffect;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaa: FxaaPostProcess;\r\n /**\r\n * Image post processing pass used to perform operations such as tone mapping or color grading.\r\n */\r\n public imageProcessing: ImageProcessingPostProcess;\r\n /**\r\n * Chromatic aberration post process which will shift rgb colors in the image\r\n */\r\n public chromaticAberration: ChromaticAberrationPostProcess;\r\n private _chromaticAberrationEffect: PostProcessRenderEffect;\r\n /**\r\n * Grain post process which add noise to the image\r\n */\r\n public grain: GrainPostProcess;\r\n private _grainEffect: PostProcessRenderEffect;\r\n /**\r\n * Glow post process which adds a glow to emissive areas of the image\r\n */\r\n private _glowLayer: Nullable<GlowLayer> = null;\r\n\r\n /**\r\n * Animations which can be used to tweak settings over a period of time\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _imageProcessingConfigurationObserver: Nullable<Observer<ImageProcessingConfiguration>> = null;\r\n // Values\r\n private _sharpenEnabled: boolean = false;\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _depthOfFieldBlurLevel = DepthOfFieldEffectBlurLevel.Low;\r\n private _fxaaEnabled: boolean = false;\r\n private _imageProcessingEnabled: boolean = true;\r\n private _defaultPipelineTextureType: number;\r\n private _bloomScale: number = 0.5;\r\n private _chromaticAberrationEnabled: boolean = false;\r\n private _grainEnabled: boolean = false;\r\n\r\n private _buildAllowed = true;\r\n\r\n /**\r\n * This is triggered each time the pipeline has been built.\r\n */\r\n public onBuildObservable = new Observable<DefaultRenderingPipeline>();\r\n\r\n /**\r\n * Gets active scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Enable or disable the sharpen process from the pipeline\r\n */\r\n public set sharpenEnabled(enabled: boolean) {\r\n if (this._sharpenEnabled === enabled) {\r\n return;\r\n }\r\n this._sharpenEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get sharpenEnabled(): boolean {\r\n return this._sharpenEnabled;\r\n }\r\n\r\n private _resizeObserver: Nullable<Observer<Engine>> = null;\r\n private _hardwareScaleLevel = 1.0;\r\n private _bloomKernel: number = 64;\r\n /**\r\n * Specifies the size of the bloom blur kernel, relative to the final output size\r\n */\r\n @serialize()\r\n public get bloomKernel(): number {\r\n return this._bloomKernel;\r\n }\r\n public set bloomKernel(value: number) {\r\n this._bloomKernel = value;\r\n this.bloom.kernel = value / this._hardwareScaleLevel;\r\n }\r\n\r\n /**\r\n * Specifies the weight of the bloom in the final rendering\r\n */\r\n @serialize()\r\n private _bloomWeight: number = 0.15;\r\n /**\r\n * Specifies the luma threshold for the area that will be blurred by the bloom\r\n */\r\n @serialize()\r\n private _bloomThreshold: number = 0.9;\r\n\r\n @serialize()\r\n private _hdr: boolean;\r\n\r\n /**\r\n * The strength of the bloom.\r\n */\r\n public set bloomWeight(value: number) {\r\n if (this._bloomWeight === value) {\r\n return;\r\n }\r\n this.bloom.weight = value;\r\n\r\n this._bloomWeight = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomWeight(): number {\r\n return this._bloomWeight;\r\n }\r\n\r\n /**\r\n * The luminance threshold to find bright areas of the image to bloom.\r\n */\r\n public set bloomThreshold(value: number) {\r\n if (this._bloomThreshold === value) {\r\n return;\r\n }\r\n this.bloom.threshold = value;\r\n this._bloomThreshold = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomThreshold(): number {\r\n return this._bloomThreshold;\r\n }\r\n\r\n /**\r\n * The scale of the bloom, lower value will provide better performance.\r\n */\r\n public set bloomScale(value: number) {\r\n if (this._bloomScale === value) {\r\n return;\r\n }\r\n this._bloomScale = value;\r\n\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n this._rebuildBloom();\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomScale(): number {\r\n return this._bloomScale;\r\n }\r\n\r\n /**\r\n * Enable or disable the bloom from the pipeline\r\n */\r\n public set bloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n this._bloomEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n private _rebuildBloom() {\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n const oldBloom = this.bloom;\r\n this.bloom = new BloomEffect(this._scene, this.bloomScale, this._bloomWeight, this.bloomKernel, this._defaultPipelineTextureType, false);\r\n this.bloom.threshold = oldBloom.threshold;\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldBloom.disposeEffects(this._cameras[i]);\r\n }\r\n }\r\n\r\n /**\r\n * If the depth of field is enabled.\r\n */\r\n @serialize()\r\n public get depthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set depthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n this._depthOfFieldEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Blur level of the depth of field effect. (Higher blur will effect performance)\r\n */\r\n @serialize()\r\n public get depthOfFieldBlurLevel(): DepthOfFieldEffectBlurLevel {\r\n return this._depthOfFieldBlurLevel;\r\n }\r\n\r\n public set depthOfFieldBlurLevel(value: DepthOfFieldEffectBlurLevel) {\r\n if (this._depthOfFieldBlurLevel === value) {\r\n return;\r\n }\r\n this._depthOfFieldBlurLevel = value;\r\n\r\n // recreate dof and dispose old as this setting is not dynamic\r\n const oldDof = this.depthOfField;\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, false);\r\n this.depthOfField.focalLength = oldDof.focalLength;\r\n this.depthOfField.focusDistance = oldDof.focusDistance;\r\n this.depthOfField.fStop = oldDof.fStop;\r\n this.depthOfField.lensSize = oldDof.lensSize;\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldDof.disposeEffects(this._cameras[i]);\r\n }\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * If the anti aliasing is enabled.\r\n */\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n this._fxaaEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n private _samples = 1;\r\n /**\r\n * MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n this._samples = sampleCount;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * If image processing is enabled.\r\n */\r\n public set imageProcessingEnabled(enabled: boolean) {\r\n if (this._imageProcessingEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._scene.imageProcessingConfiguration.isEnabled = enabled;\r\n }\r\n\r\n @serialize()\r\n public get imageProcessingEnabled(): boolean {\r\n return this._imageProcessingEnabled;\r\n }\r\n\r\n /**\r\n * If glow layer is enabled. (Adds a glow effect to emmissive materials)\r\n */\r\n public set glowLayerEnabled(enabled: boolean) {\r\n if (enabled && !this._glowLayer) {\r\n this._glowLayer = new GlowLayer(\"\", this._scene);\r\n } else if (!enabled && this._glowLayer) {\r\n this._glowLayer.dispose();\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n @serialize()\r\n public get glowLayerEnabled(): boolean {\r\n return this._glowLayer != null;\r\n }\r\n\r\n /**\r\n * Gets the glow layer (or null if not defined)\r\n */\r\n public get glowLayer() {\r\n return this._glowLayer;\r\n }\r\n\r\n /**\r\n * Enable or disable the chromaticAberration process from the pipeline\r\n */\r\n public set chromaticAberrationEnabled(enabled: boolean) {\r\n if (this._chromaticAberrationEnabled === enabled) {\r\n return;\r\n }\r\n this._chromaticAberrationEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get chromaticAberrationEnabled(): boolean {\r\n return this._chromaticAberrationEnabled;\r\n }\r\n /**\r\n * Enable or disable the grain process from the pipeline\r\n */\r\n public set grainEnabled(enabled: boolean) {\r\n if (this._grainEnabled === enabled) {\r\n return;\r\n }\r\n this._grainEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get grainEnabled(): boolean {\r\n return this._grainEnabled;\r\n }\r\n\r\n /**\r\n * @constructor\r\n * @param name - The rendering pipeline name (default: \"\")\r\n * @param hdr - If high dynamic range textures should be used (default: true)\r\n * @param scene - The scene linked to this pipeline (default: the last created scene)\r\n * @param cameras - The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)\r\n * @param automaticBuild - if false, you will have to manually call prepare() to update the pipeline (default: true)\r\n */\r\n constructor(name: string = \"\", hdr: boolean = true, scene: Scene = EngineStore.LastCreatedScene!, cameras?: Camera[], automaticBuild = true) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n this._buildAllowed = automaticBuild;\r\n\r\n // Initialize\r\n this._scene = scene;\r\n const caps = this._scene.getEngine().getCaps();\r\n this._hdr = hdr && (caps.textureHalfFloatRender || caps.textureFloatRender);\r\n\r\n // Misc\r\n if (this._hdr) {\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n } else {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n // Attach\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n\r\n const engine = this._scene.getEngine();\r\n // Create post processes before hand so they can be modified before enabled.\r\n // Block compilation flag is set to true to avoid compilation prior to use, these will be updated on first use in build pipeline.\r\n this.sharpen = new SharpenPostProcess(\"sharpen\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._sharpenEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.SharpenPostProcessId,\r\n () => {\r\n return this.sharpen;\r\n },\r\n true\r\n );\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, true);\r\n\r\n this.bloom = new BloomEffect(this._scene, this._bloomScale, this._bloomWeight, this.bloomKernel, this._defaultPipelineTextureType, true);\r\n\r\n this.chromaticAberration = new ChromaticAberrationPostProcess(\r\n \"ChromaticAberration\",\r\n engine.getRenderWidth(),\r\n engine.getRenderHeight(),\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n true\r\n );\r\n this._chromaticAberrationEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.ChromaticAberrationPostProcessId,\r\n () => {\r\n return this.chromaticAberration;\r\n },\r\n true\r\n );\r\n\r\n this.grain = new GrainPostProcess(\"Grain\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._grainEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.GrainPostProcessId,\r\n () => {\r\n return this.grain;\r\n },\r\n true\r\n );\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this.bloomKernel = this._bloomKernel;\r\n });\r\n\r\n this._imageProcessingConfigurationObserver = this._scene.imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this.bloom._downscale._exposure = this._scene.imageProcessingConfiguration.exposure;\r\n\r\n if (this.imageProcessingEnabled !== this._scene.imageProcessingConfiguration.isEnabled) {\r\n this._imageProcessingEnabled = this._scene.imageProcessingConfiguration.isEnabled;\r\n this._buildPipeline();\r\n }\r\n });\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"DefaultRenderingPipeline\"\r\n */\r\n public getClassName(): string {\r\n return \"DefaultRenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Force the compilation of the entire pipeline.\r\n */\r\n public prepare(): void {\r\n const previousState = this._buildAllowed;\r\n this._buildAllowed = true;\r\n this._buildPipeline();\r\n this._buildAllowed = previousState;\r\n }\r\n\r\n private _hasCleared = false;\r\n private _prevPostProcess: Nullable<PostProcess> = null;\r\n private _prevPrevPostProcess: Nullable<PostProcess> = null;\r\n\r\n private _setAutoClearAndTextureSharing(postProcess: PostProcess, skipTextureSharing = false) {\r\n if (this._hasCleared) {\r\n postProcess.autoClear = false;\r\n } else {\r\n postProcess.autoClear = true;\r\n this._scene.autoClear = false;\r\n this._hasCleared = true;\r\n }\r\n\r\n if (!skipTextureSharing) {\r\n if (this._prevPrevPostProcess) {\r\n postProcess.shareOutputWith(this._prevPrevPostProcess);\r\n } else {\r\n postProcess.useOwnOutput();\r\n }\r\n\r\n if (this._prevPostProcess) {\r\n this._prevPrevPostProcess = this._prevPostProcess;\r\n }\r\n this._prevPostProcess = postProcess;\r\n }\r\n }\r\n\r\n private _depthOfFieldSceneObserver: Nullable<Observer<Scene>> = null;\r\n\r\n private _buildPipeline() {\r\n if (!this._buildAllowed) {\r\n return;\r\n }\r\n this._scene.autoClear = true;\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n this._prevPostProcess = null;\r\n this._prevPrevPostProcess = null;\r\n this._hasCleared = false;\r\n\r\n if (this.depthOfFieldEnabled) {\r\n // Multi camera suport\r\n if (this._cameras.length > 1) {\r\n for (const camera of this._cameras) {\r\n const depthRenderer = this._scene.enableDepthRenderer(camera);\r\n depthRenderer.useOnlyInActiveCamera = true;\r\n }\r\n\r\n this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add((scene) => {\r\n if (this._cameras.indexOf(scene.activeCamera!) > -1) {\r\n this.depthOfField.depthTexture = scene.enableDepthRenderer(scene.activeCamera).getDepthMap();\r\n }\r\n });\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n const depthRenderer = this._scene.enableDepthRenderer(this._cameras[0]);\r\n this.depthOfField.depthTexture = depthRenderer.getDepthMap();\r\n }\r\n\r\n if (!this.depthOfField._isReady()) {\r\n this.depthOfField._updateEffects();\r\n }\r\n this.addEffect(this.depthOfField);\r\n this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n }\r\n\r\n if (this.bloomEnabled) {\r\n if (!this.bloom._isReady()) {\r\n this.bloom._updateEffects();\r\n }\r\n this.addEffect(this.bloom);\r\n this._setAutoClearAndTextureSharing(this.bloom._effects[0], true);\r\n }\r\n\r\n if (this._imageProcessingEnabled) {\r\n this.imageProcessing = new ImageProcessingPostProcess(\r\n \"imageProcessing\",\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n this.scene.imageProcessingConfiguration\r\n );\r\n if (this._hdr) {\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.ImageProcessingPostProcessId,\r\n () => {\r\n return this.imageProcessing;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.imageProcessing);\r\n } else {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.cameras || this.cameras.length === 0) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.imageProcessing.getEffect()) {\r\n this.imageProcessing._updateParameters();\r\n }\r\n }\r\n\r\n if (this.sharpenEnabled) {\r\n if (!this.sharpen.isReady()) {\r\n this.sharpen.updateEffect();\r\n }\r\n this.addEffect(this._sharpenEffect);\r\n this._setAutoClearAndTextureSharing(this.sharpen);\r\n }\r\n\r\n if (this.grainEnabled) {\r\n if (!this.grain.isReady()) {\r\n this.grain.updateEffect();\r\n }\r\n this.addEffect(this._grainEffect);\r\n this._setAutoClearAndTextureSharing(this.grain);\r\n }\r\n\r\n if (this.chromaticAberrationEnabled) {\r\n if (!this.chromaticAberration.isReady()) {\r\n this.chromaticAberration.updateEffect();\r\n }\r\n this.addEffect(this._chromaticAberrationEffect);\r\n this._setAutoClearAndTextureSharing(this.chromaticAberration);\r\n }\r\n\r\n if (this.fxaaEnabled) {\r\n this.fxaa = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.FxaaPostProcessId,\r\n () => {\r\n return this.fxaa;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.fxaa, true);\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n // In multicamera mode, the scene needs to autoclear in between cameras.\r\n if (this._scene.activeCameras && this._scene.activeCameras.length > 1) {\r\n this._scene.autoClear = true;\r\n }\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this.samples) && this.samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n private _disposePostProcesses(disposeNonRecreated = false): void {\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n const camera = this._cameras[i];\r\n\r\n if (this.imageProcessing) {\r\n this.imageProcessing.dispose(camera);\r\n }\r\n\r\n if (this.fxaa) {\r\n this.fxaa.dispose(camera);\r\n }\r\n\r\n // These are created in the constructor and should not be disposed on every pipeline change\r\n if (disposeNonRecreated) {\r\n if (this.sharpen) {\r\n this.sharpen.dispose(camera);\r\n }\r\n\r\n if (this.depthOfField) {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n this.depthOfField.disposeEffects(camera);\r\n }\r\n\r\n if (this.bloom) {\r\n this.bloom.disposeEffects(camera);\r\n }\r\n\r\n if (this.chromaticAberration) {\r\n this.chromaticAberration.dispose(camera);\r\n }\r\n\r\n if (this.grain) {\r\n this.grain.dispose(camera);\r\n }\r\n if (this._glowLayer) {\r\n this._glowLayer.dispose();\r\n }\r\n }\r\n }\r\n\r\n (<any>this.imageProcessing) = null;\r\n (<any>this.fxaa) = null;\r\n\r\n if (disposeNonRecreated) {\r\n (<any>this.sharpen) = null;\r\n (<any>this._sharpenEffect) = null;\r\n (<any>this.depthOfField) = null;\r\n (<any>this.bloom) = null;\r\n (<any>this.chromaticAberration) = null;\r\n (<any>this._chromaticAberrationEffect) = null;\r\n (<any>this.grain) = null;\r\n (<any>this._grainEffect) = null;\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a camera to the pipeline\r\n * @param camera the camera to be added\r\n */\r\n public addCamera(camera: Camera): void {\r\n this._camerasToBeAttached.push(camera);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes a camera from the pipeline\r\n * @param camera the camera to remove\r\n */\r\n public removeCamera(camera: Camera): void {\r\n const index = this._camerasToBeAttached.indexOf(camera);\r\n this._camerasToBeAttached.splice(index, 1);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public dispose(): void {\r\n this.onBuildObservable.clear();\r\n this._disposePostProcesses(true);\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n this._scene.autoClear = true;\r\n if (this._resizeObserver) {\r\n this._scene.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this._scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigurationObserver);\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"DefaultRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): DefaultRenderingPipeline {\r\n return SerializationHelper.Parse(() => new DefaultRenderingPipeline(source._name, source._name._hdr, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DefaultRenderingPipeline\", DefaultRenderingPipeline);\r\n"]}
@@ -22,7 +22,7 @@ export declare class DepthOfFieldBlurPostProcess extends BlurPostProcess {
22
22
  */
23
23
  getClassName(): string;
24
24
  /**
25
- * Creates a new instance CircleOfConfusionPostProcess
25
+ * Creates a new instance DepthOfFieldBlurPostProcess
26
26
  * @param name The name of the effect.
27
27
  * @param scene The scene the effect belongs to.
28
28
  * @param direction The direction the blur should be applied.
@@ -13,7 +13,7 @@ import { serialize } from "../Misc/decorators.js";
13
13
  var DepthOfFieldBlurPostProcess = /** @class */ (function (_super) {
14
14
  __extends(DepthOfFieldBlurPostProcess, _super);
15
15
  /**
16
- * Creates a new instance CircleOfConfusionPostProcess
16
+ * Creates a new instance DepthOfFieldBlurPostProcess
17
17
  * @param name The name of the effect.
18
18
  * @param scene The scene the effect belongs to.
19
19
  * @param direction The direction the blur should be applied.
@@ -35,9 +35,7 @@ var DepthOfFieldBlurPostProcess = /** @class */ (function (_super) {
35
35
  if (blockCompilation === void 0) { blockCompilation = false; }
36
36
  var _this = _super.call(this, name, direction, kernel, options, camera,
37
37
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
- (samplingMode = 2), engine, reusable,
39
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
- (textureType = 0), "#define DOF 1\r\n", blockCompilation) || this;
38
+ (samplingMode = 2), engine, reusable, textureType, "#define DOF 1\r\n", blockCompilation) || this;
41
39
  _this.direction = direction;
42
40
  _this.externalTextureSamplerBinding = !!imageToBlur;
43
41
  _this.onApplyObservable.add(function (effect) {
@@ -1 +1 @@
1
- {"version":3,"file":"depthOfFieldBlurPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/depthOfFieldBlurPostProcess.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;GAKG;AACH;IAAiD,+CAAe;IAe5D;;;;;;;;;;;;;;;OAeG;IACH,qCACI,IAAY,EACZ,KAAY,EACZ,SAAkB,EAClB,MAAc,EACd,OAAoC,EACpC,MAAwB,EACxB,iBAA8B,EAC9B,WAAyC,EACzC,YAAoD,EACpD,MAAe,EACf,QAAkB,EAClB,WAAwD,EACxD,gBAAwB;QALxB,4BAAA,EAAA,kBAAyC;QACzC,6BAAA,EAAA,eAAuB,OAAO,CAAC,qBAAqB;QAGpD,4BAAA,EAAA,cAAsB,SAAS,CAAC,wBAAwB;QACxD,iCAAA,EAAA,wBAAwB;QAb5B,YAeI,kBACI,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,EACP,MAAM;QACN,6DAA6D;QAC7D,CAAC,YAAY,GAAG,SAAS,CAAC,6BAA6B,CAAC,EACxD,MAAM,EACN,QAAQ;QACR,6DAA6D;QAC7D,CAAC,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC,EAClD,mBAAmB,EACnB,gBAAgB,CACnB,SAcJ;QAZG,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,6BAA6B,GAAG,CAAC,CAAC,WAAW,CAAC;QAEnD,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAc;YACtC,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;aACnE;YACD,MAAM,CAAC,+BAA+B,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,CAAC,YAAY,EAAE;gBACpB,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACvF;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAnED;;;OAGG;IACI,kDAAY,GAAnB;QACI,OAAO,6BAA6B,CAAC;IACzC,CAAC;IARD;QADC,SAAS,EAAE;kEACc;IAsE9B,kCAAC;CAAA,AA3ED,CAAiD,eAAe,GA2E/D;SA3EY,2BAA2B;AA6ExC,aAAa,CAAC,qCAAqC,EAAE,2BAA2B,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Vector2 } from \"../Maths/math.vector\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { BlurPostProcess } from \"./blurPostProcess\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { serialize } from \"../Misc/decorators\";\r\n\r\n/**\r\n * The DepthOfFieldBlurPostProcess applied a blur in a give direction.\r\n * This blur differs from the standard BlurPostProcess as it attempts to avoid blurring pixels\r\n * based on samples that have a large difference in distance than the center pixel.\r\n * See section 2.6.2 http://fileadmin.cs.lth.se/cs/education/edan35/lectures/12dof.pdf\r\n */\r\nexport class DepthOfFieldBlurPostProcess extends BlurPostProcess {\r\n /**\r\n * The direction the blur should be applied\r\n */\r\n @serialize()\r\n public direction: Vector2;\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"DepthOfFieldBlurPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"DepthOfFieldBlurPostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new instance CircleOfConfusionPostProcess\r\n * @param name The name of the effect.\r\n * @param scene The scene the effect belongs to.\r\n * @param direction The direction the blur should be applied.\r\n * @param kernel The size of the kernel used to blur.\r\n * @param options The required width/height ratio to downsize to before computing the render pass.\r\n * @param camera The camera to apply the render pass to.\r\n * @param circleOfConfusion The circle of confusion + depth map to be used to avoid blurring across edges\r\n * @param imageToBlur The image to apply the blur to (default: Current rendered frame)\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n direction: Vector2,\r\n kernel: number,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera>,\r\n circleOfConfusion: PostProcess,\r\n imageToBlur: Nullable<PostProcess> = null,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean,\r\n textureType: number = Constants.TEXTURETYPE_UNSIGNED_INT,\r\n blockCompilation = false\r\n ) {\r\n super(\r\n name,\r\n direction,\r\n kernel,\r\n options,\r\n camera,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n (samplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE),\r\n engine,\r\n reusable,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n (textureType = Constants.TEXTURETYPE_UNSIGNED_INT),\r\n `#define DOF 1\\r\\n`,\r\n blockCompilation\r\n );\r\n\r\n this.direction = direction;\r\n this.externalTextureSamplerBinding = !!imageToBlur;\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n if (imageToBlur != null) {\r\n effect.setTextureFromPostProcess(\"textureSampler\", imageToBlur);\r\n }\r\n effect.setTextureFromPostProcessOutput(\"circleOfConfusionSampler\", circleOfConfusion);\r\n if (scene.activeCamera) {\r\n effect.setFloat2(\"cameraMinMaxZ\", scene.activeCamera.minZ, scene.activeCamera.maxZ);\r\n }\r\n });\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DepthOfFieldBlurPostProcess\", DepthOfFieldBlurPostProcess);\r\n"]}
1
+ {"version":3,"file":"depthOfFieldBlurPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/depthOfFieldBlurPostProcess.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;GAKG;AACH;IAAiD,+CAAe;IAe5D;;;;;;;;;;;;;;;OAeG;IACH,qCACI,IAAY,EACZ,KAAY,EACZ,SAAkB,EAClB,MAAc,EACd,OAAoC,EACpC,MAAwB,EACxB,iBAA8B,EAC9B,WAAyC,EACzC,YAAoD,EACpD,MAAe,EACf,QAAkB,EAClB,WAAwD,EACxD,gBAAwB;QALxB,4BAAA,EAAA,kBAAyC;QACzC,6BAAA,EAAA,eAAuB,OAAO,CAAC,qBAAqB;QAGpD,4BAAA,EAAA,cAAsB,SAAS,CAAC,wBAAwB;QACxD,iCAAA,EAAA,wBAAwB;QAb5B,YAeI,kBACI,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,EACP,MAAM;QACN,6DAA6D;QAC7D,CAAC,YAAY,GAAG,SAAS,CAAC,6BAA6B,CAAC,EACxD,MAAM,EACN,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,gBAAgB,CACnB,SAcJ;QAZG,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,6BAA6B,GAAG,CAAC,CAAC,WAAW,CAAC;QAEnD,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAc;YACtC,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;aACnE;YACD,MAAM,CAAC,+BAA+B,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,CAAC,YAAY,EAAE;gBACpB,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACvF;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAlED;;;OAGG;IACI,kDAAY,GAAnB;QACI,OAAO,6BAA6B,CAAC;IACzC,CAAC;IARD;QADC,SAAS,EAAE;kEACc;IAqE9B,kCAAC;CAAA,AA1ED,CAAiD,eAAe,GA0E/D;SA1EY,2BAA2B;AA4ExC,aAAa,CAAC,qCAAqC,EAAE,2BAA2B,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Vector2 } from \"../Maths/math.vector\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { BlurPostProcess } from \"./blurPostProcess\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { serialize } from \"../Misc/decorators\";\r\n\r\n/**\r\n * The DepthOfFieldBlurPostProcess applied a blur in a give direction.\r\n * This blur differs from the standard BlurPostProcess as it attempts to avoid blurring pixels\r\n * based on samples that have a large difference in distance than the center pixel.\r\n * See section 2.6.2 http://fileadmin.cs.lth.se/cs/education/edan35/lectures/12dof.pdf\r\n */\r\nexport class DepthOfFieldBlurPostProcess extends BlurPostProcess {\r\n /**\r\n * The direction the blur should be applied\r\n */\r\n @serialize()\r\n public direction: Vector2;\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"DepthOfFieldBlurPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"DepthOfFieldBlurPostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new instance DepthOfFieldBlurPostProcess\r\n * @param name The name of the effect.\r\n * @param scene The scene the effect belongs to.\r\n * @param direction The direction the blur should be applied.\r\n * @param kernel The size of the kernel used to blur.\r\n * @param options The required width/height ratio to downsize to before computing the render pass.\r\n * @param camera The camera to apply the render pass to.\r\n * @param circleOfConfusion The circle of confusion + depth map to be used to avoid blurring across edges\r\n * @param imageToBlur The image to apply the blur to (default: Current rendered frame)\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n direction: Vector2,\r\n kernel: number,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera>,\r\n circleOfConfusion: PostProcess,\r\n imageToBlur: Nullable<PostProcess> = null,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean,\r\n textureType: number = Constants.TEXTURETYPE_UNSIGNED_INT,\r\n blockCompilation = false\r\n ) {\r\n super(\r\n name,\r\n direction,\r\n kernel,\r\n options,\r\n camera,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n (samplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE),\r\n engine,\r\n reusable,\r\n textureType,\r\n `#define DOF 1\\r\\n`,\r\n blockCompilation\r\n );\r\n\r\n this.direction = direction;\r\n this.externalTextureSamplerBinding = !!imageToBlur;\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n if (imageToBlur != null) {\r\n effect.setTextureFromPostProcess(\"textureSampler\", imageToBlur);\r\n }\r\n effect.setTextureFromPostProcessOutput(\"circleOfConfusionSampler\", circleOfConfusion);\r\n if (scene.activeCamera) {\r\n effect.setFloat2(\"cameraMinMaxZ\", scene.activeCamera.minZ, scene.activeCamera.maxZ);\r\n }\r\n });\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DepthOfFieldBlurPostProcess\", DepthOfFieldBlurPostProcess);\r\n"]}
@@ -1,7 +1,7 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  var name = "defaultFragmentDeclaration";
4
- var shader = "uniform vec4 vEyePosition;\nuniform vec4 vDiffuseColor;\n#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\n#endif\nuniform vec3 vEmissiveColor;\nuniform vec3 vAmbientColor;\nuniform float visibility;\n#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef AMBIENT\nuniform vec2 vAmbientInfos;\n#endif\n#ifdef OPACITY \nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform vec2 vTangentSpaceParams;\n#endif\n#ifdef ALPHATEST\nuniform float alphaCutOff;\n#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\n#endif\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\n#ifndef REFRACTIONMAP_3D\nuniform mat4 refractionMatrix;\n#endif\n#ifdef REFRACTIONFRESNEL\nuniform vec4 refractionLeftColor;\nuniform vec4 refractionRightColor;\n#endif\n#if defined(USE_LOCAL_REFRACTIONMAP_CUBIC) && defined(REFRACTIONMAP_3D)\nuniform vec3 vRefractionPosition;\nuniform vec3 vRefractionSize; \n#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\n#endif\n#ifdef DIFFUSEFRESNEL\nuniform vec4 diffuseLeftColor;\nuniform vec4 diffuseRightColor;\n#endif\n#ifdef OPACITYFRESNEL\nuniform vec4 opacityParts;\n#endif\n#ifdef EMISSIVEFRESNEL\nuniform vec4 emissiveLeftColor;\nuniform vec4 emissiveRightColor;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\n#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION) || defined(REFLECTIONMAP_EQUIRECTANGULAR) || defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_SKYBOX)\nuniform mat4 reflectionMatrix;\n#endif\n#ifndef REFLECTIONMAP_SKYBOX\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize; \n#endif\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 reflectionLeftColor;\nuniform vec4 reflectionRightColor;\n#endif\n#endif\n#ifdef DETAIL\nuniform vec4 vDetailInfos;\n#endif\n#define ADDITIONAL_FRAGMENT_DECLARATION\n";
4
+ var shader = "uniform vec4 vEyePosition;\nuniform vec4 vDiffuseColor;\n#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\n#endif\nuniform vec3 vEmissiveColor;\nuniform vec3 vAmbientColor;\nuniform float visibility;\n#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef AMBIENT\nuniform vec2 vAmbientInfos;\n#endif\n#ifdef OPACITY \nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform vec2 vTangentSpaceParams;\n#endif\n#ifdef ALPHATEST\nuniform float alphaCutOff;\n#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION) || defined(PREPASS)\nuniform mat4 view;\n#endif\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\n#ifndef REFRACTIONMAP_3D\nuniform mat4 refractionMatrix;\n#endif\n#ifdef REFRACTIONFRESNEL\nuniform vec4 refractionLeftColor;\nuniform vec4 refractionRightColor;\n#endif\n#if defined(USE_LOCAL_REFRACTIONMAP_CUBIC) && defined(REFRACTIONMAP_3D)\nuniform vec3 vRefractionPosition;\nuniform vec3 vRefractionSize; \n#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\n#endif\n#ifdef DIFFUSEFRESNEL\nuniform vec4 diffuseLeftColor;\nuniform vec4 diffuseRightColor;\n#endif\n#ifdef OPACITYFRESNEL\nuniform vec4 opacityParts;\n#endif\n#ifdef EMISSIVEFRESNEL\nuniform vec4 emissiveLeftColor;\nuniform vec4 emissiveRightColor;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\n#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION) || defined(REFLECTIONMAP_EQUIRECTANGULAR) || defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_SKYBOX)\nuniform mat4 reflectionMatrix;\n#endif\n#ifndef REFLECTIONMAP_SKYBOX\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize; \n#endif\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 reflectionLeftColor;\nuniform vec4 reflectionRightColor;\n#endif\n#endif\n#ifdef DETAIL\nuniform vec4 vDetailInfos;\n#endif\n#define ADDITIONAL_FRAGMENT_DECLARATION\n";
5
5
  // Sideeffect
6
6
  ShaderStore.IncludesShadersStore[name] = shader;
7
7
  /** @hidden */
@@ -1 +1 @@
1
- {"version":3,"file":"defaultFragmentDeclaration.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/defaultFragmentDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,IAAM,MAAM,GAAG,0mEAiFd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,0BAA0B,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"defaultFragmentDeclaration\";\nconst shader = `uniform vec4 vEyePosition;\runiform vec4 vDiffuseColor;\r#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\r#endif\nuniform vec3 vEmissiveColor;\runiform vec3 vAmbientColor;\runiform float visibility;\r#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\r#endif\n#ifdef AMBIENT\nuniform vec2 vAmbientInfos;\r#endif\n#ifdef OPACITY \nuniform vec2 vOpacityInfos;\r#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\r#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\r#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\runiform vec2 vTangentSpaceParams;\r#endif\n#ifdef ALPHATEST\nuniform float alphaCutOff;\r#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\r#endif\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\r#ifndef REFRACTIONMAP_3D\nuniform mat4 refractionMatrix;\r#endif\n#ifdef REFRACTIONFRESNEL\nuniform vec4 refractionLeftColor;\runiform vec4 refractionRightColor;\r#endif\n#if defined(USE_LOCAL_REFRACTIONMAP_CUBIC) && defined(REFRACTIONMAP_3D)\nuniform vec3 vRefractionPosition;\runiform vec3 vRefractionSize; \r#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\r#endif\n#ifdef DIFFUSEFRESNEL\nuniform vec4 diffuseLeftColor;\runiform vec4 diffuseRightColor;\r#endif\n#ifdef OPACITYFRESNEL\nuniform vec4 opacityParts;\r#endif\n#ifdef EMISSIVEFRESNEL\nuniform vec4 emissiveLeftColor;\runiform vec4 emissiveRightColor;\r#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\r#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION) || defined(REFLECTIONMAP_EQUIRECTANGULAR) || defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_SKYBOX)\nuniform mat4 reflectionMatrix;\r#endif\n#ifndef REFLECTIONMAP_SKYBOX\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\runiform vec3 vReflectionSize; \r#endif\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 reflectionLeftColor;\runiform vec4 reflectionRightColor;\r#endif\n#endif\n#ifdef DETAIL\nuniform vec4 vDetailInfos;\r#endif\n#define ADDITIONAL_FRAGMENT_DECLARATION\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const defaultFragmentDeclaration = { name, shader };\n"]}
1
+ {"version":3,"file":"defaultFragmentDeclaration.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/defaultFragmentDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,IAAM,MAAM,GAAG,8nEAiFd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,0BAA0B,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"defaultFragmentDeclaration\";\nconst shader = `uniform vec4 vEyePosition;\runiform vec4 vDiffuseColor;\r#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\r#endif\nuniform vec3 vEmissiveColor;\runiform vec3 vAmbientColor;\runiform float visibility;\r#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\r#endif\n#ifdef AMBIENT\nuniform vec2 vAmbientInfos;\r#endif\n#ifdef OPACITY \nuniform vec2 vOpacityInfos;\r#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\r#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\r#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\runiform vec2 vTangentSpaceParams;\r#endif\n#ifdef ALPHATEST\nuniform float alphaCutOff;\r#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION) || defined(PREPASS)\nuniform mat4 view;\r#endif\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\r#ifndef REFRACTIONMAP_3D\nuniform mat4 refractionMatrix;\r#endif\n#ifdef REFRACTIONFRESNEL\nuniform vec4 refractionLeftColor;\runiform vec4 refractionRightColor;\r#endif\n#if defined(USE_LOCAL_REFRACTIONMAP_CUBIC) && defined(REFRACTIONMAP_3D)\nuniform vec3 vRefractionPosition;\runiform vec3 vRefractionSize; \r#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\r#endif\n#ifdef DIFFUSEFRESNEL\nuniform vec4 diffuseLeftColor;\runiform vec4 diffuseRightColor;\r#endif\n#ifdef OPACITYFRESNEL\nuniform vec4 opacityParts;\r#endif\n#ifdef EMISSIVEFRESNEL\nuniform vec4 emissiveLeftColor;\runiform vec4 emissiveRightColor;\r#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\r#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION) || defined(REFLECTIONMAP_EQUIRECTANGULAR) || defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_SKYBOX)\nuniform mat4 reflectionMatrix;\r#endif\n#ifndef REFLECTIONMAP_SKYBOX\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\runiform vec3 vReflectionSize; \r#endif\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 reflectionLeftColor;\runiform vec4 reflectionRightColor;\r#endif\n#endif\n#ifdef DETAIL\nuniform vec4 vDetailInfos;\r#endif\n#define ADDITIONAL_FRAGMENT_DECLARATION\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const defaultFragmentDeclaration = { name, shader };\n"]}
@@ -1,7 +1,7 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  var name = "pbrBlockAlbedoOpacity";
4
- var shader = "struct albedoOpacityOutParams\n{\nvec3 surfaceAlbedo;\nfloat alpha;\n};\n#define pbr_inline\nvoid albedoOpacityBlock(\nin vec4 vAlbedoColor,\n#ifdef ALBEDO\nin vec4 albedoTexture,\nin vec2 albedoInfos,\n#endif\n#ifdef OPACITY\nin vec4 opacityMap,\nin vec2 vOpacityInfos,\n#endif\n#ifdef DETAIL\nin vec4 detailColor,\nin vec4 vDetailInfos,\n#endif\nout albedoOpacityOutParams outParams\n)\n{\nvec3 surfaceAlbedo=vAlbedoColor.rgb;\nfloat alpha=vAlbedoColor.a;\n#ifdef ALBEDO\n#if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)\nalpha*=albedoTexture.a;\n#endif\n#ifdef GAMMAALBEDO\nsurfaceAlbedo*=toLinearSpace(albedoTexture.rgb);\n#else\nsurfaceAlbedo*=albedoTexture.rgb;\n#endif\nsurfaceAlbedo*=albedoInfos.y;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nsurfaceAlbedo*=vColor.rgb;\n#endif\n#ifdef DETAIL\nfloat detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);\nsurfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo; \n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALBEDO\n#ifdef OPACITY\n#ifdef OPACITYRGB\nalpha=getLuminance(opacityMap.rgb);\n#else\nalpha*=opacityMap.a;\n#endif\nalpha*=vOpacityInfos.y;\n#endif\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\ndiscard;\n#ifndef ALPHABLEND\nalpha=1.0;\n#endif\n#endif\n#endif\noutParams.surfaceAlbedo=surfaceAlbedo;\noutParams.alpha=alpha;\n}\n";
4
+ var shader = "struct albedoOpacityOutParams\n{\nvec3 surfaceAlbedo;\nfloat alpha;\n};\n#define pbr_inline\nvoid albedoOpacityBlock(\nin vec4 vAlbedoColor,\n#ifdef ALBEDO\nin vec4 albedoTexture,\nin vec2 albedoInfos,\n#endif\n#ifdef OPACITY\nin vec4 opacityMap,\nin vec2 vOpacityInfos,\n#endif\n#ifdef DETAIL\nin vec4 detailColor,\nin vec4 vDetailInfos,\n#endif\nout albedoOpacityOutParams outParams\n)\n{\nvec3 surfaceAlbedo=vAlbedoColor.rgb;\nfloat alpha=vAlbedoColor.a;\n#ifdef ALBEDO\n#if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)\nalpha*=albedoTexture.a;\n#endif\n#ifdef GAMMAALBEDO\nsurfaceAlbedo*=toLinearSpace(albedoTexture.rgb);\n#else\nsurfaceAlbedo*=albedoTexture.rgb;\n#endif\nsurfaceAlbedo*=albedoInfos.y;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nsurfaceAlbedo*=vColor.rgb;\n#endif\n#ifdef DETAIL\nfloat detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);\nsurfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo; \n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALBEDO\n#ifdef OPACITY\n#ifdef OPACITYRGB\nalpha=getLuminance(opacityMap.rgb);\n#else\nalpha*=opacityMap.a;\n#endif\nalpha*=vOpacityInfos.y;\n#endif\n#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR)\nalpha*=vColor.a;\n#endif\n#if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\ndiscard;\n#ifndef ALPHABLEND\nalpha=1.0;\n#endif\n#endif\n#endif\noutParams.surfaceAlbedo=surfaceAlbedo;\noutParams.alpha=alpha;\n}\n";
5
5
  // Sideeffect
6
6
  ShaderStore.IncludesShadersStore[name] = shader;
7
7
  /** @hidden */
@@ -1 +1 @@
1
- {"version":3,"file":"pbrBlockAlbedoOpacity.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,IAAM,MAAM,GAAG,85CAmEd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,qBAAqB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockAlbedoOpacity\";\nconst shader = `struct albedoOpacityOutParams\r{\rvec3 surfaceAlbedo;\rfloat alpha;\r};\r#define pbr_inline\nvoid albedoOpacityBlock(\rin vec4 vAlbedoColor,\r#ifdef ALBEDO\nin vec4 albedoTexture,\rin vec2 albedoInfos,\r#endif\n#ifdef OPACITY\nin vec4 opacityMap,\rin vec2 vOpacityInfos,\r#endif\n#ifdef DETAIL\nin vec4 detailColor,\rin vec4 vDetailInfos,\r#endif\nout albedoOpacityOutParams outParams\r)\r{\rvec3 surfaceAlbedo=vAlbedoColor.rgb;\rfloat alpha=vAlbedoColor.a;\r#ifdef ALBEDO\n#if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)\nalpha*=albedoTexture.a;\r#endif\n#ifdef GAMMAALBEDO\nsurfaceAlbedo*=toLinearSpace(albedoTexture.rgb);\r#else\nsurfaceAlbedo*=albedoTexture.rgb;\r#endif\nsurfaceAlbedo*=albedoInfos.y;\r#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nsurfaceAlbedo*=vColor.rgb;\r#endif\n#ifdef DETAIL\nfloat detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);\rsurfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo; \r#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALBEDO\n#ifdef OPACITY\n#ifdef OPACITYRGB\nalpha=getLuminance(opacityMap.rgb);\r#else\nalpha*=opacityMap.a;\r#endif\nalpha*=vOpacityInfos.y;\r#endif\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\r#endif\n#if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\rdiscard;\r#ifndef ALPHABLEND\nalpha=1.0;\r#endif\n#endif\n#endif\noutParams.surfaceAlbedo=surfaceAlbedo;\routParams.alpha=alpha;\r}\r`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const pbrBlockAlbedoOpacity = { name, shader };\n"]}
1
+ {"version":3,"file":"pbrBlockAlbedoOpacity.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,IAAM,MAAM,GAAG,+7CAmEd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,qBAAqB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockAlbedoOpacity\";\nconst shader = `struct albedoOpacityOutParams\r{\rvec3 surfaceAlbedo;\rfloat alpha;\r};\r#define pbr_inline\nvoid albedoOpacityBlock(\rin vec4 vAlbedoColor,\r#ifdef ALBEDO\nin vec4 albedoTexture,\rin vec2 albedoInfos,\r#endif\n#ifdef OPACITY\nin vec4 opacityMap,\rin vec2 vOpacityInfos,\r#endif\n#ifdef DETAIL\nin vec4 detailColor,\rin vec4 vDetailInfos,\r#endif\nout albedoOpacityOutParams outParams\r)\r{\rvec3 surfaceAlbedo=vAlbedoColor.rgb;\rfloat alpha=vAlbedoColor.a;\r#ifdef ALBEDO\n#if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)\nalpha*=albedoTexture.a;\r#endif\n#ifdef GAMMAALBEDO\nsurfaceAlbedo*=toLinearSpace(albedoTexture.rgb);\r#else\nsurfaceAlbedo*=albedoTexture.rgb;\r#endif\nsurfaceAlbedo*=albedoInfos.y;\r#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nsurfaceAlbedo*=vColor.rgb;\r#endif\n#ifdef DETAIL\nfloat detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);\rsurfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo; \r#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALBEDO\n#ifdef OPACITY\n#ifdef OPACITYRGB\nalpha=getLuminance(opacityMap.rgb);\r#else\nalpha*=opacityMap.a;\r#endif\nalpha*=vOpacityInfos.y;\r#endif\n#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR)\nalpha*=vColor.a;\r#endif\n#if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\rdiscard;\r#ifndef ALPHABLEND\nalpha=1.0;\r#endif\n#endif\n#endif\noutParams.surfaceAlbedo=surfaceAlbedo;\routParams.alpha=alpha;\r}\r`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const pbrBlockAlbedoOpacity = { name, shader };\n"]}
@@ -1,7 +1,7 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  var name = "pbrBlockClearcoat";
4
- var shader = "struct clearcoatOutParams\n{\nvec3 specularEnvironmentR0;\nfloat conservationFactor;\nvec3 clearCoatNormalW;\nvec2 clearCoatAARoughnessFactors;\nfloat clearCoatIntensity;\nfloat clearCoatRoughness;\n#ifdef REFLECTION\nvec3 finalClearCoatRadianceScaled;\n#endif\n#ifdef CLEARCOAT_TINT\nvec3 absorption;\nfloat clearCoatNdotVRefract;\nvec3 clearCoatColor;\nfloat clearCoatThickness;\n#endif\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nvec3 energyConservationFactorClearCoat;\n#endif\n#if DEBUGMODE>0\nmat3 TBNClearCoat;\nvec2 clearCoatMapData;\nvec4 clearCoatTintMapData;\nvec4 environmentClearCoatRadiance;\nfloat clearCoatNdotV;\nvec3 clearCoatEnvironmentReflectance;\n#endif\n};\n#ifdef CLEARCOAT\n#define pbr_inline\n#define inline\nvoid clearcoatBlock(\nin vec3 vPositionW,\nin vec3 geometricNormalW,\nin vec3 viewDirectionW,\nin vec2 vClearCoatParams,\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\nin vec4 clearCoatMapRoughnessData,\n#endif\nin vec3 specularEnvironmentR0,\n#ifdef CLEARCOAT_TEXTURE\nin vec2 clearCoatMapData,\n#endif\n#ifdef CLEARCOAT_TINT\nin vec4 vClearCoatTintParams,\nin float clearCoatColorAtDistance,\nin vec4 vClearCoatRefractionParams,\n#ifdef CLEARCOAT_TINT_TEXTURE\nin vec4 clearCoatTintMapData,\n#endif\n#endif\n#ifdef CLEARCOAT_BUMP\nin vec2 vClearCoatBumpInfos,\nin vec4 clearCoatBumpMapData,\nin vec2 vClearCoatBumpUV,\n#if defined(TANGENT) && defined(NORMAL)\nin mat3 vTBN,\n#else\nin vec2 vClearCoatTangentSpaceParams,\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nin mat4 normalMatrix,\n#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nin vec3 faceNormal,\n#endif\n#ifdef REFLECTION\nin vec3 vReflectionMicrosurfaceInfos,\nin vec2 vReflectionInfos,\nin vec3 vReflectionColor,\nin vec4 vLightingIntensity,\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSampler,\n#else\nin sampler2D reflectionSampler,\n#endif\n#ifndef LODBASEDMICROSFURACE\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSamplerLow,\nin samplerCube reflectionSamplerHigh,\n#else\nin sampler2D reflectionSamplerLow,\nin sampler2D reflectionSamplerHigh,\n#endif\n#endif\n#ifdef REALTIME_FILTERING\nin vec2 vReflectionFilteringInfo,\n#endif\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\n#ifdef RADIANCEOCCLUSION\nin float ambientMonochrome,\n#endif\n#endif\n#if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\nin float frontFacingMultiplier,\n#endif\nout clearcoatOutParams outParams\n)\n{\nfloat clearCoatIntensity=vClearCoatParams.x;\nfloat clearCoatRoughness=vClearCoatParams.y;\n#ifdef CLEARCOAT_TEXTURE\nclearCoatIntensity*=clearCoatMapData.x;\n#ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\nclearCoatRoughness*=clearCoatMapData.y;\n#endif\n#if DEBUGMODE>0\noutParams.clearCoatMapData=clearCoatMapData;\n#endif\n#endif\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\n#ifdef CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL\nclearCoatRoughness*=clearCoatMapData.y;\n#else\nclearCoatRoughness*=clearCoatMapRoughnessData.y;\n#endif\n#endif\noutParams.clearCoatIntensity=clearCoatIntensity;\noutParams.clearCoatRoughness=clearCoatRoughness;\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatColor=vClearCoatTintParams.rgb;\nfloat clearCoatThickness=vClearCoatTintParams.a;\n#ifdef CLEARCOAT_TINT_TEXTURE\n#ifdef CLEARCOAT_TINT_GAMMATEXTURE\nclearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);\n#else\nclearCoatColor*=clearCoatTintMapData.rgb;\n#endif\nclearCoatThickness*=clearCoatTintMapData.a;\n#if DEBUGMODE>0\noutParams.clearCoatTintMapData=clearCoatTintMapData;\n#endif\n#endif\noutParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);\noutParams.clearCoatThickness=clearCoatThickness;\n#endif\n#ifdef CLEARCOAT_REMAP_F0\nvec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);\n#else\nvec3 specularEnvironmentR0Updated=specularEnvironmentR0;\n#endif\noutParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);\nvec3 clearCoatNormalW=geometricNormalW;\n#ifdef CLEARCOAT_BUMP\n#ifdef NORMALXYSCALE\nfloat clearCoatNormalScale=1.0;\n#else\nfloat clearCoatNormalScale=vClearCoatBumpInfos.y;\n#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBNClearCoat=vTBN;\n#else\nvec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;\nmat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);\n#endif\n#if DEBUGMODE>0\noutParams.TBNClearCoat=TBNClearCoat;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nclearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);\nclearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);\n#else\nclearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);\n#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nclearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));\n#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nclearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;\n#endif\noutParams.clearCoatNormalW=clearCoatNormalW;\noutParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);\nfloat clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);\nfloat clearCoatNdotV=absEps(clearCoatNdotVUnclamped);\n#if DEBUGMODE>0\noutParams.clearCoatNdotV=clearCoatNdotV;\n#endif\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatVRefract=-refract(vPositionW,clearCoatNormalW,vClearCoatRefractionParams.y);\noutParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));\n#endif\n#if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))\nvec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);\n#endif\n#if defined(REFLECTION)\nfloat clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\n#ifdef SPECULARAA\nclearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;\n#endif\nvec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);\nvec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nclearCoatReflectionVector.z*=-1.0;\n#endif\n#ifdef REFLECTIONMAP_3D\nvec3 clearCoatReflectionCoords=clearCoatReflectionVector;\n#else\nvec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;\n#ifdef REFLECTIONMAP_PROJECTION\nclearCoatReflectionCoords/=clearCoatReflectionVector.z;\n#endif\nclearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;\n#endif\nsampleReflectionTexture(\nclearCoatAlphaG,\nvReflectionMicrosurfaceInfos,\nvReflectionInfos,\nvReflectionColor,\n#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nclearCoatNdotVUnclamped,\n#endif\n#ifdef LINEARSPECULARREFLECTION\nclearCoatRoughness,\n#endif\nreflectionSampler,\nclearCoatReflectionCoords,\n#ifndef LODBASEDMICROSFURACE\nreflectionSamplerLow,\nreflectionSamplerHigh,\n#endif\n#ifdef REALTIME_FILTERING\nvReflectionFilteringInfo,\n#endif\nenvironmentClearCoatRadiance\n);\n#if DEBUGMODE>0\noutParams.environmentClearCoatRadiance=environmentClearCoatRadiance;\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);\n#ifdef RADIANCEOCCLUSION\nfloat clearCoatSeo=environmentRadianceOcclusion(ambientMonochrome,clearCoatNdotVUnclamped);\nclearCoatEnvironmentReflectance*=clearCoatSeo;\n#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);\nclearCoatEnvironmentReflectance*=clearCoatEho;\n#endif\n#endif\n#endif\n#else\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));\n#endif\nclearCoatEnvironmentReflectance*=clearCoatIntensity;\n#if DEBUGMODE>0\noutParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;\n#endif\noutParams.finalClearCoatRadianceScaled=\nenvironmentClearCoatRadiance.rgb *\nclearCoatEnvironmentReflectance *\nvLightingIntensity.z;\n#endif\n#if defined(CLEARCOAT_TINT)\noutParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);\n#endif\nfloat fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\nfresnelIBLClearCoat*=clearCoatIntensity;\noutParams.conservationFactor=(1.-fresnelIBLClearCoat);\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\noutParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);\n#endif\n}\n#endif\n";
4
+ var shader = "struct clearcoatOutParams\n{\nvec3 specularEnvironmentR0;\nfloat conservationFactor;\nvec3 clearCoatNormalW;\nvec2 clearCoatAARoughnessFactors;\nfloat clearCoatIntensity;\nfloat clearCoatRoughness;\n#ifdef REFLECTION\nvec3 finalClearCoatRadianceScaled;\n#endif\n#ifdef CLEARCOAT_TINT\nvec3 absorption;\nfloat clearCoatNdotVRefract;\nvec3 clearCoatColor;\nfloat clearCoatThickness;\n#endif\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nvec3 energyConservationFactorClearCoat;\n#endif\n#if DEBUGMODE>0\nmat3 TBNClearCoat;\nvec2 clearCoatMapData;\nvec4 clearCoatTintMapData;\nvec4 environmentClearCoatRadiance;\nfloat clearCoatNdotV;\nvec3 clearCoatEnvironmentReflectance;\n#endif\n};\n#ifdef CLEARCOAT\n#define pbr_inline\n#define inline\nvoid clearcoatBlock(\nin vec3 vPositionW,\nin vec3 geometricNormalW,\nin vec3 viewDirectionW,\nin vec2 vClearCoatParams,\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\nin vec4 clearCoatMapRoughnessData,\n#endif\nin vec3 specularEnvironmentR0,\n#ifdef CLEARCOAT_TEXTURE\nin vec2 clearCoatMapData,\n#endif\n#ifdef CLEARCOAT_TINT\nin vec4 vClearCoatTintParams,\nin float clearCoatColorAtDistance,\nin vec4 vClearCoatRefractionParams,\n#ifdef CLEARCOAT_TINT_TEXTURE\nin vec4 clearCoatTintMapData,\n#endif\n#endif\n#ifdef CLEARCOAT_BUMP\nin vec2 vClearCoatBumpInfos,\nin vec4 clearCoatBumpMapData,\nin vec2 vClearCoatBumpUV,\n#if defined(TANGENT) && defined(NORMAL)\nin mat3 vTBN,\n#else\nin vec2 vClearCoatTangentSpaceParams,\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nin mat4 normalMatrix,\n#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nin vec3 faceNormal,\n#endif\n#ifdef REFLECTION\nin vec3 vReflectionMicrosurfaceInfos,\nin vec2 vReflectionInfos,\nin vec3 vReflectionColor,\nin vec4 vLightingIntensity,\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSampler,\n#else\nin sampler2D reflectionSampler,\n#endif\n#ifndef LODBASEDMICROSFURACE\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSamplerLow,\nin samplerCube reflectionSamplerHigh,\n#else\nin sampler2D reflectionSamplerLow,\nin sampler2D reflectionSamplerHigh,\n#endif\n#endif\n#ifdef REALTIME_FILTERING\nin vec2 vReflectionFilteringInfo,\n#endif\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\n#ifdef RADIANCEOCCLUSION\nin float ambientMonochrome,\n#endif\n#endif\n#if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\nin float frontFacingMultiplier,\n#endif\nout clearcoatOutParams outParams\n)\n{\nfloat clearCoatIntensity=vClearCoatParams.x;\nfloat clearCoatRoughness=vClearCoatParams.y;\n#ifdef CLEARCOAT_TEXTURE\nclearCoatIntensity*=clearCoatMapData.x;\n#ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\nclearCoatRoughness*=clearCoatMapData.y;\n#endif\n#if DEBUGMODE>0\noutParams.clearCoatMapData=clearCoatMapData;\n#endif\n#endif\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\n#ifdef CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL\nclearCoatRoughness*=clearCoatMapData.y;\n#else\nclearCoatRoughness*=clearCoatMapRoughnessData.y;\n#endif\n#endif\noutParams.clearCoatIntensity=clearCoatIntensity;\noutParams.clearCoatRoughness=clearCoatRoughness;\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatColor=vClearCoatTintParams.rgb;\nfloat clearCoatThickness=vClearCoatTintParams.a;\n#ifdef CLEARCOAT_TINT_TEXTURE\n#ifdef CLEARCOAT_TINT_GAMMATEXTURE\nclearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);\n#else\nclearCoatColor*=clearCoatTintMapData.rgb;\n#endif\nclearCoatThickness*=clearCoatTintMapData.a;\n#if DEBUGMODE>0\noutParams.clearCoatTintMapData=clearCoatTintMapData;\n#endif\n#endif\noutParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);\noutParams.clearCoatThickness=clearCoatThickness;\n#endif\n#ifdef CLEARCOAT_REMAP_F0\nvec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);\n#else\nvec3 specularEnvironmentR0Updated=specularEnvironmentR0;\n#endif\noutParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);\nvec3 clearCoatNormalW=geometricNormalW;\n#ifdef CLEARCOAT_BUMP\n#ifdef NORMALXYSCALE\nfloat clearCoatNormalScale=1.0;\n#else\nfloat clearCoatNormalScale=vClearCoatBumpInfos.y;\n#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBNClearCoat=vTBN;\n#else\nvec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;\nmat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);\n#endif\n#if DEBUGMODE>0\noutParams.TBNClearCoat=TBNClearCoat;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nclearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);\nclearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);\n#else\nclearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);\n#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nclearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));\n#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nclearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;\n#endif\noutParams.clearCoatNormalW=clearCoatNormalW;\noutParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);\nfloat clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);\nfloat clearCoatNdotV=absEps(clearCoatNdotVUnclamped);\n#if DEBUGMODE>0\noutParams.clearCoatNdotV=clearCoatNdotV;\n#endif\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatVRefract=refract(-viewDirectionW,clearCoatNormalW,vClearCoatRefractionParams.y);\noutParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));\n#endif\n#if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))\nvec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);\n#endif\n#if defined(REFLECTION)\nfloat clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\n#ifdef SPECULARAA\nclearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;\n#endif\nvec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);\nvec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nclearCoatReflectionVector.z*=-1.0;\n#endif\n#ifdef REFLECTIONMAP_3D\nvec3 clearCoatReflectionCoords=clearCoatReflectionVector;\n#else\nvec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;\n#ifdef REFLECTIONMAP_PROJECTION\nclearCoatReflectionCoords/=clearCoatReflectionVector.z;\n#endif\nclearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;\n#endif\nsampleReflectionTexture(\nclearCoatAlphaG,\nvReflectionMicrosurfaceInfos,\nvReflectionInfos,\nvReflectionColor,\n#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nclearCoatNdotVUnclamped,\n#endif\n#ifdef LINEARSPECULARREFLECTION\nclearCoatRoughness,\n#endif\nreflectionSampler,\nclearCoatReflectionCoords,\n#ifndef LODBASEDMICROSFURACE\nreflectionSamplerLow,\nreflectionSamplerHigh,\n#endif\n#ifdef REALTIME_FILTERING\nvReflectionFilteringInfo,\n#endif\nenvironmentClearCoatRadiance\n);\n#if DEBUGMODE>0\noutParams.environmentClearCoatRadiance=environmentClearCoatRadiance;\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);\n#ifdef RADIANCEOCCLUSION\nfloat clearCoatSeo=environmentRadianceOcclusion(ambientMonochrome,clearCoatNdotVUnclamped);\nclearCoatEnvironmentReflectance*=clearCoatSeo;\n#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);\nclearCoatEnvironmentReflectance*=clearCoatEho;\n#endif\n#endif\n#endif\n#else\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));\n#endif\nclearCoatEnvironmentReflectance*=clearCoatIntensity;\n#if DEBUGMODE>0\noutParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;\n#endif\noutParams.finalClearCoatRadianceScaled=\nenvironmentClearCoatRadiance.rgb *\nclearCoatEnvironmentReflectance *\nvLightingIntensity.z;\n#endif\n#if defined(CLEARCOAT_TINT)\noutParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);\n#endif\nfloat fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\nfresnelIBLClearCoat*=clearCoatIntensity;\noutParams.conservationFactor=(1.-fresnelIBLClearCoat);\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\noutParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);\n#endif\n}\n#endif\n";
5
5
  // Sideeffect
6
6
  ShaderStore.IncludesShadersStore[name] = shader;
7
7
  /** @hidden */
@@ -1 +1 @@
1
- {"version":3,"file":"pbrBlockClearcoat.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockClearcoat.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,IAAM,MAAM,GAAG,svRA6Qd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,iBAAiB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockClearcoat\";\nconst shader = `struct clearcoatOutParams\r{\rvec3 specularEnvironmentR0;\rfloat conservationFactor;\rvec3 clearCoatNormalW;\rvec2 clearCoatAARoughnessFactors;\rfloat clearCoatIntensity;\rfloat clearCoatRoughness;\r#ifdef REFLECTION\nvec3 finalClearCoatRadianceScaled;\r#endif\n#ifdef CLEARCOAT_TINT\nvec3 absorption;\rfloat clearCoatNdotVRefract;\rvec3 clearCoatColor;\rfloat clearCoatThickness;\r#endif\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nvec3 energyConservationFactorClearCoat;\r#endif\n#if DEBUGMODE>0\nmat3 TBNClearCoat;\rvec2 clearCoatMapData;\rvec4 clearCoatTintMapData;\rvec4 environmentClearCoatRadiance;\rfloat clearCoatNdotV;\rvec3 clearCoatEnvironmentReflectance;\r#endif\n};\r#ifdef CLEARCOAT\n#define pbr_inline\n#define inline\nvoid clearcoatBlock(\rin vec3 vPositionW,\rin vec3 geometricNormalW,\rin vec3 viewDirectionW,\rin vec2 vClearCoatParams,\r#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\nin vec4 clearCoatMapRoughnessData,\r#endif\nin vec3 specularEnvironmentR0,\r#ifdef CLEARCOAT_TEXTURE\nin vec2 clearCoatMapData,\r#endif\n#ifdef CLEARCOAT_TINT\nin vec4 vClearCoatTintParams,\rin float clearCoatColorAtDistance,\rin vec4 vClearCoatRefractionParams,\r#ifdef CLEARCOAT_TINT_TEXTURE\nin vec4 clearCoatTintMapData,\r#endif\n#endif\n#ifdef CLEARCOAT_BUMP\nin vec2 vClearCoatBumpInfos,\rin vec4 clearCoatBumpMapData,\rin vec2 vClearCoatBumpUV,\r#if defined(TANGENT) && defined(NORMAL)\nin mat3 vTBN,\r#else\nin vec2 vClearCoatTangentSpaceParams,\r#endif\n#ifdef OBJECTSPACE_NORMALMAP\nin mat4 normalMatrix,\r#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nin vec3 faceNormal,\r#endif\n#ifdef REFLECTION\nin vec3 vReflectionMicrosurfaceInfos,\rin vec2 vReflectionInfos,\rin vec3 vReflectionColor,\rin vec4 vLightingIntensity,\r#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSampler,\r#else\nin sampler2D reflectionSampler,\r#endif\n#ifndef LODBASEDMICROSFURACE\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSamplerLow,\rin samplerCube reflectionSamplerHigh,\r#else\nin sampler2D reflectionSamplerLow,\rin sampler2D reflectionSamplerHigh,\r#endif\n#endif\n#ifdef REALTIME_FILTERING\nin vec2 vReflectionFilteringInfo,\r#endif\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\n#ifdef RADIANCEOCCLUSION\nin float ambientMonochrome,\r#endif\n#endif\n#if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\nin float frontFacingMultiplier,\r#endif\nout clearcoatOutParams outParams\r)\r{\rfloat clearCoatIntensity=vClearCoatParams.x;\rfloat clearCoatRoughness=vClearCoatParams.y;\r#ifdef CLEARCOAT_TEXTURE\nclearCoatIntensity*=clearCoatMapData.x;\r#ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\nclearCoatRoughness*=clearCoatMapData.y;\r#endif\n#if DEBUGMODE>0\noutParams.clearCoatMapData=clearCoatMapData;\r#endif\n#endif\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\n#ifdef CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL\nclearCoatRoughness*=clearCoatMapData.y;\r#else\nclearCoatRoughness*=clearCoatMapRoughnessData.y;\r#endif\n#endif\noutParams.clearCoatIntensity=clearCoatIntensity;\routParams.clearCoatRoughness=clearCoatRoughness;\r#ifdef CLEARCOAT_TINT\nvec3 clearCoatColor=vClearCoatTintParams.rgb;\rfloat clearCoatThickness=vClearCoatTintParams.a;\r#ifdef CLEARCOAT_TINT_TEXTURE\n#ifdef CLEARCOAT_TINT_GAMMATEXTURE\nclearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);\r#else\nclearCoatColor*=clearCoatTintMapData.rgb;\r#endif\nclearCoatThickness*=clearCoatTintMapData.a;\r#if DEBUGMODE>0\noutParams.clearCoatTintMapData=clearCoatTintMapData;\r#endif\n#endif\noutParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);\routParams.clearCoatThickness=clearCoatThickness;\r#endif\n#ifdef CLEARCOAT_REMAP_F0\nvec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);\r#else\nvec3 specularEnvironmentR0Updated=specularEnvironmentR0;\r#endif\noutParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);\rvec3 clearCoatNormalW=geometricNormalW;\r#ifdef CLEARCOAT_BUMP\n#ifdef NORMALXYSCALE\nfloat clearCoatNormalScale=1.0;\r#else\nfloat clearCoatNormalScale=vClearCoatBumpInfos.y;\r#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBNClearCoat=vTBN;\r#else\nvec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;\rmat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);\r#endif\n#if DEBUGMODE>0\noutParams.TBNClearCoat=TBNClearCoat;\r#endif\n#ifdef OBJECTSPACE_NORMALMAP\nclearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);\rclearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);\r#else\nclearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);\r#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nclearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));\r#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nclearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;\r#endif\noutParams.clearCoatNormalW=clearCoatNormalW;\routParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);\rfloat clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);\rfloat clearCoatNdotV=absEps(clearCoatNdotVUnclamped);\r#if DEBUGMODE>0\noutParams.clearCoatNdotV=clearCoatNdotV;\r#endif\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatVRefract=-refract(vPositionW,clearCoatNormalW,vClearCoatRefractionParams.y);\routParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));\r#endif\n#if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))\nvec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);\r#endif\n#if defined(REFLECTION)\nfloat clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\r#ifdef SPECULARAA\nclearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;\r#endif\nvec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);\rvec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);\r#ifdef REFLECTIONMAP_OPPOSITEZ\nclearCoatReflectionVector.z*=-1.0;\r#endif\n#ifdef REFLECTIONMAP_3D\nvec3 clearCoatReflectionCoords=clearCoatReflectionVector;\r#else\nvec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;\r#ifdef REFLECTIONMAP_PROJECTION\nclearCoatReflectionCoords/=clearCoatReflectionVector.z;\r#endif\nclearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;\r#endif\nsampleReflectionTexture(\rclearCoatAlphaG,\rvReflectionMicrosurfaceInfos,\rvReflectionInfos,\rvReflectionColor,\r#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nclearCoatNdotVUnclamped,\r#endif\n#ifdef LINEARSPECULARREFLECTION\nclearCoatRoughness,\r#endif\nreflectionSampler,\rclearCoatReflectionCoords,\r#ifndef LODBASEDMICROSFURACE\nreflectionSamplerLow,\rreflectionSamplerHigh,\r#endif\n#ifdef REALTIME_FILTERING\nvReflectionFilteringInfo,\r#endif\nenvironmentClearCoatRadiance\r);\r#if DEBUGMODE>0\noutParams.environmentClearCoatRadiance=environmentClearCoatRadiance;\r#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);\r#ifdef RADIANCEOCCLUSION\nfloat clearCoatSeo=environmentRadianceOcclusion(ambientMonochrome,clearCoatNdotVUnclamped);\rclearCoatEnvironmentReflectance*=clearCoatSeo;\r#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);\rclearCoatEnvironmentReflectance*=clearCoatEho;\r#endif\n#endif\n#endif\n#else\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));\r#endif\nclearCoatEnvironmentReflectance*=clearCoatIntensity;\r#if DEBUGMODE>0\noutParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;\r#endif\noutParams.finalClearCoatRadianceScaled=\renvironmentClearCoatRadiance.rgb *\rclearCoatEnvironmentReflectance *\rvLightingIntensity.z;\r#endif\n#if defined(CLEARCOAT_TINT)\noutParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);\r#endif\nfloat fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\rfresnelIBLClearCoat*=clearCoatIntensity;\routParams.conservationFactor=(1.-fresnelIBLClearCoat);\r#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\noutParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);\r#endif\n}\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const pbrBlockClearcoat = { name, shader };\n"]}
1
+ {"version":3,"file":"pbrBlockClearcoat.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/pbrBlockClearcoat.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,IAAM,MAAM,GAAG,0vRA6Qd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,iBAAiB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"pbrBlockClearcoat\";\nconst shader = `struct clearcoatOutParams\r{\rvec3 specularEnvironmentR0;\rfloat conservationFactor;\rvec3 clearCoatNormalW;\rvec2 clearCoatAARoughnessFactors;\rfloat clearCoatIntensity;\rfloat clearCoatRoughness;\r#ifdef REFLECTION\nvec3 finalClearCoatRadianceScaled;\r#endif\n#ifdef CLEARCOAT_TINT\nvec3 absorption;\rfloat clearCoatNdotVRefract;\rvec3 clearCoatColor;\rfloat clearCoatThickness;\r#endif\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nvec3 energyConservationFactorClearCoat;\r#endif\n#if DEBUGMODE>0\nmat3 TBNClearCoat;\rvec2 clearCoatMapData;\rvec4 clearCoatTintMapData;\rvec4 environmentClearCoatRadiance;\rfloat clearCoatNdotV;\rvec3 clearCoatEnvironmentReflectance;\r#endif\n};\r#ifdef CLEARCOAT\n#define pbr_inline\n#define inline\nvoid clearcoatBlock(\rin vec3 vPositionW,\rin vec3 geometricNormalW,\rin vec3 viewDirectionW,\rin vec2 vClearCoatParams,\r#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\nin vec4 clearCoatMapRoughnessData,\r#endif\nin vec3 specularEnvironmentR0,\r#ifdef CLEARCOAT_TEXTURE\nin vec2 clearCoatMapData,\r#endif\n#ifdef CLEARCOAT_TINT\nin vec4 vClearCoatTintParams,\rin float clearCoatColorAtDistance,\rin vec4 vClearCoatRefractionParams,\r#ifdef CLEARCOAT_TINT_TEXTURE\nin vec4 clearCoatTintMapData,\r#endif\n#endif\n#ifdef CLEARCOAT_BUMP\nin vec2 vClearCoatBumpInfos,\rin vec4 clearCoatBumpMapData,\rin vec2 vClearCoatBumpUV,\r#if defined(TANGENT) && defined(NORMAL)\nin mat3 vTBN,\r#else\nin vec2 vClearCoatTangentSpaceParams,\r#endif\n#ifdef OBJECTSPACE_NORMALMAP\nin mat4 normalMatrix,\r#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nin vec3 faceNormal,\r#endif\n#ifdef REFLECTION\nin vec3 vReflectionMicrosurfaceInfos,\rin vec2 vReflectionInfos,\rin vec3 vReflectionColor,\rin vec4 vLightingIntensity,\r#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSampler,\r#else\nin sampler2D reflectionSampler,\r#endif\n#ifndef LODBASEDMICROSFURACE\n#ifdef REFLECTIONMAP_3D\nin samplerCube reflectionSamplerLow,\rin samplerCube reflectionSamplerHigh,\r#else\nin sampler2D reflectionSamplerLow,\rin sampler2D reflectionSamplerHigh,\r#endif\n#endif\n#ifdef REALTIME_FILTERING\nin vec2 vReflectionFilteringInfo,\r#endif\n#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\n#ifdef RADIANCEOCCLUSION\nin float ambientMonochrome,\r#endif\n#endif\n#if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\nin float frontFacingMultiplier,\r#endif\nout clearcoatOutParams outParams\r)\r{\rfloat clearCoatIntensity=vClearCoatParams.x;\rfloat clearCoatRoughness=vClearCoatParams.y;\r#ifdef CLEARCOAT_TEXTURE\nclearCoatIntensity*=clearCoatMapData.x;\r#ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\nclearCoatRoughness*=clearCoatMapData.y;\r#endif\n#if DEBUGMODE>0\noutParams.clearCoatMapData=clearCoatMapData;\r#endif\n#endif\n#if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)\n#ifdef CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL\nclearCoatRoughness*=clearCoatMapData.y;\r#else\nclearCoatRoughness*=clearCoatMapRoughnessData.y;\r#endif\n#endif\noutParams.clearCoatIntensity=clearCoatIntensity;\routParams.clearCoatRoughness=clearCoatRoughness;\r#ifdef CLEARCOAT_TINT\nvec3 clearCoatColor=vClearCoatTintParams.rgb;\rfloat clearCoatThickness=vClearCoatTintParams.a;\r#ifdef CLEARCOAT_TINT_TEXTURE\n#ifdef CLEARCOAT_TINT_GAMMATEXTURE\nclearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);\r#else\nclearCoatColor*=clearCoatTintMapData.rgb;\r#endif\nclearCoatThickness*=clearCoatTintMapData.a;\r#if DEBUGMODE>0\noutParams.clearCoatTintMapData=clearCoatTintMapData;\r#endif\n#endif\noutParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);\routParams.clearCoatThickness=clearCoatThickness;\r#endif\n#ifdef CLEARCOAT_REMAP_F0\nvec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);\r#else\nvec3 specularEnvironmentR0Updated=specularEnvironmentR0;\r#endif\noutParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);\rvec3 clearCoatNormalW=geometricNormalW;\r#ifdef CLEARCOAT_BUMP\n#ifdef NORMALXYSCALE\nfloat clearCoatNormalScale=1.0;\r#else\nfloat clearCoatNormalScale=vClearCoatBumpInfos.y;\r#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBNClearCoat=vTBN;\r#else\nvec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;\rmat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);\r#endif\n#if DEBUGMODE>0\noutParams.TBNClearCoat=TBNClearCoat;\r#endif\n#ifdef OBJECTSPACE_NORMALMAP\nclearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);\rclearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);\r#else\nclearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);\r#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nclearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));\r#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nclearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;\r#endif\noutParams.clearCoatNormalW=clearCoatNormalW;\routParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);\rfloat clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);\rfloat clearCoatNdotV=absEps(clearCoatNdotVUnclamped);\r#if DEBUGMODE>0\noutParams.clearCoatNdotV=clearCoatNdotV;\r#endif\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatVRefract=refract(-viewDirectionW,clearCoatNormalW,vClearCoatRefractionParams.y);\routParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));\r#endif\n#if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))\nvec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);\r#endif\n#if defined(REFLECTION)\nfloat clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\r#ifdef SPECULARAA\nclearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;\r#endif\nvec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);\rvec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);\r#ifdef REFLECTIONMAP_OPPOSITEZ\nclearCoatReflectionVector.z*=-1.0;\r#endif\n#ifdef REFLECTIONMAP_3D\nvec3 clearCoatReflectionCoords=clearCoatReflectionVector;\r#else\nvec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;\r#ifdef REFLECTIONMAP_PROJECTION\nclearCoatReflectionCoords/=clearCoatReflectionVector.z;\r#endif\nclearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;\r#endif\nsampleReflectionTexture(\rclearCoatAlphaG,\rvReflectionMicrosurfaceInfos,\rvReflectionInfos,\rvReflectionColor,\r#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nclearCoatNdotVUnclamped,\r#endif\n#ifdef LINEARSPECULARREFLECTION\nclearCoatRoughness,\r#endif\nreflectionSampler,\rclearCoatReflectionCoords,\r#ifndef LODBASEDMICROSFURACE\nreflectionSamplerLow,\rreflectionSamplerHigh,\r#endif\n#ifdef REALTIME_FILTERING\nvReflectionFilteringInfo,\r#endif\nenvironmentClearCoatRadiance\r);\r#if DEBUGMODE>0\noutParams.environmentClearCoatRadiance=environmentClearCoatRadiance;\r#endif\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);\r#ifdef RADIANCEOCCLUSION\nfloat clearCoatSeo=environmentRadianceOcclusion(ambientMonochrome,clearCoatNdotVUnclamped);\rclearCoatEnvironmentReflectance*=clearCoatSeo;\r#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);\rclearCoatEnvironmentReflectance*=clearCoatEho;\r#endif\n#endif\n#endif\n#else\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));\r#endif\nclearCoatEnvironmentReflectance*=clearCoatIntensity;\r#if DEBUGMODE>0\noutParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;\r#endif\noutParams.finalClearCoatRadianceScaled=\renvironmentClearCoatRadiance.rgb *\rclearCoatEnvironmentReflectance *\rvLightingIntensity.z;\r#endif\n#if defined(CLEARCOAT_TINT)\noutParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);\r#endif\nfloat fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\rfresnelIBLClearCoat*=clearCoatIntensity;\routParams.conservationFactor=(1.-fresnelIBLClearCoat);\r#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\noutParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);\r#endif\n}\r#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const pbrBlockClearcoat = { name, shader };\n"]}
@@ -1,7 +1,7 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  var name = "vertexColorMixing";
4
- var shader = "#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvColor=vec4(1.0);\n#ifdef VERTEXCOLOR\nvColor*=color;\n#endif\n#ifdef INSTANCESCOLOR\nvColor*=instanceColor;\n#endif\n#endif\n";
4
+ var shader = "#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvColor=vec4(1.0);\n#ifdef VERTEXCOLOR\n#ifdef VERTEXALPHA\nvColor*=color;\n#else\nvColor.rgb*=color.rgb;\n#endif\n#endif\n#ifdef INSTANCESCOLOR\nvColor*=instanceColor;\n#endif\n#endif\n";
5
5
  // Sideeffect
6
6
  ShaderStore.IncludesShadersStore[name] = shader;
7
7
  /** @hidden */
@@ -1 +1 @@
1
- {"version":3,"file":"vertexColorMixing.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/vertexColorMixing.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,IAAM,MAAM,GAAG,qLASd,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,iBAAiB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"vertexColorMixing\";\nconst shader = `#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvColor=vec4(1.0);\r#ifdef VERTEXCOLOR\nvColor*=color;\r#endif\n#ifdef INSTANCESCOLOR\nvColor*=instanceColor;\r#endif\n#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const vertexColorMixing = { name, shader };\n"]}
1
+ {"version":3,"file":"vertexColorMixing.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Shaders/ShadersInclude/vertexColorMixing.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,IAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,IAAM,MAAM,GAAG,gPAad,CAAC;AACF,aAAa;AACb,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,cAAc;AACd,MAAM,CAAC,IAAM,iBAAiB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"vertexColorMixing\";\nconst shader = `#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvColor=vec4(1.0);\r#ifdef VERTEXCOLOR\n#ifdef VERTEXALPHA\nvColor*=color;\r#else\nvColor.rgb*=color.rgb;\r#endif\n#endif\n#ifdef INSTANCESCOLOR\nvColor*=instanceColor;\r#endif\n#endif\n`;\n// Sideeffect\nShaderStore.IncludesShadersStore[name] = shader;\n/** @hidden */\nexport const vertexColorMixing = { name, shader };\n"]}
@@ -28,7 +28,7 @@ import "./ShadersInclude/lightFragment.js";
28
28
  import "./ShadersInclude/logDepthFragment.js";
29
29
  import "./ShadersInclude/fogFragment.js";
30
30
  var name = "defaultPixelShader";
31
- var shader = "#include<__decl__defaultFragment>\n#if defined(BUMP) || !defined(NORMAL)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#include<prePassDeclaration>[SCENE_MRT_COUNT]\n#include<oitDeclaration>\n#define CUSTOM_FRAGMENT_BEGIN\n#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\n#define RECIPROCAL_PI2 0.15915494\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvarying vec4 vColor;\n#endif\n#include<mainUVVaryingDeclaration>[1..7]\n#include<helperFunctions>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<samplerFragmentDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_SAMPLERNAME_,diffuse)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)\n#ifdef REFRACTION\n#ifdef REFRACTIONMAP_3D\nuniform samplerCube refractionCubeSampler;\n#else\nuniform sampler2D refraction2DSampler;\n#endif\n#endif\n#if defined(SPECULARTERM)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_SAMPLERNAME_,specular)\n#endif\n#include<fresnelFunction>\n#ifdef REFLECTION\n#ifdef REFLECTIONMAP_3D\nuniform samplerCube reflectionCubeSampler;\n#else\nuniform sampler2D reflection2DSampler;\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#else\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#endif\n#include<reflectionFunction>\n#endif\n#include<imageProcessingDeclaration>\n#include<imageProcessingFunctions>\n#include<bumpFragmentMainFunctions>\n#include<bumpFragmentFunctions>\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<oitFragment>\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);\nvec4 baseColor=vec4(1.,1.,1.,1.);\nvec3 diffuseColor=vDiffuseColor.rgb;\nfloat alpha=vDiffuseColor.a;\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=normalize(-cross(dFdx(vPositionW),dFdy(vPositionW)));\n#endif\n#include<bumpFragment>\n#ifdef TWOSIDEDLIGHTING\nnormalW=gl_FrontFacing ? normalW : -normalW;\n#endif\n#ifdef DIFFUSE\nbaseColor=texture2D(diffuseSampler,vDiffuseUV+uvOffset);\n#if defined(ALPHATEST) && !defined(ALPHATEST_AFTERALLALPHACOMPUTATIONS)\nif (baseColor.a<alphaCutOff)\ndiscard;\n#endif\n#ifdef ALPHAFROMDIFFUSE\nalpha*=baseColor.a;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALPHA\nbaseColor.rgb*=vDiffuseInfos.y;\n#endif\n#include<depthPrePass>\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nbaseColor.rgb*=vColor.rgb;\n#endif\n#ifdef DETAIL\nbaseColor.rgb=baseColor.rgb*2.0*mix(0.5,detailColor.r,vDetailInfos.y);\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_DIFFUSE\nvec3 baseAmbientColor=vec3(1.,1.,1.);\n#ifdef AMBIENT\nbaseAmbientColor=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb*vAmbientInfos.y;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_LIGHTS\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularColor=vSpecularColor.rgb;\n#ifdef SPECULAR\nvec4 specularMapColor=texture2D(specularSampler,vSpecularUV+uvOffset);\nspecularColor=specularMapColor.rgb;\n#ifdef GLOSSINESS\nglossiness=glossiness*specularMapColor.a;\n#endif\n#endif\n#else\nfloat glossiness=0.;\n#endif\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\n#ifdef SPECULARTERM\nvec3 specularBase=vec3(0.,0.,0.);\n#endif\nfloat shadow=1.;\n#ifdef LIGHTMAP\nvec4 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset);\n#ifdef RGBDLIGHTMAP\nlightmapColor.rgb=fromRGBD(lightmapColor);\n#endif\nlightmapColor.rgb*=vLightmapInfos.y;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec4 refractionColor=vec4(0.,0.,0.,1.);\n#ifdef REFRACTION\nvec3 refractionVector=normalize(refract(-viewDirectionW,normalW,vRefractionInfos.y));\n#ifdef REFRACTIONMAP_3D\n#ifdef USE_LOCAL_REFRACTIONMAP_CUBIC\nrefractionVector=parallaxCorrectNormal(vPositionW,refractionVector,vRefractionSize,vRefractionPosition);\n#endif\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\nif (dot(refractionVector,viewDirectionW)<1.0) {\nrefractionColor=textureCube(refractionCubeSampler,refractionVector);\n}\n#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\nrefractionCoords.y=1.0-refractionCoords.y;\nrefractionColor=texture2D(refraction2DSampler,refractionCoords);\n#endif\n#ifdef RGBDREFRACTION\nrefractionColor.rgb=fromRGBD(refractionColor);\n#endif\n#ifdef IS_REFRACTION_LINEAR\nrefractionColor.rgb=toGammaSpace(refractionColor.rgb);\n#endif\nrefractionColor.rgb*=vRefractionInfos.x;\n#endif\nvec4 reflectionColor=vec4(0.,0.,0.,1.);\n#ifdef REFLECTION\nvec3 vReflectionUVW=computeReflectionCoords(vec4(vPositionW,1.0),normalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nvReflectionUVW.z*=-1.0;\n#endif\n#ifdef REFLECTIONMAP_3D\n#ifdef ROUGHNESS\nfloat bias=vReflectionInfos.y;\n#ifdef SPECULARTERM\n#ifdef SPECULAR\n#ifdef GLOSSINESS\nbias*=(1.0-specularMapColor.a);\n#endif\n#endif\n#endif\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW,bias);\n#else\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW);\n#endif\n#else\nvec2 coords=vReflectionUVW.xy;\n#ifdef REFLECTIONMAP_PROJECTION\ncoords/=vReflectionUVW.z;\n#endif\ncoords.y=1.0-coords.y;\nreflectionColor=texture2D(reflection2DSampler,coords);\n#endif\n#ifdef RGBDREFLECTION\nreflectionColor.rgb=fromRGBD(reflectionColor);\n#endif\n#ifdef IS_REFLECTION_LINEAR\nreflectionColor.rgb=toGammaSpace(reflectionColor.rgb);\n#endif\nreflectionColor.rgb*=vReflectionInfos.x;\n#ifdef REFLECTIONFRESNEL\nfloat reflectionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,reflectionRightColor.a,reflectionLeftColor.a);\n#ifdef REFLECTIONFRESNELFROMSPECULAR\n#ifdef SPECULARTERM\nreflectionColor.rgb*=specularColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#else\nreflectionColor.rgb*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#else\nreflectionColor.rgb*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#endif\n#endif\n#ifdef REFRACTIONFRESNEL\nfloat refractionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,refractionRightColor.a,refractionLeftColor.a);\nrefractionColor.rgb*=refractionLeftColor.rgb*(1.0-refractionFresnelTerm)+refractionFresnelTerm*refractionRightColor.rgb;\n#endif\n#ifdef OPACITY\nvec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset);\n#ifdef OPACITYRGB\nopacityMap.rgb=opacityMap.rgb*vec3(0.3,0.59,0.11);\nalpha*=(opacityMap.x+opacityMap.y+opacityMap.z)* vOpacityInfos.y;\n#else\nalpha*=opacityMap.a*vOpacityInfos.y;\n#endif\n#endif\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef OPACITYFRESNEL\nfloat opacityFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,opacityParts.z,opacityParts.w);\nalpha+=opacityParts.x*(1.0-opacityFresnelTerm)+opacityFresnelTerm*opacityParts.y;\n#endif\n#ifdef ALPHATEST\n#ifdef ALPHATEST_AFTERALLALPHACOMPUTATIONS\nif (alpha<alphaCutOff)\ndiscard;\n#endif\n#ifndef ALPHABLEND\nalpha=1.0;\n#endif\n#endif\nvec3 emissiveColor=vEmissiveColor;\n#ifdef EMISSIVE\nemissiveColor+=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb*vEmissiveInfos.y;\n#endif\n#ifdef EMISSIVEFRESNEL\nfloat emissiveFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,emissiveRightColor.a,emissiveLeftColor.a);\nemissiveColor*=emissiveLeftColor.rgb*(1.0-emissiveFresnelTerm)+emissiveFresnelTerm*emissiveRightColor.rgb;\n#endif\n#ifdef DIFFUSEFRESNEL\nfloat diffuseFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,diffuseRightColor.a,diffuseLeftColor.a);\ndiffuseBase*=diffuseLeftColor.rgb*(1.0-diffuseFresnelTerm)+diffuseFresnelTerm*diffuseRightColor.rgb;\n#endif\n#ifdef EMISSIVEASILLUMINATION\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\n#ifdef LINKEMISSIVEWITHDIFFUSE\nvec3 finalDiffuse=clamp((diffuseBase+emissiveColor)*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+emissiveColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#endif\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#ifdef SPECULAROVERALPHA\nalpha=clamp(alpha+dot(finalSpecular,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#ifdef REFLECTIONOVERALPHA\nalpha=clamp(alpha+dot(reflectionColor.rgb,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n#ifdef EMISSIVEASILLUMINATION\nvec4 color=vec4(clamp(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor.rgb+emissiveColor+refractionColor.rgb,0.0,1.0),alpha);\n#else\nvec4 color=vec4(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor.rgb+refractionColor.rgb,alpha);\n#endif\n#ifdef LIGHTMAP\n#ifndef LIGHTMAPEXCLUDED\n#ifdef USELIGHTMAPASSHADOWMAP\ncolor.rgb*=lightmapColor.rgb;\n#else\ncolor.rgb+=lightmapColor.rgb;\n#endif\n#endif\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FOG\ncolor.rgb=max(color.rgb,0.);\n#include<logDepthFragment>\n#include<fogFragment>\n#ifdef IMAGEPROCESSINGPOSTPROCESS\ncolor.rgb=toLinearSpace(color.rgb);\n#else\n#ifdef IMAGEPROCESSING\ncolor.rgb=toLinearSpace(color.rgb);\ncolor=applyImageProcessing(color);\n#endif\n#endif\ncolor.a*=visibility;\n#ifdef PREMULTIPLYALPHA\ncolor.rgb*=color.a;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\n#ifdef PREPASS\nfloat writeGeometryInfo=color.a>0.4 ? 1.0 : 0.0;\ngl_FragData[0]=color; \n#ifdef PREPASS_POSITION\ngl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo);\n#endif\n#ifdef PREPASS_VELOCITY\nvec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;\nvec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;\nvec2 velocity=abs(a-b);\nvelocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;\ngl_FragData[PREPASS_VELOCITY_INDEX]=vec4(velocity,0.0,writeGeometryInfo);\n#endif\n#ifdef PREPASS_IRRADIANCE\ngl_FragData[PREPASS_IRRADIANCE_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_DEPTH\ngl_FragData[PREPASS_DEPTH_INDEX]=vec4(vViewPos.z,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_NORMAL\ngl_FragData[PREPASS_NORMAL_INDEX]=vec4((view*vec4(normalW,0.0)).rgb,writeGeometryInfo); \n#endif\n#ifdef PREPASS_ALBEDO_SQRT\ngl_FragData[PREPASS_ALBEDO_SQRT_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_REFLECTIVITY\n#if defined(SPECULAR)\ngl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(specularMapColor.rgb,specularMapColor.a*writeGeometryInfo);\n#else\ngl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo);\n#endif\n#endif\n#endif\n#if !defined(PREPASS) || defined(WEBGL2)\ngl_FragColor=color;\n#endif\n#if ORDER_INDEPENDENT_TRANSPARENCY\nif (fragDepth==nearestDepth) {\nfrontColor.rgb+=color.rgb*color.a*alphaMultiplier;\nfrontColor.a=1.0-alphaMultiplier*(1.0-color.a);\n} else {\nbackColor+=color;\n}\n#endif\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n";
31
+ var shader = "#include<__decl__defaultFragment>\n#if defined(BUMP) || !defined(NORMAL)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#include<prePassDeclaration>[SCENE_MRT_COUNT]\n#include<oitDeclaration>\n#define CUSTOM_FRAGMENT_BEGIN\n#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\n#define RECIPROCAL_PI2 0.15915494\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nvarying vec4 vColor;\n#endif\n#include<mainUVVaryingDeclaration>[1..7]\n#include<helperFunctions>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<samplerFragmentDeclaration>(_DEFINENAME_,DIFFUSE,_VARYINGNAME_,Diffuse,_SAMPLERNAME_,diffuse)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)\n#ifdef REFRACTION\n#ifdef REFRACTIONMAP_3D\nuniform samplerCube refractionCubeSampler;\n#else\nuniform sampler2D refraction2DSampler;\n#endif\n#endif\n#if defined(SPECULARTERM)\n#include<samplerFragmentDeclaration>(_DEFINENAME_,SPECULAR,_VARYINGNAME_,Specular,_SAMPLERNAME_,specular)\n#endif\n#include<fresnelFunction>\n#ifdef REFLECTION\n#ifdef REFLECTIONMAP_3D\nuniform samplerCube reflectionCubeSampler;\n#else\nuniform sampler2D reflection2DSampler;\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#else\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#endif\n#include<reflectionFunction>\n#endif\n#include<imageProcessingDeclaration>\n#include<imageProcessingFunctions>\n#include<bumpFragmentMainFunctions>\n#include<bumpFragmentFunctions>\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<oitFragment>\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);\nvec4 baseColor=vec4(1.,1.,1.,1.);\nvec3 diffuseColor=vDiffuseColor.rgb;\nfloat alpha=vDiffuseColor.a;\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=normalize(-cross(dFdx(vPositionW),dFdy(vPositionW)));\n#endif\n#include<bumpFragment>\n#ifdef TWOSIDEDLIGHTING\nnormalW=gl_FrontFacing ? normalW : -normalW;\n#endif\n#ifdef DIFFUSE\nbaseColor=texture2D(diffuseSampler,vDiffuseUV+uvOffset);\n#if defined(ALPHATEST) && !defined(ALPHATEST_AFTERALLALPHACOMPUTATIONS)\nif (baseColor.a<alphaCutOff)\ndiscard;\n#endif\n#ifdef ALPHAFROMDIFFUSE\nalpha*=baseColor.a;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALPHA\nbaseColor.rgb*=vDiffuseInfos.y;\n#endif\n#include<depthPrePass>\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR)\nbaseColor.rgb*=vColor.rgb;\n#endif\n#ifdef DETAIL\nbaseColor.rgb=baseColor.rgb*2.0*mix(0.5,detailColor.r,vDetailInfos.y);\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_DIFFUSE\nvec3 baseAmbientColor=vec3(1.,1.,1.);\n#ifdef AMBIENT\nbaseAmbientColor=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb*vAmbientInfos.y;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_LIGHTS\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularColor=vSpecularColor.rgb;\n#ifdef SPECULAR\nvec4 specularMapColor=texture2D(specularSampler,vSpecularUV+uvOffset);\nspecularColor=specularMapColor.rgb;\n#ifdef GLOSSINESS\nglossiness=glossiness*specularMapColor.a;\n#endif\n#endif\n#else\nfloat glossiness=0.;\n#endif\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\n#ifdef SPECULARTERM\nvec3 specularBase=vec3(0.,0.,0.);\n#endif\nfloat shadow=1.;\n#ifdef LIGHTMAP\nvec4 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset);\n#ifdef RGBDLIGHTMAP\nlightmapColor.rgb=fromRGBD(lightmapColor);\n#endif\nlightmapColor.rgb*=vLightmapInfos.y;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec4 refractionColor=vec4(0.,0.,0.,1.);\n#ifdef REFRACTION\nvec3 refractionVector=normalize(refract(-viewDirectionW,normalW,vRefractionInfos.y));\n#ifdef REFRACTIONMAP_3D\n#ifdef USE_LOCAL_REFRACTIONMAP_CUBIC\nrefractionVector=parallaxCorrectNormal(vPositionW,refractionVector,vRefractionSize,vRefractionPosition);\n#endif\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\nif (dot(refractionVector,viewDirectionW)<1.0) {\nrefractionColor=textureCube(refractionCubeSampler,refractionVector);\n}\n#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\nrefractionCoords.y=1.0-refractionCoords.y;\nrefractionColor=texture2D(refraction2DSampler,refractionCoords);\n#endif\n#ifdef RGBDREFRACTION\nrefractionColor.rgb=fromRGBD(refractionColor);\n#endif\n#ifdef IS_REFRACTION_LINEAR\nrefractionColor.rgb=toGammaSpace(refractionColor.rgb);\n#endif\nrefractionColor.rgb*=vRefractionInfos.x;\n#endif\nvec4 reflectionColor=vec4(0.,0.,0.,1.);\n#ifdef REFLECTION\nvec3 vReflectionUVW=computeReflectionCoords(vec4(vPositionW,1.0),normalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nvReflectionUVW.z*=-1.0;\n#endif\n#ifdef REFLECTIONMAP_3D\n#ifdef ROUGHNESS\nfloat bias=vReflectionInfos.y;\n#ifdef SPECULARTERM\n#ifdef SPECULAR\n#ifdef GLOSSINESS\nbias*=(1.0-specularMapColor.a);\n#endif\n#endif\n#endif\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW,bias);\n#else\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW);\n#endif\n#else\nvec2 coords=vReflectionUVW.xy;\n#ifdef REFLECTIONMAP_PROJECTION\ncoords/=vReflectionUVW.z;\n#endif\ncoords.y=1.0-coords.y;\nreflectionColor=texture2D(reflection2DSampler,coords);\n#endif\n#ifdef RGBDREFLECTION\nreflectionColor.rgb=fromRGBD(reflectionColor);\n#endif\n#ifdef IS_REFLECTION_LINEAR\nreflectionColor.rgb=toGammaSpace(reflectionColor.rgb);\n#endif\nreflectionColor.rgb*=vReflectionInfos.x;\n#ifdef REFLECTIONFRESNEL\nfloat reflectionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,reflectionRightColor.a,reflectionLeftColor.a);\n#ifdef REFLECTIONFRESNELFROMSPECULAR\n#ifdef SPECULARTERM\nreflectionColor.rgb*=specularColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#else\nreflectionColor.rgb*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#else\nreflectionColor.rgb*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#endif\n#endif\n#ifdef REFRACTIONFRESNEL\nfloat refractionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,refractionRightColor.a,refractionLeftColor.a);\nrefractionColor.rgb*=refractionLeftColor.rgb*(1.0-refractionFresnelTerm)+refractionFresnelTerm*refractionRightColor.rgb;\n#endif\n#ifdef OPACITY\nvec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset);\n#ifdef OPACITYRGB\nopacityMap.rgb=opacityMap.rgb*vec3(0.3,0.59,0.11);\nalpha*=(opacityMap.x+opacityMap.y+opacityMap.z)* vOpacityInfos.y;\n#else\nalpha*=opacityMap.a*vOpacityInfos.y;\n#endif\n#endif\n#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR)\nalpha*=vColor.a;\n#endif\n#ifdef OPACITYFRESNEL\nfloat opacityFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,opacityParts.z,opacityParts.w);\nalpha+=opacityParts.x*(1.0-opacityFresnelTerm)+opacityFresnelTerm*opacityParts.y;\n#endif\n#ifdef ALPHATEST\n#ifdef ALPHATEST_AFTERALLALPHACOMPUTATIONS\nif (alpha<alphaCutOff)\ndiscard;\n#endif\n#ifndef ALPHABLEND\nalpha=1.0;\n#endif\n#endif\nvec3 emissiveColor=vEmissiveColor;\n#ifdef EMISSIVE\nemissiveColor+=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb*vEmissiveInfos.y;\n#endif\n#ifdef EMISSIVEFRESNEL\nfloat emissiveFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,emissiveRightColor.a,emissiveLeftColor.a);\nemissiveColor*=emissiveLeftColor.rgb*(1.0-emissiveFresnelTerm)+emissiveFresnelTerm*emissiveRightColor.rgb;\n#endif\n#ifdef DIFFUSEFRESNEL\nfloat diffuseFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,diffuseRightColor.a,diffuseLeftColor.a);\ndiffuseBase*=diffuseLeftColor.rgb*(1.0-diffuseFresnelTerm)+diffuseFresnelTerm*diffuseRightColor.rgb;\n#endif\n#ifdef EMISSIVEASILLUMINATION\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\n#ifdef LINKEMISSIVEWITHDIFFUSE\nvec3 finalDiffuse=clamp((diffuseBase+emissiveColor)*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+emissiveColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#endif\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#ifdef SPECULAROVERALPHA\nalpha=clamp(alpha+dot(finalSpecular,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#ifdef REFLECTIONOVERALPHA\nalpha=clamp(alpha+dot(reflectionColor.rgb,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n#ifdef EMISSIVEASILLUMINATION\nvec4 color=vec4(clamp(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor.rgb+emissiveColor+refractionColor.rgb,0.0,1.0),alpha);\n#else\nvec4 color=vec4(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor.rgb+refractionColor.rgb,alpha);\n#endif\n#ifdef LIGHTMAP\n#ifndef LIGHTMAPEXCLUDED\n#ifdef USELIGHTMAPASSHADOWMAP\ncolor.rgb*=lightmapColor.rgb;\n#else\ncolor.rgb+=lightmapColor.rgb;\n#endif\n#endif\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FOG\ncolor.rgb=max(color.rgb,0.);\n#include<logDepthFragment>\n#include<fogFragment>\n#ifdef IMAGEPROCESSINGPOSTPROCESS\ncolor.rgb=toLinearSpace(color.rgb);\n#else\n#ifdef IMAGEPROCESSING\ncolor.rgb=toLinearSpace(color.rgb);\ncolor=applyImageProcessing(color);\n#endif\n#endif\ncolor.a*=visibility;\n#ifdef PREMULTIPLYALPHA\ncolor.rgb*=color.a;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\n#ifdef PREPASS\nfloat writeGeometryInfo=color.a>0.4 ? 1.0 : 0.0;\ngl_FragData[0]=color; \n#ifdef PREPASS_POSITION\ngl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo);\n#endif\n#ifdef PREPASS_VELOCITY\nvec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;\nvec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;\nvec2 velocity=abs(a-b);\nvelocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;\ngl_FragData[PREPASS_VELOCITY_INDEX]=vec4(velocity,0.0,writeGeometryInfo);\n#endif\n#ifdef PREPASS_IRRADIANCE\ngl_FragData[PREPASS_IRRADIANCE_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_DEPTH\ngl_FragData[PREPASS_DEPTH_INDEX]=vec4(vViewPos.z,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_NORMAL\ngl_FragData[PREPASS_NORMAL_INDEX]=vec4((view*vec4(normalW,0.0)).rgb,writeGeometryInfo); \n#endif\n#ifdef PREPASS_ALBEDO_SQRT\ngl_FragData[PREPASS_ALBEDO_SQRT_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo); \n#endif\n#ifdef PREPASS_REFLECTIVITY\n#if defined(SPECULAR)\ngl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(specularMapColor.rgb,specularMapColor.a*writeGeometryInfo);\n#else\ngl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(0.0,0.0,0.0,writeGeometryInfo);\n#endif\n#endif\n#endif\n#if !defined(PREPASS) || defined(WEBGL2)\ngl_FragColor=color;\n#endif\n#if ORDER_INDEPENDENT_TRANSPARENCY\nif (fragDepth==nearestDepth) {\nfrontColor.rgb+=color.rgb*color.a*alphaMultiplier;\nfrontColor.a=1.0-alphaMultiplier*(1.0-color.a);\n} else {\nbackColor+=color;\n}\n#endif\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n";
32
32
  // Sideeffect
33
33
  ShaderStore.ShadersStore[name] = shader;
34
34
  /** @hidden */