UNPKG

@babylonjs/core

Version:

Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.

887 lines (886 loc) 274 kB
/** This file must only contain pure code and pure imports */ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers } from "../../tslib.es6.js"; /* eslint-disable @typescript-eslint/naming-convention */ import { serialize, expandToProperty, addAccessorsForMaterialProperty } from "../../Misc/decorators.js"; import { GetEnvironmentFuzzBRDFTexture, GetOpenPBREnvironmentBRDFTexture } from "../../Misc/brdfTextureTools.js"; import { Color3, Color4 } from "../../Maths/math.color.pure.js"; import { ImageProcessingConfiguration, RegisterImageProcessingConfiguration } from "../imageProcessingConfiguration.pure.js"; import { Texture } from "../Textures/texture.pure.js"; import { Material } from "../material.pure.js"; import { SerializationHelper } from "../../Misc/decorators.serialization.js"; import { MaterialDefines } from "../materialDefines.js"; import { ImageProcessingDefinesMixin } from "../imageProcessingConfiguration.defines.js"; import { EffectFallbacks } from "../effectFallbacks.js"; import { AddClipPlaneUniforms, BindClipPlane } from "../clipPlaneMaterialHelper.js"; import { PrepareVertexPullingUniforms, BindVertexPullingUniforms } from "../vertexPullingHelper.functions.js"; import { BindBonesParameters, BindFogParameters, BindLights, BindLogDepth, BindMorphTargetParameters, BindTextureMatrix, BindIBLParameters, BindIBLSamplers, HandleFallbacksForShadows, PrepareAttributesForBakedVertexAnimation, PrepareAttributesForBones, PrepareAttributesForInstances, PrepareAttributesForMorphTargets, PrepareDefinesForAttributes, PrepareDefinesForFrameBoundValues, PrepareDefinesForLights, PrepareDefinesForIBL, PrepareDefinesForMergedUV, PrepareDefinesForMisc, PrepareDefinesForMultiview, PrepareDefinesForOIT, PrepareDefinesForPrePass, PrepareUniformsAndSamplersList, PrepareUniformsAndSamplersForIBL, PrepareUniformLayoutForIBL, AreLightsTexturesReady, } from "../materialHelper.functions.js"; import { VertexBuffer } from "../../Buffers/buffer.pure.js"; import { MaterialHelperGeometryRendering } from "../materialHelper.geometryrendering.js"; import { PrePassConfiguration } from "../prePassConfiguration.js"; import { MaterialFlags } from "../materialFlags.js"; import { Logger } from "../../Misc/logger.js"; import { UVDefinesMixin } from "../uv.defines.js"; import { PrepassDefinesMixin } from "../prepass.defines.js"; import { EnvironmentLightingDefinesMixin } from "../environmentLighting.defines.js"; import { Vector2, Vector3, Vector4, TmpVectors } from "../../Maths/math.vector.pure.js"; import { ImageProcessingMixin } from "../imageProcessing.js"; import { PushMaterial } from "../pushMaterial.js"; import { SmartArray } from "../../Misc/smartArray.js"; import { Tools } from "../../Misc/tools.pure.js"; import { GeometryBufferRenderer } from "../../Rendering/geometryBufferRenderer.pure.js"; import { RegisterClass } from "../../Misc/typeStore.js"; const onCreatedEffectParameters = { effect: null, subMesh: null }; function _GetComponentCount(value) { if (typeof value === "number") { return 1; } if (value instanceof Vector2) { return 2; } if (value instanceof Vector3 || value instanceof Color3) { return 3; } if (value instanceof Vector4 || value instanceof Color4) { return 4; } throw new Error("Unsupported OpenPBR property type."); } class Uniform { populateVectorFromLinkedProperties(vector) { const destinationSize = _GetComponentCount(vector); for (const propKey in this.linkedProperties) { const prop = this.linkedProperties[propKey]; const sourceSize = prop.numComponents; if (destinationSize < sourceSize || prop.targetUniformComponentOffset > destinationSize - sourceSize) { if (sourceSize == 1) { Logger.Error(`Float property ${prop.name} has an offset that is too large.`); } else { Logger.Error(`Vector${sourceSize} property ${prop.name} won't fit in Vector${destinationSize} or has an offset that is too large.`); } return; } if (typeof prop.value === "number") { Uniform._tmpArray[prop.targetUniformComponentOffset] = prop.value; } else { prop.value.toArray(Uniform._tmpArray, prop.targetUniformComponentOffset); } } vector.fromArray(Uniform._tmpArray); } constructor(name, componentNum) { this.linkedProperties = {}; /** * Cached key of the first entry of `linkedProperties`, set when the first * property is linked. Used by the per-frame bind loop to avoid an * `Object.keys(linkedProperties)[0]` allocation when reading scalar * uniforms. */ this.firstLinkedKey = ""; this.name = name; this.numComponents = componentNum; } } Uniform._tmpArray = [0, 0, 0, 0]; /** * Defines a property for the OpenPBRMaterial. */ class Property { /** * Creates a new Property instance. * @param name The name of the property in the shader * @param defaultValue The default value of the property * @param targetUniformName The name of the property in the shader uniform block * @param targetUniformComponentNum The number of components in the target uniform. All properties that are * packed into the same uniform must agree on the size of the target uniform. * @param targetUniformComponentOffset The offset in the uniform where this property will be packed. * @param requiredDefine Optional define name. When provided, the per-frame * bind loop will skip pushing the owning uniform to the UBO unless * `defines[requiredDefine]` is true. */ constructor(name, defaultValue, targetUniformName, targetUniformComponentNum, targetUniformComponentOffset = 0, requiredDefine) { // public includeAlphaFromProp: string = ""; /** * If not given a type, there will be no uniform defined for this property and * it will be assumed that the value will be packed into the already existing "uniformName" uniform. */ this.targetUniformComponentNum = 4; // Default to vec4 this.targetUniformComponentOffset = 0; this.name = name; this.targetUniformName = targetUniformName; this.defaultValue = defaultValue; this.value = defaultValue; this.targetUniformComponentNum = targetUniformComponentNum; this.targetUniformComponentOffset = targetUniformComponentOffset; this.requiredDefine = requiredDefine; } /** * Returns the number of components of the property based on its default value type. */ get numComponents() { if (typeof this.defaultValue === "number") { return 1; } return _GetComponentCount(this.defaultValue); } } class Sampler { /** * The name of the sampler used in the shader. * If this naming changes, we'll also need to change: * - samplerFragmentDeclaration.fx * - openpbr.fragment.fx */ get samplerName() { return this.samplerPrefix + "Sampler"; } /** * The name of the sampler info used in the shader. * If this naming changes, we'll also need to change: * - openpbr.vertex.fx * - openpbr.fragment.fx */ get samplerInfoName() { return "v" + this.samplerPrefix.charAt(0).toUpperCase() + this.samplerPrefix.slice(1) + "Infos"; } /** * The name of the matrix used for this sampler in the shader. * If this naming changes, we'll also need to change: * - materialHelper.functions.BindTextureMatrix * - samplerVertexImplementation.fx * - openpbr.fragment.fx */ get samplerMatrixName() { return this.samplerPrefix + "Matrix"; } /** * Creates a new Sampler instance. * @param name The name of the texture property * @param samplerPrefix The prefix used for the name of the sampler in the shader * @param textureDefine The define used in the shader for this sampler */ constructor(name, samplerPrefix, textureDefine) { this.value = null; // Texture value, default to null this.samplerPrefix = ""; // The name of the sampler in the shader this.textureDefine = ""; // The define used in the shader for this sampler this.name = name; this.samplerPrefix = samplerPrefix; this.textureDefine = textureDefine; } } class OpenPBRMaterialDefinesBase extends PrepassDefinesMixin(UVDefinesMixin(MaterialDefines)) { } class OpenPBRMaterialDefinesWithEnvLighting extends EnvironmentLightingDefinesMixin(OpenPBRMaterialDefinesBase) { } /** * Manages the defines for the PBR Material. * @internal */ export class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRMaterialDefinesWithEnvLighting) { /** * Initializes the PBR Material defines. * @param externalProperties The external properties */ constructor(externalProperties) { super(externalProperties); this.NUM_SAMPLES = "0"; this.REALTIME_FILTERING = false; this.IBL_CDF_FILTERING = false; this.LIGHTCOUNT = 0; this.VERTEXCOLOR = false; this.BAKED_VERTEX_ANIMATION_TEXTURE = false; this.VERTEXALPHA = false; this.ALPHATEST = false; this.DEPTHPREPASS = false; this.ALPHABLEND = false; this.ALPHA_FROM_BASE_COLOR_TEXTURE = false; this.ALPHATESTVALUE = "0.5"; this.PREMULTIPLYALPHA = false; this.REFLECTIVITY_GAMMA = false; this.REFLECTIVITYDIRECTUV = 0; this.SPECULARTERM = false; this.LODBASEDMICROSFURACE = true; this.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN = false; this.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE = false; this.AOSTOREINMETALMAPRED = false; this.SPECULAR_WEIGHT_IN_ALPHA = false; this.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = false; this.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false; this.COAT_ROUGHNESS_FROM_GREEN_CHANNEL = false; this.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false; this.USE_GLTF_STYLE_ANISOTROPY = false; this.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = false; this.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA = false; this.SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA = false; this.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL = false; this.ENVIRONMENTBRDF = false; this.ENVIRONMENTBRDF_RGBD = false; this.FUZZENVIRONMENTBRDF = false; this.NORMAL = false; this.TANGENT = false; this.OBJECTSPACE_NORMALMAP = false; this.PARALLAX = false; this.PARALLAX_RHS = false; this.PARALLAXOCCLUSION = false; this.NORMALXYSCALE = true; /** * Enables anisotropic logic. Still needed because it's used in pbrHelperFunctions */ this.ANISOTROPIC = false; /** * Tells the shader to use OpenPBR's anisotropic roughness remapping */ this.ANISOTROPIC_OPENPBR = true; /** * Tells the shader to apply anisotropy to the base layer */ this.ANISOTROPIC_BASE = false; /** * Tells the shader to apply anisotropy to the coat layer */ this.ANISOTROPIC_COAT = false; /** * Number of samples to use for the fuzz IBL lighting calculations */ this.FUZZ_IBL_SAMPLES = 6; /** * Enables the 4-tap rotated-grid kernel for refractive background blur. * When false, a single dithered sample is used instead. */ this.REFRACTION_HIGH_QUALITY_BLUR = false; /** * Tells the shader to enable the fuzz layer */ this.FUZZ = false; /** * Tells the shader to enable the thin film layer */ this.THIN_FILM = false; /** * Tells the shader to enable the legacy iridescence code * Iridescence is the name of thin film interference in the PBR material. */ this.IRIDESCENCE = false; /** * Tells the shader to enable dispersion in refraction */ this.DISPERSION = false; /** * Enables subsurface scattering */ this.SCATTERING = false; /** * Enables the use of screen-space irradiance texture for scattering */ this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING = false; /** * Number of samples used by the screen-space SSS convolution kernel. */ this.SSS_SAMPLE_COUNT = 16; /** * Indicates that the irradiance texture is from the legacy GeometryBufferRenderer. * We use this to handle direct lights which don't render in the legacy GBuffer irradiance. */ this.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING_GBUFFER = false; /** * Enables transmission slab */ this.TRANSMISSION_SLAB = false; /** * Enables transmission slab with volume */ this.TRANSMISSION_SLAB_VOLUME = false; /** * Enables subsurface slab */ this.SUBSURFACE_SLAB = false; /** * Enables thin-walled geometry */ this.GEOMETRY_THIN_WALLED = false; /** * Refraction of the 2D background texture. Might include the rest of the scene or just the background. */ this.REFRACTED_BACKGROUND = false; /** * Refraction of direct lights. */ this.REFRACTED_LIGHTS = false; /** * Refraction of the environment texture (IBL). */ this.REFRACTED_ENVIRONMENT = false; this.REFRACTED_ENVIRONMENT_OPPOSITEZ = false; this.REFRACTED_ENVIRONMENT_LOCAL_CUBE = false; this.RADIANCEOCCLUSION = false; this.HORIZONOCCLUSION = false; this.INSTANCES = false; this.THIN_INSTANCES = false; this.INSTANCESCOLOR = false; this.NUM_BONE_INFLUENCERS = 0; this.BonesPerMesh = 0; this.BONETEXTURE = false; this.BONES_VELOCITY_ENABLED = false; this.NONUNIFORMSCALING = false; this.MORPHTARGETS = false; this.MORPHTARGETS_POSITION = false; this.MORPHTARGETS_NORMAL = false; this.MORPHTARGETS_TANGENT = false; this.MORPHTARGETS_UV = false; this.MORPHTARGETS_UV2 = false; this.MORPHTARGETS_COLOR = false; this.MORPHTARGETTEXTURE_HASPOSITIONS = false; this.MORPHTARGETTEXTURE_HASNORMALS = false; this.MORPHTARGETTEXTURE_HASTANGENTS = false; this.MORPHTARGETTEXTURE_HASUVS = false; this.MORPHTARGETTEXTURE_HASUV2S = false; this.MORPHTARGETTEXTURE_HASCOLORS = false; this.NUM_MORPH_INFLUENCERS = 0; this.MORPHTARGETS_TEXTURE = false; this.USEPHYSICALLIGHTFALLOFF = false; this.USEGLTFLIGHTFALLOFF = false; this.TWOSIDEDLIGHTING = false; this.MIRRORED = false; this.SHADOWFLOAT = false; this.CLIPPLANE = false; this.CLIPPLANE2 = false; this.CLIPPLANE3 = false; this.CLIPPLANE4 = false; this.CLIPPLANE5 = false; this.CLIPPLANE6 = false; this.POINTSIZE = false; this.FOG = false; this.LOGARITHMICDEPTH = false; this.CAMERA_ORTHOGRAPHIC = false; this.CAMERA_PERSPECTIVE = false; this.AREALIGHTSUPPORTED = true; this.FORCENORMALFORWARD = false; this.SPECULARAA = false; this.UNLIT = false; this.DECAL_AFTER_DETAIL = false; this.TEXTURE_REPETITION_MODE = 0; this.DEBUGMODE = 0; this.USE_VERTEX_PULLING = false; this.VERTEX_PULLING_USE_INDEX_BUFFER = false; this.VERTEX_PULLING_INDEX_BUFFER_32BITS = false; this.RIGHT_HANDED = false; this.CLUSTLIGHT_SLICES = 0; this.CLUSTLIGHT_BATCH = 0; // BRDF defines this.BRDF_V_HEIGHT_CORRELATED = true; this.MS_BRDF_ENERGY_CONSERVATION = true; this.SPHERICAL_HARMONICS = true; this.SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true; this.MIX_IBL_RADIANCE_WITH_IRRADIANCE = true; this.LEGACY_SPECULAR_ENERGY_CONSERVATION = false; this.BASE_DIFFUSE_MODEL = 0; this.DIELECTRIC_SPECULAR_MODEL = 1; this.CONDUCTOR_SPECULAR_MODEL = 1; this.rebuild(); } /** * Resets the PBR Material defines. */ reset() { super.reset(); this.ALPHATESTVALUE = "0.5"; this.NORMALXYSCALE = true; } } class OpenPBRMaterialBase extends ImageProcessingMixin(PushMaterial) { } /** * A Physically based material that follows the specification of OpenPBR. * * For more information, please refer to the documentation : * https://academysoftwarefoundation.github.io/OpenPBR/index.html */ let OpenPBRMaterial = (() => { var _a, _OpenPBRMaterial_baseWeight_accessor_storage, _OpenPBRMaterial_baseWeightTexture_accessor_storage, _OpenPBRMaterial_baseColor_accessor_storage, _OpenPBRMaterial_baseColorTexture_accessor_storage, _OpenPBRMaterial_baseDiffuseRoughness_accessor_storage, _OpenPBRMaterial_baseDiffuseRoughnessTexture_accessor_storage, _OpenPBRMaterial_baseMetalness_accessor_storage, _OpenPBRMaterial_baseMetalnessTexture_accessor_storage, _OpenPBRMaterial_specularWeight_accessor_storage, _OpenPBRMaterial_specularWeightTexture_accessor_storage, _OpenPBRMaterial_specularColor_accessor_storage, _OpenPBRMaterial_specularColorTexture_accessor_storage, _OpenPBRMaterial_specularRoughness_accessor_storage, _OpenPBRMaterial_specularRoughnessTexture_accessor_storage, _OpenPBRMaterial_specularRoughnessAnisotropy_accessor_storage, _OpenPBRMaterial_specularRoughnessAnisotropyTexture_accessor_storage, _OpenPBRMaterial_specularIor_accessor_storage, _OpenPBRMaterial_transmissionWeight_accessor_storage, _OpenPBRMaterial_transmissionWeightTexture_accessor_storage, _OpenPBRMaterial_transmissionColor_accessor_storage, _OpenPBRMaterial_transmissionColorTexture_accessor_storage, _OpenPBRMaterial_transmissionDepth_accessor_storage, _OpenPBRMaterial_transmissionDepthTexture_accessor_storage, _OpenPBRMaterial_transmissionScatter_accessor_storage, _OpenPBRMaterial_transmissionScatterTexture_accessor_storage, _OpenPBRMaterial_transmissionScatterAnisotropy_accessor_storage, _OpenPBRMaterial_transmissionDispersionScale_accessor_storage, _OpenPBRMaterial_transmissionDispersionScaleTexture_accessor_storage, _OpenPBRMaterial_transmissionDispersionAbbeNumber_accessor_storage, _OpenPBRMaterial_subsurfaceWeight_accessor_storage, _OpenPBRMaterial_subsurfaceWeightTexture_accessor_storage, _OpenPBRMaterial_subsurfaceColor_accessor_storage, _OpenPBRMaterial_subsurfaceColorTexture_accessor_storage, _OpenPBRMaterial_subsurfaceRadius_accessor_storage, _OpenPBRMaterial_subsurfaceRadiusScale_accessor_storage, _OpenPBRMaterial_subsurfaceRadiusScaleTexture_accessor_storage, _OpenPBRMaterial_subsurfaceScatterAnisotropy_accessor_storage, _OpenPBRMaterial_coatWeight_accessor_storage, _OpenPBRMaterial_coatWeightTexture_accessor_storage, _OpenPBRMaterial_coatColor_accessor_storage, _OpenPBRMaterial_coatColorTexture_accessor_storage, _OpenPBRMaterial_coatRoughness_accessor_storage, _OpenPBRMaterial_coatRoughnessTexture_accessor_storage, _OpenPBRMaterial_coatRoughnessAnisotropy_accessor_storage, _OpenPBRMaterial_coatRoughnessAnisotropyTexture_accessor_storage, _OpenPBRMaterial_coatIor_accessor_storage, _OpenPBRMaterial_coatDarkening_accessor_storage, _OpenPBRMaterial_coatDarkeningTexture_accessor_storage, _OpenPBRMaterial_fuzzWeight_accessor_storage, _OpenPBRMaterial_fuzzWeightTexture_accessor_storage, _OpenPBRMaterial_fuzzColor_accessor_storage, _OpenPBRMaterial_fuzzColorTexture_accessor_storage, _OpenPBRMaterial_fuzzRoughness_accessor_storage, _OpenPBRMaterial_fuzzRoughnessTexture_accessor_storage, _OpenPBRMaterial_geometryThinWalled_accessor_storage, _OpenPBRMaterial_geometryNormalTexture_accessor_storage, _OpenPBRMaterial_geometryTangent_accessor_storage, _OpenPBRMaterial_geometryTangentTexture_accessor_storage, _OpenPBRMaterial_geometryCoatNormalTexture_accessor_storage, _OpenPBRMaterial_geometryCoatTangent_accessor_storage, _OpenPBRMaterial_geometryCoatTangentTexture_accessor_storage, _OpenPBRMaterial_geometryOpacity_accessor_storage, _OpenPBRMaterial_geometryOpacityTexture_accessor_storage, _OpenPBRMaterial_geometryThickness_accessor_storage, _OpenPBRMaterial_geometryThicknessTexture_accessor_storage, _OpenPBRMaterial_emissionLuminance_accessor_storage, _OpenPBRMaterial_emissionColor_accessor_storage, _OpenPBRMaterial_emissionColorTexture_accessor_storage, _OpenPBRMaterial_thinFilmWeight_accessor_storage, _OpenPBRMaterial_thinFilmWeightTexture_accessor_storage, _OpenPBRMaterial_thinFilmThickness_accessor_storage, _OpenPBRMaterial_thinFilmThicknessMin_accessor_storage, _OpenPBRMaterial_thinFilmThicknessTexture_accessor_storage, _OpenPBRMaterial_thinFilmIor_accessor_storage, _OpenPBRMaterial_ambientOcclusionTexture_accessor_storage, _OpenPBRMaterial_directIntensity_accessor_storage, _OpenPBRMaterial_environmentIntensity_accessor_storage, _OpenPBRMaterial_useSpecularWeightFromTextureAlpha_accessor_storage, _OpenPBRMaterial_forceAlphaTest_accessor_storage, _OpenPBRMaterial_alphaCutOff_accessor_storage, _OpenPBRMaterial_useAmbientOcclusionFromMetallicTextureRed_accessor_storage, _OpenPBRMaterial_useAmbientInGrayScale_accessor_storage, _OpenPBRMaterial_useObjectSpaceNormalMap_accessor_storage, _OpenPBRMaterial_useParallax_accessor_storage, _OpenPBRMaterial_useParallaxOcclusion_accessor_storage, _OpenPBRMaterial_parallaxScaleBias_accessor_storage, _OpenPBRMaterial_disableLighting_accessor_storage, _OpenPBRMaterial_forceIrradianceInFragment_accessor_storage, _OpenPBRMaterial_maxSimultaneousLights_accessor_storage, _OpenPBRMaterial_invertNormalMapX_accessor_storage, _OpenPBRMaterial_invertNormalMapY_accessor_storage, _OpenPBRMaterial_twoSidedLighting_accessor_storage, _OpenPBRMaterial_useAlphaFresnel_accessor_storage, _OpenPBRMaterial_useLinearAlphaFresnel_accessor_storage, _OpenPBRMaterial_environmentBRDFTexture_accessor_storage, _OpenPBRMaterial_forceNormalForward_accessor_storage, _OpenPBRMaterial_enableSpecularAntiAliasing_accessor_storage, _OpenPBRMaterial_useHorizonOcclusion_accessor_storage, _OpenPBRMaterial_useRadianceOcclusion_accessor_storage, _OpenPBRMaterial_unlit_accessor_storage, _OpenPBRMaterial_applyDecalMapAfterDetailMap_accessor_storage, _OpenPBRMaterial_debugMode_accessor_storage; let _classSuper = OpenPBRMaterialBase; let _instanceExtraInitializers = []; let _baseWeight_decorators; let _baseWeight_initializers = []; let _baseWeight_extraInitializers = []; let _baseWeightTexture_decorators; let _baseWeightTexture_initializers = []; let _baseWeightTexture_extraInitializers = []; let _baseColor_decorators; let _baseColor_initializers = []; let _baseColor_extraInitializers = []; let _baseColorTexture_decorators; let _baseColorTexture_initializers = []; let _baseColorTexture_extraInitializers = []; let _baseDiffuseRoughness_decorators; let _baseDiffuseRoughness_initializers = []; let _baseDiffuseRoughness_extraInitializers = []; let _baseDiffuseRoughnessTexture_decorators; let _baseDiffuseRoughnessTexture_initializers = []; let _baseDiffuseRoughnessTexture_extraInitializers = []; let _baseMetalness_decorators; let _baseMetalness_initializers = []; let _baseMetalness_extraInitializers = []; let _baseMetalnessTexture_decorators; let _baseMetalnessTexture_initializers = []; let _baseMetalnessTexture_extraInitializers = []; let _specularWeight_decorators; let _specularWeight_initializers = []; let _specularWeight_extraInitializers = []; let _specularWeightTexture_decorators; let _specularWeightTexture_initializers = []; let _specularWeightTexture_extraInitializers = []; let _specularColor_decorators; let _specularColor_initializers = []; let _specularColor_extraInitializers = []; let _specularColorTexture_decorators; let _specularColorTexture_initializers = []; let _specularColorTexture_extraInitializers = []; let _specularRoughness_decorators; let _specularRoughness_initializers = []; let _specularRoughness_extraInitializers = []; let _specularRoughnessTexture_decorators; let _specularRoughnessTexture_initializers = []; let _specularRoughnessTexture_extraInitializers = []; let _specularRoughnessAnisotropy_decorators; let _specularRoughnessAnisotropy_initializers = []; let _specularRoughnessAnisotropy_extraInitializers = []; let _specularRoughnessAnisotropyTexture_decorators; let _specularRoughnessAnisotropyTexture_initializers = []; let _specularRoughnessAnisotropyTexture_extraInitializers = []; let _specularIor_decorators; let _specularIor_initializers = []; let _specularIor_extraInitializers = []; let _transmissionWeight_decorators; let _transmissionWeight_initializers = []; let _transmissionWeight_extraInitializers = []; let _transmissionWeightTexture_decorators; let _transmissionWeightTexture_initializers = []; let _transmissionWeightTexture_extraInitializers = []; let _transmissionColor_decorators; let _transmissionColor_initializers = []; let _transmissionColor_extraInitializers = []; let _transmissionColorTexture_decorators; let _transmissionColorTexture_initializers = []; let _transmissionColorTexture_extraInitializers = []; let _transmissionDepth_decorators; let _transmissionDepth_initializers = []; let _transmissionDepth_extraInitializers = []; let _transmissionDepthTexture_decorators; let _transmissionDepthTexture_initializers = []; let _transmissionDepthTexture_extraInitializers = []; let _transmissionScatter_decorators; let _transmissionScatter_initializers = []; let _transmissionScatter_extraInitializers = []; let _transmissionScatterTexture_decorators; let _transmissionScatterTexture_initializers = []; let _transmissionScatterTexture_extraInitializers = []; let _transmissionScatterAnisotropy_decorators; let _transmissionScatterAnisotropy_initializers = []; let _transmissionScatterAnisotropy_extraInitializers = []; let _transmissionDispersionScale_decorators; let _transmissionDispersionScale_initializers = []; let _transmissionDispersionScale_extraInitializers = []; let _transmissionDispersionScaleTexture_decorators; let _transmissionDispersionScaleTexture_initializers = []; let _transmissionDispersionScaleTexture_extraInitializers = []; let _transmissionDispersionAbbeNumber_decorators; let _transmissionDispersionAbbeNumber_initializers = []; let _transmissionDispersionAbbeNumber_extraInitializers = []; let _subsurfaceWeight_decorators; let _subsurfaceWeight_initializers = []; let _subsurfaceWeight_extraInitializers = []; let _subsurfaceWeightTexture_decorators; let _subsurfaceWeightTexture_initializers = []; let _subsurfaceWeightTexture_extraInitializers = []; let _subsurfaceColor_decorators; let _subsurfaceColor_initializers = []; let _subsurfaceColor_extraInitializers = []; let _subsurfaceColorTexture_decorators; let _subsurfaceColorTexture_initializers = []; let _subsurfaceColorTexture_extraInitializers = []; let _subsurfaceRadius_decorators; let _subsurfaceRadius_initializers = []; let _subsurfaceRadius_extraInitializers = []; let _subsurfaceRadiusScale_decorators; let _subsurfaceRadiusScale_initializers = []; let _subsurfaceRadiusScale_extraInitializers = []; let _subsurfaceRadiusScaleTexture_decorators; let _subsurfaceRadiusScaleTexture_initializers = []; let _subsurfaceRadiusScaleTexture_extraInitializers = []; let _subsurfaceScatterAnisotropy_decorators; let _subsurfaceScatterAnisotropy_initializers = []; let _subsurfaceScatterAnisotropy_extraInitializers = []; let _coatWeight_decorators; let _coatWeight_initializers = []; let _coatWeight_extraInitializers = []; let _coatWeightTexture_decorators; let _coatWeightTexture_initializers = []; let _coatWeightTexture_extraInitializers = []; let _coatColor_decorators; let _coatColor_initializers = []; let _coatColor_extraInitializers = []; let _coatColorTexture_decorators; let _coatColorTexture_initializers = []; let _coatColorTexture_extraInitializers = []; let _coatRoughness_decorators; let _coatRoughness_initializers = []; let _coatRoughness_extraInitializers = []; let _coatRoughnessTexture_decorators; let _coatRoughnessTexture_initializers = []; let _coatRoughnessTexture_extraInitializers = []; let _coatRoughnessAnisotropy_decorators; let _coatRoughnessAnisotropy_initializers = []; let _coatRoughnessAnisotropy_extraInitializers = []; let _coatRoughnessAnisotropyTexture_decorators; let _coatRoughnessAnisotropyTexture_initializers = []; let _coatRoughnessAnisotropyTexture_extraInitializers = []; let _coatIor_decorators; let _coatIor_initializers = []; let _coatIor_extraInitializers = []; let _coatDarkening_decorators; let _coatDarkening_initializers = []; let _coatDarkening_extraInitializers = []; let _coatDarkeningTexture_decorators; let _coatDarkeningTexture_initializers = []; let _coatDarkeningTexture_extraInitializers = []; let _fuzzWeight_decorators; let _fuzzWeight_initializers = []; let _fuzzWeight_extraInitializers = []; let _fuzzWeightTexture_decorators; let _fuzzWeightTexture_initializers = []; let _fuzzWeightTexture_extraInitializers = []; let _fuzzColor_decorators; let _fuzzColor_initializers = []; let _fuzzColor_extraInitializers = []; let _fuzzColorTexture_decorators; let _fuzzColorTexture_initializers = []; let _fuzzColorTexture_extraInitializers = []; let _fuzzRoughness_decorators; let _fuzzRoughness_initializers = []; let _fuzzRoughness_extraInitializers = []; let _fuzzRoughnessTexture_decorators; let _fuzzRoughnessTexture_initializers = []; let _fuzzRoughnessTexture_extraInitializers = []; let _geometryThinWalled_decorators; let _geometryThinWalled_initializers = []; let _geometryThinWalled_extraInitializers = []; let _geometryNormalTexture_decorators; let _geometryNormalTexture_initializers = []; let _geometryNormalTexture_extraInitializers = []; let _geometryTangent_decorators; let _geometryTangent_initializers = []; let _geometryTangent_extraInitializers = []; let _geometryTangentTexture_decorators; let _geometryTangentTexture_initializers = []; let _geometryTangentTexture_extraInitializers = []; let _geometryCoatNormalTexture_decorators; let _geometryCoatNormalTexture_initializers = []; let _geometryCoatNormalTexture_extraInitializers = []; let _geometryCoatTangent_decorators; let _geometryCoatTangent_initializers = []; let _geometryCoatTangent_extraInitializers = []; let _geometryCoatTangentTexture_decorators; let _geometryCoatTangentTexture_initializers = []; let _geometryCoatTangentTexture_extraInitializers = []; let _geometryOpacity_decorators; let _geometryOpacity_initializers = []; let _geometryOpacity_extraInitializers = []; let _geometryOpacityTexture_decorators; let _geometryOpacityTexture_initializers = []; let _geometryOpacityTexture_extraInitializers = []; let _geometryThickness_decorators; let _geometryThickness_initializers = []; let _geometryThickness_extraInitializers = []; let _geometryThicknessTexture_decorators; let _geometryThicknessTexture_initializers = []; let _geometryThicknessTexture_extraInitializers = []; let _emissionLuminance_decorators; let _emissionLuminance_initializers = []; let _emissionLuminance_extraInitializers = []; let _emissionColor_decorators; let _emissionColor_initializers = []; let _emissionColor_extraInitializers = []; let _emissionColorTexture_decorators; let _emissionColorTexture_initializers = []; let _emissionColorTexture_extraInitializers = []; let _thinFilmWeight_decorators; let _thinFilmWeight_initializers = []; let _thinFilmWeight_extraInitializers = []; let _thinFilmWeightTexture_decorators; let _thinFilmWeightTexture_initializers = []; let _thinFilmWeightTexture_extraInitializers = []; let _thinFilmThickness_decorators; let _thinFilmThickness_initializers = []; let _thinFilmThickness_extraInitializers = []; let _thinFilmThicknessMin_decorators; let _thinFilmThicknessMin_initializers = []; let _thinFilmThicknessMin_extraInitializers = []; let _thinFilmThicknessTexture_decorators; let _thinFilmThicknessTexture_initializers = []; let _thinFilmThicknessTexture_extraInitializers = []; let _thinFilmIor_decorators; let _thinFilmIor_initializers = []; let _thinFilmIor_extraInitializers = []; let _ambientOcclusionTexture_decorators; let _ambientOcclusionTexture_initializers = []; let _ambientOcclusionTexture_extraInitializers = []; let _directIntensity_decorators; let _directIntensity_initializers = []; let _directIntensity_extraInitializers = []; let _environmentIntensity_decorators; let _environmentIntensity_initializers = []; let _environmentIntensity_extraInitializers = []; let _useSpecularWeightFromTextureAlpha_decorators; let _useSpecularWeightFromTextureAlpha_initializers = []; let _useSpecularWeightFromTextureAlpha_extraInitializers = []; let _forceAlphaTest_decorators; let _forceAlphaTest_initializers = []; let _forceAlphaTest_extraInitializers = []; let _alphaCutOff_decorators; let _alphaCutOff_initializers = []; let _alphaCutOff_extraInitializers = []; let _useAmbientOcclusionFromMetallicTextureRed_decorators; let _useAmbientOcclusionFromMetallicTextureRed_initializers = []; let _useAmbientOcclusionFromMetallicTextureRed_extraInitializers = []; let _useAmbientInGrayScale_decorators; let _useAmbientInGrayScale_initializers = []; let _useAmbientInGrayScale_extraInitializers = []; let _get_usePhysicalLightFalloff_decorators; let _get_useGLTFLightFalloff_decorators; let _useObjectSpaceNormalMap_decorators; let _useObjectSpaceNormalMap_initializers = []; let _useObjectSpaceNormalMap_extraInitializers = []; let _useParallax_decorators; let _useParallax_initializers = []; let _useParallax_extraInitializers = []; let _useParallaxOcclusion_decorators; let _useParallaxOcclusion_initializers = []; let _useParallaxOcclusion_extraInitializers = []; let _parallaxScaleBias_decorators; let _parallaxScaleBias_initializers = []; let _parallaxScaleBias_extraInitializers = []; let _disableLighting_decorators; let _disableLighting_initializers = []; let _disableLighting_extraInitializers = []; let _forceIrradianceInFragment_decorators; let _forceIrradianceInFragment_initializers = []; let _forceIrradianceInFragment_extraInitializers = []; let _maxSimultaneousLights_decorators; let _maxSimultaneousLights_initializers = []; let _maxSimultaneousLights_extraInitializers = []; let _invertNormalMapX_decorators; let _invertNormalMapX_initializers = []; let _invertNormalMapX_extraInitializers = []; let _invertNormalMapY_decorators; let _invertNormalMapY_initializers = []; let _invertNormalMapY_extraInitializers = []; let _twoSidedLighting_decorators; let _twoSidedLighting_initializers = []; let _twoSidedLighting_extraInitializers = []; let _useAlphaFresnel_decorators; let _useAlphaFresnel_initializers = []; let _useAlphaFresnel_extraInitializers = []; let _useLinearAlphaFresnel_decorators; let _useLinearAlphaFresnel_initializers = []; let _useLinearAlphaFresnel_extraInitializers = []; let _environmentBRDFTexture_decorators; let _environmentBRDFTexture_initializers = []; let _environmentBRDFTexture_extraInitializers = []; let _forceNormalForward_decorators; let _forceNormalForward_initializers = []; let _forceNormalForward_extraInitializers = []; let _enableSpecularAntiAliasing_decorators; let _enableSpecularAntiAliasing_initializers = []; let _enableSpecularAntiAliasing_extraInitializers = []; let _useHorizonOcclusion_decorators; let _useHorizonOcclusion_initializers = []; let _useHorizonOcclusion_extraInitializers = []; let _useRadianceOcclusion_decorators; let _useRadianceOcclusion_initializers = []; let _useRadianceOcclusion_extraInitializers = []; let _unlit_decorators; let _unlit_initializers = []; let _unlit_extraInitializers = []; let _applyDecalMapAfterDetailMap_decorators; let _applyDecalMapAfterDetailMap_initializers = []; let _applyDecalMapAfterDetailMap_extraInitializers = []; let _debugMode_decorators; let _debugMode_initializers = []; let _debugMode_extraInitializers = []; let _get_transparencyMode_decorators; return _a = class OpenPBRMaterial extends _classSuper { /** * Base Weight is a multiplier on the diffuse and metal lobes. * See OpenPBR's specs for base_weight */ get baseWeight() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseWeight_accessor_storage, "f"); } set baseWeight(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseWeight_accessor_storage, value, "f"); } /** * Base Weight is a multiplier on the diffuse and metal lobes. * See OpenPBR's specs for base_weight */ get baseWeightTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseWeightTexture_accessor_storage, "f"); } set baseWeightTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseWeightTexture_accessor_storage, value, "f"); } /** * Color of the base diffuse lobe. * See OpenPBR's specs for base_color */ get baseColor() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseColor_accessor_storage, "f"); } set baseColor(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseColor_accessor_storage, value, "f"); } /** * Base Color Texture property. * See OpenPBR's specs for base_color */ get baseColorTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseColorTexture_accessor_storage, "f"); } set baseColorTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseColorTexture_accessor_storage, value, "f"); } /** * Roughness of the diffuse lobe. * See OpenPBR's specs for base_diffuse_roughness */ get baseDiffuseRoughness() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseDiffuseRoughness_accessor_storage, "f"); } set baseDiffuseRoughness(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseDiffuseRoughness_accessor_storage, value, "f"); } /** * Roughness texture of the diffuse lobe. * See OpenPBR's specs for base_diffuse_roughness */ get baseDiffuseRoughnessTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseDiffuseRoughnessTexture_accessor_storage, "f"); } set baseDiffuseRoughnessTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseDiffuseRoughnessTexture_accessor_storage, value, "f"); } /** * Metalness of the base lobe. * See OpenPBR's specs for base_metalness */ get baseMetalness() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseMetalness_accessor_storage, "f"); } set baseMetalness(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseMetalness_accessor_storage, value, "f"); } /** * Metalness texture. * See OpenPBR's specs for base_metalness */ get baseMetalnessTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_baseMetalnessTexture_accessor_storage, "f"); } set baseMetalnessTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_baseMetalnessTexture_accessor_storage, value, "f"); } /** * Weight of the specular lobe. * See OpenPBR's specs for specular_weight */ get specularWeight() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularWeight_accessor_storage, "f"); } set specularWeight(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularWeight_accessor_storage, value, "f"); } /** * Weight texture of the specular lobe. * See OpenPBR's specs for specular_weight */ get specularWeightTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularWeightTexture_accessor_storage, "f"); } set specularWeightTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularWeightTexture_accessor_storage, value, "f"); } /** * Color of the specular lobe. * See OpenPBR's specs for specular_color */ get specularColor() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularColor_accessor_storage, "f"); } set specularColor(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularColor_accessor_storage, value, "f"); } /** * Specular Color Texture property. * See OpenPBR's specs for specular_color */ get specularColorTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularColorTexture_accessor_storage, "f"); } set specularColorTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularColorTexture_accessor_storage, value, "f"); } /** * Roughness of the specular lobe. * See OpenPBR's specs for specular_roughness */ get specularRoughness() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularRoughness_accessor_storage, "f"); } set specularRoughness(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularRoughness_accessor_storage, value, "f"); } /** * Roughness texture of the specular lobe. * See OpenPBR's specs for specular_roughness */ get specularRoughnessTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularRoughnessTexture_accessor_storage, "f"); } set specularRoughnessTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularRoughnessTexture_accessor_storage, value, "f"); } /** * Anisotropic roughness of the specular lobe. * See OpenPBR's specs for specular_roughness_anisotropy */ get specularRoughnessAnisotropy() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularRoughnessAnisotropy_accessor_storage, "f"); } set specularRoughnessAnisotropy(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularRoughnessAnisotropy_accessor_storage, value, "f"); } /** * Anisotropic Roughness texture. * See OpenPBR's specs for specular_roughness */ get specularRoughnessAnisotropyTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularRoughnessAnisotropyTexture_accessor_storage, "f"); } set specularRoughnessAnisotropyTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularRoughnessAnisotropyTexture_accessor_storage, value, "f"); } /** * IOR of the specular lobe. * See OpenPBR's specs for specular_ior */ get specularIor() { return __classPrivateFieldGet(this, _OpenPBRMaterial_specularIor_accessor_storage, "f"); } set specularIor(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_specularIor_accessor_storage, value, "f"); } /** * Transmission weight of the surface. * See OpenPBR's specs for transmission_weight */ get transmissionWeight() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionWeight_accessor_storage, "f"); } set transmissionWeight(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionWeight_accessor_storage, value, "f"); } /** * Transmission weight texture. * See OpenPBR's specs for transmission_weight */ get transmissionWeightTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionWeightTexture_accessor_storage, "f"); } set transmissionWeightTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionWeightTexture_accessor_storage, value, "f"); } /** * Transmission color of the surface. * See OpenPBR's specs for transmission_color */ get transmissionColor() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionColor_accessor_storage, "f"); } set transmissionColor(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionColor_accessor_storage, value, "f"); } /** * Transmission color texture. * See OpenPBR's specs for transmission_color */ get transmissionColorTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionColorTexture_accessor_storage, "f"); } set transmissionColorTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionColorTexture_accessor_storage, value, "f"); } /** * Transmission depth of the volume * See OpenPBR's specs for transmission_depth */ get transmissionDepth() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionDepth_accessor_storage, "f"); } set transmissionDepth(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionDepth_accessor_storage, value, "f"); } /** * Transmission depth texture. * See OpenPBR's specs for transmission_depth */ get transmissionDepthTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionDepthTexture_accessor_storage, "f"); } set transmissionDepthTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionDepthTexture_accessor_storage, value, "f"); } /** * Transmission scatter of the surface. * See OpenPBR's specs for transmission_scatter */ get transmissionScatter() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionScatter_accessor_storage, "f"); } set transmissionScatter(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionScatter_accessor_storage, value, "f"); } /** * Transmission scatter texture. * See OpenPBR's specs for transmission_scatter */ get transmissionScatterTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionScatterTexture_accessor_storage, "f"); } set transmissionScatterTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionScatterTexture_accessor_storage, value, "f"); } /** * Transmission scatter anisotropy * See OpenPBR's specs for transmission_scatter_anisotropy */ get transmissionScatterAnisotropy() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionScatterAnisotropy_accessor_storage, "f"); } set transmissionScatterAnisotropy(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionScatterAnisotropy_accessor_storage, value, "f"); } /** * Transmission Dispersion Scale factor. * See OpenPBR's specs for transmission_dispersion_scale */ get transmissionDispersionScale() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionDispersionScale_accessor_storage, "f"); } set transmissionDispersionScale(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionDispersionScale_accessor_storage, value, "f"); } /** * Transmission Dispersion Scale texture. * See OpenPBR's specs for transmission_dispersion_scale */ get transmissionDispersionScaleTexture() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionDispersionScaleTexture_accessor_storage, "f"); } set transmissionDispersionScaleTexture(value) { __classPrivateFieldSet(this, _OpenPBRMaterial_transmissionDispersionScaleTexture_accessor_storage, value, "f"); } /** * Transmission Dispersion Abbe number. * See OpenPBR's specs for transmission_dispersion_abbe_number */ get transmissionDispersionAbbeNumber() { return __classPrivateFieldGet(this, _OpenPBRMaterial_transmissionDispersionAbbeNumber_accessor_storage, "f"); } set transmissionDispersionAbbeNumber(value) { __classPrivateFieldSet(this, _OpenP