@onerjs/core 8.27.10 → 8.27.12

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.
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "../../tslib.es6.js";
2
2
  /* eslint-disable @typescript-eslint/naming-convention */
3
- import { serialize, expandToProperty, addAccessorsForMaterialProperty } from "../../Misc/decorators.js";
3
+ import { serialize, expandToProperty, addAccessorsForMaterialProperty, serializeAsTexture, serializeAsColor3, serializeAsVector2 } from "../../Misc/decorators.js";
4
4
  import { GetEnvironmentBRDFTexture } from "../../Misc/brdfTextureTools.js";
5
5
  import { Scene } from "../../scene.js";
6
6
  import { Color3 } from "../../Maths/math.color.js";
@@ -1814,162 +1814,285 @@ OpenPBRMaterial._noiseTextures = {};
1814
1814
  * False by default. This is mostly meant for backward compatibility.
1815
1815
  */
1816
1816
  OpenPBRMaterial.ForceGLSL = false;
1817
+ __decorate([
1818
+ serialize()
1819
+ ], OpenPBRMaterial.prototype, "baseWeight", void 0);
1817
1820
  __decorate([
1818
1821
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseWeight")
1819
1822
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1820
1823
  ], OpenPBRMaterial.prototype, "_baseWeight", void 0);
1824
+ __decorate([
1825
+ serializeAsTexture()
1826
+ ], OpenPBRMaterial.prototype, "baseWeightTexture", void 0);
1821
1827
  __decorate([
1822
1828
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseWeightTexture")
1823
1829
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1824
1830
  ], OpenPBRMaterial.prototype, "_baseWeightTexture", void 0);
1831
+ __decorate([
1832
+ serializeAsColor3()
1833
+ ], OpenPBRMaterial.prototype, "baseColor", void 0);
1825
1834
  __decorate([
1826
1835
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseColor")
1827
1836
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1828
1837
  ], OpenPBRMaterial.prototype, "_baseColor", void 0);
1838
+ __decorate([
1839
+ serializeAsTexture()
1840
+ ], OpenPBRMaterial.prototype, "baseColorTexture", void 0);
1829
1841
  __decorate([
1830
1842
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseColorTexture")
1831
1843
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1832
1844
  ], OpenPBRMaterial.prototype, "_baseColorTexture", void 0);
1845
+ __decorate([
1846
+ serialize()
1847
+ ], OpenPBRMaterial.prototype, "baseDiffuseRoughness", void 0);
1833
1848
  __decorate([
1834
1849
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseDiffuseRoughness")
1835
1850
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1836
1851
  ], OpenPBRMaterial.prototype, "_baseDiffuseRoughness", void 0);
1852
+ __decorate([
1853
+ serializeAsTexture()
1854
+ ], OpenPBRMaterial.prototype, "baseDiffuseRoughnessTexture", void 0);
1837
1855
  __decorate([
1838
1856
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseDiffuseRoughnessTexture")
1839
1857
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1840
1858
  ], OpenPBRMaterial.prototype, "_baseDiffuseRoughnessTexture", void 0);
1859
+ __decorate([
1860
+ serialize()
1861
+ ], OpenPBRMaterial.prototype, "baseMetalness", void 0);
1841
1862
  __decorate([
1842
1863
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseMetalness")
1843
1864
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1844
1865
  ], OpenPBRMaterial.prototype, "_baseMetalness", void 0);
1866
+ __decorate([
1867
+ serializeAsTexture()
1868
+ ], OpenPBRMaterial.prototype, "baseMetalnessTexture", void 0);
1845
1869
  __decorate([
1846
1870
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "baseMetalnessTexture")
1847
1871
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1848
1872
  ], OpenPBRMaterial.prototype, "_baseMetalnessTexture", void 0);
1873
+ __decorate([
1874
+ serialize()
1875
+ ], OpenPBRMaterial.prototype, "specularWeight", void 0);
1849
1876
  __decorate([
1850
1877
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularWeight")
1851
1878
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1852
1879
  ], OpenPBRMaterial.prototype, "_specularWeight", void 0);
1880
+ __decorate([
1881
+ serializeAsTexture()
1882
+ ], OpenPBRMaterial.prototype, "specularWeightTexture", void 0);
1853
1883
  __decorate([
1854
1884
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularWeightTexture")
1855
1885
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1856
1886
  ], OpenPBRMaterial.prototype, "_specularWeightTexture", void 0);
1887
+ __decorate([
1888
+ serializeAsColor3()
1889
+ ], OpenPBRMaterial.prototype, "specularColor", void 0);
1857
1890
  __decorate([
1858
1891
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularColor")
1859
1892
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1860
1893
  ], OpenPBRMaterial.prototype, "_specularColor", void 0);
1894
+ __decorate([
1895
+ serializeAsTexture()
1896
+ ], OpenPBRMaterial.prototype, "specularColorTexture", void 0);
1861
1897
  __decorate([
1862
1898
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularColorTexture")
1863
1899
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1864
1900
  ], OpenPBRMaterial.prototype, "_specularColorTexture", void 0);
1901
+ __decorate([
1902
+ serialize()
1903
+ ], OpenPBRMaterial.prototype, "specularRoughness", void 0);
1865
1904
  __decorate([
1866
1905
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularRoughness")
1867
1906
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1868
1907
  ], OpenPBRMaterial.prototype, "_specularRoughness", void 0);
1908
+ __decorate([
1909
+ serializeAsTexture()
1910
+ ], OpenPBRMaterial.prototype, "specularRoughnessTexture", void 0);
1869
1911
  __decorate([
1870
1912
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularRoughnessTexture")
1871
1913
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1872
1914
  ], OpenPBRMaterial.prototype, "_specularRoughnessTexture", void 0);
1915
+ __decorate([
1916
+ serialize()
1917
+ ], OpenPBRMaterial.prototype, "specularRoughnessAnisotropy", void 0);
1873
1918
  __decorate([
1874
1919
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularRoughnessAnisotropy")
1875
1920
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1876
1921
  ], OpenPBRMaterial.prototype, "_specularRoughnessAnisotropy", void 0);
1922
+ __decorate([
1923
+ serializeAsTexture()
1924
+ ], OpenPBRMaterial.prototype, "specularRoughnessAnisotropyTexture", void 0);
1877
1925
  __decorate([
1878
1926
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularRoughnessAnisotropyTexture")
1879
1927
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1880
1928
  ], OpenPBRMaterial.prototype, "_specularRoughnessAnisotropyTexture", void 0);
1929
+ __decorate([
1930
+ serialize()
1931
+ ], OpenPBRMaterial.prototype, "specularIor", void 0);
1881
1932
  __decorate([
1882
1933
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "specularIor")
1883
1934
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1884
1935
  ], OpenPBRMaterial.prototype, "_specularIor", void 0);
1936
+ __decorate([
1937
+ serialize()
1938
+ ], OpenPBRMaterial.prototype, "coatWeight", void 0);
1885
1939
  __decorate([
1886
1940
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatWeight")
1887
1941
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1888
1942
  ], OpenPBRMaterial.prototype, "_coatWeight", void 0);
1943
+ __decorate([
1944
+ serializeAsTexture()
1945
+ ], OpenPBRMaterial.prototype, "coatWeightTexture", void 0);
1889
1946
  __decorate([
1890
1947
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatWeightTexture")
1891
1948
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1892
1949
  ], OpenPBRMaterial.prototype, "_coatWeightTexture", void 0);
1950
+ __decorate([
1951
+ serializeAsColor3()
1952
+ ], OpenPBRMaterial.prototype, "coatColor", void 0);
1893
1953
  __decorate([
1894
1954
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatColor")
1895
1955
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1896
1956
  ], OpenPBRMaterial.prototype, "_coatColor", void 0);
1957
+ __decorate([
1958
+ serializeAsTexture()
1959
+ ], OpenPBRMaterial.prototype, "coatColorTexture", void 0);
1897
1960
  __decorate([
1898
1961
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatColorTexture")
1899
1962
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1900
1963
  ], OpenPBRMaterial.prototype, "_coatColorTexture", void 0);
1964
+ __decorate([
1965
+ serialize()
1966
+ ], OpenPBRMaterial.prototype, "coatRoughness", void 0);
1901
1967
  __decorate([
1902
1968
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatRoughness")
1903
1969
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1904
1970
  ], OpenPBRMaterial.prototype, "_coatRoughness", void 0);
1971
+ __decorate([
1972
+ serializeAsTexture()
1973
+ ], OpenPBRMaterial.prototype, "coatRoughnessTexture", void 0);
1905
1974
  __decorate([
1906
1975
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatRoughnessTexture")
1907
1976
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1908
1977
  ], OpenPBRMaterial.prototype, "_coatRoughnessTexture", void 0);
1978
+ __decorate([
1979
+ serialize()
1980
+ ], OpenPBRMaterial.prototype, "coatRoughnessAnisotropy", void 0);
1909
1981
  __decorate([
1910
1982
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatRoughnessAnisotropy")
1911
1983
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1912
1984
  ], OpenPBRMaterial.prototype, "_coatRoughnessAnisotropy", void 0);
1985
+ __decorate([
1986
+ serializeAsTexture()
1987
+ ], OpenPBRMaterial.prototype, "coatRoughnessAnisotropyTexture", void 0);
1913
1988
  __decorate([
1914
1989
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatRoughnessAnisotropyTexture")
1915
1990
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1916
1991
  ], OpenPBRMaterial.prototype, "_coatRoughnessAnisotropyTexture", void 0);
1992
+ __decorate([
1993
+ serialize()
1994
+ ], OpenPBRMaterial.prototype, "coatIor", void 0);
1917
1995
  __decorate([
1918
1996
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatIor")
1919
1997
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1920
1998
  ], OpenPBRMaterial.prototype, "_coatIor", void 0);
1999
+ __decorate([
2000
+ serialize()
2001
+ ], OpenPBRMaterial.prototype, "coatDarkening", void 0);
1921
2002
  __decorate([
1922
2003
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatDarkening")
1923
2004
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1924
2005
  ], OpenPBRMaterial.prototype, "_coatDarkening", void 0);
2006
+ __decorate([
2007
+ serializeAsTexture()
2008
+ ], OpenPBRMaterial.prototype, "coatDarkeningTexture", void 0);
1925
2009
  __decorate([
1926
2010
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "coatDarkeningTexture")
1927
2011
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1928
2012
  ], OpenPBRMaterial.prototype, "_coatDarkeningTexture", void 0);
2013
+ __decorate([
2014
+ serialize()
2015
+ ], OpenPBRMaterial.prototype, "useCoatRoughnessFromWeightTexture", void 0);
2016
+ __decorate([
2017
+ serializeAsTexture()
2018
+ ], OpenPBRMaterial.prototype, "geometryNormalTexture", void 0);
1929
2019
  __decorate([
1930
2020
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryNormalTexture")
1931
2021
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1932
2022
  ], OpenPBRMaterial.prototype, "_geometryNormalTexture", void 0);
2023
+ __decorate([
2024
+ serializeAsVector2()
2025
+ ], OpenPBRMaterial.prototype, "geometryTangent", void 0);
1933
2026
  __decorate([
1934
2027
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryTangent")
1935
2028
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1936
2029
  ], OpenPBRMaterial.prototype, "_geometryTangent", void 0);
2030
+ __decorate([
2031
+ serializeAsTexture()
2032
+ ], OpenPBRMaterial.prototype, "geometryTangentTexture", void 0);
1937
2033
  __decorate([
1938
2034
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryTangentTexture")
1939
2035
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1940
2036
  ], OpenPBRMaterial.prototype, "_geometryTangentTexture", void 0);
2037
+ __decorate([
2038
+ serializeAsTexture()
2039
+ ], OpenPBRMaterial.prototype, "geometryCoatNormalTexture", void 0);
1941
2040
  __decorate([
1942
2041
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryCoatNormalTexture")
1943
2042
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1944
2043
  ], OpenPBRMaterial.prototype, "_geometryCoatNormalTexture", void 0);
2044
+ __decorate([
2045
+ serializeAsVector2()
2046
+ ], OpenPBRMaterial.prototype, "geometryCoatTangent", void 0);
1945
2047
  __decorate([
1946
2048
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryCoatTangent")
1947
2049
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1948
2050
  ], OpenPBRMaterial.prototype, "_geometryCoatTangent", void 0);
2051
+ __decorate([
2052
+ serializeAsTexture()
2053
+ ], OpenPBRMaterial.prototype, "geometryCoatTangentTexture", void 0);
1949
2054
  __decorate([
1950
2055
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryCoatTangentTexture")
1951
2056
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1952
2057
  ], OpenPBRMaterial.prototype, "_geometryCoatTangentTexture", void 0);
2058
+ __decorate([
2059
+ serialize()
2060
+ ], OpenPBRMaterial.prototype, "geometryOpacity", void 0);
1953
2061
  __decorate([
1954
2062
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryOpacity")
1955
2063
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1956
2064
  ], OpenPBRMaterial.prototype, "_geometryOpacity", void 0);
2065
+ __decorate([
2066
+ serializeAsTexture()
2067
+ ], OpenPBRMaterial.prototype, "geometryOpacityTexture", void 0);
1957
2068
  __decorate([
1958
2069
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "geometryOpacityTexture")
1959
2070
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1960
2071
  ], OpenPBRMaterial.prototype, "_geometryOpacityTexture", void 0);
2072
+ __decorate([
2073
+ serialize()
2074
+ ], OpenPBRMaterial.prototype, "emissionLuminance", void 0);
1961
2075
  __decorate([
1962
2076
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "emissionLuminance")
1963
2077
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1964
2078
  ], OpenPBRMaterial.prototype, "_emissionLuminance", void 0);
2079
+ __decorate([
2080
+ serializeAsColor3()
2081
+ ], OpenPBRMaterial.prototype, "emissionColor", void 0);
1965
2082
  __decorate([
1966
2083
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "emissionColor")
1967
2084
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1968
2085
  ], OpenPBRMaterial.prototype, "_emissionColor", void 0);
2086
+ __decorate([
2087
+ serializeAsTexture()
2088
+ ], OpenPBRMaterial.prototype, "emissionColorTexture", void 0);
1969
2089
  __decorate([
1970
2090
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "emissionColorTexture")
1971
2091
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1972
2092
  ], OpenPBRMaterial.prototype, "_emissionColorTexture", void 0);
