UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 10.1 kB
import{PIXELFORMAT_DXT5 as t,TEXTURETYPE_SWIZZLEGGGR as i,PIXELFORMAT_RGBA8 as e}from"../../platform/graphics/constants.js";import{SHADER_FORWARDHDR as n,GAMMA_SRGBHDR as s,TONEMAP_LINEAR as o,SHADERDEF_TANGENTS as a,SHADERDEF_SCREENSPACE as l,SHADERDEF_SKIN as p,SHADERDEF_INSTANCING as r,SHADERDEF_MORPH_POSITION as c,SHADERDEF_MORPH_NORMAL as u,SHADERDEF_MORPH_TEXTURE_BASED as d,BLEND_NONE as g,DITHER_NONE as h,SPECULAR_PHONG as O,GAMMA_NONE as f,SHADERDEF_NOSHADOW as m,SHADERDEF_LM as M,SHADERDEF_DIRLM as b,SHADERDEF_LMAMBIENT as S,MASK_AFFECT_DYNAMIC as v,LIGHTTYPE_DIRECTIONAL as T,LIGHTTYPE_OMNI as y,LIGHTTYPE_SPOT as E,SHADERDEF_UV0 as C,SHADERDEF_UV1 as x,SHADERDEF_VCOLOR as A,SHADER_PREPASS_VELOCITY as D}from"../constants.js";import{_matTex2D as L}from"../shader-lib/programs/standard.js";import{LitMaterialOptionsBuilder as _}from"./lit-material-options-builder.js";const k=(t,i)=>{if(t.length!==i.length)return!1;for(let e=0;e<t.length;++e)if(t[e]!==i[e])return!1;return!0},F=t=>1!==t.r||1!==t.g||1!==t.b;class I{constructor(){this._mapXForms=null}updateMinRef(t,i,e,n,s,o){this._updateSharedOptions(t,i,e,n,s),this._updateMinOptions(t,e,s),this._updateUVOptions(t,e,n,!0)}updateRef(t,i,e,l,p,r){this._updateSharedOptions(t,i,e,l,p),this._updateEnvOptions(t,e,i),this._updateMaterialOptions(t,e),p===n&&(t.litOptions.gamma&&(t.litOptions.gamma=s),t.litOptions.toneMap=o),t.litOptions.hasTangents=l&&!!(l&a),this._updateLightOptions(t,i,e,l,r),this._updateUVOptions(t,e,l,!1)}_updateSharedOptions(t,i,e,n,s){t.forceUv1=e.forceUv1,e.userAttributes&&(t.litOptions.userAttributes=Object.fromEntries(e.userAttributes.entries())),t.litOptions.chunks=e.chunks||{},t.litOptions.pass=s,t.litOptions.alphaTest=e.alphaTest>0,t.litOptions.blendType=e.blendType,t.litOptions.screenSpace=n&&!!(n&l),t.litOptions.skin=n&&!!(n&p),t.litOptions.useInstancing=n&&!!(n&r),t.litOptions.useMorphPosition=n&&!!(n&c),t.litOptions.useMorphNormal=n&&!!(n&u),t.litOptions.useMorphTextureBased=n&&!!(n&d),t.litOptions.nineSlicedMode=e.nineSlicedMode||0,i.clusteredLightingEnabled&&e.useLighting?(t.litOptions.clusteredLightingEnabled=!0,t.litOptions.clusteredLightingCookiesEnabled=i.lighting.cookiesEnabled,t.litOptions.clusteredLightingShadowsEnabled=i.lighting.shadowsEnabled,t.litOptions.clusteredLightingShadowType=i.lighting.shadowType,t.litOptions.clusteredLightingAreaLightsEnabled=i.lighting.areaLightsEnabled):(t.litOptions.clusteredLightingEnabled=!1,t.litOptions.clusteredLightingCookiesEnabled=!1,t.litOptions.clusteredLightingShadowsEnabled=!1,t.litOptions.clusteredLightingAreaLightsEnabled=!1)}_updateUVOptions(t,i,e,n){let s=!1,o=!1,a=!1;e&&(s=!!(e&C),o=!!(e&x),a=!!(e&A)),t.litOptions.vertexColors=!1,this._mapXForms=[];const l={};for(const e in L)this._updateTexOptions(t,i,e,s,o,a,n,l);this._mapXForms=null,t.litOptions.lightMapEnabled=t.lightMap,t.litOptions.dirLightMapEnabled=t.dirLightMap,t.litOptions.useHeights=t.heightMap,t.litOptions.useNormals=t.normalMap,t.litOptions.useClearCoatNormals=t.clearCoatNormalMap,t.litOptions.useAo=t.aoMap||t.aoVertexColor,t.litOptions.diffuseMapEnabled=t.diffuseMap}_updateTexOptions(t,i,e,n,s,o,a,l){const p="opacity"===e;if(!a||p){const a=`${e}Map`,r=`${e}VertexColor`,c=`${e}VertexColorChannel`,u=`${a}Channel`,d=`${a}Transform`,O=`${a}Uv`,f=`${a}Identifier`;if("light"!==e&&(t[a]=!1,t[f]=void 0,t[u]="",t[d]=0,t[O]=0),t[r]=!1,t[c]="",p&&i.blendType===g&&0===i.alphaTest&&!i.alphaToCoverage&&i.opacityDither===h)return;if("height"!==e&&i[r]&&o&&(t[r]=i[r],t[c]=i[c],t.litOptions.vertexColors=!0),i[a]){let o=!0;if(0!==i[O]||n||(o=!1),1!==i[O]||s||(o=!1),o){const n=i[a].id;let s=l[n];void 0===s&&(l[n]=e,s=e),t[a]=!!i[a],t[f]=s,t[d]=this._getMapTransformID(i.getUniform(d),i[O]),t[u]=i[u],t[O]=i[O]}}}}_updateMinOptions(t,i,e){t.opacityTint=i.blendType!==g||i.opacityShadowDither!==h;const n=e===D;t.litOptions.opacityShadowDither=n?i.opacityDither:i.opacityShadowDither,t.litOptions.lights=[]}_updateMaterialOptions(e,n){var s,o,a,l;const p=n.diffuseTint||!n.diffuseMap&&!n.diffuseVertexColor,r=!!(n.useMetalness||n.specularMap||n.sphereMap||n.cubeMap||(c=n.specular,0!==c.r||0!==c.g||0!==c.b)||n.specularityFactor>0&&n.useMetalness||n.enableGGXSpecular||n.clearCoat>0);var c;const u=!n.useMetalness||n.useMetalnessSpecularColor,d=r&&(n.specularTint||!n.specularMap&&!n.specularVertexColor)&&F(n.specular),f=r&&n.useMetalnessSpecularColor&&(n.specularityFactorTint||n.specularityFactor<1&&!n.specularityFactorMap),m=!n.emissiveMap||F(n.emissive)&&n.emissiveTint,M=1!==n.emissiveIntensity,b=!!n.normalMap&&(n.normalMap.format===t||n.normalMap.type===i);e.opacityTint=n.blendType!==g||n.alphaTest>0||n.opacityDither!==h?1:0,e.ambientTint=n.ambientTint,e.diffuseTint=p?2:0,e.specularTint=d?2:0,e.specularityFactorTint=f?1:0,e.metalnessTint=n.useMetalness&&n.metalness<1?1:0,e.glossTint=1,e.emissiveTint=(m?2:0)+(M?1:0),e.diffuseEncoding=null==(s=n.diffuseMap)?void 0:s.encoding,e.diffuseDetailEncoding=null==(o=n.diffuseDetailMap)?void 0:o.encoding,e.emissiveEncoding=null==(a=n.emissiveMap)?void 0:a.encoding,e.lightMapEncoding=null==(l=n.lightMap)?void 0:l.encoding,e.packedNormal=b,e.refractionTint=1!==n.refraction?1:0,e.refractionIndexTint=n.refractionIndex!==1/1.5?1:0,e.thicknessTint=n.useDynamicRefraction&&1!==n.thickness?1:0,e.specularEncoding=n.specularEncoding||"linear",e.sheenEncoding=n.sheenEncoding||"linear",e.aoMapUv=n.aoUvSet,e.aoDetail=!!n.aoMap,e.diffuseDetail=!!n.diffuseMap,e.normalDetail=!!n.normalMap,e.diffuseDetailMode=n.diffuseDetailMode,e.aoDetailMode=n.aoDetailMode,e.clearCoatTint=1!==n.clearCoat?1:0,e.clearCoatGloss=!!n.clearCoatGloss,e.clearCoatGlossTint=1!==n.clearCoatGloss?1:0,e.iorTint=n.refractionIndex!==1/1.5?1:0,e.iridescenceTint=1!==n.iridescence?1:0,e.sheenTint=n.useSheen&&F(n.sheen)?2:0,e.sheenGlossTint=1,e.glossInvert=n.glossInvert,e.sheenGlossInvert=n.sheenGlossInvert,e.clearCoatGlossInvert=n.clearCoatGlossInvert,e.useSpecularColor=u,e.litOptions.separateAmbient=!1,e.litOptions.useAmbientTint=n.ambientTint,e.litOptions.customFragmentShader=n.customFragmentShader,e.litOptions.pixelSnap=n.pixelSnap,e.litOptions.shadingModel=n.shadingModel,e.litOptions.ambientSH=!!n.ambientSH,e.litOptions.fastTbn=n.fastTbn,e.litOptions.twoSidedLighting=n.twoSidedLighting,e.litOptions.occludeSpecular=n.occludeSpecular,e.litOptions.occludeSpecularFloat=1!==n.occludeSpecularIntensity,e.litOptions.useMsdf=!!n.msdfMap,e.litOptions.msdfTextAttribute=!!n.msdfTextAttribute,e.litOptions.alphaToCoverage=n.alphaToCoverage,e.litOptions.opacityFadesSpecular=n.opacityFadesSpecular,e.litOptions.opacityDither=n.opacityDither,e.litOptions.cubeMapProjection=n.cubeMapProjection,e.litOptions.occludeDirect=n.occludeDirect,e.litOptions.conserveEnergy=n.conserveEnergy&&n.shadingModel!==O,e.litOptions.useSpecular=r,e.litOptions.useSpecularityFactor=(f||!!n.specularityFactorMap)&&n.useMetalnessSpecularColor,e.litOptions.enableGGXSpecular=n.enableGGXSpecular,e.litOptions.fresnelModel=n.fresnelModel,e.litOptions.useRefraction=(n.refraction||!!n.refractionMap)&&(n.useDynamicRefraction||!!e.litOptions.reflectionSource),e.litOptions.useClearCoat=!!n.clearCoat,e.litOptions.useSheen=n.useSheen,e.litOptions.useIridescence=n.useIridescence&&0!==n.iridescence,e.litOptions.useMetalness=n.useMetalness,e.litOptions.useDynamicRefraction=n.useDynamicRefraction,e.litOptions.dispersion=n.dispersion>0}_updateEnvOptions(t,i,e){t.litOptions.fog=i.useFog?e.fog:"none",t.litOptions.gamma=i.useGammaTonemap?e.gammaCorrection:f,t.litOptions.toneMap=i.useGammaTonemap?e.toneMapping:-1,t.litOptions.fixSeams=!!i.cubeMap&&i.cubeMap.fixCubemapSeams;const n=i.shadingModel===O;let s=!1;if(i.envAtlas&&i.cubeMap&&!n?(t.litOptions.reflectionSource="envAtlasHQ",t.litOptions.reflectionEncoding=i.envAtlas.encoding,t.litOptions.reflectionCubemapEncoding=i.cubeMap.encoding):i.envAtlas&&!n?(t.litOptions.reflectionSource="envAtlas",t.litOptions.reflectionEncoding=i.envAtlas.encoding):i.cubeMap?(t.litOptions.reflectionSource="cubeMap",t.litOptions.reflectionEncoding=i.cubeMap.encoding):i.sphereMap?(t.litOptions.reflectionSource="sphereMap",t.litOptions.reflectionEncoding=i.sphereMap.encoding):i.useSkybox&&e.envAtlas&&e.skybox&&!n?(t.litOptions.reflectionSource="envAtlasHQ",t.litOptions.reflectionEncoding=e.envAtlas.encoding,t.litOptions.reflectionCubemapEncoding=e.skybox.encoding,s=!0):i.useSkybox&&e.envAtlas&&!n?(t.litOptions.reflectionSource="envAtlas",t.litOptions.reflectionEncoding=e.envAtlas.encoding,s=!0):i.useSkybox&&e.skybox?(t.litOptions.reflectionSource="cubeMap",t.litOptions.reflectionEncoding=e.skybox.encoding,s=!0):(t.litOptions.reflectionSource=null,t.litOptions.reflectionEncoding=null),i.ambientSH&&!n)t.litOptions.ambientSource="ambientSH",t.litOptions.ambientEncoding=null;else{const s=i.envAtlas||(i.useSkybox&&e.envAtlas?e.envAtlas:null);s&&!n?(t.litOptions.ambientSource="envAtlas",t.litOptions.ambientEncoding=s.encoding):(t.litOptions.ambientSource="constant",t.litOptions.ambientEncoding=null)}t.litOptions.skyboxIntensity=s,t.litOptions.useCubeMapRotation=s&&e._skyboxRotationShaderInclude}_updateLightOptions(t,i,n,s,o){if(t.lightMap=!1,t.lightMapChannel="",t.lightMapUv=0,t.lightMapTransform=0,t.litOptions.lightMapWithoutAmbient=!1,t.dirLightMap=!1,s&&(t.litOptions.noShadow=!!(s&m),s&M&&(t.lightMapEncoding=i.lightmapPixelFormat===e?"rgbm":"linear",t.lightMap=!0,t.lightMapChannel="rgb",t.lightMapUv=1,t.lightMapTransform=0,t.litOptions.lightMapWithoutAmbient=!n.lightMap,s&b&&(t.dirLightMap=!0),s&S&&(t.litOptions.lightMapWithoutAmbient=!1))),n.useLighting){const i=[],e=s?s>>16:v;t.litOptions.lightMaskDynamic=!!(e&v),o&&(_.collectLights(T,o[T],i,e),_.collectLights(y,o[y],i,e),_.collectLights(E,o[E],i,e)),t.litOptions.lights=i}else t.litOptions.lights=[];0===t.litOptions.lights.length&&(t.litOptions.noShadow=!0)}_getMapTransformID(t,i){if(!t)return 0;let e=this._mapXForms[i];e||(e=[],this._mapXForms[i]=e);for(let i=0;i<e.length;i++)if(k(e[i][0].value,t[0].value)&&k(e[i][1].value,t[1].value))return i+1;return e.push(t)}}export{I as StandardMaterialOptionsBuilder};