@onerjs/core 8.46.6 → 8.46.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Engines/Extensions/engine.multiview.js +6 -0
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/constants.d.ts +9 -4
- package/Engines/constants.js +9 -4
- package/Engines/constants.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +38 -11
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +4 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +4 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.d.ts +155 -53
- package/Materials/PBR/openpbrMaterial.js +149 -61
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +36 -31
- package/Materials/PBR/pbrBaseMaterial.js +4 -34
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/environmentLighting.defines.d.ts +31 -0
- package/Materials/environmentLighting.defines.js +33 -0
- package/Materials/environmentLighting.defines.js.map +1 -0
- package/Materials/material.js +1 -0
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.functions.js +8 -2
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.js +10 -3
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +43 -0
- package/Materials/prepass.defines.js +45 -0
- package/Materials/prepass.defines.js.map +1 -0
- package/Materials/standardMaterial.d.ts +36 -31
- package/Materials/standardMaterial.js +2 -32
- package/Materials/standardMaterial.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +8 -4
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +3 -9
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +35 -12
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +20 -0
- package/Rendering/geometryBufferRenderer.js +203 -14
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/objectRenderer.js +1 -0
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +7 -1
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +5 -0
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBaseLayerData.js +1 -1
- package/Shaders/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.d.ts +5 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +77 -0
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +37 -17
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +43 -17
- package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +10 -1
- package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +1 -0
- package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js +14 -38
- package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrIblFunctions.js +4 -2
- package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.d.ts +5 -0
- package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js +35 -0
- package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -0
- package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js +1 -1
- package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +9 -0
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVolumeFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/openpbrVolumeFunctions.js +67 -0
- package/Shaders/ShadersInclude/openpbrVolumeFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +14 -3
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.js +43 -0
- package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -32
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +12 -0
- package/Shaders/geometry.fragment.js +102 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +1 -0
- package/Shaders/geometry.vertex.js +46 -2
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.d.ts +1 -0
- package/Shaders/iblShadowVoxelTracing.fragment.js +2 -5
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/openpbr.fragment.d.ts +3 -1
- package/Shaders/openpbr.fragment.js +69 -8
- package/Shaders/openpbr.fragment.js.map +1 -1
- package/Shaders/openpbr.vertex.js +11 -5
- package/Shaders/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +5 -0
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +3 -2
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +101 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +39 -19
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -13
- package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +14 -34
- package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +5 -3
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js +35 -0
- package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js +68 -0
- package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +15 -4
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +2 -2
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.js +39 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -28
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +2 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.d.ts +11 -0
- package/ShadersWGSL/geometry.fragment.js +103 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.d.ts +1 -0
- package/ShadersWGSL/geometry.vertex.js +47 -3
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.d.ts +1 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +3 -7
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.d.ts +3 -1
- package/ShadersWGSL/openpbr.fragment.js +70 -9
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.vertex.js +6 -0
- package/ShadersWGSL/openpbr.vertex.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +7 -0
- package/scene.js +13 -0
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subSurfaceScatteringPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/subSurfaceScatteringPostProcess.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAA2B,WAAW,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,qCAAqC,CAAC;AAC7C,OAAO,0CAA0C,CAAC;AAClD,OAAO,+BAA+B,CAAC;AAEvC,OAAO,yCAAyC,CAAC;AACjD,OAAO,8CAA8C,CAAC;AACtD,OAAO,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,WAAW;IAC5D;;;OAGG;IACa,YAAY;QACxB,OAAO,iCAAiC,CAAC;IAC7C,CAAC;IAED,YACI,IAAY,EACZ,KAAY,EACZ,OAAoC,EACpC,SAA2B,IAAI,EAC/B,YAAqB,EACrB,MAAuB,EACvB,QAAkB,EAClB,cAAsB,SAAS,CAAC,yBAAyB;QAEzD,MAAM,YAAY,GAAG;YACjB,QAAQ,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC;YACxD,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,CAAC;YAC3G,IAAI,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACvD,MAAM;YACN,YAAY;YACZ,MAAM;YACN,QAAQ;YACR,WAAW;YACX,GAAI,OAA8B;YAClC,gBAAgB,EAAE,IAAI;SACzB,CAAC;QAEF,KAAK,CAAC,IAAI,EAAE,sBAAsB,EAAE,EAAE,GAAG,YAAY,EAAE,YAAY,EAAE,YAAY,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACtH,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;YAC1C,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBAC3D,MAAM,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;gBACpG,OAAO;YACX,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YAC9E,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"subSurfaceScatteringPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/subSurfaceScatteringPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { type Camera } from \"../Cameras/camera\";\r\nimport { type Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { type PostProcessOptions, PostProcess } from \"./postProcess\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type Scene } from \"../scene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\nimport \"../Shaders/imageProcessing.fragment\";\r\nimport \"../Shaders/subSurfaceScattering.fragment\";\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\nimport \"../ShadersWGSL/imageProcessing.fragment\";\r\nimport \"../ShadersWGSL/subSurfaceScattering.fragment\";\r\nimport \"../ShadersWGSL/postprocess.vertex\";\r\n\r\n/**\r\n * Sub surface scattering post process\r\n */\r\nexport class SubSurfaceScatteringPostProcess extends PostProcess {\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"SubSurfaceScatteringPostProcess\" string\r\n */\r\n public override getClassName(): string {\r\n return \"SubSurfaceScatteringPostProcess\";\r\n }\r\n\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera> = null,\r\n samplingMode?: number,\r\n engine?: AbstractEngine,\r\n reusable?: boolean,\r\n textureType: number = Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n ) {\r\n const localOptions = {\r\n uniforms: [\"texelSize\", \"viewportSize\", \"metersPerUnit\"],\r\n samplers: [\"diffusionS\", \"diffusionD\", \"filterRadii\", \"irradianceSampler\", \"depthSampler\", \"albedoSampler\"],\r\n size: typeof options === \"number\" ? options : undefined,\r\n camera,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n textureType,\r\n ...(options as PostProcessOptions),\r\n blockCompilation: true,\r\n };\r\n\r\n super(name, \"subSurfaceScattering\", { ...localOptions, samplingMode: samplingMode || Texture.BILINEAR_SAMPLINGMODE });\r\n this._scene = scene;\r\n\r\n this.updateEffect();\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n if (!scene.prePassRenderer || !scene.subSurfaceConfiguration) {\r\n Logger.Error(\"PrePass and subsurface configuration needs to be enabled for subsurface scattering.\");\r\n return;\r\n }\r\n const texelSize = this.texelSize;\r\n effect.setFloat(\"metersPerUnit\", scene.subSurfaceConfiguration.metersPerUnit);\r\n effect.setFloat2(\"texelSize\", texelSize.x, texelSize.y);\r\n effect.setTexture(\r\n \"irradianceSampler\",\r\n scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(Constants.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE)]\r\n );\r\n effect.setTexture(\"depthSampler\", scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE)]);\r\n effect.setTexture(\"albedoSampler\", scene.prePassRenderer.getRenderTarget().textures[scene.prePassRenderer.getIndex(Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE)]);\r\n effect.setFloat2(\r\n \"viewportSize\",\r\n Math.tan(scene.activeCamera!.fov / 2) * scene.getEngine().getAspectRatio(scene.activeCamera!, true),\r\n Math.tan(scene.activeCamera!.fov / 2)\r\n );\r\n effect.setArray3(\"diffusionS\", scene.subSurfaceConfiguration.ssDiffusionS);\r\n effect.setArray(\"diffusionD\", scene.subSurfaceConfiguration.ssDiffusionD);\r\n effect.setArray(\"filterRadii\", scene.subSurfaceConfiguration.ssFilterRadii);\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@ import { type StandardMaterial } from "../../Materials/standardMaterial.js";
|
|
|
6
6
|
import { PBRBaseMaterial } from "../../Materials/PBR/pbrBaseMaterial.js";
|
|
7
7
|
import { type UniformBuffer } from "../../Materials/uniformBuffer.js";
|
|
8
8
|
import { ShaderLanguage } from "../../Materials/shaderLanguage.js";
|
|
9
|
-
import { OpenPBRMaterial } from "../../Materials/PBR/openpbrMaterial.js";
|
|
9
|
+
import { type OpenPBRMaterial } from "../../Materials/PBR/openpbrMaterial.js";
|
|
10
10
|
/**
|
|
11
11
|
* @internal
|
|
12
12
|
*/
|
|
@@ -46,16 +46,10 @@ export declare class IBLShadowsPluginMaterial extends MaterialPluginBase {
|
|
|
46
46
|
*/
|
|
47
47
|
isCompatible(): boolean;
|
|
48
48
|
constructor(material: Material | StandardMaterial | PBRBaseMaterial | OpenPBRMaterial);
|
|
49
|
+
private _isOpenPBRMaterial;
|
|
49
50
|
prepareDefines(defines: MaterialIBLShadowsRenderDefines): void;
|
|
50
51
|
getClassName(): string;
|
|
51
|
-
getUniforms():
|
|
52
|
-
ubo: {
|
|
53
|
-
name: string;
|
|
54
|
-
size: number;
|
|
55
|
-
type: string;
|
|
56
|
-
}[];
|
|
57
|
-
fragment: string;
|
|
58
|
-
};
|
|
52
|
+
getUniforms(_shaderLanguage: ShaderLanguage): any;
|
|
59
53
|
getSamplers(samplers: string[]): void;
|
|
60
54
|
bindForSubMesh(uniformBuffer: UniformBuffer): void;
|
|
61
55
|
getCustomCode(shaderType: string, shaderLanguage: ShaderLanguage): {
|
|
@@ -5,7 +5,6 @@ import { MaterialPluginBase } from "../../Materials/materialPluginBase.js";
|
|
|
5
5
|
import { PBRBaseMaterial } from "../../Materials/PBR/pbrBaseMaterial.js";
|
|
6
6
|
import { expandToProperty, serialize } from "../../Misc/decorators.js";
|
|
7
7
|
import { RegisterClass } from "../../Misc/typeStore.js";
|
|
8
|
-
import { OpenPBRMaterial } from "../../Materials/PBR/openpbrMaterial.js";
|
|
9
8
|
/**
|
|
10
9
|
* @internal
|
|
11
10
|
*/
|
|
@@ -55,6 +54,9 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
|
|
|
55
54
|
this.isEnabled = false;
|
|
56
55
|
this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[1];
|
|
57
56
|
}
|
|
57
|
+
_isOpenPBRMaterial() {
|
|
58
|
+
return this._material.getClassName() === "OpenPBRMaterial";
|
|
59
|
+
}
|
|
58
60
|
prepareDefines(defines) {
|
|
59
61
|
defines.RENDER_WITH_IBL_SHADOWS = this._isEnabled;
|
|
60
62
|
defines.COLORED_IBL_SHADOWS = this.isColored;
|
|
@@ -62,17 +64,38 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
|
|
|
62
64
|
getClassName() {
|
|
63
65
|
return "IBLShadowsPluginMaterial";
|
|
64
66
|
}
|
|
65
|
-
getUniforms() {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
getUniforms(_shaderLanguage) {
|
|
68
|
+
const result = {};
|
|
69
|
+
result.ubo = [];
|
|
70
|
+
if (this._isOpenPBRMaterial()) {
|
|
71
|
+
if (_shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
72
|
+
result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS
|
|
73
|
+
var shadowOpacity: f32;
|
|
74
|
+
#endif`;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS
|
|
78
|
+
uniform float shadowOpacity;
|
|
79
|
+
#endif`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
result.ubo.push({ name: "renderTargetSize", size: 2, type: "vec2" });
|
|
84
|
+
if (_shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
85
|
+
result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS
|
|
86
|
+
var renderTargetSize: vec2f;
|
|
87
|
+
var shadowOpacity: f32;
|
|
88
|
+
#endif`;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS
|
|
72
92
|
uniform vec2 renderTargetSize;
|
|
73
93
|
uniform float shadowOpacity;
|
|
74
|
-
#endif
|
|
75
|
-
|
|
94
|
+
#endif`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
result.ubo.push({ name: "shadowOpacity", size: 1, type: "float" });
|
|
98
|
+
return result;
|
|
76
99
|
}
|
|
77
100
|
getSamplers(samplers) {
|
|
78
101
|
samplers.push("iblShadowsTexture");
|
|
@@ -132,7 +155,7 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
|
|
|
132
155
|
#endif
|
|
133
156
|
`;
|
|
134
157
|
}
|
|
135
|
-
else if (this.
|
|
158
|
+
else if (this._isOpenPBRMaterial()) {
|
|
136
159
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
137
160
|
frag["CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION"] = `
|
|
138
161
|
#ifdef RENDER_WITH_IBL_SHADOWS
|
|
@@ -211,7 +234,7 @@ export class IBLShadowsPluginMaterial extends MaterialPluginBase {
|
|
|
211
234
|
#endif
|
|
212
235
|
`;
|
|
213
236
|
}
|
|
214
|
-
else if (this.
|
|
237
|
+
else if (this._isOpenPBRMaterial()) {
|
|
215
238
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
216
239
|
frag["CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION"] = `
|
|
217
240
|
#ifdef RENDER_WITH_IBL_SHADOWS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblShadowsPluginMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsPluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport { type InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { expandToProperty, serialize } from \"core/Misc/decorators\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial\";\r\n/**\r\n * @internal\r\n */\r\nclass MaterialIBLShadowsRenderDefines extends MaterialDefines {\r\n public RENDER_WITH_IBL_SHADOWS = false;\r\n public COLORED_IBL_SHADOWS = false;\r\n}\r\n\r\n/**\r\n * Plugin used to render the contribution from IBL shadows.\r\n */\r\nexport class IBLShadowsPluginMaterial extends MaterialPluginBase {\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public static readonly Name = \"IBLShadowsPluginMaterial\";\r\n\r\n /**\r\n * The texture containing the contribution from IBL shadows.\r\n */\r\n public iblShadowsTexture: InternalTexture;\r\n\r\n /**\r\n * The opacity of the shadows.\r\n */\r\n @serialize()\r\n public shadowOpacity: number = 1.0;\r\n\r\n private _isEnabled = false;\r\n private _isColored = false;\r\n public get isColored(): boolean {\r\n return this._isColored;\r\n }\r\n public set isColored(value: boolean) {\r\n if (this._isColored === value) {\r\n return;\r\n }\r\n this._isColored = value;\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n /**\r\n * Defines if the plugin is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n protected _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a give shader language.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(material: Material | StandardMaterial | PBRBaseMaterial | OpenPBRMaterial) {\r\n super(material, IBLShadowsPluginMaterial.Name, 310, new MaterialIBLShadowsRenderDefines());\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n }\r\n\r\n public override prepareDefines(defines: MaterialIBLShadowsRenderDefines) {\r\n defines.RENDER_WITH_IBL_SHADOWS = this._isEnabled;\r\n defines.COLORED_IBL_SHADOWS = this.isColored;\r\n }\r\n\r\n public override getClassName() {\r\n return \"IBLShadowsPluginMaterial\";\r\n }\r\n\r\n public override getUniforms() {\r\n return {\r\n ubo: [\r\n { name: \"renderTargetSize\", size: 2, type: \"vec2\" },\r\n { name: \"shadowOpacity\", size: 1, type: \"float\" },\r\n ],\r\n fragment: `#ifdef RENDER_WITH_IBL_SHADOWS\r\n uniform vec2 renderTargetSize;\r\n uniform float shadowOpacity;\r\n #endif`,\r\n };\r\n }\r\n\r\n public override getSamplers(samplers: string[]) {\r\n samplers.push(\"iblShadowsTexture\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (this._isEnabled) {\r\n uniformBuffer.bindTexture(\"iblShadowsTexture\", this.iblShadowsTexture);\r\n uniformBuffer.updateFloat2(\"renderTargetSize\", this._material.getScene().getEngine().getRenderWidth(), this._material.getScene().getEngine().getRenderHeight());\r\n uniformBuffer.updateFloat(\"shadowOpacity\", this.shadowOpacity);\r\n }\r\n }\r\n\r\n public override getCustomCode(shaderType: string, shaderLanguage: ShaderLanguage) {\r\n let frag: { [name: string]: string };\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n frag = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n var iblShadowsTextureSampler: sampler;\r\n var iblShadowsTexture: texture_2d<f32>;\r\n\r\n #ifdef COLORED_IBL_SHADOWS\r\n fn computeIndirectShadow() -> vec3f {\r\n var uv = fragmentInputs.position.xy / uniforms.renderTargetSize;\r\n var shadowValue: vec3f = textureSample(iblShadowsTexture, iblShadowsTextureSampler, uv).rgb;\r\n return mix(shadowValue, vec3f(1.0), 1.0 - uniforms.shadowOpacity);\r\n }\r\n #else\r\n fn computeIndirectShadow() -> vec2f {\r\n var uv = fragmentInputs.position.xy / uniforms.renderTargetSize;\r\n var shadowValue: vec2f = textureSample(iblShadowsTexture, iblShadowsTextureSampler, uv).rg;\r\n return mix(shadowValue, vec2f(1.0), 1.0 - uniforms.shadowOpacity);\r\n }\r\n #endif\r\n #endif\r\n `,\r\n };\r\n\r\n if (this._material instanceof PBRBaseMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n finalIrradiance *= shadowValue;\r\n finalRadianceScaled *= mix(vec3f(1.0), shadowValue, roughness);\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n finalIrradiance *= vec3f(shadowValue.x);\r\n finalRadianceScaled *= vec3f(mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness));\r\n #endif\r\n #endif\r\n #else\r\n finalDiffuse *= computeIndirectShadow().x;\r\n #endif\r\n #endif\r\n `;\r\n } else if (this._material instanceof OpenPBRMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, shadowValue);\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, vec3f(shadowValue.x));\r\n specular_ambient_occlusion = min(specular_ambient_occlusion, pow(shadowValue.y, 4.0));\r\n #endif\r\n #endif\r\n #else\r\n ambient_occlusion = min(ambient_occlusion, vec3f(computeIndirectShadow().x));\r\n #endif\r\n #endif\r\n `;\r\n } else {\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n color *= toGammaSpace(vec4f(shadowValue, 1.0f));\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n color *= toGammaSpace(vec4f(shadowValue.x, shadowValue.x, shadowValue.x, 1.0f));\r\n #endif\r\n #endif\r\n `;\r\n }\r\n } else {\r\n frag = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n uniform sampler2D iblShadowsTexture;\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 computeIndirectShadow() {\r\n vec2 uv = gl_FragCoord.xy / renderTargetSize;\r\n vec3 shadowValue = texture2D(iblShadowsTexture, uv).rgb;\r\n return mix(shadowValue.rgb, vec3(1.0), 1.0 - shadowOpacity);\r\n }\r\n #else\r\n vec2 computeIndirectShadow() {\r\n vec2 uv = gl_FragCoord.xy / renderTargetSize;\r\n vec2 shadowValue = texture2D(iblShadowsTexture, uv).rg;\r\n return mix(shadowValue.rg, vec2(1.0), 1.0 - shadowOpacity);\r\n }\r\n #endif\r\n #endif\r\n `,\r\n };\r\n\r\n if (this._material instanceof PBRBaseMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n finalIrradiance.rgb *= shadowValue.rgb;\r\n finalRadianceScaled *= mix(vec3(1.0), shadowValue.rgb, roughness);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n finalIrradiance *= shadowValue.x;\r\n finalRadianceScaled *= mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness);\r\n #endif\r\n #endif\r\n #else\r\n finalDiffuse *= computeIndirectShadow().x;\r\n #endif\r\n #endif\r\n `;\r\n } else if (this._material instanceof OpenPBRMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, shadowValue);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, vec3(shadowValue.x));\r\n specular_ambient_occlusion = min(specular_ambient_occlusion, pow(shadowValue.y, 4.0));\r\n #endif\r\n #endif\r\n #else\r\n ambient_occlusion = min(ambient_occlusion, vec3(computeIndirectShadow().x));\r\n #endif\r\n #endif\r\n `;\r\n } else {\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n color.rgb *= toGammaSpace(shadowValue.rgb);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n color.rgb *= toGammaSpace(shadowValue.x);\r\n #endif\r\n #endif\r\n `;\r\n }\r\n }\r\n\r\n return shaderType === \"vertex\" ? null : frag;\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.IBLShadowsPluginMaterial`, IBLShadowsPluginMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"iblShadowsPluginMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsPluginMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport { type InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { expandToProperty, serialize } from \"core/Misc/decorators\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial\";\r\n/**\r\n * @internal\r\n */\r\nclass MaterialIBLShadowsRenderDefines extends MaterialDefines {\r\n public RENDER_WITH_IBL_SHADOWS = false;\r\n public COLORED_IBL_SHADOWS = false;\r\n}\r\n\r\n/**\r\n * Plugin used to render the contribution from IBL shadows.\r\n */\r\nexport class IBLShadowsPluginMaterial extends MaterialPluginBase {\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public static readonly Name = \"IBLShadowsPluginMaterial\";\r\n\r\n /**\r\n * The texture containing the contribution from IBL shadows.\r\n */\r\n public iblShadowsTexture: InternalTexture;\r\n\r\n /**\r\n * The opacity of the shadows.\r\n */\r\n @serialize()\r\n public shadowOpacity: number = 1.0;\r\n\r\n private _isEnabled = false;\r\n private _isColored = false;\r\n public get isColored(): boolean {\r\n return this._isColored;\r\n }\r\n public set isColored(value: boolean) {\r\n if (this._isColored === value) {\r\n return;\r\n }\r\n this._isColored = value;\r\n this._markAllSubMeshesAsTexturesDirty();\r\n }\r\n /**\r\n * Defines if the plugin is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n protected _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a give shader language.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(material: Material | StandardMaterial | PBRBaseMaterial | OpenPBRMaterial) {\r\n super(material, IBLShadowsPluginMaterial.Name, 310, new MaterialIBLShadowsRenderDefines());\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n }\r\n\r\n private _isOpenPBRMaterial(): boolean {\r\n return this._material.getClassName() === \"OpenPBRMaterial\";\r\n }\r\n\r\n public override prepareDefines(defines: MaterialIBLShadowsRenderDefines) {\r\n defines.RENDER_WITH_IBL_SHADOWS = this._isEnabled;\r\n defines.COLORED_IBL_SHADOWS = this.isColored;\r\n }\r\n\r\n public override getClassName() {\r\n return \"IBLShadowsPluginMaterial\";\r\n }\r\n\r\n public override getUniforms(_shaderLanguage: ShaderLanguage) {\r\n const result: any = {};\r\n result.ubo = [];\r\n if (this._isOpenPBRMaterial()) {\r\n if (_shaderLanguage === ShaderLanguage.WGSL) {\r\n result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS\r\n var shadowOpacity: f32;\r\n #endif`;\r\n } else {\r\n result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS\r\n uniform float shadowOpacity;\r\n #endif`;\r\n }\r\n } else {\r\n result.ubo.push({ name: \"renderTargetSize\", size: 2, type: \"vec2\" });\r\n if (_shaderLanguage === ShaderLanguage.WGSL) {\r\n result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS\r\n var renderTargetSize: vec2f;\r\n var shadowOpacity: f32;\r\n #endif`;\r\n } else {\r\n result.fragment = `#ifdef RENDER_WITH_IBL_SHADOWS\r\n uniform vec2 renderTargetSize;\r\n uniform float shadowOpacity;\r\n #endif`;\r\n }\r\n }\r\n result.ubo.push({ name: \"shadowOpacity\", size: 1, type: \"float\" });\r\n return result;\r\n }\r\n\r\n public override getSamplers(samplers: string[]) {\r\n samplers.push(\"iblShadowsTexture\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (this._isEnabled) {\r\n uniformBuffer.bindTexture(\"iblShadowsTexture\", this.iblShadowsTexture);\r\n uniformBuffer.updateFloat2(\"renderTargetSize\", this._material.getScene().getEngine().getRenderWidth(), this._material.getScene().getEngine().getRenderHeight());\r\n uniformBuffer.updateFloat(\"shadowOpacity\", this.shadowOpacity);\r\n }\r\n }\r\n\r\n public override getCustomCode(shaderType: string, shaderLanguage: ShaderLanguage) {\r\n let frag: { [name: string]: string };\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n frag = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n var iblShadowsTextureSampler: sampler;\r\n var iblShadowsTexture: texture_2d<f32>;\r\n\r\n #ifdef COLORED_IBL_SHADOWS\r\n fn computeIndirectShadow() -> vec3f {\r\n var uv = fragmentInputs.position.xy / uniforms.renderTargetSize;\r\n var shadowValue: vec3f = textureSample(iblShadowsTexture, iblShadowsTextureSampler, uv).rgb;\r\n return mix(shadowValue, vec3f(1.0), 1.0 - uniforms.shadowOpacity);\r\n }\r\n #else\r\n fn computeIndirectShadow() -> vec2f {\r\n var uv = fragmentInputs.position.xy / uniforms.renderTargetSize;\r\n var shadowValue: vec2f = textureSample(iblShadowsTexture, iblShadowsTextureSampler, uv).rg;\r\n return mix(shadowValue, vec2f(1.0), 1.0 - uniforms.shadowOpacity);\r\n }\r\n #endif\r\n #endif\r\n `,\r\n };\r\n\r\n if (this._material instanceof PBRBaseMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n finalIrradiance *= shadowValue;\r\n finalRadianceScaled *= mix(vec3f(1.0), shadowValue, roughness);\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n finalIrradiance *= vec3f(shadowValue.x);\r\n finalRadianceScaled *= vec3f(mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness));\r\n #endif\r\n #endif\r\n #else\r\n finalDiffuse *= computeIndirectShadow().x;\r\n #endif\r\n #endif\r\n `;\r\n } else if (this._isOpenPBRMaterial()) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, shadowValue);\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, vec3f(shadowValue.x));\r\n specular_ambient_occlusion = min(specular_ambient_occlusion, pow(shadowValue.y, 4.0));\r\n #endif\r\n #endif\r\n #else\r\n ambient_occlusion = min(ambient_occlusion, vec3f(computeIndirectShadow().x));\r\n #endif\r\n #endif\r\n `;\r\n } else {\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifdef COLORED_IBL_SHADOWS\r\n var shadowValue: vec3f = computeIndirectShadow();\r\n color *= toGammaSpace(vec4f(shadowValue, 1.0f));\r\n #else\r\n var shadowValue: vec2f = computeIndirectShadow();\r\n color *= toGammaSpace(vec4f(shadowValue.x, shadowValue.x, shadowValue.x, 1.0f));\r\n #endif\r\n #endif\r\n `;\r\n }\r\n } else {\r\n frag = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n uniform sampler2D iblShadowsTexture;\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 computeIndirectShadow() {\r\n vec2 uv = gl_FragCoord.xy / renderTargetSize;\r\n vec3 shadowValue = texture2D(iblShadowsTexture, uv).rgb;\r\n return mix(shadowValue.rgb, vec3(1.0), 1.0 - shadowOpacity);\r\n }\r\n #else\r\n vec2 computeIndirectShadow() {\r\n vec2 uv = gl_FragCoord.xy / renderTargetSize;\r\n vec2 shadowValue = texture2D(iblShadowsTexture, uv).rg;\r\n return mix(shadowValue.rg, vec2(1.0), 1.0 - shadowOpacity);\r\n }\r\n #endif\r\n #endif\r\n `,\r\n };\r\n\r\n if (this._material instanceof PBRBaseMaterial) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n finalIrradiance.rgb *= shadowValue.rgb;\r\n finalRadianceScaled *= mix(vec3(1.0), shadowValue.rgb, roughness);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n finalIrradiance *= shadowValue.x;\r\n finalRadianceScaled *= mix(pow(shadowValue.y, 4.0), shadowValue.x, roughness);\r\n #endif\r\n #endif\r\n #else\r\n finalDiffuse *= computeIndirectShadow().x;\r\n #endif\r\n #endif\r\n `;\r\n } else if (this._isOpenPBRMaterial()) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_IBLLAYERCOMPOSITION\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifndef UNLIT\r\n #ifdef REFLECTION\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, shadowValue);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n ambient_occlusion = min(ambient_occlusion, vec3(shadowValue.x));\r\n specular_ambient_occlusion = min(specular_ambient_occlusion, pow(shadowValue.y, 4.0));\r\n #endif\r\n #endif\r\n #else\r\n ambient_occlusion = min(ambient_occlusion, vec3(computeIndirectShadow().x));\r\n #endif\r\n #endif\r\n `;\r\n } else {\r\n frag[\"CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\"] = `\r\n #ifdef RENDER_WITH_IBL_SHADOWS\r\n #ifdef COLORED_IBL_SHADOWS\r\n vec3 shadowValue = computeIndirectShadow();\r\n color.rgb *= toGammaSpace(shadowValue.rgb);\r\n #else\r\n vec2 shadowValue = computeIndirectShadow();\r\n color.rgb *= toGammaSpace(shadowValue.x);\r\n #endif\r\n #endif\r\n `;\r\n }\r\n }\r\n\r\n return shaderType === \"vertex\" ? null : frag;\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.IBLShadowsPluginMaterial`, IBLShadowsPluginMaterial);\r\n"]}
|
|
@@ -59,6 +59,11 @@ export declare class GeometryBufferRenderer {
|
|
|
59
59
|
* using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)
|
|
60
60
|
*/
|
|
61
61
|
static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;
|
|
62
|
+
/**
|
|
63
|
+
* Constant used to retrieve the irradiance texture index in the G-Buffer textures array
|
|
64
|
+
* using getIndex(GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE)
|
|
65
|
+
*/
|
|
66
|
+
static readonly IRRADIANCE_TEXTURE_TYPE = 7;
|
|
62
67
|
/**
|
|
63
68
|
* Dictionary used to store the previous transformation matrices of each rendered mesh
|
|
64
69
|
* in order to compute objects velocities when enableVelocity is set to "true"
|
|
@@ -103,6 +108,7 @@ export declare class GeometryBufferRenderer {
|
|
|
103
108
|
private _enableVelocityLinear;
|
|
104
109
|
private _enableReflectivity;
|
|
105
110
|
private _enableScreenspaceDepth;
|
|
111
|
+
private _enableIrradiance;
|
|
106
112
|
private _depthFormat;
|
|
107
113
|
private _clearColor;
|
|
108
114
|
private _clearDepthColor;
|
|
@@ -113,6 +119,7 @@ export declare class GeometryBufferRenderer {
|
|
|
113
119
|
private _depthIndex;
|
|
114
120
|
private _normalIndex;
|
|
115
121
|
private _screenspaceDepthIndex;
|
|
122
|
+
private _irradianceIndex;
|
|
116
123
|
private _linkedWithPrePass;
|
|
117
124
|
private _prePassRenderer;
|
|
118
125
|
private _attachmentsFromPrePass;
|
|
@@ -229,6 +236,19 @@ export declare class GeometryBufferRenderer {
|
|
|
229
236
|
*/
|
|
230
237
|
get enableScreenspaceDepth(): boolean;
|
|
231
238
|
set enableScreenspaceDepth(enable: boolean);
|
|
239
|
+
/**
|
|
240
|
+
* Gets a boolean indicating if objects irradiance are enabled in the G buffer.
|
|
241
|
+
*/
|
|
242
|
+
get enableIrradiance(): boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Sets whether or not objects irradiance are enabled for the G buffer.
|
|
245
|
+
*/
|
|
246
|
+
set enableIrradiance(enable: boolean);
|
|
247
|
+
/**
|
|
248
|
+
* This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
|
|
249
|
+
* scattering and should be taken into account when applying image-based lighting.
|
|
250
|
+
*/
|
|
251
|
+
generateIrradianceWithScatterMask: boolean;
|
|
232
252
|
/**
|
|
233
253
|
* If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)
|
|
234
254
|
* If set to false, the depth texture is always cleared with 0.
|
|
@@ -10,8 +10,19 @@ import "../Shaders/geometry.fragment.js";
|
|
|
10
10
|
import "../Shaders/geometry.vertex.js";
|
|
11
11
|
import { MaterialFlags } from "../Materials/materialFlags.js";
|
|
12
12
|
import { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from "../Materials/clipPlaneMaterialHelper.js";
|
|
13
|
-
import { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from "../Materials/materialHelper.functions.js";
|
|
13
|
+
import { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances, PrepareUniformsAndSamplersForIBL, PrepareDefinesForIBL, } from "../Materials/materialHelper.functions.js";
|
|
14
14
|
import "../Engines/Extensions/engine.multiRender.js";
|
|
15
|
+
const Samplers = [
|
|
16
|
+
"diffuseSampler",
|
|
17
|
+
"bumpSampler",
|
|
18
|
+
"reflectivitySampler",
|
|
19
|
+
"albedoSampler",
|
|
20
|
+
"morphTargets",
|
|
21
|
+
"boneSampler",
|
|
22
|
+
"transmissionWeightSampler",
|
|
23
|
+
"subsurfaceWeightSampler",
|
|
24
|
+
"iblShadowSampler",
|
|
25
|
+
];
|
|
15
26
|
/** list the uniforms used by the geometry renderer */
|
|
16
27
|
const Uniforms = [
|
|
17
28
|
"world",
|
|
@@ -27,6 +38,13 @@ const Uniforms = [
|
|
|
27
38
|
"albedoMatrix",
|
|
28
39
|
"reflectivityColor",
|
|
29
40
|
"albedoColor",
|
|
41
|
+
"reflectionMatrix",
|
|
42
|
+
"vTransmissionWeight",
|
|
43
|
+
"vSubsurfaceWeight",
|
|
44
|
+
"vEyePosition",
|
|
45
|
+
"vTransmissionScatterAnisotropy",
|
|
46
|
+
"vSubsurfaceScatterAnisotropy",
|
|
47
|
+
"shadowTextureSize",
|
|
30
48
|
"metallic",
|
|
31
49
|
"glossiness",
|
|
32
50
|
"vTangentSpaceParams",
|
|
@@ -37,6 +55,7 @@ const Uniforms = [
|
|
|
37
55
|
"morphTargetTextureIndices",
|
|
38
56
|
"boneTextureInfo",
|
|
39
57
|
];
|
|
58
|
+
PrepareUniformsAndSamplersForIBL(Uniforms, Samplers, true);
|
|
40
59
|
AddClipPlaneUniforms(Uniforms);
|
|
41
60
|
/**
|
|
42
61
|
* This renderer is helpful to fill one of the render target with a geometry buffer.
|
|
@@ -85,6 +104,7 @@ export class GeometryBufferRenderer {
|
|
|
85
104
|
this._enableVelocity = false;
|
|
86
105
|
this._enableVelocityLinear = false;
|
|
87
106
|
this._enableScreenspaceDepth = false;
|
|
107
|
+
this._enableIrradiance = false;
|
|
88
108
|
this._attachmentsFromPrePass = [];
|
|
89
109
|
}
|
|
90
110
|
/**
|
|
@@ -121,6 +141,10 @@ export class GeometryBufferRenderer {
|
|
|
121
141
|
this._screenspaceDepthIndex = index;
|
|
122
142
|
this._enableScreenspaceDepth = true;
|
|
123
143
|
}
|
|
144
|
+
else if (geometryBufferType === GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE) {
|
|
145
|
+
this._irradianceIndex = index;
|
|
146
|
+
this._enableIrradiance = true;
|
|
147
|
+
}
|
|
124
148
|
}
|
|
125
149
|
/**
|
|
126
150
|
* @internal
|
|
@@ -178,6 +202,8 @@ export class GeometryBufferRenderer {
|
|
|
178
202
|
return this._normalIndex;
|
|
179
203
|
case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:
|
|
180
204
|
return this._screenspaceDepthIndex;
|
|
205
|
+
case GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE:
|
|
206
|
+
return this._irradianceIndex;
|
|
181
207
|
default:
|
|
182
208
|
return -1;
|
|
183
209
|
}
|
|
@@ -300,6 +326,22 @@ export class GeometryBufferRenderer {
|
|
|
300
326
|
this._createRenderTargets();
|
|
301
327
|
}
|
|
302
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Gets a boolean indicating if objects irradiance are enabled in the G buffer.
|
|
331
|
+
*/
|
|
332
|
+
get enableIrradiance() {
|
|
333
|
+
return this._enableIrradiance;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Sets whether or not objects irradiance are enabled for the G buffer.
|
|
337
|
+
*/
|
|
338
|
+
set enableIrradiance(enable) {
|
|
339
|
+
this._enableIrradiance = enable;
|
|
340
|
+
if (!this._linkedWithPrePass) {
|
|
341
|
+
this.dispose();
|
|
342
|
+
this._createRenderTargets();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
303
345
|
/**
|
|
304
346
|
* Gets the scene associated with the buffer.
|
|
305
347
|
*/
|
|
@@ -359,6 +401,7 @@ export class GeometryBufferRenderer {
|
|
|
359
401
|
this._enableVelocityLinear = false;
|
|
360
402
|
this._enableReflectivity = false;
|
|
361
403
|
this._enableScreenspaceDepth = false;
|
|
404
|
+
this._enableIrradiance = false;
|
|
362
405
|
this._clearColor = new Color4(0, 0, 0, 0);
|
|
363
406
|
this._clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ
|
|
364
407
|
this._positionIndex = -1;
|
|
@@ -368,7 +411,13 @@ export class GeometryBufferRenderer {
|
|
|
368
411
|
this._depthIndex = -1;
|
|
369
412
|
this._normalIndex = -1;
|
|
370
413
|
this._screenspaceDepthIndex = -1;
|
|
414
|
+
this._irradianceIndex = -1;
|
|
371
415
|
this._linkedWithPrePass = false;
|
|
416
|
+
/**
|
|
417
|
+
* This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
|
|
418
|
+
* scattering and should be taken into account when applying image-based lighting.
|
|
419
|
+
*/
|
|
420
|
+
this.generateIrradianceWithScatterMask = false;
|
|
372
421
|
/**
|
|
373
422
|
* If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)
|
|
374
423
|
* If set to false, the depth texture is always cleared with 0.
|
|
@@ -565,38 +614,57 @@ export class GeometryBufferRenderer {
|
|
|
565
614
|
}
|
|
566
615
|
}
|
|
567
616
|
else if (material.getClassName() === "OpenPBRMaterial") {
|
|
568
|
-
const
|
|
569
|
-
defines.push("#define METALLICWORKFLOW");
|
|
617
|
+
const openpbrMaterial = material;
|
|
570
618
|
defines.push("#define METALLIC");
|
|
571
619
|
defines.push("#define ROUGHNESS");
|
|
572
|
-
if (
|
|
620
|
+
if (openpbrMaterial._useRoughnessFromMetallicTextureGreen && openpbrMaterial.baseMetalnessTexture) {
|
|
573
621
|
defines.push("#define ORMTEXTURE");
|
|
574
|
-
defines.push(`#define REFLECTIVITY_UV${
|
|
622
|
+
defines.push(`#define REFLECTIVITY_UV${openpbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);
|
|
575
623
|
needUv = true;
|
|
576
624
|
}
|
|
577
|
-
else if (
|
|
625
|
+
else if (openpbrMaterial.baseMetalnessTexture) {
|
|
578
626
|
defines.push("#define METALLIC_TEXTURE");
|
|
579
|
-
defines.push(`#define METALLIC_UV${
|
|
627
|
+
defines.push(`#define METALLIC_UV${openpbrMaterial.baseMetalnessTexture.coordinatesIndex + 1}`);
|
|
580
628
|
needUv = true;
|
|
581
629
|
}
|
|
582
|
-
else if (
|
|
630
|
+
else if (openpbrMaterial.specularRoughnessTexture) {
|
|
583
631
|
defines.push("#define ROUGHNESS_TEXTURE");
|
|
584
|
-
defines.push(`#define ROUGHNESS_UV${
|
|
632
|
+
defines.push(`#define ROUGHNESS_UV${openpbrMaterial.specularRoughnessTexture.coordinatesIndex + 1}`);
|
|
585
633
|
needUv = true;
|
|
586
634
|
}
|
|
587
|
-
if (
|
|
635
|
+
if (openpbrMaterial.baseColorTexture) {
|
|
588
636
|
defines.push("#define ALBEDOTEXTURE");
|
|
589
|
-
defines.push(`#define ALBEDO_UV${
|
|
590
|
-
if (
|
|
637
|
+
defines.push(`#define ALBEDO_UV${openpbrMaterial.baseColorTexture.coordinatesIndex + 1}`);
|
|
638
|
+
if (openpbrMaterial.baseColorTexture.gammaSpace) {
|
|
591
639
|
defines.push("#define GAMMAALBEDO");
|
|
592
640
|
}
|
|
593
641
|
needUv = true;
|
|
594
642
|
}
|
|
595
|
-
if (
|
|
643
|
+
if (openpbrMaterial.baseColor) {
|
|
596
644
|
defines.push("#define ALBEDOCOLOR");
|
|
597
645
|
}
|
|
598
646
|
}
|
|
599
647
|
}
|
|
648
|
+
if (this._enableIrradiance && this.generateIrradianceWithScatterMask) {
|
|
649
|
+
defines.push("#define IRRADIANCE_SCATTER_MASK");
|
|
650
|
+
if (material.getClassName() === "OpenPBRMaterial") {
|
|
651
|
+
const openpbrMaterial = material;
|
|
652
|
+
if (openpbrMaterial.subsurfaceWeight > 0) {
|
|
653
|
+
if (openpbrMaterial.subsurfaceWeightTexture) {
|
|
654
|
+
defines.push("#define SUBSURFACE_WEIGHT");
|
|
655
|
+
defines.push(`#define SUBSURFACEWEIGHT_UV${openpbrMaterial.subsurfaceWeightTexture.coordinatesIndex + 1}`);
|
|
656
|
+
needUv = true;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
if (openpbrMaterial.transmissionWeight > 0) {
|
|
660
|
+
if (openpbrMaterial.transmissionWeightTexture) {
|
|
661
|
+
defines.push("#define TRANSMISSION_WEIGHT");
|
|
662
|
+
defines.push(`#define TRANSMISSIONWEIGHT_UV${openpbrMaterial.transmissionWeightTexture.coordinatesIndex + 1}`);
|
|
663
|
+
needUv = true;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
600
668
|
if (needUv) {
|
|
601
669
|
defines.push("#define NEED_UV");
|
|
602
670
|
if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {
|
|
@@ -648,6 +716,47 @@ export class GeometryBufferRenderer {
|
|
|
648
716
|
defines.push("#define SCREENSPACE_DEPTH");
|
|
649
717
|
}
|
|
650
718
|
}
|
|
719
|
+
if (this._enableIrradiance) {
|
|
720
|
+
if (this._irradianceIndex !== -1) {
|
|
721
|
+
defines.push("#define IRRADIANCE_INDEX " + this._irradianceIndex);
|
|
722
|
+
defines.push("#define IRRADIANCE");
|
|
723
|
+
// Check if scene has IBL setup
|
|
724
|
+
const scene = this._scene;
|
|
725
|
+
if (scene.environmentTexture) {
|
|
726
|
+
const iblDefines = {};
|
|
727
|
+
let realtime = false;
|
|
728
|
+
let realtimeQuality = 0;
|
|
729
|
+
if (material.getClassName() === "OpenPBRMaterial" ||
|
|
730
|
+
material.getClassName() === "StandardMaterial" ||
|
|
731
|
+
material.getClassName() === "PBRMetallicRoughnessMaterial" ||
|
|
732
|
+
material.getClassName() === "PBRSpecularGlossinessMaterial" ||
|
|
733
|
+
material.getClassName() === "PBRMaterial") {
|
|
734
|
+
realtime = material.realtimeFiltering ? true : false;
|
|
735
|
+
realtimeQuality = material.realtimeFilteringQuality || 0;
|
|
736
|
+
}
|
|
737
|
+
PrepareDefinesForIBL(scene, scene.environmentTexture, iblDefines, realtime, realtimeQuality, true);
|
|
738
|
+
for (const define in iblDefines) {
|
|
739
|
+
if (iblDefines[define]) {
|
|
740
|
+
defines.push("#define " + define);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
if (!iblDefines.USEIRRADIANCEMAP) {
|
|
744
|
+
defines.push("#define SPHERICAL_HARMONICS");
|
|
745
|
+
}
|
|
746
|
+
const iblShadowsPipeline = scene.postProcessRenderPipelineManager.supportedPipelines.find((p) => p.getClassName() === "IBLShadowsRenderPipeline");
|
|
747
|
+
if (iblShadowsPipeline) {
|
|
748
|
+
const pipeline = iblShadowsPipeline;
|
|
749
|
+
const shadowTexture = pipeline._getAccumulatedTexture();
|
|
750
|
+
if (shadowTexture) {
|
|
751
|
+
defines.push("#define IBL_SHADOW_TEXTURE");
|
|
752
|
+
if (pipeline.coloredShadows) {
|
|
753
|
+
defines.push("#define COLORED_IBL_SHADOWS");
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
}
|
|
651
760
|
if (this.generateNormalsInWorldSpace) {
|
|
652
761
|
defines.push("#define NORMAL_WORLDSPACE");
|
|
653
762
|
}
|
|
@@ -706,7 +815,7 @@ export class GeometryBufferRenderer {
|
|
|
706
815
|
drawWrapper.setEffect(engine.createEffect("geometry", {
|
|
707
816
|
attributes: attribs,
|
|
708
817
|
uniformsNames: Uniforms,
|
|
709
|
-
samplers:
|
|
818
|
+
samplers: Samplers,
|
|
710
819
|
defines: join,
|
|
711
820
|
onCompiled: null,
|
|
712
821
|
fallbacks: null,
|
|
@@ -797,6 +906,12 @@ export class GeometryBufferRenderer {
|
|
|
797
906
|
textureNames.push("gBuffer_ScreenspaceDepth");
|
|
798
907
|
textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);
|
|
799
908
|
}
|
|
909
|
+
if (this._enableIrradiance) {
|
|
910
|
+
this._irradianceIndex = count;
|
|
911
|
+
count++;
|
|
912
|
+
textureNames.push("gBuffer_Irradiance");
|
|
913
|
+
textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE]);
|
|
914
|
+
}
|
|
800
915
|
return [count, textureNames, textureTypesAndFormats];
|
|
801
916
|
}
|
|
802
917
|
_createRenderTargets() {
|
|
@@ -907,6 +1022,7 @@ export class GeometryBufferRenderer {
|
|
|
907
1022
|
if (!this._useUbo) {
|
|
908
1023
|
effect.setMatrix("viewProjection", scene.getTransformMatrix());
|
|
909
1024
|
effect.setMatrix("view", scene.getViewMatrix());
|
|
1025
|
+
this._scene.bindEyePosition(effect, "vEyePosition");
|
|
910
1026
|
}
|
|
911
1027
|
else {
|
|
912
1028
|
BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());
|
|
@@ -1053,6 +1169,74 @@ export class GeometryBufferRenderer {
|
|
|
1053
1169
|
}
|
|
1054
1170
|
}
|
|
1055
1171
|
}
|
|
1172
|
+
// IBL binding for irradiance
|
|
1173
|
+
if (this._enableIrradiance && scene.environmentTexture) {
|
|
1174
|
+
const reflectionTexture = scene.environmentTexture;
|
|
1175
|
+
const iblShadowsPipeline = scene.postProcessRenderPipelineManager.supportedPipelines.find((p) => p.getClassName() === "IBLShadowsRenderPipeline");
|
|
1176
|
+
if (iblShadowsPipeline) {
|
|
1177
|
+
const pipeline = iblShadowsPipeline;
|
|
1178
|
+
const shadowTexture = pipeline._getAccumulatedTexture();
|
|
1179
|
+
if (shadowTexture) {
|
|
1180
|
+
effect.setTexture("iblShadowSampler", shadowTexture);
|
|
1181
|
+
effect.setFloat2("shadowTextureSize", shadowTexture.getSize().width, shadowTexture.getSize().height);
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
// Bind reflection matrix
|
|
1185
|
+
effect.setMatrix("reflectionMatrix", reflectionTexture.getReflectionTextureMatrix());
|
|
1186
|
+
// Bind reflection info (intensity and other parameters)
|
|
1187
|
+
effect.setFloat2("vReflectionInfos", reflectionTexture.level * scene.iblIntensity, 0.0);
|
|
1188
|
+
// Bind reflection sampler
|
|
1189
|
+
effect.setTexture("reflectionSampler", reflectionTexture);
|
|
1190
|
+
// Bind irradiance sampler if available
|
|
1191
|
+
if (reflectionTexture.irradianceTexture) {
|
|
1192
|
+
effect.setTexture("irradianceSampler", reflectionTexture.irradianceTexture);
|
|
1193
|
+
if (reflectionTexture.irradianceTexture._dominantDirection) {
|
|
1194
|
+
effect.setVector3("vReflectionDominantDirection", reflectionTexture.irradianceTexture._dominantDirection);
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
// Bind spherical harmonics uniforms if available
|
|
1198
|
+
if (reflectionTexture.sphericalPolynomial) {
|
|
1199
|
+
const polynomials = reflectionTexture.sphericalPolynomial;
|
|
1200
|
+
if (polynomials.preScaledHarmonics) {
|
|
1201
|
+
const harmonics = polynomials.preScaledHarmonics;
|
|
1202
|
+
effect.setVector3("vSphericalL00", harmonics.l00);
|
|
1203
|
+
effect.setVector3("vSphericalL1_1", harmonics.l1_1);
|
|
1204
|
+
effect.setVector3("vSphericalL10", harmonics.l10);
|
|
1205
|
+
effect.setVector3("vSphericalL11", harmonics.l11);
|
|
1206
|
+
effect.setVector3("vSphericalL2_2", harmonics.l2_2);
|
|
1207
|
+
effect.setVector3("vSphericalL2_1", harmonics.l2_1);
|
|
1208
|
+
effect.setVector3("vSphericalL20", harmonics.l20);
|
|
1209
|
+
effect.setVector3("vSphericalL21", harmonics.l21);
|
|
1210
|
+
effect.setVector3("vSphericalL22", harmonics.l22);
|
|
1211
|
+
}
|
|
1212
|
+
else {
|
|
1213
|
+
effect.setFloat3("vSphericalX", polynomials.x.x, polynomials.x.y, polynomials.x.z);
|
|
1214
|
+
effect.setFloat3("vSphericalY", polynomials.y.x, polynomials.y.y, polynomials.y.z);
|
|
1215
|
+
effect.setFloat3("vSphericalZ", polynomials.z.x, polynomials.z.y, polynomials.z.z);
|
|
1216
|
+
effect.setFloat3("vSphericalXX_ZZ", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);
|
|
1217
|
+
effect.setFloat3("vSphericalYY_ZZ", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);
|
|
1218
|
+
effect.setFloat3("vSphericalZZ", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);
|
|
1219
|
+
effect.setFloat3("vSphericalXY", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);
|
|
1220
|
+
effect.setFloat3("vSphericalYZ", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);
|
|
1221
|
+
effect.setFloat3("vSphericalZX", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
if (this.generateIrradianceWithScatterMask && material.getClassName() === "OpenPBRMaterial") {
|
|
1225
|
+
const openpbrMaterial = material;
|
|
1226
|
+
effect.setFloat("vSubsurfaceWeight", openpbrMaterial.subsurfaceWeight);
|
|
1227
|
+
if (openpbrMaterial.subsurfaceWeightTexture) {
|
|
1228
|
+
effect.setTexture("subsurfaceWeightSampler", openpbrMaterial.subsurfaceWeightTexture);
|
|
1229
|
+
effect.setMatrix("subsurfaceWeightMatrix", openpbrMaterial.subsurfaceWeightTexture.getTextureMatrix());
|
|
1230
|
+
}
|
|
1231
|
+
effect.setFloat("vTransmissionWeight", openpbrMaterial.transmissionWeight);
|
|
1232
|
+
if (openpbrMaterial.transmissionWeightTexture) {
|
|
1233
|
+
effect.setTexture("transmissionWeightSampler", openpbrMaterial.transmissionWeightTexture);
|
|
1234
|
+
effect.setMatrix("transmissionWeightMatrix", openpbrMaterial.transmissionWeightTexture.getTextureMatrix());
|
|
1235
|
+
}
|
|
1236
|
+
effect.setFloat("vTransmissionScatterAnisotropy", openpbrMaterial.transmissionScatterAnisotropy);
|
|
1237
|
+
effect.setFloat("vSubsurfaceScatterAnisotropy", openpbrMaterial.subsurfaceScatterAnisotropy);
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1056
1240
|
// Clip plane
|
|
1057
1241
|
BindClipPlane(effect, material, this._scene);
|
|
1058
1242
|
// Bones
|
|
@@ -1195,6 +1379,11 @@ GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;
|
|
|
1195
1379
|
* using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)
|
|
1196
1380
|
*/
|
|
1197
1381
|
GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE = 6;
|
|
1382
|
+
/**
|
|
1383
|
+
* Constant used to retrieve the irradiance texture index in the G-Buffer textures array
|
|
1384
|
+
* using getIndex(GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE)
|
|
1385
|
+
*/
|
|
1386
|
+
GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE = 7;
|
|
1198
1387
|
/**
|
|
1199
1388
|
* @internal
|
|
1200
1389
|
*/
|