@galacean/engine-core 1.0.0-beta.7 → 1.0.0-beta.9

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.
@@ -7882,8 +7882,9 @@ exports.DynamicColliderConstraints = void 0;
7882
7882
  }
7883
7883
  var _proto = Light.prototype;
7884
7884
  /**
7885
+ * Light Color, include intensity.
7885
7886
  * @internal
7886
- */ _proto._getLightColor = function _getLightColor() {
7887
+ */ _proto._getLightIntensityColor = function _getLightIntensityColor() {
7887
7888
  this._lightColor.r = this.color.r * this.intensity;
7888
7889
  this._lightColor.g = this.color.g * this.intensity;
7889
7890
  this._lightColor.b = this.color.b * this.intensity;
@@ -7953,15 +7954,21 @@ __decorate([
7953
7954
  var cullingMaskStart = lightIndex * 2;
7954
7955
  var colorStart = lightIndex * 3;
7955
7956
  var directionStart = lightIndex * 3;
7956
- var lightColor = this._getLightColor();
7957
+ var lightColor = this._getLightIntensityColor();
7957
7958
  var direction = this.direction;
7958
7959
  var data = DirectLight._combinedData;
7959
7960
  var cullingMask = this.cullingMask;
7960
7961
  data.cullingMask[cullingMaskStart] = cullingMask & 65535;
7961
7962
  data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
7962
- data.color[colorStart] = lightColor.r;
7963
- data.color[colorStart + 1] = lightColor.g;
7964
- data.color[colorStart + 2] = lightColor.b;
7963
+ if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
7964
+ data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
7965
+ data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
7966
+ data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
7967
+ } else {
7968
+ data.color[colorStart] = lightColor.r;
7969
+ data.color[colorStart + 1] = lightColor.g;
7970
+ data.color[colorStart + 2] = lightColor.b;
7971
+ }
7965
7972
  data.direction[directionStart] = direction.x;
7966
7973
  data.direction[directionStart + 1] = direction.y;
7967
7974
  data.direction[directionStart + 2] = direction.z;
@@ -8050,15 +8057,21 @@ __decorate([
8050
8057
  var colorStart = lightIndex * 3;
8051
8058
  var positionStart = lightIndex * 3;
8052
8059
  var distanceStart = lightIndex;
8053
- var lightColor = this._getLightColor();
8060
+ var lightColor = this._getLightIntensityColor();
8054
8061
  var lightPosition = this.position;
8055
8062
  var data = PointLight._combinedData;
8056
8063
  var cullingMask = this.cullingMask;
8057
8064
  data.cullingMask[cullingMaskStart] = cullingMask & 65535;
8058
8065
  data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
8059
- data.color[colorStart] = lightColor.r;
8060
- data.color[colorStart + 1] = lightColor.g;
8061
- data.color[colorStart + 2] = lightColor.b;
8066
+ if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
8067
+ data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
8068
+ data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
8069
+ data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
8070
+ } else {
8071
+ data.color[colorStart] = lightColor.r;
8072
+ data.color[colorStart + 1] = lightColor.g;
8073
+ data.color[colorStart + 2] = lightColor.b;
8074
+ }
8062
8075
  data.position[positionStart] = lightPosition.x;
8063
8076
  data.position[positionStart + 1] = lightPosition.y;
8064
8077
  data.position[positionStart + 2] = lightPosition.z;
@@ -8151,16 +8164,22 @@ __decorate([
8151
8164
  var distanceStart = lightIndex;
8152
8165
  var penumbraCosStart = lightIndex;
8153
8166
  var angleCosStart = lightIndex;
8154
- var color = this._getLightColor();
8167
+ var lightColor = this._getLightIntensityColor();
8155
8168
  var position = this.position;
8156
8169
  var direction = this.direction;
8157
8170
  var data = SpotLight._combinedData;
8158
8171
  var cullingMask = this.cullingMask;
8159
8172
  data.cullingMask[cullingMaskStart] = cullingMask & 65535;
8160
8173
  data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
8161
- data.color[colorStart] = color.r;
8162
- data.color[colorStart + 1] = color.g;
8163
- data.color[colorStart + 2] = color.b;
8174
+ if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
8175
+ data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
8176
+ data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
8177
+ data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
8178
+ } else {
8179
+ data.color[colorStart] = lightColor.r;
8180
+ data.color[colorStart + 1] = lightColor.g;
8181
+ data.color[colorStart + 2] = lightColor.b;
8182
+ }
8164
8183
  data.position[positionStart] = position.x;
8165
8184
  data.position[positionStart + 1] = position.y;
8166
8185
  data.position[positionStart + 2] = position.z;
@@ -9518,11 +9537,11 @@ var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;"; // esli
9518
9537
 
9519
9538
  var common = "#define GLSLIFY 1\n#define PI 3.14159265359\n#define RECIPROCAL_PI 0.31830988618\n#define EPSILON 1e-6\n#define LOG2 1.442695\n#define saturate( a ) clamp( a, 0.0, 1.0 )\nfloat pow2(float x){return x*x;}vec4 RGBMToLinear(vec4 value,float maxRange){return vec4(value.rgb*value.a*maxRange,1.0);}vec4 gammaToLinear(vec4 srgbIn){return vec4(pow(srgbIn.rgb,vec3(2.2)),srgbIn.a);}vec4 linearToGamma(vec4 linearIn){return vec4(pow(linearIn.rgb,vec3(1.0/2.2)),linearIn.a);}\n#ifdef GRAPHICS_API_WEBGL2\n#define INVERSE_MAT(mat) inverse(mat)\n#else\nmat2 inverseMat(mat2 m){return mat2(m[1][1],-m[0][1],-m[1][0],m[0][0])/(m[0][0]*m[1][1]-m[0][1]*m[1][0]);}mat3 inverseMat(mat3 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2];float a10=m[1][0],a11=m[1][1],a12=m[1][2];float a20=m[2][0],a21=m[2][1],a22=m[2][2];float b01=a22*a11-a12*a21;float b11=-a22*a10+a12*a20;float b21=a21*a10-a11*a20;float det=a00*b01+a01*b11+a02*b21;return mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),b11,(a22*a00-a02*a20),(-a12*a00+a02*a10),b21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;}mat4 inverseMat(mat4 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2],a03=m[0][3],a10=m[1][0],a11=m[1][1],a12=m[1][2],a13=m[1][3],a20=m[2][0],a21=m[2][1],a22=m[2][2],a23=m[2][3],a30=m[3][0],a31=m[3][1],a32=m[3][2],a33=m[3][3],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;return mat4(a11*b11-a12*b10+a13*b09,a02*b10-a01*b11-a03*b09,a31*b05-a32*b04+a33*b03,a22*b04-a21*b05-a23*b03,a12*b08-a10*b11-a13*b07,a00*b11-a02*b08+a03*b07,a32*b02-a30*b05-a33*b01,a20*b05-a22*b02+a23*b01,a10*b10-a11*b08+a13*b06,a01*b08-a00*b10-a03*b06,a30*b04-a31*b02+a33*b00,a21*b02-a20*b04-a23*b00,a11*b07-a10*b09-a12*b06,a00*b09-a01*b07+a02*b06,a31*b01-a30*b03-a32*b00,a20*b03-a21*b01+a22*b00)/det;}\n#define INVERSE_MAT(mat) inverseMat(mat)\n#endif\n"; // eslint-disable-line
9520
9539
 
9521
- var common_vert = "#define GLSLIFY 1\nattribute vec3 POSITION;\n#ifdef RENDERER_HAS_UV\nattribute vec2 TEXCOORD_0;\n#endif\n#ifdef RENDERER_HAS_UV1\nattribute vec2 TEXCOORD_1;\n#endif\n#ifdef RENDERER_HAS_SKIN\nattribute vec4 JOINTS_0;attribute vec4 WEIGHTS_0;\n#ifdef RENDERER_USE_JOINT_TEXTURE\nuniform sampler2D renderer_JointSampler;uniform float renderer_JointCount;mat4 getJointMatrix(sampler2D smp,float index){float base=index/renderer_JointCount;float hf=0.5/renderer_JointCount;float v=base+hf;vec4 m0=texture2D(smp,vec2(0.125,v));vec4 m1=texture2D(smp,vec2(0.375,v));vec4 m2=texture2D(smp,vec2(0.625,v));vec4 m3=texture2D(smp,vec2(0.875,v));return mat4(m0,m1,m2,m3);}\n#else\nuniform mat4 renderer_JointMatrix[RENDERER_JOINTS_NUM];\n#endif\n#endif\n#ifdef RENDERER_HAS_VERTEXCOLOR\nattribute vec4 COLOR_0;\n#endif\n#include <transform_declare>\n#include <camera_declare>\nuniform vec4 material_TilingOffset;\n#ifndef MATERIAL_OMIT_NORMAL\n#ifdef RENDERER_HAS_NORMAL\nattribute vec3 NORMAL;\n#endif\n#ifdef RENDERER_HAS_TANGENT\nattribute vec4 TANGENT;\n#endif\n#endif\n"; // eslint-disable-line
9540
+ var common_vert = "#define GLSLIFY 1\nattribute vec3 POSITION;\n#ifdef RENDERER_HAS_UV\nattribute vec2 TEXCOORD_0;\n#endif\n#ifdef RENDERER_HAS_UV1\nattribute vec2 TEXCOORD_1;\n#endif\n#ifdef RENDERER_HAS_SKIN\nattribute vec4 JOINTS_0;attribute vec4 WEIGHTS_0;\n#ifdef RENDERER_USE_JOINT_TEXTURE\nuniform sampler2D renderer_JointSampler;uniform float renderer_JointCount;mat4 getJointMatrix(sampler2D smp,float index){float base=index/renderer_JointCount;float hf=0.5/renderer_JointCount;float v=base+hf;vec4 m0=texture2D(smp,vec2(0.125,v));vec4 m1=texture2D(smp,vec2(0.375,v));vec4 m2=texture2D(smp,vec2(0.625,v));vec4 m3=texture2D(smp,vec2(0.875,v));return mat4(m0,m1,m2,m3);}\n#else\nuniform mat4 renderer_JointMatrix[RENDERER_JOINTS_NUM];\n#endif\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nattribute vec4 COLOR_0;\n#endif\n#include <transform_declare>\n#include <camera_declare>\nuniform vec4 material_TilingOffset;\n#ifndef MATERIAL_OMIT_NORMAL\n#ifdef RENDERER_HAS_NORMAL\nattribute vec3 NORMAL;\n#endif\n#ifdef RENDERER_HAS_TANGENT\nattribute vec4 TANGENT;\n#endif\n#endif\n"; // eslint-disable-line
9522
9541
 
9523
9542
  var transform_declare = "#define GLSLIFY 1\nuniform mat4 renderer_LocalMat;uniform mat4 renderer_ModelMat;uniform mat4 camera_ViewMat;uniform mat4 camera_ProjMat;uniform mat4 renderer_MVMat;uniform mat4 renderer_MVPMat;uniform mat4 renderer_NormalMat;"; // eslint-disable-line
9524
9543
 
9525
- var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
9544
+ var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
9526
9545
 
9527
9546
  var FogFragmentDeclaration = "#define GLSLIFY 1\n#if SCENE_FOG_MODE != 0\nvarying vec3 v_positionVS;uniform vec4 scene_FogColor;uniform vec4 scene_FogParams;float ComputeFogIntensity(float fogDepth){\n#if SCENE_FOG_MODE == 1\nreturn clamp(fogDepth*scene_FogParams.x+scene_FogParams.y,0.0,1.0);\n#elif SCENE_FOG_MODE == 2\nreturn clamp(exp2(-fogDepth*scene_FogParams.z),0.0,1.0);\n#elif SCENE_FOG_MODE == 3\nfloat factor=fogDepth*scene_FogParams.w;return clamp(exp2(-factor*factor),0.0,1.0);\n#endif\n}\n#endif\n"; // eslint-disable-line
9528
9547
 
@@ -9542,7 +9561,7 @@ var blendShape_input = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_BLENDSHAPE\n#ifde
9542
9561
 
9543
9562
  var blendShape_vert = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_BLENDSHAPE\n#ifdef RENDERER_BLENDSHAPE_USE_TEXTURE\nint vertexOffset=gl_VertexID*renderer_BlendShapeTextureInfo.x;for(int i=0;i<RENDERER_BLENDSHAPE_COUNT;i++){int vertexElementOffset=vertexOffset;float weight=renderer_BlendShapeWeights[i];position.xyz+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#ifndef MATERIAL_OMIT_NORMAL\n#if defined( RENDERER_HAS_NORMAL ) && defined( RENDERER_BLENDSHAPE_HAS_NORMAL )\nvertexElementOffset+=1;normal+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#endif\n#if defined( RENDERER_HAS_TANGENT ) && defined(RENDERER_BLENDSHAPE_HAS_TANGENT) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\nvertexElementOffset+=1;tangent.xyz+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#endif\n#endif\n}\n#else\nposition.xyz+=POSITION_BS0*renderer_BlendShapeWeights[0];position.xyz+=POSITION_BS1*renderer_BlendShapeWeights[1];\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) && defined( RENDERER_BLENDSHAPE_HAS_TANGENT )\n#ifndef MATERIAL_OMIT_NORMAL\n#ifdef RENDERER_HAS_NORMAL\nnormal+=NORMAL_BS0*renderer_BlendShapeWeights[0];normal+=NORMAL_BS1*renderer_BlendShapeWeights[1];\n#endif\n#if defined( RENDERER_HAS_TANGENT ) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\ntangent.xyz+=TANGENT_BS0*renderer_BlendShapeWeights[0];tangent.xyz+=TANGENT_BS1*renderer_BlendShapeWeights[1];\n#endif\n#endif\n#else\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) || defined( RENDERER_BLENDSHAPE_HAS_TANGENT )\n#ifndef MATERIAL_OMIT_NORMAL\nposition.xyz+=POSITION_BS2*renderer_BlendShapeWeights[2];position.xyz+=POSITION_BS3*renderer_BlendShapeWeights[3];\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) && defined( RENDERER_HAS_NORMAL )\nnormal+=NORMAL_BS0*renderer_BlendShapeWeights[0];normal+=NORMAL_BS1*renderer_BlendShapeWeights[1];normal+=NORMAL_BS2*renderer_BlendShapeWeights[2];normal+=NORMAL_BS3*renderer_BlendShapeWeights[3];\n#endif\n#if defined(RENDERER_BLENDSHAPE_HAS_TANGENT) && defined( RENDERER_HAS_TANGENT ) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\ntangent.xyz+=TANGENT_BS0*renderer_BlendShapeWeights[0];tangent.xyz+=TANGENT_BS1*renderer_BlendShapeWeights[1];tangent.xyz+=TANGENT_BS2*renderer_BlendShapeWeights[2];tangent.xyz+=TANGENT_BS3*renderer_BlendShapeWeights[3];\n#endif\n#endif\n#else\nposition.xyz+=POSITION_BS2*renderer_BlendShapeWeights[2];position.xyz+=POSITION_BS3*renderer_BlendShapeWeights[3];position.xyz+=POSITION_BS4*renderer_BlendShapeWeights[4];position.xyz+=POSITION_BS5*renderer_BlendShapeWeights[5];position.xyz+=POSITION_BS6*renderer_BlendShapeWeights[6];position.xyz+=POSITION_BS7*renderer_BlendShapeWeights[7];\n#endif\n#endif\n#endif\n#endif\n"; // eslint-disable-line
9544
9563
 
9545
- var color_vert = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_VERTEXCOLOR\nv_color=COLOR_0;\n#endif\n"; // eslint-disable-line
9564
+ var color_vert = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nv_color=COLOR_0;\n#endif\n"; // eslint-disable-line
9546
9565
 
9547
9566
  var FogVertex = "#define GLSLIFY 1\n#if SCENE_FOG_MODE != 0\nvec4 positionVS=renderer_MVMat*position;v_positionVS=positionVS.xyz/positionVS.w;\n#endif\n"; // eslint-disable-line
9548
9567
 
@@ -9562,11 +9581,11 @@ var light_frag_define = "#define GLSLIFY 1\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nstr
9562
9581
 
9563
9582
  var mobile_material_frag = "#define GLSLIFY 1\nuniform vec4 material_EmissiveColor;uniform vec4 material_BaseColor;uniform vec4 material_SpecularColor;uniform float material_Shininess;uniform float material_NormalIntensity;uniform float material_AlphaCutoff;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nuniform sampler2D material_EmissiveTexture;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nuniform sampler2D material_BaseTexture;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nuniform sampler2D material_SpecularTexture;\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nuniform sampler2D material_NormalTexture;\n#endif\n"; // eslint-disable-line
9564
9583
 
9565
- var begin_mobile_frag = "#define GLSLIFY 1\nvec4 ambient=vec4(0.0);vec4 emission=material_EmissiveColor;vec4 diffuse=material_BaseColor;vec4 specular=material_SpecularColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveTextureColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveTextureColor=gammaToLinear(emissiveTextureColor);\n#endif\nemission*=emissiveTextureColor;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 diffuseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\ndiffuseTextureColor=gammaToLinear(diffuseTextureColor);\n#endif\ndiffuse*=diffuseTextureColor;\n#endif\n#ifdef RENDERER_HAS_VERTEXCOLOR\ndiffuse*=v_color;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nvec4 specularTextureColor=texture2D(material_SpecularTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularTextureColor=gammaToLinear(specularTextureColor);\n#endif\nspecular*=specularTextureColor;\n#endif\nambient=vec4(scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity,1.0)*diffuse;"; // eslint-disable-line
9584
+ var begin_mobile_frag = "#define GLSLIFY 1\nvec4 ambient=vec4(0.0);vec4 emission=material_EmissiveColor;vec4 diffuse=material_BaseColor;vec4 specular=material_SpecularColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveTextureColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveTextureColor=gammaToLinear(emissiveTextureColor);\n#endif\nemission*=emissiveTextureColor;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 diffuseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\ndiffuseTextureColor=gammaToLinear(diffuseTextureColor);\n#endif\ndiffuse*=diffuseTextureColor;\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\ndiffuse*=v_color;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nvec4 specularTextureColor=texture2D(material_SpecularTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularTextureColor=gammaToLinear(specularTextureColor);\n#endif\nspecular*=specularTextureColor;\n#endif\nambient=vec4(scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity,1.0)*diffuse;"; // eslint-disable-line
9566
9585
 
9567
9586
  var begin_viewdir_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_NEED_WORLD_POS\nvec3 V=normalize(camera_Position-v_pos);\n#endif\n"; // eslint-disable-line
9568
9587
 
9569
- var mobile_blinnphong_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nmat3 tbn=getTBN();vec3 N=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv);\n#else\nvec3 N=getNormal();\n#endif\nvec3 lightDiffuse=vec3(0.0,0.0,0.0);vec3 lightSpecular=vec3(0.0,0.0,0.0);float shadowAttenuation=1.0;\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nshadowAttenuation=1.0;\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nshadowAttenuation*=sampleShadowMap();int sunIndex=int(scene_ShadowInfo.z);\n#endif\nDirectLight directionalLight;for(int i=0;i<SCENE_DIRECT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_DirectLightCullingMask[i]))continue;directionalLight.color=scene_DirectLightColor[i];\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nif(i==sunIndex){directionalLight.color*=shadowAttenuation;}\n#endif\ndirectionalLight.direction=scene_DirectLightDirection[i];float d=max(dot(N,-directionalLight.direction),0.0);lightDiffuse+=directionalLight.color*d;vec3 halfDir=normalize(V-directionalLight.direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess);lightSpecular+=directionalLight.color*s;}\n#endif\n#ifdef SCENE_POINT_LIGHT_COUNT\nPointLight pointLight;for(int i=0;i<SCENE_POINT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_PointLightCullingMask[i]))continue;pointLight.color=scene_PointLightColor[i];pointLight.position=scene_PointLightPosition[i];pointLight.distance=scene_PointLightDistance[i];vec3 direction=v_pos-pointLight.position;float dist=length(direction);direction/=dist;float decay=clamp(1.0-pow(dist/pointLight.distance,4.0),0.0,1.0);float d=max(dot(N,-direction),0.0)*decay;lightDiffuse+=pointLight.color*d;vec3 halfDir=normalize(V-direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decay;lightSpecular+=pointLight.color*s;}\n#endif\n#ifdef SCENE_SPOT_LIGHT_COUNT\nSpotLight spotLight;for(int i=0;i<SCENE_SPOT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_SpotLightCullingMask[i]))continue;spotLight.color=scene_SpotLightColor[i];spotLight.position=scene_SpotLightPosition[i];spotLight.direction=scene_SpotLightDirection[i];spotLight.distance=scene_SpotLightDistance[i];spotLight.angleCos=scene_SpotLightAngleCos[i];spotLight.penumbraCos=scene_SpotLightPenumbraCos[i];vec3 direction=spotLight.position-v_pos;float lightDistance=length(direction);direction/=lightDistance;float angleCos=dot(direction,-spotLight.direction);float decay=clamp(1.0-pow(lightDistance/spotLight.distance,4.0),0.0,1.0);float spotEffect=smoothstep(spotLight.penumbraCos,spotLight.angleCos,angleCos);float decayTotal=decay*spotEffect;float d=max(dot(N,direction),0.0)*decayTotal;lightDiffuse+=spotLight.color*d;vec3 halfDir=normalize(V+direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decayTotal;lightSpecular+=spotLight.color*s;}\n#endif\ndiffuse*=vec4(lightDiffuse,1.0);specular*=vec4(lightSpecular,1.0);\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(diffuse.a<material_AlphaCutoff){discard;}\n#endif\n"; // eslint-disable-line
9588
+ var mobile_blinnphong_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nmat3 tbn=getTBN(gl_FrontFacing);vec3 N=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv,gl_FrontFacing);\n#else\nvec3 N=getNormal(gl_FrontFacing);\n#endif\nvec3 lightDiffuse=vec3(0.0,0.0,0.0);vec3 lightSpecular=vec3(0.0,0.0,0.0);float shadowAttenuation=1.0;\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nshadowAttenuation=1.0;\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nshadowAttenuation*=sampleShadowMap();int sunIndex=int(scene_ShadowInfo.z);\n#endif\nDirectLight directionalLight;for(int i=0;i<SCENE_DIRECT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_DirectLightCullingMask[i]))continue;directionalLight.color=scene_DirectLightColor[i];\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nif(i==sunIndex){directionalLight.color*=shadowAttenuation;}\n#endif\ndirectionalLight.direction=scene_DirectLightDirection[i];float d=max(dot(N,-directionalLight.direction),0.0);lightDiffuse+=directionalLight.color*d;vec3 halfDir=normalize(V-directionalLight.direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess);lightSpecular+=directionalLight.color*s;}\n#endif\n#ifdef SCENE_POINT_LIGHT_COUNT\nPointLight pointLight;for(int i=0;i<SCENE_POINT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_PointLightCullingMask[i]))continue;pointLight.color=scene_PointLightColor[i];pointLight.position=scene_PointLightPosition[i];pointLight.distance=scene_PointLightDistance[i];vec3 direction=v_pos-pointLight.position;float dist=length(direction);direction/=dist;float decay=clamp(1.0-pow(dist/pointLight.distance,4.0),0.0,1.0);float d=max(dot(N,-direction),0.0)*decay;lightDiffuse+=pointLight.color*d;vec3 halfDir=normalize(V-direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decay;lightSpecular+=pointLight.color*s;}\n#endif\n#ifdef SCENE_SPOT_LIGHT_COUNT\nSpotLight spotLight;for(int i=0;i<SCENE_SPOT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_SpotLightCullingMask[i]))continue;spotLight.color=scene_SpotLightColor[i];spotLight.position=scene_SpotLightPosition[i];spotLight.direction=scene_SpotLightDirection[i];spotLight.distance=scene_SpotLightDistance[i];spotLight.angleCos=scene_SpotLightAngleCos[i];spotLight.penumbraCos=scene_SpotLightPenumbraCos[i];vec3 direction=spotLight.position-v_pos;float lightDistance=length(direction);direction/=lightDistance;float angleCos=dot(direction,-spotLight.direction);float decay=clamp(1.0-pow(lightDistance/spotLight.distance,4.0),0.0,1.0);float spotEffect=smoothstep(spotLight.penumbraCos,spotLight.angleCos,angleCos);float decayTotal=decay*spotEffect;float d=max(dot(N,direction),0.0)*decayTotal;lightDiffuse+=spotLight.color*d;vec3 halfDir=normalize(V+direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decayTotal;lightSpecular+=spotLight.color*s;}\n#endif\ndiffuse*=vec4(lightDiffuse,1.0);specular*=vec4(lightSpecular,1.0);\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(diffuse.a<material_AlphaCutoff){discard;}\n#endif\n"; // eslint-disable-line
9570
9589
 
9571
9590
  var noise_cellular = "#define GLSLIFY 1\n#include <noise_cellular_2D>\n#include <noise_cellular_3D>\n#include <noise_cellular_2x2>\n#include <noise_cellular_2x2x2>\n"; // eslint-disable-line
9572
9591
 
@@ -9602,7 +9621,7 @@ var noise_simplex_4D = "#define GLSLIFY 1\nvec4 grad4(float j,vec4 ip){const vec
9602
9621
 
9603
9622
  var pbr_frag_define = "#define GLSLIFY 1\nuniform float material_AlphaCutoff;uniform vec4 material_BaseColor;uniform float material_Metal;uniform float material_Roughness;uniform float material_IOR;uniform vec3 material_PBRSpecularColor;uniform float material_Glossiness;uniform vec3 material_EmissiveColor;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nuniform float material_ClearCoat;uniform float material_ClearCoatRoughness;\n#endif\nuniform float material_NormalIntensity;uniform float material_OcclusionIntensity;uniform float material_OcclusionTextureCoord;\n#ifdef MATERIAL_HAS_BASETEXTURE\nuniform sampler2D material_BaseTexture;\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nuniform sampler2D material_NormalTexture;\n#endif\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nuniform sampler2D material_EmissiveTexture;\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nuniform sampler2D material_RoughnessMetallicTexture;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nuniform sampler2D material_SpecularGlossinessTexture;\n#endif\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nuniform sampler2D material_OcclusionTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nuniform sampler2D material_ClearCoatTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nuniform sampler2D material_ClearCoatRoughnessTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\nuniform sampler2D material_ClearCoatNormalTexture;\n#endif\nstruct ReflectedLight{vec3 directDiffuse;vec3 directSpecular;vec3 indirectDiffuse;vec3 indirectSpecular;};struct Geometry{vec3 position;vec3 normal;vec3 viewDir;float dotNV;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatNormal;float clearCoatDotNV;\n#endif\n};struct Material{vec3 diffuseColor;float roughness;vec3 specularColor;float opacity;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nfloat clearCoat;float clearCoatRoughness;\n#endif\n};"; // eslint-disable-line
9604
9623
 
9605
- var pbr_helper = "#define GLSLIFY 1\n#include <normal_get>\nfloat computeSpecularOcclusion(float ambientOcclusion,float roughness,float dotNV){return saturate(pow(dotNV+ambientOcclusion,exp2(-16.0*roughness-1.0))-1.0+ambientOcclusion);}float getAARoughnessFactor(vec3 normal){\n#ifdef HAS_DERIVATIVES\nvec3 dxy=max(abs(dFdx(normal)),abs(dFdy(normal)));return 0.04+max(max(dxy.x,dxy.y),dxy.z);\n#else\nreturn 0.04;\n#endif\n}void initGeometry(out Geometry geometry){geometry.position=v_pos;geometry.viewDir=normalize(camera_Position-v_pos);\n#if defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE)\nmat3 tbn=getTBN();\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\ngeometry.normal=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.normal=getNormal();\n#endif\ngeometry.dotNV=saturate(dot(geometry.normal,geometry.viewDir));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\ngeometry.clearCoatNormal=getNormalByNormalTexture(tbn,material_ClearCoatNormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.clearCoatNormal=getNormal();\n#endif\ngeometry.clearCoatDotNV=saturate(dot(geometry.clearCoatNormal,geometry.viewDir));\n#endif\n}void initMaterial(out Material material,const in Geometry geometry){vec4 baseColor=material_BaseColor;float metal=material_Metal;float roughness=material_Roughness;vec3 specularColor=material_PBRSpecularColor;float glossiness=material_Glossiness;float alphaCutoff=material_AlphaCutoff;float F0=pow2((material_IOR-1.0)/(material_IOR+1.0));\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 baseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nbaseTextureColor=gammaToLinear(baseTextureColor);\n#endif\nbaseColor*=baseTextureColor;\n#endif\n#ifdef RENDERER_HAS_VERTEXCOLOR\nbaseColor*=v_color;\n#endif\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(baseColor.a<alphaCutoff){discard;}\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nvec4 metalRoughMapColor=texture2D(material_RoughnessMetallicTexture,v_uv);roughness*=metalRoughMapColor.g;metal*=metalRoughMapColor.b;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nvec4 specularGlossinessColor=texture2D(material_SpecularGlossinessTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularGlossinessColor=gammaToLinear(specularGlossinessColor);\n#endif\nspecularColor*=specularGlossinessColor.rgb;glossiness*=specularGlossinessColor.a;\n#endif\n#ifdef IS_METALLIC_WORKFLOW\nmaterial.diffuseColor=baseColor.rgb*(1.0-metal);material.specularColor=mix(vec3(F0),baseColor.rgb,metal);material.roughness=roughness;\n#else\nfloat specularStrength=max(max(specularColor.r,specularColor.g),specularColor.b);material.diffuseColor=baseColor.rgb*(1.0-specularStrength);material.specularColor=specularColor;material.roughness=1.0-glossiness;\n#endif\nmaterial.roughness=max(material.roughness,getAARoughnessFactor(geometry.normal));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nmaterial.clearCoat=material_ClearCoat;material.clearCoatRoughness=material_ClearCoatRoughness;\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nmaterial.clearCoat*=texture2D(material_ClearCoatTexture,v_uv).r;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nmaterial.clearCoatRoughness*=texture2D(material_ClearCoatRoughnessTexture,v_uv).g;\n#endif\nmaterial.clearCoat=saturate(material.clearCoat);material.clearCoatRoughness=max(material.clearCoatRoughness,getAARoughnessFactor(geometry.clearCoatNormal));\n#endif\n#ifdef MATERIAL_IS_TRANSPARENT\nmaterial.opacity=baseColor.a;\n#else\nmaterial.opacity=1.0;\n#endif\n}\n#include <brdf>\n#include <direct_irradiance_frag_define>\n#include <ibl_frag_define>\n"; // eslint-disable-line
9624
+ var pbr_helper = "#define GLSLIFY 1\n#include <normal_get>\nfloat computeSpecularOcclusion(float ambientOcclusion,float roughness,float dotNV){return saturate(pow(dotNV+ambientOcclusion,exp2(-16.0*roughness-1.0))-1.0+ambientOcclusion);}float getAARoughnessFactor(vec3 normal){\n#ifdef HAS_DERIVATIVES\nvec3 dxy=max(abs(dFdx(normal)),abs(dFdy(normal)));return 0.04+max(max(dxy.x,dxy.y),dxy.z);\n#else\nreturn 0.04;\n#endif\n}void initGeometry(out Geometry geometry,bool isFrontFacing){geometry.position=v_pos;geometry.viewDir=normalize(camera_Position-v_pos);\n#if defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE)\nmat3 tbn=getTBN(isFrontFacing);\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\ngeometry.normal=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv,isFrontFacing);\n#else\ngeometry.normal=getNormal(isFrontFacing);\n#endif\ngeometry.dotNV=saturate(dot(geometry.normal,geometry.viewDir));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\ngeometry.clearCoatNormal=getNormalByNormalTexture(tbn,material_ClearCoatNormalTexture,material_NormalIntensity,v_uv,isFrontFacing);\n#else\ngeometry.clearCoatNormal=getNormal(isFrontFacing);\n#endif\ngeometry.clearCoatDotNV=saturate(dot(geometry.clearCoatNormal,geometry.viewDir));\n#endif\n}void initMaterial(out Material material,const in Geometry geometry){vec4 baseColor=material_BaseColor;float metal=material_Metal;float roughness=material_Roughness;vec3 specularColor=material_PBRSpecularColor;float glossiness=material_Glossiness;float alphaCutoff=material_AlphaCutoff;float F0=pow2((material_IOR-1.0)/(material_IOR+1.0));\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 baseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nbaseTextureColor=gammaToLinear(baseTextureColor);\n#endif\nbaseColor*=baseTextureColor;\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nbaseColor*=v_color;\n#endif\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(baseColor.a<alphaCutoff){discard;}\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nvec4 metalRoughMapColor=texture2D(material_RoughnessMetallicTexture,v_uv);roughness*=metalRoughMapColor.g;metal*=metalRoughMapColor.b;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nvec4 specularGlossinessColor=texture2D(material_SpecularGlossinessTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularGlossinessColor=gammaToLinear(specularGlossinessColor);\n#endif\nspecularColor*=specularGlossinessColor.rgb;glossiness*=specularGlossinessColor.a;\n#endif\n#ifdef IS_METALLIC_WORKFLOW\nmaterial.diffuseColor=baseColor.rgb*(1.0-metal);material.specularColor=mix(vec3(F0),baseColor.rgb,metal);material.roughness=roughness;\n#else\nfloat specularStrength=max(max(specularColor.r,specularColor.g),specularColor.b);material.diffuseColor=baseColor.rgb*(1.0-specularStrength);material.specularColor=specularColor;material.roughness=1.0-glossiness;\n#endif\nmaterial.roughness=max(material.roughness,getAARoughnessFactor(geometry.normal));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nmaterial.clearCoat=material_ClearCoat;material.clearCoatRoughness=material_ClearCoatRoughness;\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nmaterial.clearCoat*=texture2D(material_ClearCoatTexture,v_uv).r;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nmaterial.clearCoatRoughness*=texture2D(material_ClearCoatRoughnessTexture,v_uv).g;\n#endif\nmaterial.clearCoat=saturate(material.clearCoat);material.clearCoatRoughness=max(material.clearCoatRoughness,getAARoughnessFactor(geometry.clearCoatNormal));\n#endif\n#ifdef MATERIAL_IS_TRANSPARENT\nmaterial.opacity=baseColor.a;\n#else\nmaterial.opacity=1.0;\n#endif\n}\n#include <brdf>\n#include <direct_irradiance_frag_define>\n#include <ibl_frag_define>\n"; // eslint-disable-line
9606
9625
 
9607
9626
  var brdf = "#define GLSLIFY 1\nfloat F_Schlick(float dotLH){return 0.04+0.96*(pow(1.0-dotLH,5.0));}vec3 F_Schlick(vec3 specularColor,float dotLH){float fresnel=exp2((-5.55473*dotLH-6.98316)*dotLH);return(1.0-specularColor)*fresnel+specularColor;}float G_GGX_SmithCorrelated(float alpha,float dotNL,float dotNV){float a2=pow2(alpha);float gv=dotNL*sqrt(a2+(1.0-a2)*pow2(dotNV));float gl=dotNV*sqrt(a2+(1.0-a2)*pow2(dotNL));return 0.5/max(gv+gl,EPSILON);}float D_GGX(float alpha,float dotNH){float a2=pow2(alpha);float denom=pow2(dotNH)*(a2-1.0)+1.0;return RECIPROCAL_PI*a2/pow2(denom);}vec3 BRDF_Specular_GGX(vec3 incidentDirection,vec3 viewDir,vec3 normal,vec3 specularColor,float roughness){float alpha=pow2(roughness);vec3 halfDir=normalize(incidentDirection+viewDir);float dotNL=saturate(dot(normal,incidentDirection));float dotNV=saturate(dot(normal,viewDir));float dotNH=saturate(dot(normal,halfDir));float dotLH=saturate(dot(incidentDirection,halfDir));vec3 F=F_Schlick(specularColor,dotLH);float G=G_GGX_SmithCorrelated(alpha,dotNL,dotNV);float D=D_GGX(alpha,dotNH);return F*(G*D);}vec3 BRDF_Diffuse_Lambert(vec3 diffuseColor){return RECIPROCAL_PI*diffuseColor;}"; // eslint-disable-line
9608
9627
 
@@ -9610,7 +9629,7 @@ var direct_irradiance_frag_define = "#define GLSLIFY 1\n#include <ShadowFragment
9610
9629
 
9611
9630
  var ibl_frag_define = "#define GLSLIFY 1\nvec3 getLightProbeIrradiance(vec3 sh[9],vec3 normal){normal.x=-normal.x;vec3 result=sh[0]+sh[1]*(normal.y)+sh[2]*(normal.z)+sh[3]*(normal.x)+sh[4]*(normal.y*normal.x)+sh[5]*(normal.y*normal.z)+sh[6]*(3.0*normal.z*normal.z-1.0)+sh[7]*(normal.z*normal.x)+sh[8]*(normal.x*normal.x-normal.y*normal.y);return max(result,vec3(0.0));}vec3 envBRDFApprox(vec3 specularColor,float roughness,float dotNV){const vec4 c0=vec4(-1,-0.0275,-0.572,0.022);const vec4 c1=vec4(1,0.0425,1.04,-0.04);vec4 r=roughness*c0+c1;float a004=min(r.x*r.x,exp2(-9.28*dotNV))*r.x+r.y;vec2 AB=vec2(-1.04,1.04)*a004+r.zw;return specularColor*AB.x+AB.y;}float getSpecularMIPLevel(float roughness,int maxMIPLevel){return roughness*float(maxMIPLevel);}vec3 getLightProbeRadiance(vec3 viewDir,vec3 normal,float roughness,int maxMIPLevel,float specularIntensity){\n#ifndef SCENE_USE_SPECULAR_ENV\nreturn vec3(0);\n#else\nvec3 reflectVec=reflect(-viewDir,normal);reflectVec.x=-reflectVec.x;float specularMIPLevel=getSpecularMIPLevel(roughness,maxMIPLevel);\n#ifdef HAS_TEX_LOD\nvec4 envMapColor=textureCubeLodEXT(scene_EnvSpecularSampler,reflectVec,specularMIPLevel);\n#else\nvec4 envMapColor=textureCube(scene_EnvSpecularSampler,reflectVec,specularMIPLevel);\n#endif\n#ifdef SCENE_IS_DECODE_ENV_RGBM\nenvMapColor.rgb=RGBMToLinear(envMapColor,5.0).rgb;\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nenvMapColor=linearToGamma(envMapColor);\n#endif\n#else\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nenvMapColor=gammaToLinear(envMapColor);\n#endif\n#endif\nreturn envMapColor.rgb*specularIntensity;\n#endif\n}"; // eslint-disable-line
9612
9631
 
9613
- var pbr_frag = "#define GLSLIFY 1\nGeometry geometry;Material material;ReflectedLight reflectedLight=ReflectedLight(vec3(0.0),vec3(0.0),vec3(0.0),vec3(0.0));initGeometry(geometry);initMaterial(material,geometry);addTotalDirectRadiance(geometry,material,reflectedLight);\n#ifdef SCENE_USE_SH\nvec3 irradiance=getLightProbeIrradiance(scene_EnvSH,geometry.normal);\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nirradiance=linearToGamma(vec4(irradiance,1.0)).rgb;\n#endif\nirradiance*=scene_EnvMapLight.diffuseIntensity;\n#else\nvec3 irradiance=scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity;irradiance*=PI;\n#endif\nreflectedLight.indirectDiffuse+=irradiance*BRDF_Diffuse_Lambert(material.diffuseColor);vec3 radiance=getLightProbeRadiance(geometry.viewDir,geometry.normal,material.roughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);float radianceAttenuation=1.0;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatRadiance=getLightProbeRadiance(geometry.viewDir,geometry.clearCoatNormal,material.clearCoatRoughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);reflectedLight.indirectSpecular+=clearCoatRadiance*material.clearCoat*envBRDFApprox(vec3(0.04),material.clearCoatRoughness,geometry.clearCoatDotNV);radianceAttenuation-=material.clearCoat*F_Schlick(geometry.clearCoatDotNV);\n#endif\nreflectedLight.indirectSpecular+=radianceAttenuation*radiance*envBRDFApprox(material.specularColor,material.roughness,geometry.dotNV);\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nvec2 aoUV=v_uv;\n#ifdef RENDERER_HAS_UV1\nif(material_OcclusionTextureCoord==1.0){aoUV=v_uv1;}\n#endif\nfloat ambientOcclusion=(texture2D(material_OcclusionTexture,aoUV).r-1.0)*material_OcclusionIntensity+1.0;reflectedLight.indirectDiffuse*=ambientOcclusion;\n#ifdef SCENE_USE_SPECULAR_ENV\nreflectedLight.indirectSpecular*=computeSpecularOcclusion(ambientOcclusion,material.roughness,geometry.dotNV);\n#endif\n#endif\nvec3 emissiveRadiance=material_EmissiveColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveColor=gammaToLinear(emissiveColor);\n#endif\nemissiveRadiance*=emissiveColor.rgb;\n#endif\nvec3 totalRadiance=reflectedLight.directDiffuse+reflectedLight.indirectDiffuse+reflectedLight.directSpecular+reflectedLight.indirectSpecular+emissiveRadiance;vec4 targetColor=vec4(totalRadiance,material.opacity);gl_FragColor=targetColor;"; // eslint-disable-line
9632
+ var pbr_frag = "#define GLSLIFY 1\nGeometry geometry;Material material;ReflectedLight reflectedLight=ReflectedLight(vec3(0.0),vec3(0.0),vec3(0.0),vec3(0.0));initGeometry(geometry,gl_FrontFacing);initMaterial(material,geometry);addTotalDirectRadiance(geometry,material,reflectedLight);\n#ifdef SCENE_USE_SH\nvec3 irradiance=getLightProbeIrradiance(scene_EnvSH,geometry.normal);\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nirradiance=linearToGamma(vec4(irradiance,1.0)).rgb;\n#endif\nirradiance*=scene_EnvMapLight.diffuseIntensity;\n#else\nvec3 irradiance=scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity;irradiance*=PI;\n#endif\nreflectedLight.indirectDiffuse+=irradiance*BRDF_Diffuse_Lambert(material.diffuseColor);vec3 radiance=getLightProbeRadiance(geometry.viewDir,geometry.normal,material.roughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);float radianceAttenuation=1.0;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatRadiance=getLightProbeRadiance(geometry.viewDir,geometry.clearCoatNormal,material.clearCoatRoughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);reflectedLight.indirectSpecular+=clearCoatRadiance*material.clearCoat*envBRDFApprox(vec3(0.04),material.clearCoatRoughness,geometry.clearCoatDotNV);radianceAttenuation-=material.clearCoat*F_Schlick(geometry.clearCoatDotNV);\n#endif\nreflectedLight.indirectSpecular+=radianceAttenuation*radiance*envBRDFApprox(material.specularColor,material.roughness,geometry.dotNV);\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nvec2 aoUV=v_uv;\n#ifdef RENDERER_HAS_UV1\nif(material_OcclusionTextureCoord==1.0){aoUV=v_uv1;}\n#endif\nfloat ambientOcclusion=(texture2D(material_OcclusionTexture,aoUV).r-1.0)*material_OcclusionIntensity+1.0;reflectedLight.indirectDiffuse*=ambientOcclusion;\n#ifdef SCENE_USE_SPECULAR_ENV\nreflectedLight.indirectSpecular*=computeSpecularOcclusion(ambientOcclusion,material.roughness,geometry.dotNV);\n#endif\n#endif\nvec3 emissiveRadiance=material_EmissiveColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveColor=gammaToLinear(emissiveColor);\n#endif\nemissiveRadiance*=emissiveColor.rgb;\n#endif\nvec3 totalRadiance=reflectedLight.directDiffuse+reflectedLight.indirectDiffuse+reflectedLight.directSpecular+reflectedLight.indirectSpecular+emissiveRadiance;vec4 targetColor=vec4(totalRadiance,material.opacity);gl_FragColor=targetColor;"; // eslint-disable-line
9614
9633
 
9615
9634
  var PBRShaderLib = {
9616
9635
  pbr_frag_define: pbr_frag_define,
@@ -9639,7 +9658,7 @@ var ShadowLib = {
9639
9658
  ShadowVertex: ShadowVertex
9640
9659
  };
9641
9660
 
9642
- var normal_get = "#define GLSLIFY 1\nvec3 getNormal(){\n#ifdef RENDERER_HAS_NORMAL\nvec3 normal=normalize(v_normal);\n#elif defined(HAS_DERIVATIVES)\nvec3 pos_dx=dFdx(v_pos);vec3 pos_dy=dFdy(v_pos);vec3 normal=normalize(cross(pos_dx,pos_dy));\n#else\nvec3 normal=vec3(0,0,1);\n#endif\nnormal*=float(gl_FrontFacing)*2.0-1.0;return normal;}vec3 getNormalByNormalTexture(mat3 tbn,sampler2D normalTexture,float normalIntensity,vec2 uv){vec3 normal=texture2D(normalTexture,uv).rgb;normal=normalize(tbn*((2.0*normal-1.0)*vec3(normalIntensity,normalIntensity,1.0)));normal*=float(gl_FrontFacing)*2.0-1.0;return normal;}mat3 getTBN(){\n#if defined(RENDERER_HAS_NORMAL) && defined(RENDERER_HAS_TANGENT) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\nmat3 tbn=v_TBN;\n#else\nvec3 normal=getNormal();vec3 position=v_pos;vec2 uv=gl_FrontFacing? v_uv:-v_uv;\n#ifdef HAS_DERIVATIVES\nvec3 dp1=dFdx(position);vec3 dp2=dFdy(position);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 binormal=dp2perp*duv1.y+dp1perp*duv2.y;float invmax=inversesqrt(max(dot(tangent,tangent),dot(binormal,binormal)));mat3 tbn=mat3(tangent*invmax,binormal*invmax,normal);\n#else\nmat3 tbn=mat3(vec3(0.0),vec3(0.0),normal);\n#endif\n#endif\nreturn tbn;}"; // eslint-disable-line
9661
+ var normal_get = "#define GLSLIFY 1\nvec3 getNormal(bool isFrontFacing){\n#ifdef RENDERER_HAS_NORMAL\nvec3 normal=normalize(v_normal);\n#elif defined(HAS_DERIVATIVES)\nvec3 pos_dx=dFdx(v_pos);vec3 pos_dy=dFdy(v_pos);vec3 normal=normalize(cross(pos_dx,pos_dy));\n#else\nvec3 normal=vec3(0,0,1);\n#endif\nnormal*=float(isFrontFacing)*2.0-1.0;return normal;}vec3 getNormalByNormalTexture(mat3 tbn,sampler2D normalTexture,float normalIntensity,vec2 uv,bool isFrontFacing){vec3 normal=texture2D(normalTexture,uv).rgb;normal=normalize(tbn*((2.0*normal-1.0)*vec3(normalIntensity,normalIntensity,1.0)));normal*=float(isFrontFacing)*2.0-1.0;return normal;}mat3 getTBN(bool isFrontFacing){\n#if defined(RENDERER_HAS_NORMAL) && defined(RENDERER_HAS_TANGENT) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\nmat3 tbn=v_TBN;\n#else\nvec3 normal=getNormal(isFrontFacing);vec3 position=v_pos;vec2 uv=isFrontFacing? v_uv:-v_uv;\n#ifdef HAS_DERIVATIVES\nvec3 dp1=dFdx(position);vec3 dp2=dFdy(position);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 binormal=dp2perp*duv1.y+dp1perp*duv2.y;float invmax=inversesqrt(max(dot(tangent,tangent),dot(binormal,binormal)));mat3 tbn=mat3(tangent*invmax,binormal*invmax,normal);\n#else\nmat3 tbn=mat3(vec3(0.0),vec3(0.0),normal);\n#endif\n#endif\nreturn tbn;}"; // eslint-disable-line
9643
9662
 
9644
9663
  var ShaderLib = _extends({
9645
9664
  common: common,
@@ -11177,8 +11196,10 @@ SimpleSpriteAssembler = __decorate([
11177
11196
  _this = Renderer.call(this, entity) || this;
11178
11197
  /** The mask layers the sprite mask influence to. */ _this.influenceLayers = exports.SpriteMaskLayer.Everything;
11179
11198
  _this._sprite = null;
11180
- _this._width = undefined;
11181
- _this._height = undefined;
11199
+ _this._automaticWidth = 0;
11200
+ _this._automaticHeight = 0;
11201
+ _this._customWidth = undefined;
11202
+ _this._customHeight = undefined;
11182
11203
  _this._flipX = false;
11183
11204
  _this._flipY = false;
11184
11205
  _this._alphaCutoff = 0.5;
@@ -11198,12 +11219,11 @@ SimpleSpriteAssembler = __decorate([
11198
11219
  /**
11199
11220
  * @internal
11200
11221
  */ _proto._updateBounds = function _updateBounds(worldBounds) {
11201
- var _this_sprite;
11202
- if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
11222
+ if (this.sprite) {
11223
+ SimpleSpriteAssembler.updatePositions(this);
11224
+ } else {
11203
11225
  worldBounds.min.set(0, 0, 0);
11204
11226
  worldBounds.max.set(0, 0, 0);
11205
- } else {
11206
- SimpleSpriteAssembler.updatePositions(this);
11207
11227
  }
11208
11228
  };
11209
11229
  /**
@@ -11214,12 +11234,12 @@ SimpleSpriteAssembler = __decorate([
11214
11234
  if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
11215
11235
  return;
11216
11236
  }
11217
- // Update position.
11237
+ // Update position
11218
11238
  if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
11219
11239
  SimpleSpriteAssembler.updatePositions(this);
11220
11240
  this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
11221
11241
  }
11222
- // Update uv.
11242
+ // Update uv
11223
11243
  if (this._dirtyUpdateFlag & 0x2) {
11224
11244
  SimpleSpriteAssembler.updateUVs(this);
11225
11245
  this._dirtyUpdateFlag &= ~0x2;
@@ -11242,11 +11262,27 @@ SimpleSpriteAssembler = __decorate([
11242
11262
  this._sprite = null;
11243
11263
  this._verticesData = null;
11244
11264
  };
11265
+ _proto._calDefaultSize = function _calDefaultSize() {
11266
+ var sprite = this._sprite;
11267
+ if (sprite) {
11268
+ this._automaticWidth = sprite.width;
11269
+ this._automaticHeight = sprite.height;
11270
+ } else {
11271
+ this._automaticWidth = this._automaticHeight = 0;
11272
+ }
11273
+ this._dirtyUpdateFlag &= ~0x4;
11274
+ };
11245
11275
  _proto._onSpriteChange = function _onSpriteChange(type) {
11246
11276
  switch(type){
11247
11277
  case SpriteModifyFlags.texture:
11248
11278
  this.shaderData.setTexture(SpriteMask._textureProperty, this.sprite.texture);
11249
11279
  break;
11280
+ case SpriteModifyFlags.size:
11281
+ this._dirtyUpdateFlag |= 0x4;
11282
+ if (this._customWidth === undefined || this._customHeight === undefined) {
11283
+ this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11284
+ }
11285
+ break;
11250
11286
  case SpriteModifyFlags.region:
11251
11287
  case SpriteModifyFlags.atlasRegionOffset:
11252
11288
  this._dirtyUpdateFlag |= 0x3;
@@ -11254,22 +11290,31 @@ SimpleSpriteAssembler = __decorate([
11254
11290
  case SpriteModifyFlags.atlasRegion:
11255
11291
  this._dirtyUpdateFlag |= 0x2;
11256
11292
  break;
11293
+ case SpriteModifyFlags.pivot:
11294
+ this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11295
+ break;
11257
11296
  }
11258
11297
  };
11259
11298
  _create_class(SpriteMask, [
11260
11299
  {
11261
11300
  key: "width",
11262
11301
  get: /**
11263
- * Render width.
11302
+ * Render width (in world coordinates).
11303
+ *
11304
+ * @remarks
11305
+ * If width is set, return the set value,
11306
+ * otherwise return `SpriteMask.sprite.width`.
11264
11307
  */ function get() {
11265
- if (this._width === undefined && this._sprite) {
11266
- this.width = this._sprite.width;
11308
+ if (this._customWidth !== undefined) {
11309
+ return this._customWidth;
11310
+ } else {
11311
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
11312
+ return this._automaticWidth;
11267
11313
  }
11268
- return this._width;
11269
11314
  },
11270
11315
  set: function set(value) {
11271
- if (this._width !== value) {
11272
- this._width = value;
11316
+ if (this._customWidth !== value) {
11317
+ this._customWidth = value;
11273
11318
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11274
11319
  }
11275
11320
  }
@@ -11277,16 +11322,22 @@ SimpleSpriteAssembler = __decorate([
11277
11322
  {
11278
11323
  key: "height",
11279
11324
  get: /**
11280
- * Render height.
11325
+ * Render height (in world coordinates).
11326
+ *
11327
+ * @remarks
11328
+ * If height is set, return the set value,
11329
+ * otherwise return `SpriteMask.sprite.height`.
11281
11330
  */ function get() {
11282
- if (this._height === undefined && this._sprite) {
11283
- this.height = this._sprite.height;
11331
+ if (this._customHeight !== undefined) {
11332
+ return this._customHeight;
11333
+ } else {
11334
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
11335
+ return this._automaticHeight;
11284
11336
  }
11285
- return this._height;
11286
11337
  },
11287
11338
  set: function set(value) {
11288
- if (this._height !== value) {
11289
- this._height = value;
11339
+ if (this._customHeight !== value) {
11340
+ this._customHeight = value;
11290
11341
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11291
11342
  }
11292
11343
  }
@@ -11330,9 +11381,9 @@ SimpleSpriteAssembler = __decorate([
11330
11381
  var lastSprite = this._sprite;
11331
11382
  if (lastSprite !== value) {
11332
11383
  lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
11384
+ this._dirtyUpdateFlag |= 0x7;
11333
11385
  if (value) {
11334
11386
  value._updateFlagManager.addListener(this._onSpriteChange);
11335
- this._dirtyUpdateFlag |= 0x3;
11336
11387
  this.shaderData.setTexture(SpriteMask._textureProperty, value.texture);
11337
11388
  } else {
11338
11389
  this.shaderData.setTexture(SpriteMask._textureProperty, null);
@@ -11372,10 +11423,16 @@ __decorate([
11372
11423
  ], SpriteMask.prototype, "_sprite", void 0);
11373
11424
  __decorate([
11374
11425
  ignoreClone
11375
- ], SpriteMask.prototype, "_width", void 0);
11426
+ ], SpriteMask.prototype, "_automaticWidth", void 0);
11376
11427
  __decorate([
11377
11428
  ignoreClone
11378
- ], SpriteMask.prototype, "_height", void 0);
11429
+ ], SpriteMask.prototype, "_automaticHeight", void 0);
11430
+ __decorate([
11431
+ assignmentClone
11432
+ ], SpriteMask.prototype, "_customWidth", void 0);
11433
+ __decorate([
11434
+ assignmentClone
11435
+ ], SpriteMask.prototype, "_customHeight", void 0);
11379
11436
  __decorate([
11380
11437
  assignmentClone
11381
11438
  ], SpriteMask.prototype, "_flipX", void 0);
@@ -11393,7 +11450,9 @@ var /**
11393
11450
  */ SpriteMaskUpdateFlags;
11394
11451
  (function(SpriteMaskUpdateFlags) {
11395
11452
  SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
11396
- SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** All. */ "All"] = 0x3] = "All";
11453
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
11454
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
11455
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** All. */ "All"] = 0x7] = "All";
11397
11456
  })(SpriteMaskUpdateFlags || (SpriteMaskUpdateFlags = {}));
11398
11457
 
11399
11458
  /**
@@ -12200,6 +12259,7 @@ var MeshModifyFlags;
12200
12259
  var subDataDirtyFlags = this._subDataDirtyFlags;
12201
12260
  var blendShapeFloatStride = this._vertexElementCount * 3;
12202
12261
  var blendShapeByteStride = blendShapeFloatStride * 4;
12262
+ var bufferOffset = this._bufferBindingOffset;
12203
12263
  // @todo: should fix bug when dataChangedFlag is true
12204
12264
  for(var i = 0, n = blendShapes.length; i < n; i++){
12205
12265
  var dataChangedFlag = subDataDirtyFlags[i];
@@ -12217,7 +12277,7 @@ var MeshModifyFlags;
12217
12277
  var offset = indexInBuffer * blendShapeFloatStride;
12218
12278
  var storeInfo = storeInfos[i];
12219
12279
  storeInfo || (storeInfos[i] = storeInfo = new miniprogram.Vector2());
12220
- storeInfo.set(bufferIndex + 1, indexInBuffer * blendShapeByteStride); // BlendShape buffer is start from 1
12280
+ storeInfo.set(bufferOffset + bufferIndex, indexInBuffer * blendShapeByteStride); // BufferOffset is mesh vertexBuffer offset
12221
12281
  var deltaPositions = endFrame.deltaPositions;
12222
12282
  for(var j = 0; j < vertexCount; j++){
12223
12283
  var start = offset + bufferFloatStride * j;
@@ -13494,6 +13554,7 @@ var VertexChangedFlags;
13494
13554
  function MeshRenderer(entity) {
13495
13555
  var _this;
13496
13556
  _this = Renderer.call(this, entity) || this;
13557
+ _this._enableVertexColor = false;
13497
13558
  _this._onMeshChanged = _this._onMeshChanged.bind(_assert_this_initialized(_this));
13498
13559
  return _this;
13499
13560
  }
@@ -13538,7 +13599,7 @@ var VertexChangedFlags;
13538
13599
  shaderData.disableMacro(MeshRenderer._uv1Macro);
13539
13600
  shaderData.disableMacro(MeshRenderer._normalMacro);
13540
13601
  shaderData.disableMacro(MeshRenderer._tangentMacro);
13541
- shaderData.disableMacro(MeshRenderer._vertexColorMacro);
13602
+ shaderData.disableMacro(MeshRenderer._enableVertexColorMacro);
13542
13603
  for(var i = 0, n = vertexElements.length; i < n; i++){
13543
13604
  switch(vertexElements[i].semantic){
13544
13605
  case "TEXCOORD_0":
@@ -13554,7 +13615,7 @@ var VertexChangedFlags;
13554
13615
  shaderData.enableMacro(MeshRenderer._tangentMacro);
13555
13616
  break;
13556
13617
  case "COLOR_0":
13557
- shaderData.enableMacro(MeshRenderer._vertexColorMacro);
13618
+ this._enableVertexColor && shaderData.enableMacro(MeshRenderer._enableVertexColorMacro);
13558
13619
  break;
13559
13620
  }
13560
13621
  }
@@ -13605,6 +13666,20 @@ var VertexChangedFlags;
13605
13666
  this._setMesh(value);
13606
13667
  }
13607
13668
  }
13669
+ },
13670
+ {
13671
+ key: "enableVertexColor",
13672
+ get: /**
13673
+ * Whether enable vertex color.
13674
+ */ function get() {
13675
+ return this._enableVertexColor;
13676
+ },
13677
+ set: function set(value) {
13678
+ if (value !== this._enableVertexColor) {
13679
+ this._dirtyUpdateFlag |= 0x2;
13680
+ this._enableVertexColor = value;
13681
+ }
13682
+ }
13608
13683
  }
13609
13684
  ]);
13610
13685
  return MeshRenderer;
@@ -13622,7 +13697,7 @@ var VertexChangedFlags;
13622
13697
  MeshRenderer._tangentMacro = ShaderMacro.getByName("RENDERER_HAS_TANGENT");
13623
13698
  })();
13624
13699
  (function() {
13625
- MeshRenderer._vertexColorMacro = ShaderMacro.getByName("RENDERER_HAS_VERTEXCOLOR");
13700
+ MeshRenderer._enableVertexColorMacro = ShaderMacro.getByName("RENDERER_ENABLE_VERTEXCOLOR");
13626
13701
  })();
13627
13702
  __decorate([
13628
13703
  ignoreClone
@@ -16123,7 +16198,7 @@ var TextRenderData = /*#__PURE__*/ function(RenderData) {
16123
16198
  var sunLightIndex = lightManager._getSunLightIndex();
16124
16199
  if (sunLightIndex !== -1) {
16125
16200
  var sunlight = lightManager._directLights.get(sunLightIndex);
16126
- shaderData.setColor(Scene._sunlightColorProperty, sunlight.color);
16201
+ shaderData.setColor(Scene._sunlightColorProperty, sunlight._getLightIntensityColor());
16127
16202
  shaderData.setVector3(Scene._sunlightDirectionProperty, sunlight.direction);
16128
16203
  this._sunLight = sunlight;
16129
16204
  }
@@ -20398,8 +20473,10 @@ exports.TextVerticalAlignment = void 0;
20398
20473
  if (name === void 0) name = null;
20399
20474
  var _this;
20400
20475
  _this = ReferResource.call(this, engine) || this;
20401
- _this._width = undefined;
20402
- _this._height = undefined;
20476
+ _this._automaticWidth = 0;
20477
+ _this._automaticHeight = 0;
20478
+ _this._customWidth = undefined;
20479
+ _this._customHeight = undefined;
20403
20480
  _this._positions = [
20404
20481
  new miniprogram.Vector2(),
20405
20482
  new miniprogram.Vector2(),
@@ -20420,7 +20497,7 @@ exports.TextVerticalAlignment = void 0;
20420
20497
  _this._region = new miniprogram.Rect(0, 0, 1, 1);
20421
20498
  _this._pivot = new miniprogram.Vector2(0.5, 0.5);
20422
20499
  _this._border = new miniprogram.Vector4(0, 0, 0, 0);
20423
- _this._dirtyUpdateFlag = 0x3;
20500
+ _this._dirtyUpdateFlag = 0x7;
20424
20501
  /** @internal */ _this._updateFlagManager = new UpdateFlagManager();
20425
20502
  _this._texture = texture;
20426
20503
  region && _this._region.copyFrom(region);
@@ -20468,9 +20545,12 @@ exports.TextVerticalAlignment = void 0;
20468
20545
  if (this._texture) {
20469
20546
  var _this = this, _texture = _this._texture, _atlasRegion = _this._atlasRegion, _atlasRegionOffset = _this._atlasRegionOffset, _region = _this._region;
20470
20547
  var pixelsPerUnitReciprocal = 1.0 / Engine._pixelsPerUnit;
20471
- this._width = _texture.width * _atlasRegion.width / (1 - _atlasRegionOffset.x - _atlasRegionOffset.z) * _region.width * pixelsPerUnitReciprocal;
20472
- this._height = _texture.height * _atlasRegion.height / (1 - _atlasRegionOffset.y - _atlasRegionOffset.w) * _region.height * pixelsPerUnitReciprocal;
20548
+ this._automaticWidth = _texture.width * _atlasRegion.width / (1 - _atlasRegionOffset.x - _atlasRegionOffset.z) * _region.width * pixelsPerUnitReciprocal;
20549
+ this._automaticHeight = _texture.height * _atlasRegion.height / (1 - _atlasRegionOffset.y - _atlasRegionOffset.w) * _region.height * pixelsPerUnitReciprocal;
20550
+ } else {
20551
+ this._automaticWidth = this._automaticHeight = 0;
20473
20552
  }
20553
+ this._dirtyUpdateFlag &= ~0x4;
20474
20554
  };
20475
20555
  _proto._updatePositions = function _updatePositions() {
20476
20556
  var blank = this._atlasRegionOffset;
@@ -20524,11 +20604,16 @@ exports.TextVerticalAlignment = void 0;
20524
20604
  };
20525
20605
  _proto._dispatchSpriteChange = function _dispatchSpriteChange(type) {
20526
20606
  switch(type){
20607
+ case SpriteModifyFlags.texture:
20608
+ this._dirtyUpdateFlag |= 0x4;
20609
+ break;
20527
20610
  case SpriteModifyFlags.atlasRegionOffset:
20528
20611
  case SpriteModifyFlags.region:
20529
- this._dirtyUpdateFlag |= 0x3;
20612
+ this._dirtyUpdateFlag |= 0x7;
20530
20613
  break;
20531
20614
  case SpriteModifyFlags.atlasRegion:
20615
+ this._dirtyUpdateFlag |= 0x4 | 0x2;
20616
+ break;
20532
20617
  case SpriteModifyFlags.border:
20533
20618
  this._dirtyUpdateFlag |= 0x2;
20534
20619
  break;
@@ -20547,7 +20632,9 @@ exports.TextVerticalAlignment = void 0;
20547
20632
  if (this._texture !== value) {
20548
20633
  this._texture = value;
20549
20634
  this._dispatchSpriteChange(SpriteModifyFlags.texture);
20550
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20635
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20636
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20637
+ }
20551
20638
  }
20552
20639
  }
20553
20640
  },
@@ -20555,13 +20642,21 @@ exports.TextVerticalAlignment = void 0;
20555
20642
  key: "width",
20556
20643
  get: /**
20557
20644
  * The width of the sprite (in world coordinates).
20645
+ *
20646
+ * @remarks
20647
+ * If width is set, return the set value,
20648
+ * otherwise return the width calculated according to `Texture.width`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
20558
20649
  */ function get() {
20559
- this._width === undefined && this._calDefaultSize();
20560
- return this._width;
20650
+ if (this._customWidth !== undefined) {
20651
+ return this._customWidth;
20652
+ } else {
20653
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
20654
+ return this._automaticWidth;
20655
+ }
20561
20656
  },
20562
20657
  set: function set(value) {
20563
- if (this._width !== value) {
20564
- this._width = value;
20658
+ if (this._customWidth !== value) {
20659
+ this._customWidth = value;
20565
20660
  this._dispatchSpriteChange(SpriteModifyFlags.size);
20566
20661
  }
20567
20662
  }
@@ -20570,13 +20665,21 @@ exports.TextVerticalAlignment = void 0;
20570
20665
  key: "height",
20571
20666
  get: /**
20572
20667
  * The height of the sprite (in world coordinates).
20668
+ *
20669
+ * @remarks
20670
+ * If height is set, return the set value,
20671
+ * otherwise return the height calculated according to `Texture.height`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
20573
20672
  */ function get() {
20574
- this._height === undefined && this._calDefaultSize();
20575
- return this._height;
20673
+ if (this._customHeight !== undefined) {
20674
+ return this._customHeight;
20675
+ } else {
20676
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
20677
+ return this._automaticHeight;
20678
+ }
20576
20679
  },
20577
20680
  set: function set(value) {
20578
- if (this._height !== value) {
20579
- this._height = value;
20681
+ if (this._customHeight !== value) {
20682
+ this._customHeight = value;
20580
20683
  this._dispatchSpriteChange(SpriteModifyFlags.size);
20581
20684
  }
20582
20685
  }
@@ -20606,7 +20709,9 @@ exports.TextVerticalAlignment = void 0;
20606
20709
  var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
20607
20710
  this._atlasRegion.set(x, y, miniprogram.MathUtil.clamp(value.width, 0, 1 - x), miniprogram.MathUtil.clamp(value.height, 0, 1 - y));
20608
20711
  this._dispatchSpriteChange(SpriteModifyFlags.atlasRegion);
20609
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20712
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20713
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20714
+ }
20610
20715
  }
20611
20716
  },
20612
20717
  {
@@ -20621,7 +20726,9 @@ exports.TextVerticalAlignment = void 0;
20621
20726
  var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
20622
20727
  this._atlasRegionOffset.set(x, y, miniprogram.MathUtil.clamp(value.z, 0, 1 - x), miniprogram.MathUtil.clamp(value.w, 0, 1 - y));
20623
20728
  this._dispatchSpriteChange(SpriteModifyFlags.atlasRegionOffset);
20624
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20729
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20730
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20731
+ }
20625
20732
  }
20626
20733
  },
20627
20734
  {
@@ -20637,7 +20744,9 @@ exports.TextVerticalAlignment = void 0;
20637
20744
  var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
20638
20745
  region.set(x, y, miniprogram.MathUtil.clamp(value.width, 0, 1 - x), miniprogram.MathUtil.clamp(value.height, 0, 1 - y));
20639
20746
  this._dispatchSpriteChange(SpriteModifyFlags.region);
20640
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20747
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20748
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20749
+ }
20641
20750
  }
20642
20751
  },
20643
20752
  {
@@ -20687,7 +20796,8 @@ var SpriteUpdateFlags;
20687
20796
  (function(SpriteUpdateFlags) {
20688
20797
  SpriteUpdateFlags[SpriteUpdateFlags["positions"] = 0x1] = "positions";
20689
20798
  SpriteUpdateFlags[SpriteUpdateFlags["uvs"] = 0x2] = "uvs";
20690
- SpriteUpdateFlags[SpriteUpdateFlags["all"] = 0x3] = "all";
20799
+ SpriteUpdateFlags[SpriteUpdateFlags["automaticSize"] = 0x4] = "automaticSize";
20800
+ SpriteUpdateFlags[SpriteUpdateFlags["all"] = 0x7] = "all";
20691
20801
  })(SpriteUpdateFlags || (SpriteUpdateFlags = {}));
20692
20802
 
20693
20803
  var _SlicedSpriteAssembler;
@@ -21179,8 +21289,10 @@ var TiledType;
21179
21289
  _this._tiledAdaptiveThreshold = 0.5;
21180
21290
  _this._color = new miniprogram.Color(1, 1, 1, 1);
21181
21291
  _this._sprite = null;
21182
- _this._width = undefined;
21183
- _this._height = undefined;
21292
+ _this._automaticWidth = 0;
21293
+ _this._automaticHeight = 0;
21294
+ _this._customWidth = undefined;
21295
+ _this._customHeight = undefined;
21184
21296
  _this._flipX = false;
21185
21297
  _this._flipY = false;
21186
21298
  _this._maskLayer = exports.SpriteMaskLayer.Layer0;
@@ -21197,6 +21309,7 @@ var TiledType;
21197
21309
  */ _proto._cloneTo = function _cloneTo(target) {
21198
21310
  target._assembler.resetData(target);
21199
21311
  target.sprite = this._sprite;
21312
+ target.drawMode = this._drawMode;
21200
21313
  };
21201
21314
  /**
21202
21315
  * @internal
@@ -21207,12 +21320,11 @@ var TiledType;
21207
21320
  /**
21208
21321
  * @internal
21209
21322
  */ _proto._updateBounds = function _updateBounds(worldBounds) {
21210
- var _this_sprite;
21211
- if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
21323
+ if (this.sprite) {
21324
+ this._assembler.updatePositions(this);
21325
+ } else {
21212
21326
  worldBounds.min.set(0, 0, 0);
21213
21327
  worldBounds.max.set(0, 0, 0);
21214
- } else {
21215
- this._assembler.updatePositions(this);
21216
21328
  }
21217
21329
  };
21218
21330
  /**
@@ -21222,17 +21334,17 @@ var TiledType;
21222
21334
  if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
21223
21335
  return;
21224
21336
  }
21225
- // Update position.
21337
+ // Update position
21226
21338
  if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
21227
21339
  this._assembler.updatePositions(this);
21228
21340
  this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
21229
21341
  }
21230
- // Update uv.
21342
+ // Update uv
21231
21343
  if (this._dirtyUpdateFlag & 0x2) {
21232
21344
  this._assembler.updateUVs(this);
21233
21345
  this._dirtyUpdateFlag &= ~0x2;
21234
21346
  }
21235
- // Push render data
21347
+ // Push primitive
21236
21348
  var material = this.getMaterial();
21237
21349
  var texture = this.sprite.texture;
21238
21350
  var renderData = this._engine._spriteRenderDataPool.getFromPool();
@@ -21250,6 +21362,16 @@ var TiledType;
21250
21362
  this._assembler = null;
21251
21363
  this._verticesData = null;
21252
21364
  };
21365
+ _proto._calDefaultSize = function _calDefaultSize() {
21366
+ var sprite = this._sprite;
21367
+ if (sprite) {
21368
+ this._automaticWidth = sprite.width;
21369
+ this._automaticHeight = sprite.height;
21370
+ } else {
21371
+ this._automaticWidth = this._automaticHeight = 0;
21372
+ }
21373
+ this._dirtyUpdateFlag &= ~0x4;
21374
+ };
21253
21375
  _proto._updateStencilState = function _updateStencilState() {
21254
21376
  // Update stencil.
21255
21377
  var material = this.getInstanceMaterial();
@@ -21276,22 +21398,21 @@ var TiledType;
21276
21398
  break;
21277
21399
  case SpriteModifyFlags.size:
21278
21400
  var _this = this, drawMode = _this._drawMode;
21279
- if (drawMode === exports.SpriteDrawMode.Sliced) {
21401
+ this._dirtyUpdateFlag |= 0x4;
21402
+ if (this._drawMode === exports.SpriteDrawMode.Sliced) {
21280
21403
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21281
21404
  } else if (drawMode === exports.SpriteDrawMode.Tiled) {
21282
21405
  this._dirtyUpdateFlag |= 0x3;
21283
21406
  } else {
21284
21407
  // When the width and height of `SpriteRenderer` are `undefined`,
21285
21408
  // the `size` of `Sprite` will affect the position of `SpriteRenderer`.
21286
- if (this._width === undefined || this._height === undefined) {
21409
+ if (this._customWidth === undefined || this._customHeight === undefined) {
21287
21410
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21288
21411
  }
21289
21412
  }
21290
21413
  break;
21291
21414
  case SpriteModifyFlags.border:
21292
- if (this._drawMode === exports.SpriteDrawMode.Sliced || this._drawMode === exports.SpriteDrawMode.Tiled) {
21293
- this._dirtyUpdateFlag |= 0x3;
21294
- }
21415
+ this._drawMode === exports.SpriteDrawMode.Sliced && (this._dirtyUpdateFlag |= 0x3);
21295
21416
  break;
21296
21417
  case SpriteModifyFlags.region:
21297
21418
  case SpriteModifyFlags.atlasRegionOffset:
@@ -21376,9 +21497,9 @@ var TiledType;
21376
21497
  var lastSprite = this._sprite;
21377
21498
  if (lastSprite !== value) {
21378
21499
  lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
21500
+ this._dirtyUpdateFlag |= 0x7;
21379
21501
  if (value) {
21380
21502
  value._updateFlagManager.addListener(this._onSpriteChange);
21381
- this._dirtyUpdateFlag |= 0x3;
21382
21503
  this.shaderData.setTexture(SpriteRenderer._textureProperty, value.texture);
21383
21504
  } else {
21384
21505
  this.shaderData.setTexture(SpriteRenderer._textureProperty, null);
@@ -21403,16 +21524,22 @@ var TiledType;
21403
21524
  {
21404
21525
  key: "width",
21405
21526
  get: /**
21406
- * Render width.
21527
+ * Render width (in world coordinates).
21528
+ *
21529
+ * @remarks
21530
+ * If width is set, return the set value,
21531
+ * otherwise return `SpriteRenderer.sprite.width`.
21407
21532
  */ function get() {
21408
- this._width === undefined && this._sprite && (this.width = this._sprite.width);
21409
- return this._width;
21533
+ if (this._customWidth !== undefined) {
21534
+ return this._customWidth;
21535
+ } else {
21536
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
21537
+ return this._automaticWidth;
21538
+ }
21410
21539
  },
21411
21540
  set: function set(value) {
21412
- // Update width if undefined
21413
- this._width === undefined && this._sprite && (this._width = this._sprite.width);
21414
- if (this._width !== value) {
21415
- this._width = value;
21541
+ if (this._customWidth !== value) {
21542
+ this._customWidth = value;
21416
21543
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21417
21544
  }
21418
21545
  }
@@ -21420,16 +21547,22 @@ var TiledType;
21420
21547
  {
21421
21548
  key: "height",
21422
21549
  get: /**
21423
- * Render height.
21550
+ * Render height (in world coordinates).
21551
+ *
21552
+ * @remarks
21553
+ * If height is set, return the set value,
21554
+ * otherwise return `SpriteRenderer.sprite.height`.
21424
21555
  */ function get() {
21425
- this._height === undefined && this._sprite && (this.height = this._sprite.height);
21426
- return this._height;
21556
+ if (this._customHeight !== undefined) {
21557
+ return this._customHeight;
21558
+ } else {
21559
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
21560
+ return this._automaticHeight;
21561
+ }
21427
21562
  },
21428
21563
  set: function set(value) {
21429
- // Update height if undefined
21430
- this._height === undefined && this._sprite && (this._height = this._sprite.height);
21431
- if (this._height !== value) {
21432
- this._height = value;
21564
+ if (this._customHeight !== value) {
21565
+ this._customHeight = value;
21433
21566
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21434
21567
  }
21435
21568
  }
@@ -21516,10 +21649,16 @@ __decorate([
21516
21649
  ], SpriteRenderer.prototype, "_sprite", void 0);
21517
21650
  __decorate([
21518
21651
  ignoreClone
21519
- ], SpriteRenderer.prototype, "_width", void 0);
21652
+ ], SpriteRenderer.prototype, "_automaticWidth", void 0);
21520
21653
  __decorate([
21521
21654
  ignoreClone
21522
- ], SpriteRenderer.prototype, "_height", void 0);
21655
+ ], SpriteRenderer.prototype, "_automaticHeight", void 0);
21656
+ __decorate([
21657
+ assignmentClone
21658
+ ], SpriteRenderer.prototype, "_customWidth", void 0);
21659
+ __decorate([
21660
+ assignmentClone
21661
+ ], SpriteRenderer.prototype, "_customHeight", void 0);
21523
21662
  __decorate([
21524
21663
  assignmentClone
21525
21664
  ], SpriteRenderer.prototype, "_flipX", void 0);
@@ -21540,7 +21679,9 @@ var /**
21540
21679
  */ SpriteRendererUpdateFlags;
21541
21680
  (function(SpriteRendererUpdateFlags) {
21542
21681
  SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
21543
- SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** All. */ "All"] = 0x3] = "All";
21682
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
21683
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
21684
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** All. */ "All"] = 0x7] = "All";
21544
21685
  })(SpriteRendererUpdateFlags || (SpriteRendererUpdateFlags = {}));
21545
21686
 
21546
21687
  /**