2093
+ __decorate([
2094
+ serializeAsTexture()
2095
+ ], OpenPBRMaterial.prototype, "ambientOcclusionTexture", void 0);
1973
2096
  __decorate([
1974
2097
  addAccessorsForMaterialProperty("_markAllSubMeshesAsTexturesDirty", "ambientOcclusionTexture")
1975
2098
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -2057,6 +2180,7 @@ __decorate([
2057
2180
  expandToProperty("_markAllSubMeshesAsTexturesDirty")
2058
2181
  ], OpenPBRMaterial.prototype, "useLinearAlphaFresnel", void 0);
2059
2182
  __decorate([
2183
+ serializeAsTexture(),
2060
2184
  expandToProperty("_markAllSubMeshesAsTexturesDirty")
2061
2185
  ], OpenPBRMaterial.prototype, "environmentBRDFTexture", void 0);
2062
2186
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"openPbrMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/openPbrMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, addAccessorsForMaterialProperty } from \"../../Misc/decorators\";\r\nimport { GetEnvironmentBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { ImageProcessingConfiguration } from \"../imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Material } from \"../material\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport { ImageProcessingDefinesMixin } from \"../imageProcessingConfiguration.defines\";\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindMorphTargetParameters,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareAttributesForMorphTargets,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareDefinesForOIT,\r\n PrepareDefinesForPrePass,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { Vector2, Vector4, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\nimport { PushMaterial } from \"../pushMaterial\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { RenderTargetTexture } from \"../Textures/renderTargetTexture\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass Uniform {\r\n public name: string;\r\n public numComponents: number;\r\n public linkedProperties: { [name: string]: Property<PropertyType> } = {};\r\n public populateVectorFromLinkedProperties(vector: Vector4 | Vector3 | Vector2): void {\r\n const destinationSize = vector.dimension[0];\r\n for (const propKey in this.linkedProperties) {\r\n const prop = this.linkedProperties[propKey];\r\n const sourceSize = prop.numComponents;\r\n if (destinationSize < sourceSize || prop.targetUniformComponentOffset > destinationSize - sourceSize) {\r\n if (sourceSize == 1) {\r\n Logger.Error(`Float property ${prop.name} has an offset that is too large.`);\r\n } else {\r\n Logger.Error(`Vector${sourceSize} property ${prop.name} won't fit in Vector${destinationSize} or has an offset that is too large.`);\r\n }\r\n return;\r\n }\r\n if (typeof prop.value === \"number\") {\r\n Uniform._tmpArray[prop.targetUniformComponentOffset] = prop.value;\r\n } else {\r\n prop.value.toArray(Uniform._tmpArray, prop.targetUniformComponentOffset);\r\n }\r\n }\r\n vector.fromArray(Uniform._tmpArray);\r\n }\r\n public constructor(name: string, componentNum: number) {\r\n this.name = name;\r\n this.numComponents = componentNum;\r\n }\r\n private static _tmpArray: number[] = [0, 0, 0, 0];\r\n}\r\n\r\ntype PropertyType = Vector2 | Vector3 | Vector4 | number | Color3 | Color4;\r\n\r\n/**\r\n * Defines a property for the OpenPBRMaterial.\r\n */\r\nclass Property<T extends PropertyType> {\r\n public name: string;\r\n public targetUniformName: string;\r\n public defaultValue: T;\r\n public value: T;\r\n // public includeAlphaFromProp: string = \"\";\r\n\r\n /**\r\n * If not given a type, there will be no uniform defined for this property and\r\n * it will be assumed that the value will be packed into the already existing \"uniformName\" uniform.\r\n */\r\n public targetUniformComponentNum: number = 4; // Default to vec4\r\n public targetUniformComponentOffset: number = 0;\r\n\r\n /**\r\n * Creates a new Property instance.\r\n * @param name The name of the property in the shader\r\n * @param defaultValue The default value of the property\r\n * @param targetUniformName The name of the property in the shader uniform block\r\n * @param targetUniformComponentNum The number of components in the target uniform. All properties that are\r\n * packed into the same uniform must agree on the size of the target uniform.\r\n * @param targetUniformComponentOffset The offset in the uniform where this property will be packed.\r\n */\r\n constructor(name: string, defaultValue: T, targetUniformName: string, targetUniformComponentNum: number, targetUniformComponentOffset: number = 0) {\r\n this.name = name;\r\n this.targetUniformName = targetUniformName;\r\n this.defaultValue = defaultValue;\r\n this.value = defaultValue;\r\n this.targetUniformComponentNum = targetUniformComponentNum;\r\n this.targetUniformComponentOffset = targetUniformComponentOffset;\r\n }\r\n\r\n /**\r\n * Returns the number of components of the property based on its default value type.\r\n */\r\n public get numComponents(): number {\r\n if (typeof this.defaultValue === \"number\") {\r\n return 1;\r\n }\r\n return this.defaultValue.dimension[0];\r\n }\r\n}\r\n\r\nclass Sampler {\r\n public name: string;\r\n public value: Nullable<BaseTexture> = null; // Texture value, default to null\r\n public samplerPrefix: string = \"\"; // The name of the sampler in the shader\r\n public textureDefine: string = \"\"; // The define used in the shader for this sampler\r\n\r\n /**\r\n * The name of the sampler used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - samplerFragmentDeclaration.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerName(): string {\r\n return this.samplerPrefix + \"Sampler\";\r\n }\r\n /**\r\n * The name of the sampler info used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - openpbr.vertex.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerInfoName(): string {\r\n return \"v\" + this.samplerPrefix.charAt(0).toUpperCase() + this.samplerPrefix.slice(1) + \"Infos\";\r\n }\r\n /**\r\n * The name of the matrix used for this sampler in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - materialHelper.functions.BindTextureMatrix\r\n * - samplerVertexImplementation.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerMatrixName(): string {\r\n return this.samplerPrefix + \"Matrix\";\r\n }\r\n /**\r\n * Creates a new Sampler instance.\r\n * @param name The name of the texture property\r\n * @param samplerPrefix The prefix used for the name of the sampler in the shader\r\n * @param textureDefine The define used in the shader for this sampler\r\n */\r\n constructor(name: string, samplerPrefix: string, textureDefine: string) {\r\n this.name = name;\r\n this.samplerPrefix = samplerPrefix;\r\n this.textureDefine = textureDefine;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRMaterialDefinesBase) {\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public VERTEXCOLOR = false;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public VERTEXALPHA = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public LODBASEDMICROSFURACE = true;\r\n\r\n public METALLICWORKFLOW = true;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public SPECULAR_WEIGHT_IN_ALPHA = false;\r\n public SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = false;\r\n public SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public USE_GLTF_STYLE_ANISOTROPY = false;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public OBJECTSPACE_NORMALMAP = false;\r\n public PARALLAX = false;\r\n public PARALLAX_RHS = false;\r\n public PARALLAXOCCLUSION = false;\r\n public NORMALXYSCALE = true;\r\n public ANISOTROPIC = false; // Enables anisotropic logic. Still needed because it's used in pbrHelperFunctions\r\n public ANISOTROPIC_OPENPBR = true; // Tells the shader to use OpenPBR's anisotropic roughness remapping\r\n public ANISOTROPIC_BASE = false; // Tells the shader to apply anisotropy to the base layer\r\n public ANISOTROPIC_COAT = false; // Tells the shader to apply anisotropy to the coat layer\r\n\r\n public REFLECTION = false;\r\n public REFLECTIONMAP_3D = false;\r\n public REFLECTIONMAP_SPHERICAL = false;\r\n public REFLECTIONMAP_PLANAR = false;\r\n public REFLECTIONMAP_CUBIC = false;\r\n public USE_LOCAL_REFLECTIONMAP_CUBIC = false;\r\n public REFLECTIONMAP_PROJECTION = false;\r\n public REFLECTIONMAP_SKYBOX = false;\r\n public REFLECTIONMAP_EXPLICIT = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n public INVERTCUBICMAP = false;\r\n public USESPHERICALFROMREFLECTIONMAP = false;\r\n public USEIRRADIANCEMAP = false;\r\n public USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n public USESPHERICALINVERTEX = false;\r\n public REFLECTIONMAP_OPPOSITEZ = false;\r\n public LODINREFLECTIONALPHA = false;\r\n public GAMMAREFLECTION = false;\r\n public RGBDREFLECTION = false;\r\n public RADIANCEOCCLUSION = false;\r\n public HORIZONOCCLUSION = false;\r\n\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n public BONES_VELOCITY_ENABLED = false;\r\n\r\n public NONUNIFORMSCALING = false;\r\n\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_POSITION = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public MORPHTARGETS_UV2 = false;\r\n public MORPHTARGETS_COLOR = false;\r\n public MORPHTARGETTEXTURE_HASPOSITIONS = false;\r\n public MORPHTARGETTEXTURE_HASNORMALS = false;\r\n public MORPHTARGETTEXTURE_HASTANGENTS = false;\r\n public MORPHTARGETTEXTURE_HASUVS = false;\r\n public MORPHTARGETTEXTURE_HASUV2S = false;\r\n public MORPHTARGETTEXTURE_HASCOLORS = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n public USEPHYSICALLIGHTFALLOFF = false;\r\n public USEGLTFLIGHTFALLOFF = false;\r\n public TWOSIDEDLIGHTING = false;\r\n public MIRRORED = false;\r\n public SHADOWFLOAT = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public LOGARITHMICDEPTH = false;\r\n public CAMERA_ORTHOGRAPHIC = false;\r\n public CAMERA_PERSPECTIVE = false;\r\n public AREALIGHTSUPPORTED = true;\r\n\r\n public FORCENORMALFORWARD = false;\r\n\r\n public SPECULARAA = false;\r\n\r\n public UNLIT = false;\r\n\r\n public DECAL_AFTER_DETAIL = false;\r\n\r\n public DEBUGMODE = 0;\r\n\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n // BRDF defines\r\n BRDF_V_HEIGHT_CORRELATED = true;\r\n MS_BRDF_ENERGY_CONSERVATION = true;\r\n SPHERICAL_HARMONICS = true;\r\n SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true;\r\n MIX_IBL_RADIANCE_WITH_IRRADIANCE = true;\r\n LEGACY_SPECULAR_ENERGY_CONSERVATION = false;\r\n BASE_DIFFUSE_MODEL = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;\r\n DIELECTRIC_SPECULAR_MODEL = Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR;\r\n CONDUCTOR_SPECULAR_MODEL = Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR;\r\n\r\n /**\r\n * Initializes the PBR Material defines.\r\n * @param externalProperties The external properties\r\n */\r\n constructor(externalProperties?: { [name: string]: { type: string; default: any } }) {\r\n super(externalProperties);\r\n this.rebuild();\r\n }\r\n\r\n /**\r\n * Resets the PBR Material defines.\r\n */\r\n public override reset(): void {\r\n super.reset();\r\n this.ALPHATESTVALUE = \"0.5\";\r\n this.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * A Physically based material that follows the specification of OpenPBR.\r\n *\r\n * For more information, please refer to the documentation :\r\n * https://academysoftwarefoundation.github.io/OpenPBR/index.html\r\n */\r\nexport class OpenPBRMaterial extends OpenPBRMaterialBase {\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n public baseWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeight: Property<number> = new Property<number>(\"base_weight\", 1, \"vBaseWeight\", 1);\r\n\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n public baseWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeightTexture: Sampler = new Sampler(\"base_weight\", \"baseWeight\", \"BASE_WEIGHT\");\r\n\r\n /**\r\n * Color of the base diffuse lobe.\r\n * See OpenPBR's specs for base_color\r\n */\r\n public baseColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColor: Property<Color3> = new Property<Color3>(\"base_color\", Color3.White(), \"vBaseColor\", 4);\r\n\r\n /**\r\n * Base Color Texture property.\r\n * See OpenPBR's specs for base_color\r\n */\r\n public baseColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColorTexture: Sampler = new Sampler(\"base_color\", \"baseColor\", \"BASE_COLOR\");\r\n\r\n /**\r\n * Roughness of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n public baseDiffuseRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughness: Property<number> = new Property<number>(\"base_diffuse_roughness\", 0, \"vBaseDiffuseRoughness\", 1);\r\n\r\n /**\r\n * Roughness texture of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n public baseDiffuseRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughnessTexture: Sampler = new Sampler(\"base_diffuse_roughness\", \"baseDiffuseRoughness\", \"BASE_DIFFUSE_ROUGHNESS\");\r\n\r\n /**\r\n * Metalness of the base lobe.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n public baseMetalness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalness: Property<number> = new Property<number>(\"base_metalness\", 0, \"vReflectanceInfo\", 4, 0);\r\n\r\n /**\r\n * Metalness texture.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n public baseMetalnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalnessTexture: Sampler = new Sampler(\"base_metalness\", \"baseMetalness\", \"BASE_METALNESS\");\r\n\r\n /**\r\n * Weight of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n public specularWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeight: Property<number> = new Property<number>(\"specular_weight\", 1, \"vReflectanceInfo\", 4, 3);\r\n\r\n /**\r\n * Weight texture of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n public specularWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeightTexture: Sampler = new Sampler(\"specular_weight\", \"specularWeight\", \"SPECULAR_WEIGHT\");\r\n\r\n /**\r\n * Color of the specular lobe.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n public specularColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColor: Property<Color3> = new Property<Color3>(\"specular_color\", Color3.White(), \"vSpecularColor\", 4);\r\n\r\n /**\r\n * Specular Color Texture property.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n public specularColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColorTexture: Sampler = new Sampler(\"specular_color\", \"specularColor\", \"SPECULAR_COLOR\");\r\n\r\n /**\r\n * Roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n public specularRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughness: Property<number> = new Property<number>(\"specular_roughness\", 0.3, \"vReflectanceInfo\", 4, 1);\r\n\r\n /**\r\n * Roughness texture of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n public specularRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessTexture: Sampler = new Sampler(\"specular_roughness\", \"specularRoughness\", \"SPECULAR_ROUGHNESS\");\r\n\r\n /**\r\n * Anisotropic roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness_anisotropy\r\n */\r\n public specularRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropy: Property<number> = new Property<number>(\"specular_roughness_anisotropy\", 0, \"vSpecularAnisotropy\", 3, 2);\r\n\r\n /**\r\n * Anisotropic Roughness texture.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n public specularRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropyTexture: Sampler = new Sampler(\"specular_roughness_anisotropy\", \"specularRoughnessAnisotropy\", \"SPECULAR_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * IOR of the specular lobe.\r\n * See OpenPBR's specs for specular_ior\r\n */\r\n public specularIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularIor: Property<number> = new Property<number>(\"specular_ior\", 1.5, \"vReflectanceInfo\", 4, 2);\r\n\r\n /**\r\n * Defines the amount of clear coat on the surface.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n public coatWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeight: Property<number> = new Property<number>(\"coat_weight\", 0.0, \"vCoatWeight\", 1, 0);\r\n\r\n /**\r\n * Coat weight texture.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n public coatWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeightTexture: Sampler = new Sampler(\"coat_weight\", \"coatWeight\", \"COAT_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n public coatColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColor: Property<Color3> = new Property<Color3>(\"coat_color\", Color3.White(), \"vCoatColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the clear coat.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n public coatColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColorTexture: Sampler = new Sampler(\"coat_color\", \"coatColor\", \"COAT_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n public coatRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughness: Property<number> = new Property<number>(\"coat_roughness\", 0.0, \"vCoatRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n public coatRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessTexture: Sampler = new Sampler(\"coat_roughness\", \"coatRoughness\", \"COAT_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the anisotropy of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n public coatRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropy: Property<number> = new Property<number>(\"coat_roughness_anisotropy\", 0, \"vCoatRoughnessAnisotropy\", 1);\r\n\r\n /**\r\n * Anisotropic Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n public coatRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropyTexture: Sampler = new Sampler(\"coat_roughness_anisotropy\", \"coatRoughnessAnisotropy\", \"COAT_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * Defines the IOR of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_ior\r\n */\r\n public coatIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatIor: Property<number> = new Property<number>(\"coat_ior\", 1.5, \"vCoatIor\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n public coatDarkening: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkening\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkening: Property<number> = new Property<number>(\"coat_darkening\", 1.0, \"vCoatDarkening\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n public coatDarkeningTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkeningTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkeningTexture: Sampler = new Sampler(\"coat_darkening\", \"coatDarkening\", \"COAT_DARKENING\");\r\n\r\n /**\r\n * Specifies whether the coat roughness is taken from the\r\n * same texture as the coat_weight.\r\n */\r\n public useCoatRoughnessFromWeightTexture: boolean = false;\r\n\r\n /**\r\n * Defines the normal of the material's geometry.\r\n * See OpenPBR's specs for geometry_normal\r\n */\r\n public geometryNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryNormalTexture: Sampler = new Sampler(\"geometry_normal\", \"geometryNormal\", \"GEOMETRY_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public geometryTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangent: Property<Vector2> = new Property<Vector2>(\"geometry_tangent\", new Vector2(1, 0), \"vSpecularAnisotropy\", 3, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public get geometryTangentAngle(): number {\r\n return Math.atan2(this.geometryTangent.y, this.geometryTangent.x);\r\n }\r\n\r\n public set geometryTangentAngle(value: number) {\r\n this.geometryTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public geometryTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangentTexture: Sampler = new Sampler(\"geometry_tangent\", \"geometryTangent\", \"GEOMETRY_TANGENT\");\r\n\r\n /**\r\n * Defines the normal of the material's coat layer.\r\n * See OpenPBR's specs for geometry_coat_normal\r\n */\r\n public geometryCoatNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatNormalTexture: Sampler = new Sampler(\"geometry_coat_normal\", \"geometryCoatNormal\", \"GEOMETRY_COAT_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n public geometryCoatTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangent: Property<Vector2> = new Property<Vector2>(\"geometry_coat_tangent\", new Vector2(1, 0), \"vGeometryCoatTangent\", 2, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public get geometryCoatTangentAngle(): number {\r\n return Math.atan2(this.geometryCoatTangent.y, this.geometryCoatTangent.x);\r\n }\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public set geometryCoatTangentAngle(value: number) {\r\n this.geometryCoatTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n public geometryCoatTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangentTexture: Sampler = new Sampler(\"geometry_coat_tangent\", \"geometryCoatTangent\", \"GEOMETRY_COAT_TANGENT\");\r\n\r\n /**\r\n * Defines the opacity of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n public geometryOpacity: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacity\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacity: Property<number> = new Property<number>(\"geometry_opacity\", 1.0, \"vBaseColor\", 4, 3);\r\n\r\n /**\r\n * Defines the opacity texture of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n public geometryOpacityTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacityTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacityTexture: Sampler = new Sampler(\"geometry_opacity\", \"geometryOpacity\", \"GEOMETRY_OPACITY\");\r\n\r\n /**\r\n * Defines the luminance of the material's emission.\r\n * See OpenPBR's specs for emission_luminance\r\n */\r\n public emissionLuminance: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionLuminance\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionLuminance: Property<number> = new Property<number>(\"emission_luminance\", 1.0, \"vLightingIntensity\", 4, 1);\r\n\r\n /**\r\n * Defines the color of the material's emission.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n public emissionColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColor: Property<Color3> = new Property<Color3>(\"emission_color\", Color3.Black(), \"vEmissionColor\", 3);\r\n\r\n /**\r\n * Defines the texture of the material's emission color.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n public emissionColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColorTexture: Sampler = new Sampler(\"emission_color\", \"emissionColor\", \"EMISSION_COLOR\");\r\n\r\n /**\r\n * Defines the ambient occlusion texture.\r\n */\r\n public ambientOcclusionTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"ambientOcclusionTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _ambientOcclusionTexture: Sampler = new Sampler(\"ambient_occlusion\", \"ambientOcclusion\", \"AMBIENT_OCCLUSION\");\r\n\r\n private _propertyList: { [name: string]: Property<any> };\r\n private _uniformsList: { [name: string]: Uniform } = {};\r\n private _samplersList: { [name: string]: Sampler } = {};\r\n private _samplerDefines: { [name: string]: { type: string; default: any } } = {};\r\n\r\n private static _noiseTextures: { [id: number]: BaseTexture } = {};\r\n\r\n /**\r\n * Intensity of the direct lights e.g. the four lights available in your scene.\r\n * This impacts both the direct diffuse and specular highlights.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public directIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the environment e.g. how much the environment will light the object\r\n * either through harmonics for rough material or through the reflection for shiny ones.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * Specifies that the specular weight is stored in the alpha channel of the specular weight texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useSpecularWeightFromTextureAlpha = false;\r\n\r\n /**\r\n * Enforces alpha test in opaque or blend mode in order to improve the performances of some situations.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public forceAlphaTest = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public alphaCutOff = 0.4;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the ambient texture contains the ambient occlusion information in its red channel only.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientInGrayScale = false;\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n @serialize()\r\n public get usePhysicalLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_PHYSICAL;\r\n }\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n public set usePhysicalLightFalloff(value: boolean) {\r\n if (value !== this.usePhysicalLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n @serialize()\r\n public get useGLTFLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_GLTF;\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n public set useGLTFLightFalloff(value: boolean) {\r\n if (value !== this.useGLTFLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_GLTF;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting = false;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceIrradianceInFragment = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will invert (x = 1.0 - x).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will invert (y = 1.0 - y).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public twoSidedLighting = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Let user defines the brdf lookup texture used for IBL.\r\n * A default 8bit version is embedded but you could point at :\r\n * * Default texture: https://assets.babylonjs.com/environments/correlatedMSBRDF_RGBD.png\r\n * * Default 16bit pixel depth texture: https://assets.babylonjs.com/environments/correlatedMSBRDF.dds\r\n * * LEGACY Default None correlated https://assets.babylonjs.com/environments/uncorrelatedBRDF_RGBD.png\r\n * * LEGACY Default None correlated 16bit pixel depth https://assets.babylonjs.com/environments/uncorrelatedBRDF.dds\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force normal to face away from face.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the normalmap values.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRadianceOcclusion = true;\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public applyDecalMapAfterDetailMap = false;\r\n\r\n /**\r\n * Force all the PBR materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this.directIntensity, 1.0, this.environmentIntensity, 1.0);\r\n\r\n /**\r\n * Stores the radiance (and, possibly, irradiance) values in a texture.\r\n * @internal\r\n */\r\n public _radianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromAlpha = false;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel of the specular color texture.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromSpecularColorTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses anisotropy weight read from the geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's anisotropy extension.\r\n * @internal\r\n */\r\n public _useSpecularRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses coat anisotropy weight read from the coat's geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's clearcoat_anisotropy extension.\r\n * @internal\r\n */\r\n public _useCoatRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Assume the anisotropy data is stored in the format specified by\r\n * KHR_materials_anisotropy.\r\n * @internal\r\n */\r\n public _useGltfStyleAnisotropy = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n * @internal\r\n */\r\n public _useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n * @internal\r\n */\r\n public _useRadianceOcclusion = true;\r\n\r\n /**\r\n * Specifies that the alpha is coming from the base color texture's alpha channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAlphaFromBaseColorTexture = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallic information in its blue channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useMetallicFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Defines the falloff type used in this material.\r\n * It by default is Physical.\r\n * @internal\r\n */\r\n public _lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n * @internal\r\n */\r\n public _useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n * @internal\r\n */\r\n public _useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n * @internal\r\n */\r\n public _parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n * @internal\r\n */\r\n public _disableLighting = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n * @internal\r\n */\r\n public _maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will be inverted (x = 1.0 - x).\r\n * @internal\r\n */\r\n public _invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will be inverted (y = 1.0 - y).\r\n * @internal\r\n */\r\n public _invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n * @internal\r\n */\r\n public _twoSidedLighting = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n * @internal\r\n */\r\n public _alphaCutOff = 0.4;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n * @internal\r\n */\r\n public _useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n * @internal\r\n */\r\n public _useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness:\r\n * http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf\r\n * @internal\r\n */\r\n public _environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n * @internal\r\n */\r\n public _forceIrradianceInFragment = false;\r\n\r\n private _systemRealTimeFiltering: boolean | undefined = undefined;\r\n /* Realtime filtering system control */\r\n public get systemRealTimeFiltering() {\r\n return this._systemRealTimeFiltering;\r\n }\r\n public set systemRealTimeFiltering(value: boolean | undefined) {\r\n this._systemRealTimeFiltering = value;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n private _realTimeFiltering: boolean | undefined = undefined;\r\n /**\r\n * Enables realtime filtering on the texture.\r\n */\r\n public get realTimeFiltering() {\r\n return (this._realTimeFiltering ?? false) || !!this.systemRealTimeFiltering;\r\n }\r\n public set realTimeFiltering(b: boolean) {\r\n this._realTimeFiltering = b;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering setting is explicitly set by the user.\r\n */\r\n public get isUserSetRealTimeFiltering() {\r\n return typeof this._realTimeFiltering === \"boolean\";\r\n }\r\n\r\n private _realTimeFilteringQuality: number | undefined = undefined;\r\n /**\r\n * Quality switch for realtime filtering\r\n */\r\n public get realTimeFilteringQuality(): number {\r\n return this._realTimeFilteringQuality ?? Constants.TEXTURE_FILTERING_QUALITY_MIN;\r\n }\r\n public set realTimeFilteringQuality(n: number) {\r\n this._realTimeFilteringQuality = n;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering quality has been set by the user.\r\n */\r\n public get isUserSetRealTimeFilteringQuality() {\r\n return typeof this._realTimeFilteringQuality === \"number\";\r\n }\r\n\r\n /**\r\n * Can this material render to several textures at once\r\n */\r\n public override get canRenderToMRT() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Force normal to face away from face.\r\n * @internal\r\n */\r\n public _forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the normalmap values.\r\n * @internal\r\n */\r\n public _enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * Stores the available render targets.\r\n */\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n private _unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n private _applyDecalMapAfterDetailMap = false;\r\n\r\n private _debugMode = 0;\r\n\r\n private _shadersLoaded = false;\r\n private _breakShaderLoadedCheck = false;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Defines the material debug mode.\r\n * It helps seeing only some components of the material while troubleshooting.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public debugMode = 0;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Specify from where on screen the debug mode should start.\r\n * The value goes from -1 (full screen) to 1 (not visible)\r\n * It helps with side by side comparison against the final render\r\n * This defaults to -1\r\n */\r\n public debugLimit = -1;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * As the default viewing range might not be enough (if the ambient is really small for instance)\r\n * You can use the factor to better multiply the final value.\r\n */\r\n public debugFactor = 1;\r\n\r\n /**\r\n * Defines additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new OpenPBRMaterial instance.\r\n *\r\n * @param name The material name\r\n * @param scene The scene the material will be use in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL || OpenPBRMaterial.ForceGLSL);\r\n // TODO: Check if we're running WebGL 2.0 or above\r\n if (this.getScene() && !this.getScene()?.getEngine().isWebGPU && (this.getScene().getEngine() as Engine).webGLVersion < 2) {\r\n Logger.Error(\"OpenPBRMaterial: WebGL 2.0 or above is required for this material.\");\r\n }\r\n\r\n if (!OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]) {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId] = new Texture(\r\n \"https://assets.babylonjs.com/textures/blue_noise/blue_noise_rgb.png\",\r\n this.getScene(),\r\n false,\r\n true,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE\r\n );\r\n this.getScene().onDisposeObservable.addOnce(() => {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]?.dispose();\r\n delete OpenPBRMaterial._noiseTextures[this.getScene().uniqueId];\r\n });\r\n }\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled && this._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._radianceTexture);\r\n }\r\n\r\n this._eventInfo.renderTargets = this._renderTargets;\r\n this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._environmentBRDFTexture = GetEnvironmentBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n\r\n // Build the internal property list that can be used to generate and update the uniform buffer\r\n this._propertyList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Property) {\r\n this._propertyList[key] = value;\r\n }\r\n }\r\n // Build the internal uniforms list that is used for combining and updating\r\n // property values in the uniform buffer\r\n const propertyKeys = Object.keys(this._propertyList);\r\n propertyKeys.forEach((key) => {\r\n const prop = this._propertyList[key];\r\n let uniform = this._uniformsList[prop.targetUniformName];\r\n if (!uniform) {\r\n uniform = new Uniform(prop.targetUniformName, prop.targetUniformComponentNum);\r\n this._uniformsList[prop.targetUniformName] = uniform;\r\n } else if (uniform.numComponents !== prop.targetUniformComponentNum) {\r\n Logger.Error(`Uniform ${prop.targetUniformName} already exists of size ${uniform.numComponents}, but trying to set it to ${prop.targetUniformComponentNum}.`);\r\n }\r\n uniform.linkedProperties[prop.name] = prop;\r\n });\r\n\r\n // Build the internal list of samplers\r\n this._samplersList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Sampler) {\r\n this._samplersList[key] = value;\r\n }\r\n }\r\n\r\n // For each sampler in _samplersList, add defines to be added to OpenPBRMaterialDefines\r\n for (const samplerKey in this._samplersList) {\r\n const sampler = this._samplersList[samplerKey];\r\n const defineName = sampler.textureDefine;\r\n this._samplerDefines[defineName] = { type: \"boolean\", default: false };\r\n this._samplerDefines[defineName + \"DIRECTUV\"] = { type: \"number\", default: 0 };\r\n this._samplerDefines[defineName + \"_GAMMA\"] = { type: \"boolean\", default: false };\r\n }\r\n\r\n // Arg. Why do I have to add these references to get rid of the linting errors?\r\n this._baseWeight;\r\n this._baseWeightTexture;\r\n this._baseColor;\r\n this._baseColorTexture;\r\n this._baseDiffuseRoughness;\r\n this._baseDiffuseRoughnessTexture;\r\n this._baseMetalness;\r\n this._baseMetalnessTexture;\r\n this._specularWeight;\r\n this._specularWeightTexture;\r\n this._specularColor;\r\n this._specularColorTexture;\r\n this._specularRoughness;\r\n this._specularIor;\r\n this._specularRoughnessTexture;\r\n this._specularRoughnessAnisotropy;\r\n this._specularRoughnessAnisotropyTexture;\r\n this._coatWeight;\r\n this._coatWeightTexture;\r\n this._coatColor;\r\n this._coatColorTexture;\r\n this._coatRoughness;\r\n this._coatRoughnessTexture;\r\n this._coatRoughnessAnisotropy;\r\n this._coatRoughnessAnisotropyTexture;\r\n this._coatIor;\r\n this._coatDarkening;\r\n this._coatDarkeningTexture;\r\n this._geometryNormalTexture;\r\n this._geometryTangent;\r\n this._geometryTangentTexture;\r\n this._geometryCoatNormalTexture;\r\n this._geometryCoatTangent;\r\n this._geometryCoatTangentTexture;\r\n this._geometryOpacity;\r\n this._geometryOpacityTexture;\r\n this._emissionLuminance;\r\n this._emissionColor;\r\n this._emissionColorTexture;\r\n this._ambientOcclusionTexture;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.ReflectionTextureEnabled && this._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return this._cacheHasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public override get isPrePassCapable(): boolean {\r\n return !this.disableDepthWrite;\r\n }\r\n\r\n /**\r\n * @returns the name of the material class.\r\n */\r\n public override getClassName(): string {\r\n return \"OpenPBRMaterial\";\r\n }\r\n\r\n protected override _transparencyMode: number = Material.MATERIAL_OPAQUE;\r\n\r\n @serialize()\r\n public override get transparencyMode(): number {\r\n return this._transparencyMode;\r\n }\r\n\r\n public override set transparencyMode(value: number) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\r\n }\r\n\r\n /**\r\n * @returns whether or not the alpha value of the albedo texture should be used for alpha blending.\r\n */\r\n protected _shouldUseAlphaFromBaseColorTexture(): boolean {\r\n return this._hasAlphaChannel() && this._transparencyMode !== Material.MATERIAL_OPAQUE && !this.geometryOpacityTexture;\r\n }\r\n\r\n /**\r\n * @returns whether or not there is a usable alpha channel for transparency.\r\n */\r\n protected _hasAlphaChannel(): boolean {\r\n return (this.baseColorTexture != null && this.baseColorTexture.hasAlpha && this._useAlphaFromBaseColorTexture) || this.geometryOpacityTexture != null;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name - name to use for the new material.\r\n * @param cloneTexturesOnlyOnce - if a texture is used in more than one channel (e.g baseColor and opacity), only clone it once and reuse it on the other channels. Default false.\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns cloned material instance\r\n */\r\n public override clone(name: string, cloneTexturesOnlyOnce: boolean = true, rootUrl = \"\"): OpenPBRMaterial {\r\n const clone = SerializationHelper.Clone(() => new OpenPBRMaterial(name, this.getScene()), this, { cloneTexturesOnlyOnce });\r\n\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n this.stencil.copyTo(clone.stencil);\r\n\r\n this._clonePlugins(clone, rootUrl);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this PBR Material.\r\n * @returns - An object with the serialized material.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.OpenPBRMaterial\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Parses a PBR Material from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene - BJS scene instance.\r\n * @param rootUrl - url for the scene object\r\n * @returns - OpenPBRMaterial\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): OpenPBRMaterial {\r\n const material = SerializationHelper.Parse(() => new OpenPBRMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n if (source.stencil) {\r\n material.stencil.parse(source.stencil, scene, rootUrl);\r\n }\r\n\r\n Material._ParsePlugins(source, material, scene, rootUrl);\r\n\r\n return material;\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh - Define the mesh we want to force the compilation for\r\n * @param onCompiled - Define a callback triggered when the compilation completes\r\n * @param options - Define the options used to create the compilation\r\n */\r\n public override forceCompilation(mesh: AbstractMesh, onCompiled?: (material: Material) => void, options?: Partial<IMaterialCompilationOptions>): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n const checkReady = () => {\r\n if (this._breakShaderLoadedCheck) {\r\n return;\r\n }\r\n\r\n const defines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n const effect = this._prepareEffect(mesh, mesh, defines, undefined, undefined, localOptions.useInstances, localOptions.clipPlane)!;\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = null;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n if (effect.isReady()) {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n effect.onCompileObservable.add(() => {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n });\r\n }\r\n };\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param mesh - BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh. Used to check if it is ready.\r\n * @param useInstances - Specifies that instances should be used.\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n subMesh.materialDefines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n }\r\n\r\n const defines = <OpenPBRMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (defines._areTexturesDirty) {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n this._cacheHasRenderTargetTextures = this._eventInfo.hasRenderTargetTextures;\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers, check MaterialFlag and whether the texture is ready or not.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n if (!sampler.value.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n if (radianceTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!radianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (radianceTexture.irradianceTexture) {\r\n if (!radianceTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!radianceTexture.sphericalPolynomial && radianceTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (OpenPBRMaterial._noiseTextures[scene.uniqueId]) {\r\n if (!OpenPBRMaterial._noiseTextures[scene.uniqueId].isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n if (!this._eventInfo.isReadyForSubMesh) {\r\n return false;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (!engine.getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"OpenPBRMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n\r\n const previousEffect = subMesh.effect;\r\n const lightDisposed = defines._areLightsDisposed;\r\n let effect = this._prepareEffect(mesh, subMesh.getRenderingMesh(), defines, this.onCompiled, this.onError, useInstances, null);\r\n\r\n let forceWasNotReadyPreviously = false;\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n forceWasNotReadyPreviously = this.isFrozen;\r\n\r\n if (lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = forceWasNotReadyPreviously ? false : true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n const ubo = this._uniformBuffer;\r\n ubo.addUniform(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n ubo.addUniform(uniform.name, uniform.numComponents);\r\n });\r\n\r\n Object.values(this._samplersList).forEach((sampler) => {\r\n ubo.addUniform(sampler.samplerInfoName, 2);\r\n ubo.addUniform(sampler.samplerMatrixName, 16);\r\n });\r\n\r\n super.buildUniformLayout();\r\n }\r\n\r\n /**\r\n * Binds the submesh data.\r\n * @param world - The world matrix.\r\n * @param mesh - The BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh.\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <OpenPBRMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Binding unconditionally\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);\r\n\r\n MaterialHelperGeometryRendering.Bind(engine.currentRenderPassId, this._activeEffect, mesh, world, this);\r\n\r\n const camera = scene.activeCamera;\r\n if (camera) {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", camera.minZ, camera.maxZ, 0, 0);\r\n } else {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", 0, 0, 0, 0);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventHardBindForSubMesh(this._eventInfo);\r\n\r\n // Normal Matrix\r\n if (defines.OBJECTSPACE_NORMALMAP) {\r\n world.toNormalMatrix(this._normalMatrix);\r\n this.bindOnlyNormalMatrix(this._normalMatrix);\r\n }\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect, this.prePassConfiguration);\r\n\r\n let radianceTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n radianceTexture = this._getRadianceTexture();\r\n\r\n if (!ubo.useUbo || !this.isFrozen || !ubo.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and bind info and matrix for each texture.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.updateFloat2(sampler.samplerInfoName, sampler.value.coordinatesIndex, sampler.value.level);\r\n BindTextureMatrix(sampler.value, ubo, sampler.samplerPrefix);\r\n }\r\n }\r\n\r\n if (this.geometryNormalTexture) {\r\n if (scene._mirroredCameraPosition) {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? 1.0 : -1.0, this._invertNormalMapY ? 1.0 : -1.0);\r\n } else {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? -1.0 : 1.0, this._invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n BindIBLParameters(scene, defines, ubo, Color3.White(), radianceTexture, this.realTimeFiltering, true, true, true, true, true);\r\n }\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n ubo.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n // If the property actually defines a uniform, update it.\r\n if (uniform.numComponents === 4) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector4[0]);\r\n ubo.updateVector4(uniform.name, TmpVectors.Vector4[0]);\r\n } else if (uniform.numComponents === 3) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector3[0]);\r\n ubo.updateVector3(uniform.name, TmpVectors.Vector3[0]);\r\n } else if (uniform.numComponents === 2) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector2[0]);\r\n ubo.updateFloat2(uniform.name, TmpVectors.Vector2[0].x, TmpVectors.Vector2[0].y);\r\n } else if (uniform.numComponents === 1) {\r\n ubo.updateFloat(uniform.name, uniform.linkedProperties[Object.keys(uniform.linkedProperties)[0]].value as number);\r\n }\r\n });\r\n\r\n // Misc\r\n this._lightingInfos.x = this.directIntensity;\r\n this._lightingInfos.y = this.emissionLuminance;\r\n this._lightingInfos.z = this.environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = 1.0; // This is used to be _specularIntensity.\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\r\n\r\n ubo.updateFloat2(\"vDebugMode\", this.debugLimit, this.debugFactor);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and set textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.setTexture(sampler.samplerName, sampler.value);\r\n }\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, radianceTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (defines.ANISOTROPIC) {\r\n ubo.setTexture(\"blueNoiseSampler\", OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]);\r\n }\r\n }\r\n\r\n // OIT with depth peeling\r\n if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {\r\n this.getScene().depthPeelingRenderer!.bind(effect);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n this.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n // Lights\r\n if (scene.lightsEnabled && !this._disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || radianceTexture || mesh.receiveShadows || defines.PREPASS) {\r\n this.bindView(effect);\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Morph targets\r\n if (defines.NUM_MORPH_INFLUENCERS) {\r\n BindMorphTargetParameters(mesh, this._activeEffect);\r\n }\r\n\r\n if (defines.BAKED_VERTEX_ANIMATION_TEXTURE) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, defines.INSTANCES);\r\n }\r\n\r\n // image processing\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n\r\n // Log. depth\r\n BindLogDepth(defines, this._activeEffect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n ubo.update();\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * If material have animatable metallic texture, then reflectivity texture will not be returned, even if it has animations.\r\n * @returns - Array of animatable textures.\r\n */\r\n public override getAnimatables(): IAnimatable[] {\r\n const results = super.getAnimatables();\r\n\r\n // Loop through samplers and push animated textures to list.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value && sampler.value.animations && sampler.value.animations.length > 0) {\r\n results.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture && this._radianceTexture.animations && this._radianceTexture.animations.length > 0) {\r\n results.push(this._radianceTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @returns - Array of BaseTextures\r\n */\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n // Loop through samplers and push active textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n activeTextures.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture) {\r\n activeTextures.push(this._radianceTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n // Loop through samplers and check each texture for equality\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this._radianceTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * It can't be sets when subsurface scattering of this material is disabled.\r\n * When scene have ability to enable subsurface prepass effect, it will enable.\r\n * @returns - If prepass is enabled or not.\r\n */\r\n public override setPrePassRenderer(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeEffect - Forces the disposal of effects.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean): void {\r\n this._breakShaderLoadedCheck = true;\r\n if (forceDisposeTextures) {\r\n if (this._environmentBRDFTexture && this.getScene().environmentBRDFTexture !== this._environmentBRDFTexture) {\r\n this._environmentBRDFTexture.dispose();\r\n }\r\n\r\n // Loop through samplers and dispose the textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n sampler.value?.dispose();\r\n }\r\n\r\n this._radianceTexture?.dispose();\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n\r\n /**\r\n * Returns the texture used for reflections.\r\n * @returns - Reflection texture if present. Otherwise, returns the environment texture.\r\n */\r\n private _getRadianceTexture(): Nullable<BaseTexture> {\r\n if (this._radianceTexture) {\r\n return this._radianceTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\r\n onCompiled: Nullable<(effect: Effect) => void> = null,\r\n onError: Nullable<(effect: Effect, errors: string) => void> = null,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): Nullable<Effect> {\r\n this._prepareDefines(mesh, renderingMesh, defines, useInstances, useClipPlane);\r\n\r\n if (!defines.isDirty) {\r\n return null;\r\n }\r\n\r\n defines.markAsProcessed();\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n let fallbackRank = 0;\r\n if (defines.USESPHERICALINVERTEX) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALINVERTEX\");\r\n }\r\n\r\n if (defines.FOG) {\r\n fallbacks.addFallback(fallbackRank, \"FOG\");\r\n }\r\n if (defines.SPECULARAA) {\r\n fallbacks.addFallback(fallbackRank, \"SPECULARAA\");\r\n }\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(fallbackRank, \"POINTSIZE\");\r\n }\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(fallbackRank, \"LOGARITHMICDEPTH\");\r\n }\r\n if (defines.PARALLAX) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX\");\r\n }\r\n if (defines.PARALLAX_RHS) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX_RHS\");\r\n }\r\n if (defines.PARALLAXOCCLUSION) {\r\n fallbacks.addFallback(fallbackRank++, \"PARALLAXOCCLUSION\");\r\n }\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n fallbacks.addFallback(fallbackRank++, \"ENVIRONMENTBRDF\");\r\n }\r\n\r\n if (defines.TANGENT) {\r\n fallbacks.addFallback(fallbackRank++, \"TANGENT\");\r\n }\r\n\r\n fallbackRank = HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights, fallbackRank++);\r\n\r\n if (defines.SPECULARTERM) {\r\n fallbacks.addFallback(fallbackRank++, \"SPECULARTERM\");\r\n }\r\n\r\n if (defines.USESPHERICALFROMREFLECTIONMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALFROMREFLECTIONMAP\");\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USEIRRADIANCEMAP\");\r\n }\r\n\r\n if (defines.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n fallbacks.addFallback(fallbackRank++, \"VERTEXCOLOR\");\r\n }\r\n\r\n if (defines.MORPHTARGETS) {\r\n fallbacks.addFallback(fallbackRank++, \"MORPHTARGETS\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n if (defines[\"UV\" + i]) {\r\n attribs.push(`uv${i === 1 ? \"\" : i}`);\r\n }\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n PrepareAttributesForMorphTargets(attribs, mesh, defines);\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n\r\n let shaderName = \"openpbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"normalMatrix\",\r\n \"vLightingIntensity\",\r\n \"logarithmicDepthConstant\",\r\n \"vTangentSpaceParams\",\r\n \"boneTextureWidth\",\r\n \"vDebugMode\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"cameraInfo\",\r\n ];\r\n\r\n for (const uniformName in this._uniformsList) {\r\n uniforms.push(uniformName);\r\n }\r\n\r\n const samplers = [\r\n \"environmentBrdfSampler\",\r\n \"blueNoiseSampler\",\r\n \"boneSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n samplers.push(sampler.samplerName);\r\n\r\n // Push uniforms for texture infos and matrix\r\n uniforms.push(sampler.samplerInfoName);\r\n uniforms.push(sampler.samplerMatrixName);\r\n }\r\n\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, true);\r\n\r\n const uniformBuffers = [\"Material\", \"Scene\", \"Mesh\"];\r\n\r\n const indexParameters = { maxSimultaneousLights: this._maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS };\r\n\r\n this._eventInfo.fallbacks = fallbacks;\r\n this._eventInfo.fallbackRank = fallbackRank;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.uniforms = uniforms;\r\n this._eventInfo.attributes = attribs;\r\n this._eventInfo.samplers = samplers;\r\n this._eventInfo.uniformBuffersNames = uniformBuffers;\r\n this._eventInfo.customCode = undefined;\r\n this._eventInfo.mesh = mesh;\r\n this._eventInfo.indexParameters = indexParameters;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareEffect, this._eventInfo);\r\n\r\n MaterialHelperGeometryRendering.AddUniformsAndSamplers(uniforms, samplers);\r\n\r\n PrePassConfiguration.AddUniforms(uniforms);\r\n PrePassConfiguration.AddSamplers(samplers);\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const csnrOptions: ICustomShaderNameResolveOptions = {};\r\n\r\n if (this.customShaderNameResolve) {\r\n shaderName = this.customShaderNameResolve(shaderName, uniforms, uniformBuffers, samplers, defines, attribs, csnrOptions);\r\n }\r\n\r\n const join = defines.toString();\r\n const effect = engine.createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: onCompiled,\r\n onError: onError,\r\n indexParameters,\r\n processFinalCode: csnrOptions.processFinalCode,\r\n processCodeAfterIncludes: this._eventInfo.customCode,\r\n multiTarget: defines.PREPASS,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/openpbr.vertex\"), import(\"../../ShadersWGSL/openpbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/openpbr.vertex\"), import(\"../../Shaders/openpbr.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n\r\n this._eventInfo.customCode = undefined;\r\n\r\n return effect;\r\n }\r\n\r\n private _prepareDefines(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): void {\r\n const useThinInstances = renderingMesh.hasThinInstances;\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // PrePass\r\n const oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;\r\n PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);\r\n\r\n // Order independant transparency\r\n PrepareDefinesForOIT(scene, defines, oit);\r\n\r\n MaterialHelperGeometryRendering.PrepareDefines(engine.currentRenderPassId, mesh, defines);\r\n\r\n // Textures\r\n defines.METALLICWORKFLOW = true;\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"MAINUV\" + i] = false;\r\n }\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and prepare defines for each texture\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n PrepareDefinesForMergedUV(sampler.value, defines, sampler.textureDefine);\r\n defines[sampler.textureDefine + \"_GAMMA\"] = sampler.value.gammaSpace;\r\n } else {\r\n defines[sampler.textureDefine] = false;\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n const useSHInFragment: boolean =\r\n this._forceIrradianceInFragment ||\r\n this.realTimeFiltering ||\r\n this._twoSidedLighting ||\r\n engine.getCaps().maxVaryingVectors <= 8 ||\r\n this._baseDiffuseRoughnessTexture != null;\r\n PrepareDefinesForIBL(scene, radianceTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._baseMetalnessTexture) {\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n }\r\n\r\n defines.SPECULAR_WEIGHT_IN_ALPHA = this._useSpecularWeightFromAlpha;\r\n defines.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = this._useSpecularWeightFromSpecularColorTexture;\r\n defines.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useSpecularRoughnessAnisotropyFromTangentTexture;\r\n defines.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useCoatRoughnessAnisotropyFromTangentTexture;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallicFromMetallicTextureBlue;\r\n\r\n if (this.geometryNormalTexture) {\r\n if (this._useParallax && this.baseColorTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n defines.PARALLAX = true;\r\n defines.PARALLAX_RHS = scene.useRightHandedSystem;\r\n defines.PARALLAXOCCLUSION = !!this._useParallaxOcclusion;\r\n } else {\r\n defines.PARALLAX = false;\r\n }\r\n defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\r\n defines.PARALLAX = false;\r\n defines.PARALLAX_RHS = false;\r\n defines.PARALLAXOCCLUSION = false;\r\n defines.OBJECTSPACE_NORMALMAP = false;\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n defines.ENVIRONMENTBRDF = true;\r\n defines.ENVIRONMENTBRDF_RGBD = this._environmentBRDFTexture.isRGBD;\r\n } else {\r\n defines.ENVIRONMENTBRDF = false;\r\n defines.ENVIRONMENTBRDF_RGBD = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromBaseColorTexture()) {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = true;\r\n } else {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n }\r\n }\r\n\r\n if (this._lightFalloff === Material.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === Material.LIGHTFALLOFF_GLTF) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = true;\r\n } else {\r\n defines.USEPHYSICALLIGHTFALLOFF = true;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n }\r\n\r\n if (!this.backFaceCulling && this._twoSidedLighting) {\r\n defines.TWOSIDEDLIGHTING = true;\r\n } else {\r\n defines.TWOSIDEDLIGHTING = false;\r\n }\r\n\r\n // We need it to not invert normals in two sided lighting mode (based on the winding of the face)\r\n defines.MIRRORED = !!scene._mirroredCameraPosition;\r\n\r\n defines.SPECULARAA = engine.getCaps().standardDerivatives && this._enableSpecularAntiAliasing;\r\n }\r\n\r\n if (defines._areTexturesDirty || defines._areMiscDirty) {\r\n defines.ALPHATESTVALUE = `${this._alphaCutOff}${this._alphaCutOff % 1 === 0 ? \".\" : \"\"}`;\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.ALPHABLEND = this.needAlphaBlendingForMesh(mesh);\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n defines.FORCENORMALFORWARD = this._forceNormalForward;\r\n\r\n defines.RADIANCEOCCLUSION = this._useRadianceOcclusion;\r\n\r\n defines.HORIZONOCCLUSION = this._useHorizonOcclusion;\r\n\r\n if (\r\n (this.specularRoughnessAnisotropy > 0.0 || this.coatRoughnessAnisotropy > 0.0) &&\r\n OpenPBRMaterial._noiseTextures[scene.uniqueId] &&\r\n MaterialFlags.ReflectionTextureEnabled\r\n ) {\r\n // ANISOTROPIC is used to include common shader functions needed for anisotropy\r\n // ANISOTROPIC_BASE is used to process anisotropy for the base layer\r\n // ANISOTROPIC_COAT is used to process anisotropy for the coat layer\r\n defines.ANISOTROPIC = true;\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n if (this._useGltfStyleAnisotropy) {\r\n defines.USE_GLTF_STYLE_ANISOTROPY = true;\r\n }\r\n defines.ANISOTROPIC_BASE = this.specularRoughnessAnisotropy > 0.0;\r\n defines.ANISOTROPIC_COAT = this.coatRoughnessAnisotropy > 0.0;\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.USE_GLTF_STYLE_ANISOTROPY = false;\r\n defines.ANISOTROPIC_BASE = false;\r\n defines.ANISOTROPIC_COAT = false;\r\n }\r\n\r\n // Misc.\r\n if (defines._areMiscDirty) {\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n this._applyDecalMapAfterDetailMap,\r\n this._useVertexPulling,\r\n renderingMesh,\r\n this._setVertexOutputInvariant\r\n );\r\n defines.UNLIT = this._unlit || ((this.pointsCloud || this.wireframe) && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n defines.DEBUGMODE = this._debugMode;\r\n }\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false, useClipPlane, useThinInstances);\r\n\r\n // External config\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.mesh = mesh;\r\n this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, true, true, true, this._transparencyMode !== Material.MATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.OpenPBRMaterial\", OpenPBRMaterial);\r\n"]}
1
+ {"version":3,"file":"openPbrMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/openPbrMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, addAccessorsForMaterialProperty, serializeAsTexture, serializeAsColor3, serializeAsVector2 } from \"../../Misc/decorators\";\r\nimport { GetEnvironmentBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { ImageProcessingConfiguration } from \"../imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Material } from \"../material\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport { ImageProcessingDefinesMixin } from \"../imageProcessingConfiguration.defines\";\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindMorphTargetParameters,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareAttributesForMorphTargets,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareDefinesForOIT,\r\n PrepareDefinesForPrePass,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { Vector2, Vector4, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\nimport { PushMaterial } from \"../pushMaterial\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { RenderTargetTexture } from \"../Textures/renderTargetTexture\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass Uniform {\r\n public name: string;\r\n public numComponents: number;\r\n public linkedProperties: { [name: string]: Property<PropertyType> } = {};\r\n public populateVectorFromLinkedProperties(vector: Vector4 | Vector3 | Vector2): void {\r\n const destinationSize = vector.dimension[0];\r\n for (const propKey in this.linkedProperties) {\r\n const prop = this.linkedProperties[propKey];\r\n const sourceSize = prop.numComponents;\r\n if (destinationSize < sourceSize || prop.targetUniformComponentOffset > destinationSize - sourceSize) {\r\n if (sourceSize == 1) {\r\n Logger.Error(`Float property ${prop.name} has an offset that is too large.`);\r\n } else {\r\n Logger.Error(`Vector${sourceSize} property ${prop.name} won't fit in Vector${destinationSize} or has an offset that is too large.`);\r\n }\r\n return;\r\n }\r\n if (typeof prop.value === \"number\") {\r\n Uniform._tmpArray[prop.targetUniformComponentOffset] = prop.value;\r\n } else {\r\n prop.value.toArray(Uniform._tmpArray, prop.targetUniformComponentOffset);\r\n }\r\n }\r\n vector.fromArray(Uniform._tmpArray);\r\n }\r\n public constructor(name: string, componentNum: number) {\r\n this.name = name;\r\n this.numComponents = componentNum;\r\n }\r\n private static _tmpArray: number[] = [0, 0, 0, 0];\r\n}\r\n\r\ntype PropertyType = Vector2 | Vector3 | Vector4 | number | Color3 | Color4;\r\n\r\n/**\r\n * Defines a property for the OpenPBRMaterial.\r\n */\r\nclass Property<T extends PropertyType> {\r\n public name: string;\r\n public targetUniformName: string;\r\n public defaultValue: T;\r\n public value: T;\r\n // public includeAlphaFromProp: string = \"\";\r\n\r\n /**\r\n * If not given a type, there will be no uniform defined for this property and\r\n * it will be assumed that the value will be packed into the already existing \"uniformName\" uniform.\r\n */\r\n public targetUniformComponentNum: number = 4; // Default to vec4\r\n public targetUniformComponentOffset: number = 0;\r\n\r\n /**\r\n * Creates a new Property instance.\r\n * @param name The name of the property in the shader\r\n * @param defaultValue The default value of the property\r\n * @param targetUniformName The name of the property in the shader uniform block\r\n * @param targetUniformComponentNum The number of components in the target uniform. All properties that are\r\n * packed into the same uniform must agree on the size of the target uniform.\r\n * @param targetUniformComponentOffset The offset in the uniform where this property will be packed.\r\n */\r\n constructor(name: string, defaultValue: T, targetUniformName: string, targetUniformComponentNum: number, targetUniformComponentOffset: number = 0) {\r\n this.name = name;\r\n this.targetUniformName = targetUniformName;\r\n this.defaultValue = defaultValue;\r\n this.value = defaultValue;\r\n this.targetUniformComponentNum = targetUniformComponentNum;\r\n this.targetUniformComponentOffset = targetUniformComponentOffset;\r\n }\r\n\r\n /**\r\n * Returns the number of components of the property based on its default value type.\r\n */\r\n public get numComponents(): number {\r\n if (typeof this.defaultValue === \"number\") {\r\n return 1;\r\n }\r\n return this.defaultValue.dimension[0];\r\n }\r\n}\r\n\r\nclass Sampler {\r\n public name: string;\r\n public value: Nullable<BaseTexture> = null; // Texture value, default to null\r\n public samplerPrefix: string = \"\"; // The name of the sampler in the shader\r\n public textureDefine: string = \"\"; // The define used in the shader for this sampler\r\n\r\n /**\r\n * The name of the sampler used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - samplerFragmentDeclaration.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerName(): string {\r\n return this.samplerPrefix + \"Sampler\";\r\n }\r\n /**\r\n * The name of the sampler info used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - openpbr.vertex.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerInfoName(): string {\r\n return \"v\" + this.samplerPrefix.charAt(0).toUpperCase() + this.samplerPrefix.slice(1) + \"Infos\";\r\n }\r\n /**\r\n * The name of the matrix used for this sampler in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - materialHelper.functions.BindTextureMatrix\r\n * - samplerVertexImplementation.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerMatrixName(): string {\r\n return this.samplerPrefix + \"Matrix\";\r\n }\r\n /**\r\n * Creates a new Sampler instance.\r\n * @param name The name of the texture property\r\n * @param samplerPrefix The prefix used for the name of the sampler in the shader\r\n * @param textureDefine The define used in the shader for this sampler\r\n */\r\n constructor(name: string, samplerPrefix: string, textureDefine: string) {\r\n this.name = name;\r\n this.samplerPrefix = samplerPrefix;\r\n this.textureDefine = textureDefine;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRMaterialDefinesBase) {\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public VERTEXCOLOR = false;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public VERTEXALPHA = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public LODBASEDMICROSFURACE = true;\r\n\r\n public METALLICWORKFLOW = true;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public SPECULAR_WEIGHT_IN_ALPHA = false;\r\n public SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = false;\r\n public SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public USE_GLTF_STYLE_ANISOTROPY = false;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public OBJECTSPACE_NORMALMAP = false;\r\n public PARALLAX = false;\r\n public PARALLAX_RHS = false;\r\n public PARALLAXOCCLUSION = false;\r\n public NORMALXYSCALE = true;\r\n public ANISOTROPIC = false; // Enables anisotropic logic. Still needed because it's used in pbrHelperFunctions\r\n public ANISOTROPIC_OPENPBR = true; // Tells the shader to use OpenPBR's anisotropic roughness remapping\r\n public ANISOTROPIC_BASE = false; // Tells the shader to apply anisotropy to the base layer\r\n public ANISOTROPIC_COAT = false; // Tells the shader to apply anisotropy to the coat layer\r\n\r\n public REFLECTION = false;\r\n public REFLECTIONMAP_3D = false;\r\n public REFLECTIONMAP_SPHERICAL = false;\r\n public REFLECTIONMAP_PLANAR = false;\r\n public REFLECTIONMAP_CUBIC = false;\r\n public USE_LOCAL_REFLECTIONMAP_CUBIC = false;\r\n public REFLECTIONMAP_PROJECTION = false;\r\n public REFLECTIONMAP_SKYBOX = false;\r\n public REFLECTIONMAP_EXPLICIT = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n public INVERTCUBICMAP = false;\r\n public USESPHERICALFROMREFLECTIONMAP = false;\r\n public USEIRRADIANCEMAP = false;\r\n public USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n public USESPHERICALINVERTEX = false;\r\n public REFLECTIONMAP_OPPOSITEZ = false;\r\n public LODINREFLECTIONALPHA = false;\r\n public GAMMAREFLECTION = false;\r\n public RGBDREFLECTION = false;\r\n public RADIANCEOCCLUSION = false;\r\n public HORIZONOCCLUSION = false;\r\n\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n public BONES_VELOCITY_ENABLED = false;\r\n\r\n public NONUNIFORMSCALING = false;\r\n\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_POSITION = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public MORPHTARGETS_UV2 = false;\r\n public MORPHTARGETS_COLOR = false;\r\n public MORPHTARGETTEXTURE_HASPOSITIONS = false;\r\n public MORPHTARGETTEXTURE_HASNORMALS = false;\r\n public MORPHTARGETTEXTURE_HASTANGENTS = false;\r\n public MORPHTARGETTEXTURE_HASUVS = false;\r\n public MORPHTARGETTEXTURE_HASUV2S = false;\r\n public MORPHTARGETTEXTURE_HASCOLORS = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n public USEPHYSICALLIGHTFALLOFF = false;\r\n public USEGLTFLIGHTFALLOFF = false;\r\n public TWOSIDEDLIGHTING = false;\r\n public MIRRORED = false;\r\n public SHADOWFLOAT = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public LOGARITHMICDEPTH = false;\r\n public CAMERA_ORTHOGRAPHIC = false;\r\n public CAMERA_PERSPECTIVE = false;\r\n public AREALIGHTSUPPORTED = true;\r\n\r\n public FORCENORMALFORWARD = false;\r\n\r\n public SPECULARAA = false;\r\n\r\n public UNLIT = false;\r\n\r\n public DECAL_AFTER_DETAIL = false;\r\n\r\n public DEBUGMODE = 0;\r\n\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n // BRDF defines\r\n BRDF_V_HEIGHT_CORRELATED = true;\r\n MS_BRDF_ENERGY_CONSERVATION = true;\r\n SPHERICAL_HARMONICS = true;\r\n SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true;\r\n MIX_IBL_RADIANCE_WITH_IRRADIANCE = true;\r\n LEGACY_SPECULAR_ENERGY_CONSERVATION = false;\r\n BASE_DIFFUSE_MODEL = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;\r\n DIELECTRIC_SPECULAR_MODEL = Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR;\r\n CONDUCTOR_SPECULAR_MODEL = Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR;\r\n\r\n /**\r\n * Initializes the PBR Material defines.\r\n * @param externalProperties The external properties\r\n */\r\n constructor(externalProperties?: { [name: string]: { type: string; default: any } }) {\r\n super(externalProperties);\r\n this.rebuild();\r\n }\r\n\r\n /**\r\n * Resets the PBR Material defines.\r\n */\r\n public override reset(): void {\r\n super.reset();\r\n this.ALPHATESTVALUE = \"0.5\";\r\n this.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * A Physically based material that follows the specification of OpenPBR.\r\n *\r\n * For more information, please refer to the documentation :\r\n * https://academysoftwarefoundation.github.io/OpenPBR/index.html\r\n */\r\nexport class OpenPBRMaterial extends OpenPBRMaterialBase {\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serialize()\r\n public baseWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeight: Property<number> = new Property<number>(\"base_weight\", 1, \"vBaseWeight\", 1);\r\n\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serializeAsTexture()\r\n public baseWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeightTexture: Sampler = new Sampler(\"base_weight\", \"baseWeight\", \"BASE_WEIGHT\");\r\n\r\n /**\r\n * Color of the base diffuse lobe.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsColor3()\r\n public baseColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColor: Property<Color3> = new Property<Color3>(\"base_color\", Color3.White(), \"vBaseColor\", 4);\r\n\r\n /**\r\n * Base Color Texture property.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsTexture()\r\n public baseColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColorTexture: Sampler = new Sampler(\"base_color\", \"baseColor\", \"BASE_COLOR\");\r\n\r\n /**\r\n * Roughness of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serialize()\r\n public baseDiffuseRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughness: Property<number> = new Property<number>(\"base_diffuse_roughness\", 0, \"vBaseDiffuseRoughness\", 1);\r\n\r\n /**\r\n * Roughness texture of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serializeAsTexture()\r\n public baseDiffuseRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughnessTexture: Sampler = new Sampler(\"base_diffuse_roughness\", \"baseDiffuseRoughness\", \"BASE_DIFFUSE_ROUGHNESS\");\r\n\r\n /**\r\n * Metalness of the base lobe.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serialize()\r\n public baseMetalness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalness: Property<number> = new Property<number>(\"base_metalness\", 0, \"vReflectanceInfo\", 4, 0);\r\n\r\n /**\r\n * Metalness texture.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serializeAsTexture()\r\n public baseMetalnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalnessTexture: Sampler = new Sampler(\"base_metalness\", \"baseMetalness\", \"BASE_METALNESS\");\r\n\r\n /**\r\n * Weight of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serialize()\r\n public specularWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeight: Property<number> = new Property<number>(\"specular_weight\", 1, \"vReflectanceInfo\", 4, 3);\r\n\r\n /**\r\n * Weight texture of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serializeAsTexture()\r\n public specularWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeightTexture: Sampler = new Sampler(\"specular_weight\", \"specularWeight\", \"SPECULAR_WEIGHT\");\r\n\r\n /**\r\n * Color of the specular lobe.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsColor3()\r\n public specularColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColor: Property<Color3> = new Property<Color3>(\"specular_color\", Color3.White(), \"vSpecularColor\", 4);\r\n\r\n /**\r\n * Specular Color Texture property.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsTexture()\r\n public specularColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColorTexture: Sampler = new Sampler(\"specular_color\", \"specularColor\", \"SPECULAR_COLOR\");\r\n\r\n /**\r\n * Roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serialize()\r\n public specularRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughness: Property<number> = new Property<number>(\"specular_roughness\", 0.3, \"vReflectanceInfo\", 4, 1);\r\n\r\n /**\r\n * Roughness texture of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessTexture: Sampler = new Sampler(\"specular_roughness\", \"specularRoughness\", \"SPECULAR_ROUGHNESS\");\r\n\r\n /**\r\n * Anisotropic roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness_anisotropy\r\n */\r\n @serialize()\r\n public specularRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropy: Property<number> = new Property<number>(\"specular_roughness_anisotropy\", 0, \"vSpecularAnisotropy\", 3, 2);\r\n\r\n /**\r\n * Anisotropic Roughness texture.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropyTexture: Sampler = new Sampler(\"specular_roughness_anisotropy\", \"specularRoughnessAnisotropy\", \"SPECULAR_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * IOR of the specular lobe.\r\n * See OpenPBR's specs for specular_ior\r\n */\r\n @serialize()\r\n public specularIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularIor: Property<number> = new Property<number>(\"specular_ior\", 1.5, \"vReflectanceInfo\", 4, 2);\r\n\r\n /**\r\n * Defines the amount of clear coat on the surface.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serialize()\r\n public coatWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeight: Property<number> = new Property<number>(\"coat_weight\", 0.0, \"vCoatWeight\", 1, 0);\r\n\r\n /**\r\n * Coat weight texture.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serializeAsTexture()\r\n public coatWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeightTexture: Sampler = new Sampler(\"coat_weight\", \"coatWeight\", \"COAT_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsColor3()\r\n public coatColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColor: Property<Color3> = new Property<Color3>(\"coat_color\", Color3.White(), \"vCoatColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the clear coat.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsTexture()\r\n public coatColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColorTexture: Sampler = new Sampler(\"coat_color\", \"coatColor\", \"COAT_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serialize()\r\n public coatRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughness: Property<number> = new Property<number>(\"coat_roughness\", 0.0, \"vCoatRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessTexture: Sampler = new Sampler(\"coat_roughness\", \"coatRoughness\", \"COAT_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the anisotropy of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serialize()\r\n public coatRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropy: Property<number> = new Property<number>(\"coat_roughness_anisotropy\", 0, \"vCoatRoughnessAnisotropy\", 1);\r\n\r\n /**\r\n * Anisotropic Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropyTexture: Sampler = new Sampler(\"coat_roughness_anisotropy\", \"coatRoughnessAnisotropy\", \"COAT_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * Defines the IOR of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_ior\r\n */\r\n @serialize()\r\n public coatIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatIor: Property<number> = new Property<number>(\"coat_ior\", 1.5, \"vCoatIor\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serialize()\r\n public coatDarkening: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkening\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkening: Property<number> = new Property<number>(\"coat_darkening\", 1.0, \"vCoatDarkening\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serializeAsTexture()\r\n public coatDarkeningTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkeningTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkeningTexture: Sampler = new Sampler(\"coat_darkening\", \"coatDarkening\", \"COAT_DARKENING\");\r\n\r\n /**\r\n * Specifies whether the coat roughness is taken from the\r\n * same texture as the coat_weight.\r\n */\r\n @serialize()\r\n public useCoatRoughnessFromWeightTexture: boolean = false;\r\n\r\n /**\r\n * Defines the normal of the material's geometry.\r\n * See OpenPBR's specs for geometry_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryNormalTexture: Sampler = new Sampler(\"geometry_normal\", \"geometryNormal\", \"GEOMETRY_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangent: Property<Vector2> = new Property<Vector2>(\"geometry_tangent\", new Vector2(1, 0), \"vSpecularAnisotropy\", 3, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public get geometryTangentAngle(): number {\r\n return Math.atan2(this.geometryTangent.y, this.geometryTangent.x);\r\n }\r\n\r\n public set geometryTangentAngle(value: number) {\r\n this.geometryTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangentTexture: Sampler = new Sampler(\"geometry_tangent\", \"geometryTangent\", \"GEOMETRY_TANGENT\");\r\n\r\n /**\r\n * Defines the normal of the material's coat layer.\r\n * See OpenPBR's specs for geometry_coat_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatNormalTexture: Sampler = new Sampler(\"geometry_coat_normal\", \"geometryCoatNormal\", \"GEOMETRY_COAT_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryCoatTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangent: Property<Vector2> = new Property<Vector2>(\"geometry_coat_tangent\", new Vector2(1, 0), \"vGeometryCoatTangent\", 2, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public get geometryCoatTangentAngle(): number {\r\n return Math.atan2(this.geometryCoatTangent.y, this.geometryCoatTangent.x);\r\n }\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public set geometryCoatTangentAngle(value: number) {\r\n this.geometryCoatTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangentTexture: Sampler = new Sampler(\"geometry_coat_tangent\", \"geometryCoatTangent\", \"GEOMETRY_COAT_TANGENT\");\r\n\r\n /**\r\n * Defines the opacity of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serialize()\r\n public geometryOpacity: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacity\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacity: Property<number> = new Property<number>(\"geometry_opacity\", 1.0, \"vBaseColor\", 4, 3);\r\n\r\n /**\r\n * Defines the opacity texture of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serializeAsTexture()\r\n public geometryOpacityTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacityTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacityTexture: Sampler = new Sampler(\"geometry_opacity\", \"geometryOpacity\", \"GEOMETRY_OPACITY\");\r\n\r\n /**\r\n * Defines the luminance of the material's emission.\r\n * See OpenPBR's specs for emission_luminance\r\n */\r\n @serialize()\r\n public emissionLuminance: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionLuminance\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionLuminance: Property<number> = new Property<number>(\"emission_luminance\", 1.0, \"vLightingIntensity\", 4, 1);\r\n\r\n /**\r\n * Defines the color of the material's emission.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsColor3()\r\n public emissionColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColor: Property<Color3> = new Property<Color3>(\"emission_color\", Color3.Black(), \"vEmissionColor\", 3);\r\n\r\n /**\r\n * Defines the texture of the material's emission color.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsTexture()\r\n public emissionColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColorTexture: Sampler = new Sampler(\"emission_color\", \"emissionColor\", \"EMISSION_COLOR\");\r\n\r\n /**\r\n * Defines the ambient occlusion texture.\r\n */\r\n @serializeAsTexture()\r\n public ambientOcclusionTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"ambientOcclusionTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _ambientOcclusionTexture: Sampler = new Sampler(\"ambient_occlusion\", \"ambientOcclusion\", \"AMBIENT_OCCLUSION\");\r\n\r\n private _propertyList: { [name: string]: Property<any> };\r\n private _uniformsList: { [name: string]: Uniform } = {};\r\n private _samplersList: { [name: string]: Sampler } = {};\r\n private _samplerDefines: { [name: string]: { type: string; default: any } } = {};\r\n\r\n private static _noiseTextures: { [id: number]: BaseTexture } = {};\r\n\r\n /**\r\n * Intensity of the direct lights e.g. the four lights available in your scene.\r\n * This impacts both the direct diffuse and specular highlights.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public directIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the environment e.g. how much the environment will light the object\r\n * either through harmonics for rough material or through the reflection for shiny ones.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * Specifies that the specular weight is stored in the alpha channel of the specular weight texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useSpecularWeightFromTextureAlpha = false;\r\n\r\n /**\r\n * Enforces alpha test in opaque or blend mode in order to improve the performances of some situations.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public forceAlphaTest = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public alphaCutOff = 0.4;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the ambient texture contains the ambient occlusion information in its red channel only.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientInGrayScale = false;\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n @serialize()\r\n public get usePhysicalLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_PHYSICAL;\r\n }\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n public set usePhysicalLightFalloff(value: boolean) {\r\n if (value !== this.usePhysicalLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n @serialize()\r\n public get useGLTFLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_GLTF;\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n public set useGLTFLightFalloff(value: boolean) {\r\n if (value !== this.useGLTFLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_GLTF;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting = false;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceIrradianceInFragment = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will invert (x = 1.0 - x).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will invert (y = 1.0 - y).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public twoSidedLighting = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Let user defines the brdf lookup texture used for IBL.\r\n * A default 8bit version is embedded but you could point at :\r\n * * Default texture: https://assets.babylonjs.com/environments/correlatedMSBRDF_RGBD.png\r\n * * Default 16bit pixel depth texture: https://assets.babylonjs.com/environments/correlatedMSBRDF.dds\r\n * * LEGACY Default None correlated https://assets.babylonjs.com/environments/uncorrelatedBRDF_RGBD.png\r\n * * LEGACY Default None correlated 16bit pixel depth https://assets.babylonjs.com/environments/uncorrelatedBRDF.dds\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force normal to face away from face.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the normalmap values.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRadianceOcclusion = true;\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public applyDecalMapAfterDetailMap = false;\r\n\r\n /**\r\n * Force all the PBR materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this.directIntensity, 1.0, this.environmentIntensity, 1.0);\r\n\r\n /**\r\n * Stores the radiance (and, possibly, irradiance) values in a texture.\r\n * @internal\r\n */\r\n public _radianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromAlpha = false;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel of the specular color texture.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromSpecularColorTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses anisotropy weight read from the geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's anisotropy extension.\r\n * @internal\r\n */\r\n public _useSpecularRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses coat anisotropy weight read from the coat's geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's clearcoat_anisotropy extension.\r\n * @internal\r\n */\r\n public _useCoatRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Assume the anisotropy data is stored in the format specified by\r\n * KHR_materials_anisotropy.\r\n * @internal\r\n */\r\n public _useGltfStyleAnisotropy = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n * @internal\r\n */\r\n public _useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n * @internal\r\n */\r\n public _useRadianceOcclusion = true;\r\n\r\n /**\r\n * Specifies that the alpha is coming from the base color texture's alpha channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAlphaFromBaseColorTexture = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallic information in its blue channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useMetallicFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Defines the falloff type used in this material.\r\n * It by default is Physical.\r\n * @internal\r\n */\r\n public _lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n * @internal\r\n */\r\n public _useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n * @internal\r\n */\r\n public _useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n * @internal\r\n */\r\n public _parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n * @internal\r\n */\r\n public _disableLighting = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n * @internal\r\n */\r\n public _maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will be inverted (x = 1.0 - x).\r\n * @internal\r\n */\r\n public _invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will be inverted (y = 1.0 - y).\r\n * @internal\r\n */\r\n public _invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n * @internal\r\n */\r\n public _twoSidedLighting = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n * @internal\r\n */\r\n public _alphaCutOff = 0.4;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n * @internal\r\n */\r\n public _useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n * @internal\r\n */\r\n public _useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness:\r\n * http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf\r\n * @internal\r\n */\r\n public _environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n * @internal\r\n */\r\n public _forceIrradianceInFragment = false;\r\n\r\n private _systemRealTimeFiltering: boolean | undefined = undefined;\r\n /* Realtime filtering system control */\r\n public get systemRealTimeFiltering() {\r\n return this._systemRealTimeFiltering;\r\n }\r\n public set systemRealTimeFiltering(value: boolean | undefined) {\r\n this._systemRealTimeFiltering = value;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n private _realTimeFiltering: boolean | undefined = undefined;\r\n /**\r\n * Enables realtime filtering on the texture.\r\n */\r\n public get realTimeFiltering() {\r\n return (this._realTimeFiltering ?? false) || !!this.systemRealTimeFiltering;\r\n }\r\n public set realTimeFiltering(b: boolean) {\r\n this._realTimeFiltering = b;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering setting is explicitly set by the user.\r\n */\r\n public get isUserSetRealTimeFiltering() {\r\n return typeof this._realTimeFiltering === \"boolean\";\r\n }\r\n\r\n private _realTimeFilteringQuality: number | undefined = undefined;\r\n /**\r\n * Quality switch for realtime filtering\r\n */\r\n public get realTimeFilteringQuality(): number {\r\n return this._realTimeFilteringQuality ?? Constants.TEXTURE_FILTERING_QUALITY_MIN;\r\n }\r\n public set realTimeFilteringQuality(n: number) {\r\n this._realTimeFilteringQuality = n;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering quality has been set by the user.\r\n */\r\n public get isUserSetRealTimeFilteringQuality() {\r\n return typeof this._realTimeFilteringQuality === \"number\";\r\n }\r\n\r\n /**\r\n * Can this material render to several textures at once\r\n */\r\n public override get canRenderToMRT() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Force normal to face away from face.\r\n * @internal\r\n */\r\n public _forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the normalmap values.\r\n * @internal\r\n */\r\n public _enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * Stores the available render targets.\r\n */\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n private _unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n private _applyDecalMapAfterDetailMap = false;\r\n\r\n private _debugMode = 0;\r\n\r\n private _shadersLoaded = false;\r\n private _breakShaderLoadedCheck = false;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Defines the material debug mode.\r\n * It helps seeing only some components of the material while troubleshooting.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public debugMode = 0;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Specify from where on screen the debug mode should start.\r\n * The value goes from -1 (full screen) to 1 (not visible)\r\n * It helps with side by side comparison against the final render\r\n * This defaults to -1\r\n */\r\n public debugLimit = -1;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * As the default viewing range might not be enough (if the ambient is really small for instance)\r\n * You can use the factor to better multiply the final value.\r\n */\r\n public debugFactor = 1;\r\n\r\n /**\r\n * Defines additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new OpenPBRMaterial instance.\r\n *\r\n * @param name The material name\r\n * @param scene The scene the material will be use in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL || OpenPBRMaterial.ForceGLSL);\r\n // TODO: Check if we're running WebGL 2.0 or above\r\n if (this.getScene() && !this.getScene()?.getEngine().isWebGPU && (this.getScene().getEngine() as Engine).webGLVersion < 2) {\r\n Logger.Error(\"OpenPBRMaterial: WebGL 2.0 or above is required for this material.\");\r\n }\r\n\r\n if (!OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]) {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId] = new Texture(\r\n \"https://assets.babylonjs.com/textures/blue_noise/blue_noise_rgb.png\",\r\n this.getScene(),\r\n false,\r\n true,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE\r\n );\r\n this.getScene().onDisposeObservable.addOnce(() => {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]?.dispose();\r\n delete OpenPBRMaterial._noiseTextures[this.getScene().uniqueId];\r\n });\r\n }\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled && this._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._radianceTexture);\r\n }\r\n\r\n this._eventInfo.renderTargets = this._renderTargets;\r\n this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._environmentBRDFTexture = GetEnvironmentBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n\r\n // Build the internal property list that can be used to generate and update the uniform buffer\r\n this._propertyList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Property) {\r\n this._propertyList[key] = value;\r\n }\r\n }\r\n // Build the internal uniforms list that is used for combining and updating\r\n // property values in the uniform buffer\r\n const propertyKeys = Object.keys(this._propertyList);\r\n propertyKeys.forEach((key) => {\r\n const prop = this._propertyList[key];\r\n let uniform = this._uniformsList[prop.targetUniformName];\r\n if (!uniform) {\r\n uniform = new Uniform(prop.targetUniformName, prop.targetUniformComponentNum);\r\n this._uniformsList[prop.targetUniformName] = uniform;\r\n } else if (uniform.numComponents !== prop.targetUniformComponentNum) {\r\n Logger.Error(`Uniform ${prop.targetUniformName} already exists of size ${uniform.numComponents}, but trying to set it to ${prop.targetUniformComponentNum}.`);\r\n }\r\n uniform.linkedProperties[prop.name] = prop;\r\n });\r\n\r\n // Build the internal list of samplers\r\n this._samplersList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Sampler) {\r\n this._samplersList[key] = value;\r\n }\r\n }\r\n\r\n // For each sampler in _samplersList, add defines to be added to OpenPBRMaterialDefines\r\n for (const samplerKey in this._samplersList) {\r\n const sampler = this._samplersList[samplerKey];\r\n const defineName = sampler.textureDefine;\r\n this._samplerDefines[defineName] = { type: \"boolean\", default: false };\r\n this._samplerDefines[defineName + \"DIRECTUV\"] = { type: \"number\", default: 0 };\r\n this._samplerDefines[defineName + \"_GAMMA\"] = { type: \"boolean\", default: false };\r\n }\r\n\r\n // Arg. Why do I have to add these references to get rid of the linting errors?\r\n this._baseWeight;\r\n this._baseWeightTexture;\r\n this._baseColor;\r\n this._baseColorTexture;\r\n this._baseDiffuseRoughness;\r\n this._baseDiffuseRoughnessTexture;\r\n this._baseMetalness;\r\n this._baseMetalnessTexture;\r\n this._specularWeight;\r\n this._specularWeightTexture;\r\n this._specularColor;\r\n this._specularColorTexture;\r\n this._specularRoughness;\r\n this._specularIor;\r\n this._specularRoughnessTexture;\r\n this._specularRoughnessAnisotropy;\r\n this._specularRoughnessAnisotropyTexture;\r\n this._coatWeight;\r\n this._coatWeightTexture;\r\n this._coatColor;\r\n this._coatColorTexture;\r\n this._coatRoughness;\r\n this._coatRoughnessTexture;\r\n this._coatRoughnessAnisotropy;\r\n this._coatRoughnessAnisotropyTexture;\r\n this._coatIor;\r\n this._coatDarkening;\r\n this._coatDarkeningTexture;\r\n this._geometryNormalTexture;\r\n this._geometryTangent;\r\n this._geometryTangentTexture;\r\n this._geometryCoatNormalTexture;\r\n this._geometryCoatTangent;\r\n this._geometryCoatTangentTexture;\r\n this._geometryOpacity;\r\n this._geometryOpacityTexture;\r\n this._emissionLuminance;\r\n this._emissionColor;\r\n this._emissionColorTexture;\r\n this._ambientOcclusionTexture;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.ReflectionTextureEnabled && this._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return this._cacheHasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public override get isPrePassCapable(): boolean {\r\n return !this.disableDepthWrite;\r\n }\r\n\r\n /**\r\n * @returns the name of the material class.\r\n */\r\n public override getClassName(): string {\r\n return \"OpenPBRMaterial\";\r\n }\r\n\r\n protected override _transparencyMode: number = Material.MATERIAL_OPAQUE;\r\n\r\n @serialize()\r\n public override get transparencyMode(): number {\r\n return this._transparencyMode;\r\n }\r\n\r\n public override set transparencyMode(value: number) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\r\n }\r\n\r\n /**\r\n * @returns whether or not the alpha value of the albedo texture should be used for alpha blending.\r\n */\r\n protected _shouldUseAlphaFromBaseColorTexture(): boolean {\r\n return this._hasAlphaChannel() && this._transparencyMode !== Material.MATERIAL_OPAQUE && !this.geometryOpacityTexture;\r\n }\r\n\r\n /**\r\n * @returns whether or not there is a usable alpha channel for transparency.\r\n */\r\n protected _hasAlphaChannel(): boolean {\r\n return (this.baseColorTexture != null && this.baseColorTexture.hasAlpha && this._useAlphaFromBaseColorTexture) || this.geometryOpacityTexture != null;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name - name to use for the new material.\r\n * @param cloneTexturesOnlyOnce - if a texture is used in more than one channel (e.g baseColor and opacity), only clone it once and reuse it on the other channels. Default false.\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns cloned material instance\r\n */\r\n public override clone(name: string, cloneTexturesOnlyOnce: boolean = true, rootUrl = \"\"): OpenPBRMaterial {\r\n const clone = SerializationHelper.Clone(() => new OpenPBRMaterial(name, this.getScene()), this, { cloneTexturesOnlyOnce });\r\n\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n this.stencil.copyTo(clone.stencil);\r\n\r\n this._clonePlugins(clone, rootUrl);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this PBR Material.\r\n * @returns - An object with the serialized material.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.OpenPBRMaterial\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Parses a PBR Material from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene - BJS scene instance.\r\n * @param rootUrl - url for the scene object\r\n * @returns - OpenPBRMaterial\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): OpenPBRMaterial {\r\n const material = SerializationHelper.Parse(() => new OpenPBRMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n if (source.stencil) {\r\n material.stencil.parse(source.stencil, scene, rootUrl);\r\n }\r\n\r\n Material._ParsePlugins(source, material, scene, rootUrl);\r\n\r\n return material;\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh - Define the mesh we want to force the compilation for\r\n * @param onCompiled - Define a callback triggered when the compilation completes\r\n * @param options - Define the options used to create the compilation\r\n */\r\n public override forceCompilation(mesh: AbstractMesh, onCompiled?: (material: Material) => void, options?: Partial<IMaterialCompilationOptions>): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n const checkReady = () => {\r\n if (this._breakShaderLoadedCheck) {\r\n return;\r\n }\r\n\r\n const defines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n const effect = this._prepareEffect(mesh, mesh, defines, undefined, undefined, localOptions.useInstances, localOptions.clipPlane)!;\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = null;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n if (effect.isReady()) {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n effect.onCompileObservable.add(() => {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n });\r\n }\r\n };\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param mesh - BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh. Used to check if it is ready.\r\n * @param useInstances - Specifies that instances should be used.\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n subMesh.materialDefines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n }\r\n\r\n const defines = <OpenPBRMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (defines._areTexturesDirty) {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n this._cacheHasRenderTargetTextures = this._eventInfo.hasRenderTargetTextures;\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers, check MaterialFlag and whether the texture is ready or not.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n if (!sampler.value.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n if (radianceTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!radianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (radianceTexture.irradianceTexture) {\r\n if (!radianceTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!radianceTexture.sphericalPolynomial && radianceTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (OpenPBRMaterial._noiseTextures[scene.uniqueId]) {\r\n if (!OpenPBRMaterial._noiseTextures[scene.uniqueId].isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n if (!this._eventInfo.isReadyForSubMesh) {\r\n return false;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (!engine.getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"OpenPBRMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n\r\n const previousEffect = subMesh.effect;\r\n const lightDisposed = defines._areLightsDisposed;\r\n let effect = this._prepareEffect(mesh, subMesh.getRenderingMesh(), defines, this.onCompiled, this.onError, useInstances, null);\r\n\r\n let forceWasNotReadyPreviously = false;\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n forceWasNotReadyPreviously = this.isFrozen;\r\n\r\n if (lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = forceWasNotReadyPreviously ? false : true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n const ubo = this._uniformBuffer;\r\n ubo.addUniform(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n ubo.addUniform(uniform.name, uniform.numComponents);\r\n });\r\n\r\n Object.values(this._samplersList).forEach((sampler) => {\r\n ubo.addUniform(sampler.samplerInfoName, 2);\r\n ubo.addUniform(sampler.samplerMatrixName, 16);\r\n });\r\n\r\n super.buildUniformLayout();\r\n }\r\n\r\n /**\r\n * Binds the submesh data.\r\n * @param world - The world matrix.\r\n * @param mesh - The BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh.\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <OpenPBRMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Binding unconditionally\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);\r\n\r\n MaterialHelperGeometryRendering.Bind(engine.currentRenderPassId, this._activeEffect, mesh, world, this);\r\n\r\n const camera = scene.activeCamera;\r\n if (camera) {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", camera.minZ, camera.maxZ, 0, 0);\r\n } else {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", 0, 0, 0, 0);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventHardBindForSubMesh(this._eventInfo);\r\n\r\n // Normal Matrix\r\n if (defines.OBJECTSPACE_NORMALMAP) {\r\n world.toNormalMatrix(this._normalMatrix);\r\n this.bindOnlyNormalMatrix(this._normalMatrix);\r\n }\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect, this.prePassConfiguration);\r\n\r\n let radianceTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n radianceTexture = this._getRadianceTexture();\r\n\r\n if (!ubo.useUbo || !this.isFrozen || !ubo.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and bind info and matrix for each texture.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.updateFloat2(sampler.samplerInfoName, sampler.value.coordinatesIndex, sampler.value.level);\r\n BindTextureMatrix(sampler.value, ubo, sampler.samplerPrefix);\r\n }\r\n }\r\n\r\n if (this.geometryNormalTexture) {\r\n if (scene._mirroredCameraPosition) {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? 1.0 : -1.0, this._invertNormalMapY ? 1.0 : -1.0);\r\n } else {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? -1.0 : 1.0, this._invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n BindIBLParameters(scene, defines, ubo, Color3.White(), radianceTexture, this.realTimeFiltering, true, true, true, true, true);\r\n }\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n ubo.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n // If the property actually defines a uniform, update it.\r\n if (uniform.numComponents === 4) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector4[0]);\r\n ubo.updateVector4(uniform.name, TmpVectors.Vector4[0]);\r\n } else if (uniform.numComponents === 3) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector3[0]);\r\n ubo.updateVector3(uniform.name, TmpVectors.Vector3[0]);\r\n } else if (uniform.numComponents === 2) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector2[0]);\r\n ubo.updateFloat2(uniform.name, TmpVectors.Vector2[0].x, TmpVectors.Vector2[0].y);\r\n } else if (uniform.numComponents === 1) {\r\n ubo.updateFloat(uniform.name, uniform.linkedProperties[Object.keys(uniform.linkedProperties)[0]].value as number);\r\n }\r\n });\r\n\r\n // Misc\r\n this._lightingInfos.x = this.directIntensity;\r\n this._lightingInfos.y = this.emissionLuminance;\r\n this._lightingInfos.z = this.environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = 1.0; // This is used to be _specularIntensity.\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\r\n\r\n ubo.updateFloat2(\"vDebugMode\", this.debugLimit, this.debugFactor);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and set textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.setTexture(sampler.samplerName, sampler.value);\r\n }\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, radianceTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (defines.ANISOTROPIC) {\r\n ubo.setTexture(\"blueNoiseSampler\", OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]);\r\n }\r\n }\r\n\r\n // OIT with depth peeling\r\n if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {\r\n this.getScene().depthPeelingRenderer!.bind(effect);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n this.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n // Lights\r\n if (scene.lightsEnabled && !this._disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || radianceTexture || mesh.receiveShadows || defines.PREPASS) {\r\n this.bindView(effect);\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Morph targets\r\n if (defines.NUM_MORPH_INFLUENCERS) {\r\n BindMorphTargetParameters(mesh, this._activeEffect);\r\n }\r\n\r\n if (defines.BAKED_VERTEX_ANIMATION_TEXTURE) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, defines.INSTANCES);\r\n }\r\n\r\n // image processing\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n\r\n // Log. depth\r\n BindLogDepth(defines, this._activeEffect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n ubo.update();\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * If material have animatable metallic texture, then reflectivity texture will not be returned, even if it has animations.\r\n * @returns - Array of animatable textures.\r\n */\r\n public override getAnimatables(): IAnimatable[] {\r\n const results = super.getAnimatables();\r\n\r\n // Loop through samplers and push animated textures to list.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value && sampler.value.animations && sampler.value.animations.length > 0) {\r\n results.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture && this._radianceTexture.animations && this._radianceTexture.animations.length > 0) {\r\n results.push(this._radianceTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @returns - Array of BaseTextures\r\n */\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n // Loop through samplers and push active textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n activeTextures.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture) {\r\n activeTextures.push(this._radianceTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n // Loop through samplers and check each texture for equality\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this._radianceTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * It can't be sets when subsurface scattering of this material is disabled.\r\n * When scene have ability to enable subsurface prepass effect, it will enable.\r\n * @returns - If prepass is enabled or not.\r\n */\r\n public override setPrePassRenderer(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeEffect - Forces the disposal of effects.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean): void {\r\n this._breakShaderLoadedCheck = true;\r\n if (forceDisposeTextures) {\r\n if (this._environmentBRDFTexture && this.getScene().environmentBRDFTexture !== this._environmentBRDFTexture) {\r\n this._environmentBRDFTexture.dispose();\r\n }\r\n\r\n // Loop through samplers and dispose the textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n sampler.value?.dispose();\r\n }\r\n\r\n this._radianceTexture?.dispose();\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n\r\n /**\r\n * Returns the texture used for reflections.\r\n * @returns - Reflection texture if present. Otherwise, returns the environment texture.\r\n */\r\n private _getRadianceTexture(): Nullable<BaseTexture> {\r\n if (this._radianceTexture) {\r\n return this._radianceTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\r\n onCompiled: Nullable<(effect: Effect) => void> = null,\r\n onError: Nullable<(effect: Effect, errors: string) => void> = null,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): Nullable<Effect> {\r\n this._prepareDefines(mesh, renderingMesh, defines, useInstances, useClipPlane);\r\n\r\n if (!defines.isDirty) {\r\n return null;\r\n }\r\n\r\n defines.markAsProcessed();\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n let fallbackRank = 0;\r\n if (defines.USESPHERICALINVERTEX) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALINVERTEX\");\r\n }\r\n\r\n if (defines.FOG) {\r\n fallbacks.addFallback(fallbackRank, \"FOG\");\r\n }\r\n if (defines.SPECULARAA) {\r\n fallbacks.addFallback(fallbackRank, \"SPECULARAA\");\r\n }\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(fallbackRank, \"POINTSIZE\");\r\n }\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(fallbackRank, \"LOGARITHMICDEPTH\");\r\n }\r\n if (defines.PARALLAX) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX\");\r\n }\r\n if (defines.PARALLAX_RHS) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX_RHS\");\r\n }\r\n if (defines.PARALLAXOCCLUSION) {\r\n fallbacks.addFallback(fallbackRank++, \"PARALLAXOCCLUSION\");\r\n }\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n fallbacks.addFallback(fallbackRank++, \"ENVIRONMENTBRDF\");\r\n }\r\n\r\n if (defines.TANGENT) {\r\n fallbacks.addFallback(fallbackRank++, \"TANGENT\");\r\n }\r\n\r\n fallbackRank = HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights, fallbackRank++);\r\n\r\n if (defines.SPECULARTERM) {\r\n fallbacks.addFallback(fallbackRank++, \"SPECULARTERM\");\r\n }\r\n\r\n if (defines.USESPHERICALFROMREFLECTIONMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALFROMREFLECTIONMAP\");\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USEIRRADIANCEMAP\");\r\n }\r\n\r\n if (defines.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n fallbacks.addFallback(fallbackRank++, \"VERTEXCOLOR\");\r\n }\r\n\r\n if (defines.MORPHTARGETS) {\r\n fallbacks.addFallback(fallbackRank++, \"MORPHTARGETS\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n if (defines[\"UV\" + i]) {\r\n attribs.push(`uv${i === 1 ? \"\" : i}`);\r\n }\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n PrepareAttributesForMorphTargets(attribs, mesh, defines);\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n\r\n let shaderName = \"openpbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"normalMatrix\",\r\n \"vLightingIntensity\",\r\n \"logarithmicDepthConstant\",\r\n \"vTangentSpaceParams\",\r\n \"boneTextureWidth\",\r\n \"vDebugMode\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"cameraInfo\",\r\n ];\r\n\r\n for (const uniformName in this._uniformsList) {\r\n uniforms.push(uniformName);\r\n }\r\n\r\n const samplers = [\r\n \"environmentBrdfSampler\",\r\n \"blueNoiseSampler\",\r\n \"boneSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n samplers.push(sampler.samplerName);\r\n\r\n // Push uniforms for texture infos and matrix\r\n uniforms.push(sampler.samplerInfoName);\r\n uniforms.push(sampler.samplerMatrixName);\r\n }\r\n\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, true);\r\n\r\n const uniformBuffers = [\"Material\", \"Scene\", \"Mesh\"];\r\n\r\n const indexParameters = { maxSimultaneousLights: this._maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS };\r\n\r\n this._eventInfo.fallbacks = fallbacks;\r\n this._eventInfo.fallbackRank = fallbackRank;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.uniforms = uniforms;\r\n this._eventInfo.attributes = attribs;\r\n this._eventInfo.samplers = samplers;\r\n this._eventInfo.uniformBuffersNames = uniformBuffers;\r\n this._eventInfo.customCode = undefined;\r\n this._eventInfo.mesh = mesh;\r\n this._eventInfo.indexParameters = indexParameters;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareEffect, this._eventInfo);\r\n\r\n MaterialHelperGeometryRendering.AddUniformsAndSamplers(uniforms, samplers);\r\n\r\n PrePassConfiguration.AddUniforms(uniforms);\r\n PrePassConfiguration.AddSamplers(samplers);\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const csnrOptions: ICustomShaderNameResolveOptions = {};\r\n\r\n if (this.customShaderNameResolve) {\r\n shaderName = this.customShaderNameResolve(shaderName, uniforms, uniformBuffers, samplers, defines, attribs, csnrOptions);\r\n }\r\n\r\n const join = defines.toString();\r\n const effect = engine.createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: onCompiled,\r\n onError: onError,\r\n indexParameters,\r\n processFinalCode: csnrOptions.processFinalCode,\r\n processCodeAfterIncludes: this._eventInfo.customCode,\r\n multiTarget: defines.PREPASS,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/openpbr.vertex\"), import(\"../../ShadersWGSL/openpbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/openpbr.vertex\"), import(\"../../Shaders/openpbr.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n\r\n this._eventInfo.customCode = undefined;\r\n\r\n return effect;\r\n }\r\n\r\n private _prepareDefines(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): void {\r\n const useThinInstances = renderingMesh.hasThinInstances;\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // PrePass\r\n const oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;\r\n PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);\r\n\r\n // Order independant transparency\r\n PrepareDefinesForOIT(scene, defines, oit);\r\n\r\n MaterialHelperGeometryRendering.PrepareDefines(engine.currentRenderPassId, mesh, defines);\r\n\r\n // Textures\r\n defines.METALLICWORKFLOW = true;\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"MAINUV\" + i] = false;\r\n }\r\n if (scene.texturesEnabled) {\r\n // Loop through samplers and prepare defines for each texture\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n PrepareDefinesForMergedUV(sampler.value, defines, sampler.textureDefine);\r\n defines[sampler.textureDefine + \"_GAMMA\"] = sampler.value.gammaSpace;\r\n } else {\r\n defines[sampler.textureDefine] = false;\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n const useSHInFragment: boolean =\r\n this._forceIrradianceInFragment ||\r\n this.realTimeFiltering ||\r\n this._twoSidedLighting ||\r\n engine.getCaps().maxVaryingVectors <= 8 ||\r\n this._baseDiffuseRoughnessTexture != null;\r\n PrepareDefinesForIBL(scene, radianceTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._baseMetalnessTexture) {\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n }\r\n\r\n defines.SPECULAR_WEIGHT_IN_ALPHA = this._useSpecularWeightFromAlpha;\r\n defines.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = this._useSpecularWeightFromSpecularColorTexture;\r\n defines.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useSpecularRoughnessAnisotropyFromTangentTexture;\r\n defines.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useCoatRoughnessAnisotropyFromTangentTexture;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallicFromMetallicTextureBlue;\r\n\r\n if (this.geometryNormalTexture) {\r\n if (this._useParallax && this.baseColorTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n defines.PARALLAX = true;\r\n defines.PARALLAX_RHS = scene.useRightHandedSystem;\r\n defines.PARALLAXOCCLUSION = !!this._useParallaxOcclusion;\r\n } else {\r\n defines.PARALLAX = false;\r\n }\r\n defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\r\n defines.PARALLAX = false;\r\n defines.PARALLAX_RHS = false;\r\n defines.PARALLAXOCCLUSION = false;\r\n defines.OBJECTSPACE_NORMALMAP = false;\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n defines.ENVIRONMENTBRDF = true;\r\n defines.ENVIRONMENTBRDF_RGBD = this._environmentBRDFTexture.isRGBD;\r\n } else {\r\n defines.ENVIRONMENTBRDF = false;\r\n defines.ENVIRONMENTBRDF_RGBD = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromBaseColorTexture()) {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = true;\r\n } else {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n }\r\n }\r\n\r\n if (this._lightFalloff === Material.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === Material.LIGHTFALLOFF_GLTF) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = true;\r\n } else {\r\n defines.USEPHYSICALLIGHTFALLOFF = true;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n }\r\n\r\n if (!this.backFaceCulling && this._twoSidedLighting) {\r\n defines.TWOSIDEDLIGHTING = true;\r\n } else {\r\n defines.TWOSIDEDLIGHTING = false;\r\n }\r\n\r\n // We need it to not invert normals in two sided lighting mode (based on the winding of the face)\r\n defines.MIRRORED = !!scene._mirroredCameraPosition;\r\n\r\n defines.SPECULARAA = engine.getCaps().standardDerivatives && this._enableSpecularAntiAliasing;\r\n }\r\n\r\n if (defines._areTexturesDirty || defines._areMiscDirty) {\r\n defines.ALPHATESTVALUE = `${this._alphaCutOff}${this._alphaCutOff % 1 === 0 ? \".\" : \"\"}`;\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.ALPHABLEND = this.needAlphaBlendingForMesh(mesh);\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n defines.FORCENORMALFORWARD = this._forceNormalForward;\r\n\r\n defines.RADIANCEOCCLUSION = this._useRadianceOcclusion;\r\n\r\n defines.HORIZONOCCLUSION = this._useHorizonOcclusion;\r\n\r\n if (\r\n (this.specularRoughnessAnisotropy > 0.0 || this.coatRoughnessAnisotropy > 0.0) &&\r\n OpenPBRMaterial._noiseTextures[scene.uniqueId] &&\r\n MaterialFlags.ReflectionTextureEnabled\r\n ) {\r\n // ANISOTROPIC is used to include common shader functions needed for anisotropy\r\n // ANISOTROPIC_BASE is used to process anisotropy for the base layer\r\n // ANISOTROPIC_COAT is used to process anisotropy for the coat layer\r\n defines.ANISOTROPIC = true;\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n if (this._useGltfStyleAnisotropy) {\r\n defines.USE_GLTF_STYLE_ANISOTROPY = true;\r\n }\r\n defines.ANISOTROPIC_BASE = this.specularRoughnessAnisotropy > 0.0;\r\n defines.ANISOTROPIC_COAT = this.coatRoughnessAnisotropy > 0.0;\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.USE_GLTF_STYLE_ANISOTROPY = false;\r\n defines.ANISOTROPIC_BASE = false;\r\n defines.ANISOTROPIC_COAT = false;\r\n }\r\n\r\n // Misc.\r\n if (defines._areMiscDirty) {\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n this._applyDecalMapAfterDetailMap,\r\n this._useVertexPulling,\r\n renderingMesh,\r\n this._setVertexOutputInvariant\r\n );\r\n defines.UNLIT = this._unlit || ((this.pointsCloud || this.wireframe) && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n defines.DEBUGMODE = this._debugMode;\r\n }\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false, useClipPlane, useThinInstances);\r\n\r\n // External config\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.mesh = mesh;\r\n this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, true, true, true, this._transparencyMode !== Material.MATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.OpenPBRMaterial\", OpenPBRMaterial);\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onerjs/core",
3
- "version": "8.27.10",
3
+ "version": "8.27.12",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",