@galacean/effects-plugin-model 2.0.0-alpha.6 → 2.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gltf/loader-ecs-ext.d.ts +24 -0
- package/dist/gltf/loader-ecs.d.ts +86 -0
- package/dist/gltf/protocol.d.ts +9 -1
- package/dist/helper/index.d.ts +1 -0
- package/dist/index.js +171 -202
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +172 -203
- package/dist/index.mjs.map +1 -1
- package/dist/loader.mjs +167 -198
- package/dist/loader.mjs.map +1 -1
- package/dist/runtime/material.d.ts +1 -2
- package/dist/runtime/mesh.d.ts +2 -2
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Description: Galacean Effects player model plugin
|
|
4
4
|
* Author: Ant Group CO., Ltd.
|
|
5
5
|
* Contributors: 飂兮
|
|
6
|
-
* Version: v2.0.0-alpha.
|
|
6
|
+
* Version: v2.0.0-alpha.7
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { math, Transform, PLAYER_OPTIONS_ENV_EDITOR, spec, glContext, Texture, TextureSourceType, RenderPassAttachmentStorageType, Material, Mesh, Geometry, Shader, GLSLVersion, DestroyOptions, addItem, removeItem, effectsClass, DataType, RendererComponent, ItemBehaviour, TimelineComponent, HitTestType, RenderPass, TextureLoadAction, RenderPassDestroyAttachmentType, Player, Renderer, getDefaultTextureFactory, loadImage, VFXItem, AbstractPlugin, registerPlugin, logger } from '@galacean/effects';
|
|
9
|
+
import { math, Transform, PLAYER_OPTIONS_ENV_EDITOR, spec, glContext, Texture, TextureSourceType, RenderPassAttachmentStorageType, Material, Mesh, Geometry, Shader, generateGUID, GLSLVersion, DestroyOptions, addItem, removeItem, effectsClass, DataType, RendererComponent, ItemBehaviour, TimelineComponent, HitTestType, RenderPass, TextureLoadAction, RenderPassDestroyAttachmentType, Player, Renderer, getDefaultTextureFactory, loadImage, VFXItem, AbstractPlugin, registerPlugin, logger } from '@galacean/effects';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Model 插件元素类型
|
|
@@ -2318,12 +2318,12 @@ function _assert_this_initialized(self) {
|
|
|
2318
2318
|
* @param lineColor - 线颜色
|
|
2319
2319
|
*/ _proto.update = function update(modelMatrix, viewProjMatrix, positions, lineColor) {
|
|
2320
2320
|
var material = this.mesh.material;
|
|
2321
|
-
material.setMatrix("
|
|
2322
|
-
material.setMatrix("
|
|
2321
|
+
material.setMatrix("_ModelMatrix", modelMatrix);
|
|
2322
|
+
material.setMatrix("_ViewProjectionMatrix", viewProjMatrix);
|
|
2323
2323
|
for(var i = 0; i < positions.length; i += 3){
|
|
2324
|
-
material.setVector3("
|
|
2324
|
+
material.setVector3("_PositionList[" + i / 3 + "]", Vector3.fromArray(positions, i));
|
|
2325
2325
|
}
|
|
2326
|
-
material.setVector3("
|
|
2326
|
+
material.setVector3("_LineColor", lineColor);
|
|
2327
2327
|
};
|
|
2328
2328
|
/**
|
|
2329
2329
|
* 销毁,需要销毁 Mesh 对象
|
|
@@ -2338,7 +2338,7 @@ function _assert_this_initialized(self) {
|
|
|
2338
2338
|
get: /**
|
|
2339
2339
|
* 获取顶点着色器代码
|
|
2340
2340
|
*/ function get() {
|
|
2341
|
-
return "\n #version 100\n precision highp float;\n\n uniform mat4
|
|
2341
|
+
return "\n #version 100\n precision highp float;\n\n uniform mat4 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\n uniform vec3 _PositionList[8];\n attribute vec3 aPos;\n void main(){\n int index = int(aPos.x + 0.5);\n vec4 pos = _ModelMatrix * vec4(_PositionList[index], 1);\n gl_Position = _ViewProjectionMatrix * pos;\n }\n ";
|
|
2342
2342
|
}
|
|
2343
2343
|
},
|
|
2344
2344
|
{
|
|
@@ -2346,7 +2346,7 @@ function _assert_this_initialized(self) {
|
|
|
2346
2346
|
get: /**
|
|
2347
2347
|
* 获取片段着色器代码
|
|
2348
2348
|
*/ function get() {
|
|
2349
|
-
return "\n #version 100\n precision highp float;\n\n uniform vec3
|
|
2349
|
+
return "\n #version 100\n precision highp float;\n\n uniform vec3 _LineColor;\n void main(){\n gl_FragColor = vec4(_LineColor, 1);\n }\n ";
|
|
2350
2350
|
}
|
|
2351
2351
|
},
|
|
2352
2352
|
{
|
|
@@ -2392,7 +2392,7 @@ function _assert_this_initialized(self) {
|
|
|
2392
2392
|
]);
|
|
2393
2393
|
return {
|
|
2394
2394
|
attributes: {
|
|
2395
|
-
|
|
2395
|
+
aPos: {
|
|
2396
2396
|
type: glContext.FLOAT,
|
|
2397
2397
|
size: 1,
|
|
2398
2398
|
data: data,
|
|
@@ -2800,9 +2800,9 @@ function _assert_this_initialized(self) {
|
|
|
2800
2800
|
var featureList = this.getFeatureList(lightCount, true, skybox);
|
|
2801
2801
|
this.material.build(featureList);
|
|
2802
2802
|
var newSemantics = uniformSemantics != null ? uniformSemantics : {};
|
|
2803
|
-
newSemantics["
|
|
2803
|
+
newSemantics["_ViewProjectionMatrix"] = "VIEWPROJECTION";
|
|
2804
2804
|
//newSemantics["uView"] = 'VIEWINVERSE';
|
|
2805
|
-
newSemantics["
|
|
2805
|
+
newSemantics["_ModelMatrix"] = "MODEL";
|
|
2806
2806
|
newSemantics["uEditorTransform"] = "EDITOR_TRANSFORM";
|
|
2807
2807
|
var material;
|
|
2808
2808
|
var isWebGL2 = PGlobalState.getInstance().isWebGL2;
|
|
@@ -2812,7 +2812,9 @@ function _assert_this_initialized(self) {
|
|
|
2812
2812
|
material.uniformSemantics = newSemantics;
|
|
2813
2813
|
var shader = new Shader(this.engine);
|
|
2814
2814
|
shader.fromData({
|
|
2815
|
-
|
|
2815
|
+
// FIXME: check shader id
|
|
2816
|
+
//id: 'pbr00000000000000000000000000000',
|
|
2817
|
+
id: generateGUID(),
|
|
2816
2818
|
dataType: "Shader",
|
|
2817
2819
|
vertex: this.material.vertexShaderCode,
|
|
2818
2820
|
fragment: this.material.fragmentShaderCode,
|
|
@@ -3017,8 +3019,8 @@ function _assert_this_initialized(self) {
|
|
|
3017
3019
|
};
|
|
3018
3020
|
_proto.updateUniformsByAnimation = function updateUniformsByAnimation(worldMatrix, normalMatrix) {
|
|
3019
3021
|
var material = this.getModelMaterial();
|
|
3020
|
-
material.setMatrix("
|
|
3021
|
-
material.setMatrix("
|
|
3022
|
+
material.setMatrix("_ModelMatrix", worldMatrix);
|
|
3023
|
+
material.setMatrix("_NormalMatrix", normalMatrix);
|
|
3022
3024
|
//
|
|
3023
3025
|
var skin = this.skin;
|
|
3024
3026
|
if (skin !== undefined) {
|
|
@@ -3030,8 +3032,8 @@ function _assert_this_initialized(self) {
|
|
|
3030
3032
|
var jointNormalMatTexture = this.jointNormalMatTexture;
|
|
3031
3033
|
jointMatrixTexture.update(jointMatrixList);
|
|
3032
3034
|
jointNormalMatTexture.update(jointNormalMatList);
|
|
3033
|
-
material.setTexture("
|
|
3034
|
-
material.setTexture("
|
|
3035
|
+
material.setTexture("_jointMatrixSampler", jointMatrixTexture.getTexture());
|
|
3036
|
+
material.setTexture("_jointNormalMatrixSampler", jointNormalMatTexture.getTexture());
|
|
3035
3037
|
} else {
|
|
3036
3038
|
var jointMatrixNumbers = [];
|
|
3037
3039
|
var jointNormalMatNumbers = [];
|
|
@@ -3041,8 +3043,8 @@ function _assert_this_initialized(self) {
|
|
|
3041
3043
|
jointNormalMatList.forEach(function(val) {
|
|
3042
3044
|
return jointNormalMatNumbers.push(val);
|
|
3043
3045
|
});
|
|
3044
|
-
material.setMatrixNumberArray("
|
|
3045
|
-
material.setMatrixNumberArray("
|
|
3046
|
+
material.setMatrixNumberArray("_jointMatrix", jointMatrixNumbers);
|
|
3047
|
+
material.setMatrixNumberArray("_jointNormalMatrix", jointNormalMatNumbers);
|
|
3046
3048
|
}
|
|
3047
3049
|
}
|
|
3048
3050
|
// Morph 相关的数据更新,仅需要更新 weights 数组
|
|
@@ -3053,13 +3055,13 @@ function _assert_this_initialized(self) {
|
|
|
3053
3055
|
morphWeights.forEach(function(val) {
|
|
3054
3056
|
return morphWeightNumbers.push(val);
|
|
3055
3057
|
});
|
|
3056
|
-
material.setFloats("
|
|
3058
|
+
material.setFloats("_morphWeights", morphWeightNumbers);
|
|
3057
3059
|
}
|
|
3058
3060
|
};
|
|
3059
3061
|
_proto.updateUniformsByScene = function updateUniformsByScene(sceneStates) {
|
|
3060
3062
|
var material = this.getModelMaterial();
|
|
3061
|
-
material.setMatrix("
|
|
3062
|
-
material.setVector3("
|
|
3063
|
+
material.setMatrix("_ViewProjectionMatrix", sceneStates.viewProjectionMatrix);
|
|
3064
|
+
material.setVector3("_Camera", sceneStates.cameraPosition);
|
|
3063
3065
|
//
|
|
3064
3066
|
if (!this.isUnlitMaterial()) {
|
|
3065
3067
|
var maxLightCount = sceneStates.maxLightCount, lightList = sceneStates.lightList;
|
|
@@ -3067,33 +3069,33 @@ function _assert_this_initialized(self) {
|
|
|
3067
3069
|
if (i < lightList.length) {
|
|
3068
3070
|
var light = lightList[i];
|
|
3069
3071
|
var intensity = light.visible ? light.intensity : 0;
|
|
3070
|
-
material.setVector3("
|
|
3071
|
-
material.setFloat("
|
|
3072
|
-
material.setVector3("
|
|
3073
|
-
material.setFloat("
|
|
3074
|
-
material.setVector3("
|
|
3075
|
-
material.setFloat("
|
|
3076
|
-
material.setFloat("
|
|
3077
|
-
material.setInt("
|
|
3078
|
-
material.setVector2("
|
|
3072
|
+
material.setVector3("_Lights[" + i + "].direction", light.getWorldDirection());
|
|
3073
|
+
material.setFloat("_Lights[" + i + "].range", light.range);
|
|
3074
|
+
material.setVector3("_Lights[" + i + "].color", light.color);
|
|
3075
|
+
material.setFloat("_Lights[" + i + "].intensity", intensity);
|
|
3076
|
+
material.setVector3("_Lights[" + i + "].position", light.getWorldPosition());
|
|
3077
|
+
material.setFloat("_Lights[" + i + "].innerConeCos", Math.cos(light.innerConeAngle));
|
|
3078
|
+
material.setFloat("_Lights[" + i + "].outerConeCos", Math.cos(light.outerConeAngle));
|
|
3079
|
+
material.setInt("_Lights[" + i + "].type", light.lightType);
|
|
3080
|
+
material.setVector2("_Lights[" + i + "].padding", light.padding);
|
|
3079
3081
|
} else {
|
|
3080
|
-
material.setVector3("
|
|
3081
|
-
material.setFloat("
|
|
3082
|
-
material.setVector3("
|
|
3083
|
-
material.setFloat("
|
|
3084
|
-
material.setVector3("
|
|
3085
|
-
material.setFloat("
|
|
3086
|
-
material.setFloat("
|
|
3087
|
-
material.setInt("
|
|
3088
|
-
material.setVector2("
|
|
3082
|
+
material.setVector3("_Lights[" + i + "].direction", Vector3.ZERO);
|
|
3083
|
+
material.setFloat("_Lights[" + i + "].range", 0);
|
|
3084
|
+
material.setVector3("_Lights[" + i + "].color", Vector3.ZERO);
|
|
3085
|
+
material.setFloat("_Lights[" + i + "].intensity", 0);
|
|
3086
|
+
material.setVector3("_Lights[" + i + "].position", Vector3.ZERO);
|
|
3087
|
+
material.setFloat("_Lights[" + i + "].innerConeCos", 0);
|
|
3088
|
+
material.setFloat("_Lights[" + i + "].outerConeCos", 0);
|
|
3089
|
+
material.setInt("_Lights[" + i + "].type", 99999);
|
|
3090
|
+
material.setVector2("_Lights[" + i + "].padding", Vector2.ZERO);
|
|
3089
3091
|
}
|
|
3090
3092
|
}
|
|
3091
3093
|
var skybox = sceneStates.skybox;
|
|
3092
3094
|
if (skybox !== undefined && skybox.available) {
|
|
3093
|
-
material.setVector2("
|
|
3094
|
-
material.setTexture("
|
|
3095
|
+
material.setVector2("_IblIntensity", new Vector2(skybox.currentIntensity, skybox.currentReflectionsIntensity));
|
|
3096
|
+
material.setTexture("_brdfLUT", skybox.brdfLUT);
|
|
3095
3097
|
if (skybox.diffuseImage !== undefined) {
|
|
3096
|
-
material.setTexture("
|
|
3098
|
+
material.setTexture("_DiffuseEnvSampler", skybox.diffuseImage);
|
|
3097
3099
|
} else {
|
|
3098
3100
|
var coeffs = skybox.irradianceCoeffs;
|
|
3099
3101
|
var aliasName = [
|
|
@@ -3108,12 +3110,12 @@ function _assert_this_initialized(self) {
|
|
|
3108
3110
|
"l22"
|
|
3109
3111
|
];
|
|
3110
3112
|
aliasName.forEach(function(n, i) {
|
|
3111
|
-
material.setVector3("
|
|
3113
|
+
material.setVector3("_shCoefficients." + n, Vector3.fromArray(coeffs[i]));
|
|
3112
3114
|
});
|
|
3113
3115
|
}
|
|
3114
3116
|
var _skybox_specularMipCount;
|
|
3115
|
-
material.setInt("
|
|
3116
|
-
material.setTexture("
|
|
3117
|
+
material.setInt("_MipCount", (_skybox_specularMipCount = skybox.specularMipCount) != null ? _skybox_specularMipCount : 1);
|
|
3118
|
+
material.setTexture("_SpecularEnvSampler", skybox.specularImage);
|
|
3117
3119
|
}
|
|
3118
3120
|
}
|
|
3119
3121
|
};
|
|
@@ -3136,42 +3138,7 @@ function _assert_this_initialized(self) {
|
|
|
3136
3138
|
if (_instanceof1(val, PGeometry)) {
|
|
3137
3139
|
this.geometry = val;
|
|
3138
3140
|
} else {
|
|
3139
|
-
|
|
3140
|
-
// @ts-expect-error
|
|
3141
|
-
var aNormal = val.attributes["aNormal"];
|
|
3142
|
-
// @ts-expect-error
|
|
3143
|
-
var aPos = val.attributes["aPos"];
|
|
3144
|
-
// @ts-expect-error
|
|
3145
|
-
var aUV = val.attributes["aUV"];
|
|
3146
|
-
if (aNormal && aPos && aUV) {
|
|
3147
|
-
var aNormalData = val.getAttributeData("aNormal");
|
|
3148
|
-
var aPosData = val.getAttributeData("aPos");
|
|
3149
|
-
var aUVData = val.getAttributeData("aUV");
|
|
3150
|
-
var newGeom = Geometry.create(val.engine, {
|
|
3151
|
-
attributes: {
|
|
3152
|
-
a_Position: _extends({}, aPos, {
|
|
3153
|
-
data: aPosData
|
|
3154
|
-
}),
|
|
3155
|
-
a_UV1: _extends({}, aUV, {
|
|
3156
|
-
data: aUVData
|
|
3157
|
-
}),
|
|
3158
|
-
a_Normal: _extends({}, aNormal, {
|
|
3159
|
-
data: aNormalData
|
|
3160
|
-
})
|
|
3161
|
-
},
|
|
3162
|
-
// @ts-expect-error
|
|
3163
|
-
indices: {
|
|
3164
|
-
data: val.getIndexData()
|
|
3165
|
-
},
|
|
3166
|
-
// @ts-expect-error
|
|
3167
|
-
mode: val.mode,
|
|
3168
|
-
drawStart: val.getDrawStart(),
|
|
3169
|
-
drawCount: val.getDrawCount()
|
|
3170
|
-
});
|
|
3171
|
-
this.geometry = new PGeometry(newGeom);
|
|
3172
|
-
} else {
|
|
3173
|
-
this.geometry = new PGeometry(val);
|
|
3174
|
-
}
|
|
3141
|
+
this.geometry = new PGeometry(val);
|
|
3175
3142
|
}
|
|
3176
3143
|
};
|
|
3177
3144
|
/**
|
|
@@ -3277,7 +3244,7 @@ function _assert_this_initialized(self) {
|
|
|
3277
3244
|
* 是否压缩格式
|
|
3278
3245
|
* @returns
|
|
3279
3246
|
*/ _proto.isCompressed = function isCompressed() {
|
|
3280
|
-
var positionAttrib = this.geometry.getAttributeData("
|
|
3247
|
+
var positionAttrib = this.geometry.getAttributeData("aPos");
|
|
3281
3248
|
if (positionAttrib === undefined) {
|
|
3282
3249
|
return false;
|
|
3283
3250
|
}
|
|
@@ -3289,13 +3256,13 @@ function _assert_this_initialized(self) {
|
|
|
3289
3256
|
* 是否有位置属性
|
|
3290
3257
|
* @returns
|
|
3291
3258
|
*/ _proto.hasPositions = function hasPositions() {
|
|
3292
|
-
return this.hasAttribute("
|
|
3259
|
+
return this.hasAttribute("aPos");
|
|
3293
3260
|
};
|
|
3294
3261
|
/**
|
|
3295
3262
|
* 是否有法线属性
|
|
3296
3263
|
* @returns
|
|
3297
3264
|
*/ _proto.hasNormals = function hasNormals() {
|
|
3298
|
-
return this.hasAttribute("
|
|
3265
|
+
return this.hasAttribute("aNormal");
|
|
3299
3266
|
};
|
|
3300
3267
|
/**
|
|
3301
3268
|
* 是否有切线属性
|
|
@@ -3308,7 +3275,11 @@ function _assert_this_initialized(self) {
|
|
|
3308
3275
|
* @param index - 纹理坐标索引
|
|
3309
3276
|
* @returns
|
|
3310
3277
|
*/ _proto.hasUVCoords = function hasUVCoords(index) {
|
|
3311
|
-
|
|
3278
|
+
if (index === 1) {
|
|
3279
|
+
return this.hasAttribute("aUV");
|
|
3280
|
+
} else {
|
|
3281
|
+
return this.hasAttribute("aUV" + index);
|
|
3282
|
+
}
|
|
3312
3283
|
};
|
|
3313
3284
|
/**
|
|
3314
3285
|
* 是否有颜色属性
|
|
@@ -3805,27 +3776,27 @@ var EffectsMeshProxy = /*#__PURE__*/ function() {
|
|
|
3805
3776
|
return PSceneManager;
|
|
3806
3777
|
}();
|
|
3807
3778
|
|
|
3808
|
-
var primitiveVert = "precision highp float;\n#define FEATURES\n#include <webglCompatibility.glsl>\n#include <animation.vert.glsl>\nvsIn vec4
|
|
3779
|
+
var primitiveVert = "precision highp float;\n#define FEATURES\n#include <webglCompatibility.glsl>\n#include <animation.vert.glsl>\nvsIn vec4 aPos;vsOut vec3 v_Position;\n#ifdef HAS_NORMALS\nvsIn vec4 aNormal;\n#endif\n#ifdef HAS_TANGENTS\nvsIn vec4 a_Tangent;\n#endif\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nvsOut mat3 v_TBN;\n#else\nvsOut vec3 v_Normal;\n#endif\n#endif\n#ifdef HAS_UV_SET1\nvsIn vec2 aUV;\n#endif\n#ifdef HAS_UV_SET2\nvsIn vec2 a_UV2;\n#endif\nvsOut vec2 v_UVCoord1;\n#ifdef HAS_UV_SET2\nvsOut vec2 v_UVCoord2;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC3\nvsIn vec3 a_Color;vsOut vec3 v_Color;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC4\nvsIn vec4 a_Color;vsOut vec4 v_Color;\n#endif\nuniform mat4 _ViewProjectionMatrix;uniform mat4 _ModelMatrix;uniform mat4 _NormalMatrix;\n#ifdef EDITOR_TRANSFORM\nuniform vec4 uEditorTransform;\n#endif\n#ifdef USE_SHADOW_MAPPING\nuniform mat4 _LightViewProjectionMatrix;uniform float _DeltaSceneSize;vsOut vec4 v_PositionLightSpace;vsOut vec4 v_dPositionLightSpace;\n#endif\nvec4 getPosition(){vec4 pos=vec4(aPos.xyz,1.0);\n#ifdef USE_MORPHING\npos+=getTargetPosition();\n#endif\n#ifdef USE_SKINNING\npos=getSkinningMatrix()*pos;\n#endif\nreturn pos;}\n#ifdef HAS_NORMALS\nvec4 getNormal(){vec4 normal=aNormal;\n#ifdef USE_MORPHING\nnormal+=getTargetNormal();\n#endif\n#ifdef USE_SKINNING\nnormal=getSkinningNormalMatrix()*normal;\n#endif\nreturn normalize(normal);}\n#endif\n#ifdef HAS_TANGENTS\nvec4 getTangent(){vec4 tangent=a_Tangent;\n#ifdef USE_MORPHING\ntangent+=getTargetTangent();\n#endif\n#ifdef USE_SKINNING\ntangent=getSkinningMatrix()*tangent;\n#endif\nreturn normalize(tangent);}\n#endif\nvoid main(){vec4 pos=_ModelMatrix*getPosition();v_Position=vec3(pos.xyz)/pos.w;\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nvec4 tangent=getTangent();vec3 normalW=normalize(vec3(_NormalMatrix*vec4(getNormal().xyz,0.0)));vec3 tangentW=normalize(vec3(_ModelMatrix*vec4(tangent.xyz,0.0)));vec3 bitangentW=cross(normalW,tangentW)*tangent.w;v_TBN=mat3(tangentW,bitangentW,normalW);\n#else\nv_Normal=normalize(vec3(_NormalMatrix*vec4(getNormal().xyz,0.0)));\n#endif\n#endif\nv_UVCoord1=vec2(0.0,0.0);\n#ifdef HAS_UV_SET1\nv_UVCoord1=aUV;\n#endif\n#ifdef HAS_UV_SET2\nv_UVCoord2=a_UV2;\n#endif\n#if defined(HAS_VERTEX_COLOR_VEC3) || defined(HAS_VERTEX_COLOR_VEC4)\nv_Color=a_Color;\n#endif\n#ifdef USE_SHADOW_MAPPING\nv_PositionLightSpace=_LightViewProjectionMatrix*pos;vec3 dpos=vec3(_DeltaSceneSize);v_dPositionLightSpace=_LightViewProjectionMatrix*(pos+vec4(dpos,0));\n#endif\ngl_Position=_ViewProjectionMatrix*pos;\n#ifdef EDITOR_TRANSFORM\ngl_Position=vec4(gl_Position.xy*uEditorTransform.xy+uEditorTransform.zw*gl_Position.w,gl_Position.zw);\n#endif\n}";
|
|
3809
3780
|
|
|
3810
|
-
var metallicRoughnessFrag = "\n#define FEATURES\n#ifndef WEBGL2\n#extension GL_OES_standard_derivatives : enable\n#endif\n#if !defined(WEBGL2) && defined(USE_TEX_LOD)\n#extension GL_EXT_shader_texture_lod : enable\n#endif\n#ifdef USE_HDR\n#extension GL_OES_texture_float : enable\n#extension GL_OES_texture_float_linear : enable\n#endif\n#if !defined(WEBGL2) && defined(USE_WBOIT)\n#extension GL_EXT_draw_buffers: require\n#endif\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#ifdef WEBGL2\n#ifdef USE_WBOIT\nlayout(location=0)out vec4 outFragColor0;layout(location=1)out vec4 outFragColor1;\n#else\nout vec4 outFragColor;\n#endif\n#else\n#ifdef USE_WBOIT\n#define outFragColor0 gl_FragData[0]\n#define outFragColor1 gl_FragData[1]\n#else\n#define outFragColor gl_FragColor\n#endif\n#endif\n#include <webglCompatibility.glsl>\n#include <extensions.frag.glsl>\n#include <tonemapping.frag.glsl>\n#include <textures.vert.glsl>\n#include <functions.frag.glsl>\n#include <shadowCommon.vert.glsl>\n#include <shadow.frag.glsl>\nstruct Light{vec3 direction;float range;vec3 color;float intensity;vec3 position;float innerConeCos;float outerConeCos;int type;vec2 padding;};const int LightType_Directional=0;const int LightType_Point=1;const int LightType_Spot=2;const int LightType_Ambient=3;\n#ifdef USE_PUNCTUAL\nuniform Light u_Lights[LIGHT_COUNT];\n#endif\n#if defined(MATERIAL_SPECULARGLOSSINESS) || defined(MATERIAL_METALLICROUGHNESS)\nuniform float u_MetallicFactor;uniform float u_RoughnessFactor;uniform vec4 u_BaseColorFactor;\n#endif\n#ifdef MATERIAL_SPECULARGLOSSINESS\nuniform vec3 u_SpecularFactor;uniform vec4 u_DiffuseFactor;uniform float u_GlossinessFactor;\n#endif\n#ifdef ALPHAMODE_MASK\nuniform float u_AlphaCutoff;\n#endif\n#ifdef ADD_FOG\nuniform vec4 u_FogColor;\n#ifdef LINEAR_FOG\nuniform float u_FogNear;uniform float u_FogFar;\n#endif\n#ifdef EXP_FOG\nuniform float u_FogDensity;\n#endif\n#endif\n#ifdef PREVIEW_BORDER\nuniform vec4 uPreviewColor;\n#endif\nuniform vec3 u_Camera;uniform int u_MipCount;struct MaterialInfo{float perceptualRoughness;vec3 reflectance0;float alphaRoughness;vec3 diffuseColor;vec3 reflectance90;vec3 specularColor;};\n#ifdef ADD_FOG\nvec3 getMixFogColor(vec3 baseColor){vec3 distance=u_Camera-v_Position;float fogAmount=0.0;\n#ifdef LINEAR_FOG\nfogAmount=smoothstep(u_FogNear,u_FogFar,distance[2]);\n#endif\n#ifdef EXP_FOG\n#define LOG2 1.442695\nfogAmount=1.-exp2(-u_FogDensity*u_FogDensity*distance[2]*distance[2]*LOG2);fogAmount=clamp(fogAmount,0.,1.);\n#endif\nvec3 mixColor=baseColor.rgb+(vec3(u_FogColor)-baseColor.rgb)*fogAmount;return mixColor;}\n#endif\n#ifdef IRRADIANCE_COEFFICIENTS\nvec3 getIrradiance(vec3 norm,SHCoefficients c){float x=norm.x;float y=norm.y;float z=norm.z;float c1=0.429043;float c2=0.511664;float c3=0.743125;float c4=0.886227;float c5=0.247708;vec3 irradiance=c1*c.l22*(x*x-y*y)+c3*c.l20*(z*z)+c4*c.l00-c5*c.l20+2.0*c1*(c.l2m2*x*y+c.l21*x*z+c.l2m1*y*z)+2.0*c2*(c.l11*x+c.l1m1*y+c.l10*z);return irradiance;}\n#endif\n#ifdef USE_IBL\nvec3 getIBLContribution(MaterialInfo materialInfo,vec3 n,vec3 v){float NdotV=clamp(dot(n,v),0.0,1.0);float lod=clamp(materialInfo.perceptualRoughness*float(u_MipCount),0.0,float(u_MipCount));vec3 reflection=normalize(reflect(-v,n));vec2 brdfSamplePoint=clamp(vec2(NdotV,materialInfo.perceptualRoughness),vec2(0.0,0.0),vec2(1.0,1.0));vec2 brdf=texture2D(u_brdfLUT,brdfSamplePoint).rg;vec4 diffuseColor=vec4(1.0,0.0,0.0,1.0);\n#ifdef IRRADIANCE_COEFFICIENTS\nvec3 irradiance=getIrradiance(n,u_shCoefficients);diffuseColor=vec4(irradiance,1.0);\n#else\ndiffuseColor=textureCube(u_DiffuseEnvSampler,n);\n#endif\n#ifdef USE_TEX_LOD\nvec4 specularSample=_textureCubeLodEXT(u_SpecularEnvSampler,reflection,lod);\n#else\nvec4 specularSample=textureCube(u_SpecularEnvSampler,reflection,lod);\n#endif\n#ifdef USE_HDR\nvec3 diffuseLight=diffuseColor.rgb;vec3 specularLight=specularSample.rgb;\n#else\nvec3 diffuseLight=SRGBtoLINEAR(diffuseColor).rgb;vec3 specularLight=SRGBtoLINEAR(specularSample).rgb;\n#endif\nvec3 diffuse=diffuseLight*materialInfo.diffuseColor;vec3 specular=specularLight*(materialInfo.specularColor*brdf.x+brdf.y);return diffuse*u_IblIntensity[0]+specular*u_IblIntensity[1];}\n#endif\nvec3 diffuse(MaterialInfo materialInfo){return materialInfo.diffuseColor/M_PI;}vec3 specularReflection(MaterialInfo materialInfo,AngularInfo angularInfo){return materialInfo.reflectance0+(materialInfo.reflectance90-materialInfo.reflectance0)*pow(clamp(1.0-angularInfo.VdotH,0.0,1.0),5.0);}float visibilityOcclusion(MaterialInfo materialInfo,AngularInfo angularInfo){float NdotL=angularInfo.NdotL;float NdotV=angularInfo.NdotV;float alphaRoughnessSq=materialInfo.alphaRoughness*materialInfo.alphaRoughness;float GGXV=NdotL*sqrt(NdotV*NdotV*(1.0-alphaRoughnessSq)+alphaRoughnessSq);float GGXL=NdotV*sqrt(NdotL*NdotL*(1.0-alphaRoughnessSq)+alphaRoughnessSq);float GGX=GGXV+GGXL;if(GGX>0.0){return 0.5/GGX;}return 0.0;}float microfacetDistribution(MaterialInfo materialInfo,AngularInfo angularInfo){float alphaRoughnessSq=materialInfo.alphaRoughness*materialInfo.alphaRoughness;float f=(angularInfo.NdotH*alphaRoughnessSq-angularInfo.NdotH)*angularInfo.NdotH+1.0;return alphaRoughnessSq/(M_PI*f*f);}vec3 getPointShade(vec3 pointToLight,MaterialInfo materialInfo,vec3 normal,vec3 view){AngularInfo angularInfo=getAngularInfo(pointToLight,normal,view);if(angularInfo.NdotL>0.0||angularInfo.NdotV>0.0){vec3 F=specularReflection(materialInfo,angularInfo);float Vis=visibilityOcclusion(materialInfo,angularInfo);float D=microfacetDistribution(materialInfo,angularInfo);vec3 diffuseContrib=(1.0-F)*diffuse(materialInfo);vec3 specContrib=F*Vis*D;return angularInfo.NdotL*(diffuseContrib+specContrib);}return vec3(0.0,0.0,0.0);}float getRangeAttenuation(float range,float distance){if(range<=0.0){return 1.0;}return 1.0/(pow(5.0*distance/range,2.0)+1.0);}float getSpotAttenuation(vec3 pointToLight,vec3 spotDirection,float outerConeCos,float innerConeCos){float actualCos=dot(normalize(spotDirection),normalize(-pointToLight));if(actualCos>outerConeCos){if(actualCos<innerConeCos){return smoothstep(outerConeCos,innerConeCos,actualCos);}return 1.0;}return 0.0;}vec3 applyDirectionalLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view,float shadow){vec3 pointToLight=-light.direction;vec3 shade=getPointShade(pointToLight,materialInfo,normal,view)*shadow;return light.intensity*light.color*shade;}vec3 applyPointLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view){vec3 pointToLight=light.position-v_Position;float distance=length(pointToLight);float attenuation=getRangeAttenuation(light.range,distance);vec3 shade=getPointShade(pointToLight,materialInfo,normal,view);return light.color*shade*attenuation*light.intensity;}vec3 applySpotLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view,float shadow){vec3 pointToLight=light.position-v_Position;float distance=length(pointToLight);float rangeAttenuation=getRangeAttenuation(light.range,distance);float spotAttenuation=getSpotAttenuation(pointToLight,light.direction,light.outerConeCos,light.innerConeCos);vec3 shade=getPointShade(pointToLight,materialInfo,normal,view)*shadow;return rangeAttenuation*spotAttenuation*light.intensity*light.color*shade;}vec3 applyAmbientLight(Light light,MaterialInfo materialInfo){return light.intensity*light.color*diffuse(materialInfo);}float weight(float z,float a){return clamp(pow(min(1.0,a*10.0)+0.01,3.0)*1e8*pow(1.0-z*0.9,3.0),1e-2,3e3);}void writeFragmentColor(vec4 fragColor){\n#if !defined(ALPHAMODE_OPAQUE) && defined(USE_WBOIT)\nfloat w=weight(gl_FragCoord.z,fragColor.a);fragColor.rgb*=fragColor.a;outFragColor0=vec4(fragColor.rgb*w,fragColor.a);outFragColor1=vec4(fragColor.a*w);\n#else\noutFragColor=fragColor;\n#endif\n}void main(){float perceptualRoughness=0.0;float metallic=0.0;vec4 baseColor=vec4(0.0,0.0,0.0,1.0);vec3 diffuseColor=vec3(0.0);vec3 specularColor=vec3(0.0);vec3 f0=vec3(0.04);\n#ifdef PREVIEW_BORDER\nwriteFragmentColor(uPreviewColor);return;\n#endif\n#ifdef MATERIAL_SPECULARGLOSSINESS\n#ifdef HAS_SPECULAR_GLOSSINESS_MAP\nvec4 sgSample=SRGBtoLINEAR(texture2D(u_SpecularGlossinessSampler,getSpecularGlossinessUV()));perceptualRoughness=(1.0-sgSample.a*u_GlossinessFactor);f0=sgSample.rgb*u_SpecularFactor;\n#else\nf0=u_SpecularFactor;perceptualRoughness=1.0-u_GlossinessFactor;\n#endif\n#ifdef HAS_DIFFUSE_MAP\nbaseColor=SRGBtoLINEAR(texture2D(u_DiffuseSampler,getDiffuseUV()))*u_DiffuseFactor;\n#else\nbaseColor=SRGBtoLINEAR(u_DiffuseFactor);\n#endif\nbaseColor*=getVertexColor();specularColor=f0;float oneMinusSpecularStrength=1.0-max(max(f0.r,f0.g),f0.b);diffuseColor=baseColor.rgb*oneMinusSpecularStrength;\n#ifdef DEBUG_METALLIC\nmetallic=solveMetallic(baseColor.rgb,specularColor,oneMinusSpecularStrength);\n#endif\n#endif\n#ifdef MATERIAL_METALLICROUGHNESS\n#ifdef HAS_METALLIC_ROUGHNESS_MAP\nvec4 mrSample=texture2D(u_MetallicRoughnessSampler,getMetallicRoughnessUV());perceptualRoughness=mrSample.g*u_RoughnessFactor;metallic=mrSample.b*u_MetallicFactor;\n#else\nmetallic=u_MetallicFactor;perceptualRoughness=u_RoughnessFactor;\n#endif\n#ifdef HAS_BASE_COLOR_MAP\nbaseColor=SRGBtoLINEAR(texture2D(u_BaseColorSampler,getBaseColorUV()))*u_BaseColorFactor;\n#else\nbaseColor=SRGBtoLINEAR(u_BaseColorFactor);\n#endif\nbaseColor*=getVertexColor();diffuseColor=baseColor.rgb*(vec3(1.0)-f0)*(1.0-metallic);specularColor=mix(f0,baseColor.rgb,metallic);\n#endif\n#ifdef ALPHAMODE_MASK\nif(baseColor.a<u_AlphaCutoff){discard;}baseColor.a=1.0;\n#endif\n#ifdef ALPHAMODE_OPAQUE\nbaseColor.a=1.0;\n#endif\n#ifdef MATERIAL_UNLIT\n#ifndef DEBUG_OUTPUT\n#ifdef ADD_FOG\nvec3 mixColor=getMixFogColor(baseColor.rgb);vec4 fragColorUnlit=vec4(LINEARtoSRGB(mixColor)*baseColor.a,baseColor.a);\n#else\nvec4 fragColorUnlit=vec4(LINEARtoSRGB(baseColor.rgb)*baseColor.a,baseColor.a);\n#endif\nwriteFragmentColor(fragColorUnlit);\n#else\n#ifdef DEBUG_UV\noutFragColor.rgb=vec3(getDebugUVColor(getBaseColorUV(),getNormal()));\n#endif\n#ifdef DEBUG_METALLIC\noutFragColor.rgb=vec3(metallic);\n#endif\n#ifdef DEBUG_ROUGHNESS\noutFragColor.rgb=vec3(perceptualRoughness);\n#endif\n#ifdef DEBUG_NORMAL\noutFragColor.rgb=getNormal()*0.5+0.5;\n#endif\n#ifdef DEBUG_BASECOLOR\noutFragColor.rgb=LINEARtoSRGB(baseColor.rgb);\n#endif\n#ifdef DEBUG_OCCLUSION\noutFragColor.rgb=vec3(1.0);\n#endif\n#ifdef DEBUG_EMISSIVE\noutFragColor.rgb=vec3(0.0);\n#endif\n#ifdef DEBUG_ALPHA\noutFragColor.rgb=vec3(baseColor.a);\n#endif\noutFragColor.a=1.0;\n#endif\nreturn;\n#endif\nmetallic=clamp(metallic,0.0,1.0);float alphaRoughness=perceptualRoughness*perceptualRoughness;vec3 normal=getNormal();\n#ifdef USE_SPECULAR_AA\nfloat AARoughnessFactor=getAARoughnessFactor(normal);perceptualRoughness+=AARoughnessFactor;alphaRoughness+=AARoughnessFactor;\n#endif\nperceptualRoughness=clamp(perceptualRoughness,0.04,1.0);alphaRoughness=clamp(alphaRoughness,0.04,1.0);float reflectance=max(max(specularColor.r,specularColor.g),specularColor.b);vec3 specularEnvironmentR0=specularColor.rgb;vec3 specularEnvironmentR90=vec3(clamp(reflectance*50.0,0.0,1.0));MaterialInfo materialInfo=MaterialInfo(perceptualRoughness,specularEnvironmentR0,alphaRoughness,diffuseColor,specularEnvironmentR90,specularColor);vec3 color=vec3(0.0,0.0,0.0);vec3 view=normalize(u_Camera-v_Position);float shadow=1.0;\n#ifdef USE_SHADOW_MAPPING\nshadow=getShadowContribution();\n#endif\n#ifdef USE_PUNCTUAL\nfor(int i=0;i<LIGHT_COUNT;++i){Light light=u_Lights[i];if(light.type==LightType_Directional){color+=applyDirectionalLight(light,materialInfo,normal,view,shadow);}else if(light.type==LightType_Point){color+=applyPointLight(light,materialInfo,normal,view);}else if(light.type==LightType_Spot){color+=applySpotLight(light,materialInfo,normal,view,shadow);}else if(light.type==LightType_Ambient){color+=applyAmbientLight(light,materialInfo);}}\n#endif\n#ifdef USE_IBL\ncolor+=getIBLContribution(materialInfo,normal,view);\n#endif\nfloat ao=1.0;\n#ifdef HAS_OCCLUSION_MAP\nao=texture2D(u_OcclusionSampler,getOcclusionUV()).r;color=mix(color,color*ao,u_OcclusionStrength);\n#endif\nvec3 emissive=vec3(0);\n#ifndef DEBUG_OUTPUT\n#ifdef ADD_FOG\nvec4 toneMapColor=SRGBtoLINEAR(vec4(toneMap(color),baseColor.a));color=getMixFogColor(toneMapColor.rgb);vec4 fragColorOut=vec4(LINEARtoSRGB(color.rgb)*baseColor.a,baseColor.a);\n#else\ncolor=toneMap(color)*baseColor.a;\n#ifdef HAS_EMISSIVE\ncolor+=u_EmissiveFactor.rgb;\n#endif\n#ifdef HAS_EMISSIVE_MAP\nemissive=SRGBtoLINEAR(texture2D(u_EmissiveSampler,getEmissiveUV())).rgb*u_EmissiveFactor.rgb;color+=emissive;\n#endif\nvec4 fragColorOut=vec4(color,baseColor.a);\n#endif\nwriteFragmentColor(fragColorOut);\n#else\n#ifdef DEBUG_UV\noutFragColor.rgb=vec3(getDebugUVColor(getBaseColorUV(),normal));\n#endif\n#ifdef DEBUG_METALLIC\noutFragColor.rgb=vec3(metallic);\n#endif\n#ifdef DEBUG_ROUGHNESS\noutFragColor.rgb=vec3(perceptualRoughness);\n#endif\n#ifdef DEBUG_NORMAL\noutFragColor.rgb=normal*0.5+0.5;\n#endif\n#ifdef DEBUG_BASECOLOR\noutFragColor.rgb=LINEARtoSRGB(baseColor.rgb);\n#endif\n#ifdef DEBUG_OCCLUSION\n#ifdef HAS_OCCLUSION_MAP\noutFragColor.rgb=vec3(mix(1.0,ao,u_OcclusionStrength));\n#else\noutFragColor.rgb=vec3(1.0);\n#endif\n#endif\n#ifdef DEBUG_EMISSIVE\n#ifdef HAS_EMISSIVE\nemissive=u_EmissiveFactor.rgb;\n#endif\n#ifdef HAS_EMISSIVE_MAP\nemissive=SRGBtoLINEAR(texture2D(u_EmissiveSampler,getEmissiveUV())).rgb*u_EmissiveFactor.rgb;\n#endif\noutFragColor.rgb=LINEARtoSRGB(emissive);\n#endif\n#ifdef DEBUG_F0\noutFragColor.rgb=vec3(f0);\n#endif\n#ifdef DEBUG_ALPHA\noutFragColor.rgb=vec3(baseColor.a);\n#endif\noutFragColor.a=1.0;\n#endif\n}";
|
|
3781
|
+
var metallicRoughnessFrag = "\n#define FEATURES\n#ifndef WEBGL2\n#extension GL_OES_standard_derivatives : enable\n#endif\n#if !defined(WEBGL2) && defined(USE_TEX_LOD)\n#extension GL_EXT_shader_texture_lod : enable\n#endif\n#ifdef USE_HDR\n#extension GL_OES_texture_float : enable\n#extension GL_OES_texture_float_linear : enable\n#endif\n#if !defined(WEBGL2) && defined(USE_WBOIT)\n#extension GL_EXT_draw_buffers: require\n#endif\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#ifdef WEBGL2\n#ifdef USE_WBOIT\nlayout(location=0)out vec4 outFragColor0;layout(location=1)out vec4 outFragColor1;\n#else\nout vec4 outFragColor;\n#endif\n#else\n#ifdef USE_WBOIT\n#define outFragColor0 gl_FragData[0]\n#define outFragColor1 gl_FragData[1]\n#else\n#define outFragColor gl_FragColor\n#endif\n#endif\n#include <webglCompatibility.glsl>\n#include <extensions.frag.glsl>\n#include <tonemapping.frag.glsl>\n#include <textures.vert.glsl>\n#include <functions.frag.glsl>\n#include <shadowCommon.vert.glsl>\n#include <shadow.frag.glsl>\nstruct Light{vec3 direction;float range;vec3 color;float intensity;vec3 position;float innerConeCos;float outerConeCos;int type;vec2 padding;};const int LightType_Directional=0;const int LightType_Point=1;const int LightType_Spot=2;const int LightType_Ambient=3;\n#ifdef USE_PUNCTUAL\nuniform Light _Lights[LIGHT_COUNT];\n#endif\n#if defined(MATERIAL_SPECULARGLOSSINESS) || defined(MATERIAL_METALLICROUGHNESS)\nuniform float _MetallicFactor;uniform float _RoughnessFactor;uniform vec4 _BaseColorFactor;\n#endif\n#ifdef MATERIAL_SPECULARGLOSSINESS\nuniform vec3 _SpecularFactor;uniform vec4 _DiffuseFactor;uniform float _GlossinessFactor;\n#endif\n#ifdef ALPHAMODE_MASK\nuniform float _AlphaCutoff;\n#endif\n#ifdef ADD_FOG\nuniform vec4 _FogColor;\n#ifdef LINEAR_FOG\nuniform float _FogNear;uniform float _FogFar;\n#endif\n#ifdef EXP_FOG\nuniform float _FogDensity;\n#endif\n#endif\n#ifdef PREVIEW_BORDER\nuniform vec4 uPreviewColor;\n#endif\nuniform vec3 _Camera;uniform int _MipCount;struct MaterialInfo{float perceptualRoughness;vec3 reflectance0;float alphaRoughness;vec3 diffuseColor;vec3 reflectance90;vec3 specularColor;};\n#ifdef ADD_FOG\nvec3 getMixFogColor(vec3 baseColor){vec3 distance=_Camera-v_Position;float fogAmount=0.0;\n#ifdef LINEAR_FOG\nfogAmount=smoothstep(_FogNear,_FogFar,distance[2]);\n#endif\n#ifdef EXP_FOG\n#define LOG2 1.442695\nfogAmount=1.-exp2(-_FogDensity*_FogDensity*distance[2]*distance[2]*LOG2);fogAmount=clamp(fogAmount,0.,1.);\n#endif\nvec3 mixColor=baseColor.rgb+(vec3(_FogColor)-baseColor.rgb)*fogAmount;return mixColor;}\n#endif\n#ifdef IRRADIANCE_COEFFICIENTS\nvec3 getIrradiance(vec3 norm,SHCoefficients c){float x=norm.x;float y=norm.y;float z=norm.z;float c1=0.429043;float c2=0.511664;float c3=0.743125;float c4=0.886227;float c5=0.247708;vec3 irradiance=c1*c.l22*(x*x-y*y)+c3*c.l20*(z*z)+c4*c.l00-c5*c.l20+2.0*c1*(c.l2m2*x*y+c.l21*x*z+c.l2m1*y*z)+2.0*c2*(c.l11*x+c.l1m1*y+c.l10*z);return irradiance;}\n#endif\n#ifdef USE_IBL\nvec3 getIBLContribution(MaterialInfo materialInfo,vec3 n,vec3 v){float NdotV=clamp(dot(n,v),0.0,1.0);float lod=clamp(materialInfo.perceptualRoughness*float(_MipCount),0.0,float(_MipCount));vec3 reflection=normalize(reflect(-v,n));vec2 brdfSamplePoint=clamp(vec2(NdotV,materialInfo.perceptualRoughness),vec2(0.0,0.0),vec2(1.0,1.0));vec2 brdf=texture2D(_brdfLUT,brdfSamplePoint).rg;vec4 diffuseColor=vec4(1.0,0.0,0.0,1.0);\n#ifdef IRRADIANCE_COEFFICIENTS\nvec3 irradiance=getIrradiance(n,_shCoefficients);diffuseColor=vec4(irradiance,1.0);\n#else\ndiffuseColor=textureCube(_DiffuseEnvSampler,n);\n#endif\n#ifdef USE_TEX_LOD\nvec4 specularSample=_textureCubeLodEXT(_SpecularEnvSampler,reflection,lod);\n#else\nvec4 specularSample=textureCube(_SpecularEnvSampler,reflection,lod);\n#endif\n#ifdef USE_HDR\nvec3 diffuseLight=diffuseColor.rgb;vec3 specularLight=specularSample.rgb;\n#else\nvec3 diffuseLight=SRGBtoLINEAR(diffuseColor).rgb;vec3 specularLight=SRGBtoLINEAR(specularSample).rgb;\n#endif\nvec3 diffuse=diffuseLight*materialInfo.diffuseColor;vec3 specular=specularLight*(materialInfo.specularColor*brdf.x+brdf.y);return diffuse*_IblIntensity[0]+specular*_IblIntensity[1];}\n#endif\nvec3 diffuse(MaterialInfo materialInfo){return materialInfo.diffuseColor/M_PI;}vec3 specularReflection(MaterialInfo materialInfo,AngularInfo angularInfo){return materialInfo.reflectance0+(materialInfo.reflectance90-materialInfo.reflectance0)*pow(clamp(1.0-angularInfo.VdotH,0.0,1.0),5.0);}float visibilityOcclusion(MaterialInfo materialInfo,AngularInfo angularInfo){float NdotL=angularInfo.NdotL;float NdotV=angularInfo.NdotV;float alphaRoughnessSq=materialInfo.alphaRoughness*materialInfo.alphaRoughness;float GGXV=NdotL*sqrt(NdotV*NdotV*(1.0-alphaRoughnessSq)+alphaRoughnessSq);float GGXL=NdotV*sqrt(NdotL*NdotL*(1.0-alphaRoughnessSq)+alphaRoughnessSq);float GGX=GGXV+GGXL;if(GGX>0.0){return 0.5/GGX;}return 0.0;}float microfacetDistribution(MaterialInfo materialInfo,AngularInfo angularInfo){float alphaRoughnessSq=materialInfo.alphaRoughness*materialInfo.alphaRoughness;float f=(angularInfo.NdotH*alphaRoughnessSq-angularInfo.NdotH)*angularInfo.NdotH+1.0;return alphaRoughnessSq/(M_PI*f*f);}vec3 getPointShade(vec3 pointToLight,MaterialInfo materialInfo,vec3 normal,vec3 view){AngularInfo angularInfo=getAngularInfo(pointToLight,normal,view);if(angularInfo.NdotL>0.0||angularInfo.NdotV>0.0){vec3 F=specularReflection(materialInfo,angularInfo);float Vis=visibilityOcclusion(materialInfo,angularInfo);float D=microfacetDistribution(materialInfo,angularInfo);vec3 diffuseContrib=(1.0-F)*diffuse(materialInfo);vec3 specContrib=F*Vis*D;return angularInfo.NdotL*(diffuseContrib+specContrib);}return vec3(0.0,0.0,0.0);}float getRangeAttenuation(float range,float distance){if(range<=0.0){return 1.0;}return 1.0/(pow(5.0*distance/range,2.0)+1.0);}float getSpotAttenuation(vec3 pointToLight,vec3 spotDirection,float outerConeCos,float innerConeCos){float actualCos=dot(normalize(spotDirection),normalize(-pointToLight));if(actualCos>outerConeCos){if(actualCos<innerConeCos){return smoothstep(outerConeCos,innerConeCos,actualCos);}return 1.0;}return 0.0;}vec3 applyDirectionalLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view,float shadow){vec3 pointToLight=-light.direction;vec3 shade=getPointShade(pointToLight,materialInfo,normal,view)*shadow;return light.intensity*light.color*shade;}vec3 applyPointLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view){vec3 pointToLight=light.position-v_Position;float distance=length(pointToLight);float attenuation=getRangeAttenuation(light.range,distance);vec3 shade=getPointShade(pointToLight,materialInfo,normal,view);return light.color*shade*attenuation*light.intensity;}vec3 applySpotLight(Light light,MaterialInfo materialInfo,vec3 normal,vec3 view,float shadow){vec3 pointToLight=light.position-v_Position;float distance=length(pointToLight);float rangeAttenuation=getRangeAttenuation(light.range,distance);float spotAttenuation=getSpotAttenuation(pointToLight,light.direction,light.outerConeCos,light.innerConeCos);vec3 shade=getPointShade(pointToLight,materialInfo,normal,view)*shadow;return rangeAttenuation*spotAttenuation*light.intensity*light.color*shade;}vec3 applyAmbientLight(Light light,MaterialInfo materialInfo){return light.intensity*light.color*diffuse(materialInfo);}float weight(float z,float a){return clamp(pow(min(1.0,a*10.0)+0.01,3.0)*1e8*pow(1.0-z*0.9,3.0),1e-2,3e3);}void writeFragmentColor(vec4 fragColor){\n#if !defined(ALPHAMODE_OPAQUE) && defined(USE_WBOIT)\nfloat w=weight(gl_FragCoord.z,fragColor.a);fragColor.rgb*=fragColor.a;outFragColor0=vec4(fragColor.rgb*w,fragColor.a);outFragColor1=vec4(fragColor.a*w);\n#else\noutFragColor=fragColor;\n#endif\n}void main(){float perceptualRoughness=0.0;float metallic=0.0;vec4 baseColor=vec4(0.0,0.0,0.0,1.0);vec3 diffuseColor=vec3(0.0);vec3 specularColor=vec3(0.0);vec3 f0=vec3(0.04);\n#ifdef PREVIEW_BORDER\nwriteFragmentColor(uPreviewColor);return;\n#endif\n#ifdef MATERIAL_SPECULARGLOSSINESS\n#ifdef HAS_SPECULAR_GLOSSINESS_MAP\nvec4 sgSample=SRGBtoLINEAR(texture2D(_SpecularGlossinessSampler,getSpecularGlossinessUV()));perceptualRoughness=(1.0-sgSample.a*_GlossinessFactor);f0=sgSample.rgb*_SpecularFactor;\n#else\nf0=_SpecularFactor;perceptualRoughness=1.0-_GlossinessFactor;\n#endif\n#ifdef HAS_DIFFUSE_MAP\nbaseColor=SRGBtoLINEAR(texture2D(_DiffuseSampler,getDiffuseUV()))*_DiffuseFactor;\n#else\nbaseColor=SRGBtoLINEAR(_DiffuseFactor);\n#endif\nbaseColor*=getVertexColor();specularColor=f0;float oneMinusSpecularStrength=1.0-max(max(f0.r,f0.g),f0.b);diffuseColor=baseColor.rgb*oneMinusSpecularStrength;\n#ifdef DEBUG_METALLIC\nmetallic=solveMetallic(baseColor.rgb,specularColor,oneMinusSpecularStrength);\n#endif\n#endif\n#ifdef MATERIAL_METALLICROUGHNESS\n#ifdef HAS_METALLIC_ROUGHNESS_MAP\nvec4 mrSample=texture2D(_MetallicRoughnessSampler,getMetallicRoughnessUV());perceptualRoughness=mrSample.g*_RoughnessFactor;metallic=mrSample.b*_MetallicFactor;\n#else\nmetallic=_MetallicFactor;perceptualRoughness=_RoughnessFactor;\n#endif\n#ifdef HAS_BASE_COLOR_MAP\nbaseColor=SRGBtoLINEAR(texture2D(_BaseColorSampler,getBaseColorUV()))*_BaseColorFactor;\n#else\nbaseColor=SRGBtoLINEAR(_BaseColorFactor);\n#endif\nbaseColor*=getVertexColor();diffuseColor=baseColor.rgb*(vec3(1.0)-f0)*(1.0-metallic);specularColor=mix(f0,baseColor.rgb,metallic);\n#endif\n#ifdef ALPHAMODE_MASK\nif(baseColor.a<_AlphaCutoff){discard;}baseColor.a=1.0;\n#endif\n#ifdef ALPHAMODE_OPAQUE\nbaseColor.a=1.0;\n#endif\n#ifdef MATERIAL_UNLIT\n#ifndef DEBUG_OUTPUT\n#ifdef ADD_FOG\nvec3 mixColor=getMixFogColor(baseColor.rgb);vec4 fragColorUnlit=vec4(LINEARtoSRGB(mixColor)*baseColor.a,baseColor.a);\n#else\nvec4 fragColorUnlit=vec4(LINEARtoSRGB(baseColor.rgb)*baseColor.a,baseColor.a);\n#endif\nwriteFragmentColor(fragColorUnlit);\n#else\n#ifdef DEBUG_UV\noutFragColor.rgb=vec3(getDebugUVColor(getBaseColorUV(),getNormal()));\n#endif\n#ifdef DEBUG_METALLIC\noutFragColor.rgb=vec3(metallic);\n#endif\n#ifdef DEBUG_ROUGHNESS\noutFragColor.rgb=vec3(perceptualRoughness);\n#endif\n#ifdef DEBUG_NORMAL\noutFragColor.rgb=getNormal()*0.5+0.5;\n#endif\n#ifdef DEBUG_BASECOLOR\noutFragColor.rgb=LINEARtoSRGB(baseColor.rgb);\n#endif\n#ifdef DEBUG_OCCLUSION\noutFragColor.rgb=vec3(1.0);\n#endif\n#ifdef DEBUG_EMISSIVE\noutFragColor.rgb=vec3(0.0);\n#endif\n#ifdef DEBUG_ALPHA\noutFragColor.rgb=vec3(baseColor.a);\n#endif\noutFragColor.a=1.0;\n#endif\nreturn;\n#endif\nmetallic=clamp(metallic,0.0,1.0);float alphaRoughness=perceptualRoughness*perceptualRoughness;vec3 normal=getNormal();\n#ifdef USE_SPECULAR_AA\nfloat AARoughnessFactor=getAARoughnessFactor(normal);perceptualRoughness+=AARoughnessFactor;alphaRoughness+=AARoughnessFactor;\n#endif\nperceptualRoughness=clamp(perceptualRoughness,0.04,1.0);alphaRoughness=clamp(alphaRoughness,0.04,1.0);float reflectance=max(max(specularColor.r,specularColor.g),specularColor.b);vec3 specularEnvironmentR0=specularColor.rgb;vec3 specularEnvironmentR90=vec3(clamp(reflectance*50.0,0.0,1.0));MaterialInfo materialInfo=MaterialInfo(perceptualRoughness,specularEnvironmentR0,alphaRoughness,diffuseColor,specularEnvironmentR90,specularColor);vec3 color=vec3(0.0,0.0,0.0);vec3 view=normalize(_Camera-v_Position);float shadow=1.0;\n#ifdef USE_SHADOW_MAPPING\nshadow=getShadowContribution();\n#endif\n#ifdef USE_PUNCTUAL\nfor(int i=0;i<LIGHT_COUNT;++i){Light light=_Lights[i];if(light.type==LightType_Directional){color+=applyDirectionalLight(light,materialInfo,normal,view,shadow);}else if(light.type==LightType_Point){color+=applyPointLight(light,materialInfo,normal,view);}else if(light.type==LightType_Spot){color+=applySpotLight(light,materialInfo,normal,view,shadow);}else if(light.type==LightType_Ambient){color+=applyAmbientLight(light,materialInfo);}}\n#endif\n#ifdef USE_IBL\ncolor+=getIBLContribution(materialInfo,normal,view);\n#endif\nfloat ao=1.0;\n#ifdef HAS_OCCLUSION_MAP\nao=texture2D(_OcclusionSampler,getOcclusionUV()).r;color=mix(color,color*ao,_OcclusionStrength);\n#endif\nvec3 emissive=vec3(0);\n#ifndef DEBUG_OUTPUT\n#ifdef ADD_FOG\nvec4 toneMapColor=SRGBtoLINEAR(vec4(toneMap(color),baseColor.a));color=getMixFogColor(toneMapColor.rgb);vec4 fragColorOut=vec4(LINEARtoSRGB(color.rgb)*baseColor.a,baseColor.a);\n#else\ncolor=toneMap(color)*baseColor.a;\n#ifdef HAS_EMISSIVE\ncolor+=_EmissiveFactor.rgb;\n#endif\n#ifdef HAS_EMISSIVE_MAP\nemissive=SRGBtoLINEAR(texture2D(_EmissiveSampler,getEmissiveUV())).rgb*_EmissiveFactor.rgb;color+=emissive;\n#endif\nvec4 fragColorOut=vec4(color,baseColor.a);\n#endif\nwriteFragmentColor(fragColorOut);\n#else\n#ifdef DEBUG_UV\noutFragColor.rgb=vec3(getDebugUVColor(getBaseColorUV(),normal));\n#endif\n#ifdef DEBUG_METALLIC\noutFragColor.rgb=vec3(metallic);\n#endif\n#ifdef DEBUG_ROUGHNESS\noutFragColor.rgb=vec3(perceptualRoughness);\n#endif\n#ifdef DEBUG_NORMAL\noutFragColor.rgb=normal*0.5+0.5;\n#endif\n#ifdef DEBUG_BASECOLOR\noutFragColor.rgb=LINEARtoSRGB(baseColor.rgb);\n#endif\n#ifdef DEBUG_OCCLUSION\n#ifdef HAS_OCCLUSION_MAP\noutFragColor.rgb=vec3(mix(1.0,ao,_OcclusionStrength));\n#else\noutFragColor.rgb=vec3(1.0);\n#endif\n#endif\n#ifdef DEBUG_EMISSIVE\n#ifdef HAS_EMISSIVE\nemissive=_EmissiveFactor.rgb;\n#endif\n#ifdef HAS_EMISSIVE_MAP\nemissive=SRGBtoLINEAR(texture2D(_EmissiveSampler,getEmissiveUV())).rgb*_EmissiveFactor.rgb;\n#endif\noutFragColor.rgb=LINEARtoSRGB(emissive);\n#endif\n#ifdef DEBUG_F0\noutFragColor.rgb=vec3(f0);\n#endif\n#ifdef DEBUG_ALPHA\noutFragColor.rgb=vec3(baseColor.a);\n#endif\noutFragColor.a=1.0;\n#endif\n}";
|
|
3811
3782
|
|
|
3812
3783
|
var shadowPassFrag = "#define FEATURES\n#include <shadowCommon.vert.glsl>\n#include <webglCompatibility.glsl>\n#if defined(SHADOWMAP_VSM) && !defined(WEBGL2)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#ifdef WEBGL2\nout vec4 outFragColor;\n#else\n#define outFragColor gl_FragColor\n#endif\nvec4 CalcMomentVSM(float depth){float dx=0.0;float dy=0.0;\n#if defined(SHADOWMAP_VSM) && (defined(GL_OES_standard_derivatives) || defined(WEBGL2))\ndx=dFdx(depth);dy=dFdy(depth);\n#endif\nfloat moment2=depth*depth+0.25*(dx*dx+dy*dy);return vec4(1.0-depth,1.0-moment2,0.0,1.0);}vec4 CalcMomentEVSM(float depth){float pos=EVSM_FUNC0(depth);float neg=EVSM_FUNC1(depth);return vec4(pos,pos*pos,neg,neg*neg);}void main(){\n#if defined(SHADOWMAP_STANDARD) || defined(SHADOWMAP_VSM)\noutFragColor=CalcMomentVSM(gl_FragCoord.z);\n#else\noutFragColor=CalcMomentEVSM(gl_FragCoord.z);\n#endif\n}";
|
|
3813
3784
|
|
|
3814
|
-
var skyboxVert = "precision highp float;\n#define FEATURES\n#include <webglCompatibility.glsl>\nvsIn vec3
|
|
3785
|
+
var skyboxVert = "precision highp float;\n#define FEATURES\n#include <webglCompatibility.glsl>\nvsIn vec3 aPos;vsOut vec3 v_CameraDir;uniform mat4 _InvViewProjectionMatrix;void main(){vec4 dir=_InvViewProjectionMatrix*vec4(aPos.xy,1,1);v_CameraDir=normalize(dir.xyz/dir.w);gl_Position=vec4(aPos.xy,0.99999,1);}";
|
|
3815
3786
|
|
|
3816
|
-
var skyboxFrag = "precision highp float;\n#define FEATURES\n#if !defined(WEBGL2) && defined(USE_TEX_LOD)\n#extension GL_EXT_shader_texture_lod : enable\n#endif\n#if !defined(WEBGL2)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#include <webglCompatibility.glsl>\n#include <extensions.frag.glsl>\n#ifdef WEBGL2\nout vec4 outFragColor;\n#else\n#define outFragColor gl_FragColor\n#endif\nuniform sampler2D
|
|
3787
|
+
var skyboxFrag = "precision highp float;\n#define FEATURES\n#if !defined(WEBGL2) && defined(USE_TEX_LOD)\n#extension GL_EXT_shader_texture_lod : enable\n#endif\n#if !defined(WEBGL2)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#include <webglCompatibility.glsl>\n#include <extensions.frag.glsl>\n#ifdef WEBGL2\nout vec4 outFragColor;\n#else\n#define outFragColor gl_FragColor\n#endif\nuniform sampler2D _brdfLUT;uniform vec2 _IblIntensity;uniform int _MipCount;uniform samplerCube _DiffuseEnvSampler;uniform samplerCube _SpecularEnvSampler;fsIn vec3 v_CameraDir;\n#ifdef IRRADIANCE_COEFFICIENTS\nstruct SHCoefficients{vec3 l00,l1m1,l10,l11,l2m2,l2m1,l20,l21,l22;};uniform SHCoefficients _shCoefficients;vec3 getIrradiance(vec3 norm,SHCoefficients c){float x=norm.x;float y=norm.y;float z=norm.z;float c1=0.429043;float c2=0.511664;float c3=0.743125;float c4=0.886227;float c5=0.247708;vec3 irradiance=c1*c.l22*(x*x-y*y)+c3*c.l20*(z*z)+c4*c.l00-c5*c.l20+2.0*c1*(c.l2m2*x*y+c.l21*x*z+c.l2m1*y*z)+2.0*c2*(c.l11*x+c.l1m1*y+c.l10*z);return irradiance;}\n#endif\nvec3 getIBLContribution(vec3 n,vec3 v){const float metallic=0.9;const float perceptualRoughness=0.1;const vec4 baseColor=vec4(1.0);const vec3 f0=vec3(0.04);const vec3 diffuseColor=baseColor.rgb*(vec3(1.0)-f0)*(1.0-metallic);const vec3 specularColor=mix(f0,baseColor.rgb,metallic);float NdotV=clamp(dot(n,v),0.0,1.0);float lod=clamp(perceptualRoughness*float(_MipCount),0.0,float(_MipCount));vec3 reflection=normalize(reflect(-v,n));vec2 brdfSamplePoint=clamp(vec2(NdotV,perceptualRoughness),vec2(0.0,0.0),vec2(1.0,1.0));vec2 brdf=texture2D(_brdfLUT,brdfSamplePoint).rg;vec4 diffuseSample=vec4(1.0,0.0,0.0,1.0);\n#ifdef IRRADIANCE_COEFFICIENTS\nvec3 irradiance=getIrradiance(n,_shCoefficients);diffuseSample=vec4(irradiance,1.0);\n#else\ndiffuseSample=textureCube(_DiffuseEnvSampler,n);\n#endif\n#ifdef USE_TEX_LOD\nvec4 specularSample=_textureCubeLodEXT(_SpecularEnvSampler,reflection,lod);\n#else\nvec4 specularSample=textureCube(_SpecularEnvSampler,reflection,lod);\n#endif\nvec3 diffuseLight=diffuseSample.rgb;vec3 specularLight=specularSample.rgb;vec3 diffuse=diffuseLight*diffuseColor;vec3 specular=specularLight*(specularColor*brdf.x+brdf.y);return diffuse*_IblIntensity[0]+specular*_IblIntensity[1];}void main(){vec3 dir=normalize(v_CameraDir);outFragColor=vec4(getIBLContribution(dir,dir),1.0);}";
|
|
3817
3788
|
|
|
3818
|
-
var animationVertGLSL = "#ifdef HAS_TARGET_POSITION0\nvsIn vec3 a_Target_Position0;\n#endif\n#ifdef HAS_TARGET_POSITION1\nvsIn vec3 a_Target_Position1;\n#endif\n#ifdef HAS_TARGET_POSITION2\nvsIn vec3 a_Target_Position2;\n#endif\n#ifdef HAS_TARGET_POSITION3\nvsIn vec3 a_Target_Position3;\n#endif\n#ifdef HAS_TARGET_POSITION4\nvsIn vec3 a_Target_Position4;\n#endif\n#ifdef HAS_TARGET_POSITION5\nvsIn vec3 a_Target_Position5;\n#endif\n#ifdef HAS_TARGET_POSITION6\nvsIn vec3 a_Target_Position6;\n#endif\n#ifdef HAS_TARGET_POSITION7\nvsIn vec3 a_Target_Position7;\n#endif\n#ifdef HAS_TARGET_NORMAL0\nvsIn vec3 a_Target_Normal0;\n#endif\n#ifdef HAS_TARGET_NORMAL1\nvsIn vec3 a_Target_Normal1;\n#endif\n#ifdef HAS_TARGET_NORMAL2\nvsIn vec3 a_Target_Normal2;\n#endif\n#ifdef HAS_TARGET_NORMAL3\nvsIn vec3 a_Target_Normal3;\n#endif\n#ifdef HAS_TARGET_NORMAL4\nvsIn vec3 a_Target_Normal4;\n#endif\n#ifdef HAS_TARGET_TANGENT0\nvsIn vec3 a_Target_Tangent0;\n#endif\n#ifdef HAS_TARGET_TANGENT1\nvsIn vec3 a_Target_Tangent1;\n#endif\n#ifdef HAS_TARGET_TANGENT2\nvsIn vec3 a_Target_Tangent2;\n#endif\n#ifdef HAS_TARGET_TANGENT3\nvsIn vec3 a_Target_Tangent3;\n#endif\n#ifdef HAS_TARGET_TANGENT4\nvsIn vec3 a_Target_Tangent4;\n#endif\n#ifdef USE_MORPHING\nuniform float
|
|
3789
|
+
var animationVertGLSL = "#ifdef HAS_TARGET_POSITION0\nvsIn vec3 a_Target_Position0;\n#endif\n#ifdef HAS_TARGET_POSITION1\nvsIn vec3 a_Target_Position1;\n#endif\n#ifdef HAS_TARGET_POSITION2\nvsIn vec3 a_Target_Position2;\n#endif\n#ifdef HAS_TARGET_POSITION3\nvsIn vec3 a_Target_Position3;\n#endif\n#ifdef HAS_TARGET_POSITION4\nvsIn vec3 a_Target_Position4;\n#endif\n#ifdef HAS_TARGET_POSITION5\nvsIn vec3 a_Target_Position5;\n#endif\n#ifdef HAS_TARGET_POSITION6\nvsIn vec3 a_Target_Position6;\n#endif\n#ifdef HAS_TARGET_POSITION7\nvsIn vec3 a_Target_Position7;\n#endif\n#ifdef HAS_TARGET_NORMAL0\nvsIn vec3 a_Target_Normal0;\n#endif\n#ifdef HAS_TARGET_NORMAL1\nvsIn vec3 a_Target_Normal1;\n#endif\n#ifdef HAS_TARGET_NORMAL2\nvsIn vec3 a_Target_Normal2;\n#endif\n#ifdef HAS_TARGET_NORMAL3\nvsIn vec3 a_Target_Normal3;\n#endif\n#ifdef HAS_TARGET_NORMAL4\nvsIn vec3 a_Target_Normal4;\n#endif\n#ifdef HAS_TARGET_TANGENT0\nvsIn vec3 a_Target_Tangent0;\n#endif\n#ifdef HAS_TARGET_TANGENT1\nvsIn vec3 a_Target_Tangent1;\n#endif\n#ifdef HAS_TARGET_TANGENT2\nvsIn vec3 a_Target_Tangent2;\n#endif\n#ifdef HAS_TARGET_TANGENT3\nvsIn vec3 a_Target_Tangent3;\n#endif\n#ifdef HAS_TARGET_TANGENT4\nvsIn vec3 a_Target_Tangent4;\n#endif\n#ifdef USE_MORPHING\nuniform float _morphWeights[WEIGHT_COUNT];\n#endif\n#ifdef HAS_JOINT_SET1\nvsIn vec4 a_Joint1;\n#endif\n#ifdef HAS_JOINT_SET2\nvsIn vec4 a_Joint2;\n#endif\n#ifdef HAS_WEIGHT_SET1\nvsIn vec4 a_Weight1;\n#endif\n#ifdef HAS_WEIGHT_SET2\nvsIn vec4 a_Weight2;\n#endif\n#ifdef USE_SKINNING\n#ifdef USE_SKINNING_TEXTURE\nuniform sampler2D _jointMatrixSampler;uniform sampler2D _jointNormalMatrixSampler;\n#else\nuniform mat4 _jointMatrix[JOINT_COUNT];uniform mat4 _jointNormalMatrix[JOINT_COUNT];\n#endif\n#endif\n#define ROW0_U ((0.5 + 0.0) / 4.0)\n#define ROW1_U ((0.5 + 1.0) / 4.0)\n#define ROW2_U ((0.5 + 2.0) / 4.0)\n#define ROW3_U ((0.5 + 3.0) / 4.0)\n#ifdef USE_SKINNING\nmat4 getJointMatrix(float boneNdx){\n#ifdef USE_SKINNING_TEXTURE\nfloat v=(boneNdx+0.5)/float(JOINT_COUNT);return mat4(texture2D(_jointMatrixSampler,vec2(ROW0_U,v)),texture2D(_jointMatrixSampler,vec2(ROW1_U,v)),texture2D(_jointMatrixSampler,vec2(ROW2_U,v)),texture2D(_jointMatrixSampler,vec2(ROW3_U,v)));\n#else\nreturn _jointMatrix[int(boneNdx)];\n#endif\n}mat4 getJointNormalMatrix(float boneNdx){\n#ifdef USE_SKINNING_TEXTURE\nfloat v=(boneNdx+0.5)/float(JOINT_COUNT);return mat4(texture2D(_jointNormalMatrixSampler,vec2(ROW0_U,v)),texture2D(_jointNormalMatrixSampler,vec2(ROW1_U,v)),texture2D(_jointNormalMatrixSampler,vec2(ROW2_U,v)),texture2D(_jointNormalMatrixSampler,vec2(ROW3_U,v)));\n#else\nreturn _jointNormalMatrix[int(boneNdx)];\n#endif\n}mat4 getSkinningMatrix(){mat4 skin=mat4(0);\n#if defined(HAS_WEIGHT_SET1) && defined(HAS_JOINT_SET1)\nskin+=a_Weight1.x*getJointMatrix(a_Joint1.x)+a_Weight1.y*getJointMatrix(a_Joint1.y)+a_Weight1.z*getJointMatrix(a_Joint1.z)+a_Weight1.w*getJointMatrix(a_Joint1.w);\n#endif\nreturn skin;}mat4 getSkinningNormalMatrix(){mat4 skin=mat4(0);\n#if defined(HAS_WEIGHT_SET1) && defined(HAS_JOINT_SET1)\nskin+=a_Weight1.x*getJointNormalMatrix(a_Joint1.x)+a_Weight1.y*getJointNormalMatrix(a_Joint1.y)+a_Weight1.z*getJointNormalMatrix(a_Joint1.z)+a_Weight1.w*getJointNormalMatrix(a_Joint1.w);\n#endif\nreturn skin;}\n#endif\n#ifdef USE_MORPHING\nvec4 getTargetPosition(){vec4 pos=vec4(0);\n#ifdef HAS_TARGET_POSITION0\npos.xyz+=_morphWeights[0]*a_Target_Position0;\n#endif\n#ifdef HAS_TARGET_POSITION1\npos.xyz+=_morphWeights[1]*a_Target_Position1;\n#endif\n#ifdef HAS_TARGET_POSITION2\npos.xyz+=_morphWeights[2]*a_Target_Position2;\n#endif\n#ifdef HAS_TARGET_POSITION3\npos.xyz+=_morphWeights[3]*a_Target_Position3;\n#endif\n#ifdef HAS_TARGET_POSITION4\npos.xyz+=_morphWeights[4]*a_Target_Position4;\n#endif\nreturn pos;}vec4 getTargetNormal(){vec4 normal=vec4(0);\n#ifdef HAS_TARGET_NORMAL0\nnormal.xyz+=_morphWeights[0]*a_Target_Normal0;\n#endif\n#ifdef HAS_TARGET_NORMAL1\nnormal.xyz+=_morphWeights[1]*a_Target_Normal1;\n#endif\n#ifdef HAS_TARGET_NORMAL2\nnormal.xyz+=_morphWeights[2]*a_Target_Normal2;\n#endif\n#ifdef HAS_TARGET_NORMAL3\nnormal.xyz+=_morphWeights[3]*a_Target_Normal3;\n#endif\n#ifdef HAS_TARGET_NORMAL4\nnormal.xyz+=_morphWeights[4]*a_Target_Normal4;\n#endif\nreturn normal;}vec4 getTargetTangent(){vec4 tangent=vec4(0);\n#ifdef HAS_TARGET_TANGENT0\ntangent.xyz+=_morphWeights[0]*a_Target_Tangent0;\n#endif\n#ifdef HAS_TARGET_TANGENT1\ntangent.xyz+=_morphWeights[1]*a_Target_Tangent1;\n#endif\n#ifdef HAS_TARGET_TANGENT2\ntangent.xyz+=_morphWeights[2]*a_Target_Tangent2;\n#endif\n#ifdef HAS_TARGET_TANGENT3\ntangent.xyz+=_morphWeights[3]*a_Target_Tangent3;\n#endif\n#ifdef HAS_TARGET_TANGENT4\ntangent.xyz+=_morphWeights[4]*a_Target_Tangent4;\n#endif\nreturn tangent;}\n#endif\n";
|
|
3819
3790
|
|
|
3820
3791
|
var extensionsFragGLSL = "vec3 _dFdx(vec3 coord){\n#if defined(GL_OES_standard_derivatives) || defined(WEBGL2)\nreturn dFdx(coord);\n#endif\nreturn vec3(0.0);}vec3 _dFdy(vec3 coord){\n#if defined(GL_OES_standard_derivatives) || defined(WEBGL2)\nreturn dFdy(coord);\n#endif\nreturn vec3(0.0);}\n#ifdef USE_TEX_LOD\nvec4 _textureCubeLodEXT(samplerCube sampler,vec3 coord,float lod){\n#if defined(WEBGL2) || defined(GL_EXT_shader_texture_lod)\nreturn textureCubeLodEXT(sampler,coord,lod);\n#else\nreturn textureCube(sampler,coord,lod);\n#endif\n}\n#endif\n";
|
|
3821
3792
|
|
|
3822
|
-
var tonemappingFragGLSL = "uniform float
|
|
3793
|
+
var tonemappingFragGLSL = "uniform float _Exposure;const float GAMMA=2.2;const float INV_GAMMA=1.0/GAMMA;vec3 LINEARtoSRGB(vec3 color){return pow(color,vec3(INV_GAMMA));}vec4 SRGBtoLINEAR(vec4 srgbIn){return vec4(pow(srgbIn.xyz,vec3(GAMMA)),srgbIn.w);}vec3 toneMapUncharted2Impl(vec3 color){const float A=0.15;const float B=0.50;const float C=0.10;const float D=0.20;const float E=0.02;const float F=0.30;return((color*(A*color+C*B)+D*E)/(color*(A*color+B)+D*F))-E/F;}vec3 toneMapUncharted(vec3 color){const float W=11.2;color=toneMapUncharted2Impl(color*2.0);vec3 whiteScale=1.0/toneMapUncharted2Impl(vec3(W));return LINEARtoSRGB(color*whiteScale);}vec3 toneMapHejlRichard(vec3 color){color=max(vec3(0.0),color-vec3(0.004));return(color*(6.2*color+.5))/(color*(6.2*color+1.7)+0.06);}vec3 toneMapACES(vec3 color){const float A=2.51;const float B=0.03;const float C=2.43;const float D=0.59;const float E=0.14;return LINEARtoSRGB(clamp((color*(A*color+B))/(color*(C*color+D)+E),0.0,1.0));}vec3 toneMap(vec3 color){color*=_Exposure;\n#ifdef TONEMAP_UNCHARTED\nreturn toneMapUncharted(color);\n#endif\n#ifdef TONEMAP_HEJLRICHARD\nreturn toneMapHejlRichard(color);\n#endif\n#ifdef TONEMAP_ACES\nreturn toneMapACES(color);\n#endif\nreturn LINEARtoSRGB(color);}";
|
|
3823
3794
|
|
|
3824
|
-
var texturesVertGLSL = "fsIn vec2 v_UVCoord1;\n#ifdef HAS_UV_SET2\nfsIn vec2 v_UVCoord2;\n#endif\n#ifdef HAS_NORMAL_MAP\nuniform sampler2D
|
|
3795
|
+
var texturesVertGLSL = "fsIn vec2 v_UVCoord1;\n#ifdef HAS_UV_SET2\nfsIn vec2 v_UVCoord2;\n#endif\n#ifdef HAS_NORMAL_MAP\nuniform sampler2D _NormalSampler;uniform float _NormalScale;uniform int _NormalUVSet;uniform mat3 _NormalUVTransform;\n#endif\n#ifdef HAS_EMISSIVE_MAP\nuniform sampler2D _EmissiveSampler;uniform int _EmissiveUVSet;uniform vec4 _EmissiveFactor;uniform mat3 _EmissiveUVTransform;\n#endif\n#ifdef HAS_EMISSIVE\nuniform vec4 _EmissiveFactor;\n#endif\n#ifdef HAS_OCCLUSION_MAP\nuniform sampler2D _OcclusionSampler;uniform int _OcclusionUVSet;uniform float _OcclusionStrength;uniform mat3 _OcclusionUVTransform;\n#endif\n#ifdef HAS_BASE_COLOR_MAP\nuniform sampler2D _BaseColorSampler;uniform int _BaseColorUVSet;uniform mat3 _BaseColorUVTransform;\n#endif\n#ifdef HAS_METALLIC_ROUGHNESS_MAP\nuniform sampler2D _MetallicRoughnessSampler;uniform int _MetallicRoughnessUVSet;uniform mat3 _MetallicRoughnessUVTransform;\n#endif\n#ifdef HAS_DIFFUSE_MAP\nuniform sampler2D _DiffuseSampler;uniform int _DiffuseUVSet;uniform mat3 _DiffuseUVTransform;\n#endif\n#ifdef HAS_SPECULAR_GLOSSINESS_MAP\nuniform sampler2D _SpecularGlossinessSampler;uniform int _SpecularGlossinessUVSet;uniform mat3 _SpecularGlossinessUVTransform;\n#endif\n#ifdef USE_IBL\nuniform samplerCube _DiffuseEnvSampler;uniform samplerCube _SpecularEnvSampler;uniform sampler2D _brdfLUT;uniform vec2 _IblIntensity;\n#endif\n#ifdef IRRADIANCE_COEFFICIENTS\nstruct SHCoefficients{vec3 l00,l1m1,l10,l11,l2m2,l2m1,l20,l21,l22;};uniform SHCoefficients _shCoefficients;\n#endif\n#ifdef USE_SHADOW_MAPPING\nuniform sampler2D _ShadowSampler;\n#endif\nvec2 getNormalUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_NORMAL_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_NormalUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_NORMAL_UV_TRANSFORM\nuv*=_NormalUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getEmissiveUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_EMISSIVE_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_EmissiveUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_EMISSIVE_UV_TRANSFORM\nuv*=_EmissiveUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getOcclusionUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_OCCLUSION_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_OcclusionUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_OCCLUSION_UV_TRANSFORM\nuv*=_OcclusionUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getBaseColorUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_BASE_COLOR_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_BaseColorUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_BASECOLOR_UV_TRANSFORM\nuv*=_BaseColorUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getMetallicRoughnessUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_METALLIC_ROUGHNESS_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_MetallicRoughnessUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_METALLICROUGHNESS_UV_TRANSFORM\nuv*=_MetallicRoughnessUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getSpecularGlossinessUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_SPECULAR_GLOSSINESS_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_SpecularGlossinessUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_SPECULARGLOSSINESS_UV_TRANSFORM\nuv*=_SpecularGlossinessUVTransform;\n#endif\n#endif\nreturn uv.xy;}vec2 getDiffuseUV(){vec3 uv=vec3(v_UVCoord1,1.0);\n#ifdef HAS_DIFFUSE_MAP\n#ifdef HAS_UV_SET2\nuv.xy=_DiffuseUVSet<1 ? v_UVCoord1 : v_UVCoord2;\n#endif\n#ifdef HAS_DIFFUSE_UV_TRANSFORM\nuv*=_DiffuseUVTransform;\n#endif\n#endif\nreturn uv.xy;}";
|
|
3825
3796
|
|
|
3826
|
-
var functionsFragGLSL = "const float M_PI=3.141592653589793;const float c_MinReflectance=0.04;fsIn vec3 v_Position;\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nfsIn mat3 v_TBN;\n#else\nfsIn vec3 v_Normal;\n#endif\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC3\nfsIn vec3 v_Color;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC4\nfsIn vec4 v_Color;\n#endif\nstruct AngularInfo{float NdotL;float NdotV;float NdotH;float LdotH;float VdotH;vec3 padding;};vec4 getVertexColor(){vec4 color=vec4(1.0,1.0,1.0,1.0);\n#ifdef HAS_VERTEX_COLOR_VEC3\ncolor.rgb=v_Color;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC4\ncolor=v_Color;\n#endif\nreturn color;}vec3 getNormal(){vec2 UV=getNormalUV();\n#ifndef HAS_TANGENTS\nvec3 pos_dx=_dFdx(v_Position);vec3 pos_dy=_dFdy(v_Position);vec3 tex_dx=_dFdx(vec3(UV,0.0));vec3 tex_dy=_dFdy(vec3(UV,0.0));vec3 t=(tex_dy.t*pos_dx-tex_dx.t*pos_dy)/(tex_dx.s*tex_dy.t-tex_dy.s*tex_dx.t);\n#ifdef HAS_NORMALS\nvec3 ng=normalize(v_Normal);\n#else\nvec3 ng=cross(pos_dx,pos_dy);\n#endif\nt=normalize(t-ng*dot(ng,t));vec3 b=normalize(cross(ng,t));mat3 tbn=mat3(t,b,ng);\n#else\nmat3 tbn=v_TBN;\n#endif\n#ifdef HAS_NORMAL_MAP\nvec3 n=texture2D(
|
|
3797
|
+
var functionsFragGLSL = "const float M_PI=3.141592653589793;const float c_MinReflectance=0.04;fsIn vec3 v_Position;\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nfsIn mat3 v_TBN;\n#else\nfsIn vec3 v_Normal;\n#endif\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC3\nfsIn vec3 v_Color;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC4\nfsIn vec4 v_Color;\n#endif\nstruct AngularInfo{float NdotL;float NdotV;float NdotH;float LdotH;float VdotH;vec3 padding;};vec4 getVertexColor(){vec4 color=vec4(1.0,1.0,1.0,1.0);\n#ifdef HAS_VERTEX_COLOR_VEC3\ncolor.rgb=v_Color;\n#endif\n#ifdef HAS_VERTEX_COLOR_VEC4\ncolor=v_Color;\n#endif\nreturn color;}vec3 getNormal(){vec2 UV=getNormalUV();\n#ifndef HAS_TANGENTS\nvec3 pos_dx=_dFdx(v_Position);vec3 pos_dy=_dFdy(v_Position);vec3 tex_dx=_dFdx(vec3(UV,0.0));vec3 tex_dy=_dFdy(vec3(UV,0.0));vec3 t=(tex_dy.t*pos_dx-tex_dx.t*pos_dy)/(tex_dx.s*tex_dy.t-tex_dy.s*tex_dx.t);\n#ifdef HAS_NORMALS\nvec3 ng=normalize(v_Normal);\n#else\nvec3 ng=cross(pos_dx,pos_dy);\n#endif\nt=normalize(t-ng*dot(ng,t));vec3 b=normalize(cross(ng,t));mat3 tbn=mat3(t,b,ng);\n#else\nmat3 tbn=v_TBN;\n#endif\n#ifdef HAS_NORMAL_MAP\nvec3 n=texture2D(_NormalSampler,UV).rgb;n=normalize(tbn*((2.0*n-1.0)*vec3(_NormalScale,_NormalScale,1.0)));\n#else\nvec3 n=normalize(tbn[2].xyz);\n#endif\n#ifdef DOUBLE_SIDED\nfloat faceDirection=gl_FrontFacing ? 1.0 :-1.0;n=n*faceDirection;\n#endif\nreturn n;}float getPerceivedBrightness(vec3 vector){return sqrt(0.299*vector.r*vector.r+0.587*vector.g*vector.g+0.114*vector.b*vector.b);}float solveMetallic(vec3 diffuse,vec3 specular,float oneMinusSpecularStrength){float specularBrightness=getPerceivedBrightness(specular);if(specularBrightness<c_MinReflectance){return 0.0;}float diffuseBrightness=getPerceivedBrightness(diffuse);float a=c_MinReflectance;float b=diffuseBrightness*oneMinusSpecularStrength/(1.0-c_MinReflectance)+specularBrightness-2.0*c_MinReflectance;float c=c_MinReflectance-specularBrightness;float D=b*b-4.0*a*c;return clamp((-b+sqrt(D))/(2.0*a),0.0,1.0);}AngularInfo getAngularInfo(vec3 pointToLight,vec3 normal,vec3 view){vec3 n=normalize(normal);vec3 v=normalize(view);vec3 l=normalize(pointToLight);vec3 h=normalize(l+v);float NdotL=clamp(dot(n,l),0.0,1.0);float NdotV=clamp(dot(n,v),0.0,1.0);float NdotH=clamp(dot(n,h),0.0,1.0);float LdotH=clamp(dot(l,h),0.0,1.0);float VdotH=clamp(dot(v,h),0.0,1.0);return AngularInfo(NdotL,NdotV,NdotH,LdotH,VdotH,vec3(0,0,0));}float getAARoughnessFactor(vec3 normal){vec3 dxy=max(abs(_dFdx(normal)),abs(_dFdy(normal)));return max(max(dxy.x,dxy.y),dxy.z)*2.0;}\n#ifdef DEBUG_UV\nuniform float _DebugUVGridSize;float getDebugUVColor(vec2 uv,vec3 n){float s=dot(abs(n),vec3(1,1,1))*0.6;uv=uv/(_DebugUVGridSize*2.0);uv=uv-floor(uv);uv=uv*2.0-vec2(1.0);return s*(uv.x*uv.y>=0.0 ? 0.2: 1.0);}\n#endif\n";
|
|
3827
3798
|
|
|
3828
|
-
var shadowFragGLSL = "#ifdef USE_SHADOW_MAPPING\nuniform vec2
|
|
3799
|
+
var shadowFragGLSL = "#ifdef USE_SHADOW_MAPPING\nuniform vec2 _ShadowMapSizeInv;fsIn vec4 v_PositionLightSpace;fsIn vec4 v_dPositionLightSpace;\n#endif\nfloat linstep(float low,float high,float v){return clamp((v-low)/(high-low),0.0,1.0);}\n#ifdef USE_SHADOW_MAPPING\nfloat chebyshev(vec2 moments,float depth,float minVar){float p=step(depth,moments.x+SHADOWMAP_BAIS);float variance=max(moments.y-moments.x*moments.x,minVar);float d=depth-(moments.x+SHADOWMAP_BAIS);float pMax=linstep(0.2,1.0,variance/(variance+d*d));return mix(0.1,1.0,min(max(p,pMax),1.0));}float getShadowContributionSM(){vec3 coords=v_PositionLightSpace.xyz/v_PositionLightSpace.w*0.5+0.5;if(coords.z<0.01||coords.z>0.99||coords.x<0.01||coords.x>0.99||coords.y<0.01||coords.y>0.99){return 1.0;}vec2 moments=vec2(1.0)-texture2D(_ShadowSampler,coords.xy).xy;return coords.z<moments.x*1.008+0.008? 1.0: 0.2;}float getShadowContributionVSM(){vec3 coords=v_PositionLightSpace.xyz/v_PositionLightSpace.w*0.5+0.5;if(coords.z<0.01||coords.z>0.99||coords.x<0.01||coords.x>0.99||coords.y<0.01||coords.y>0.99){return 1.0;}vec2 moments=vec2(1.0)-texture2D(_ShadowSampler,coords.xy).xy;return chebyshev(moments,coords.z,0.00002);}float computeEVSMShadow(vec2 coords,float pos,float neg){vec4 moments=texture2D(_ShadowSampler,coords);float posShadow=chebyshev(moments.xy,pos,0.00002);float negShadow=chebyshev(moments.zw,neg,0.00002);return min(posShadow,negShadow);}float getShadowContributionEVSM(){vec3 coords=v_PositionLightSpace.xyz/v_PositionLightSpace.w*0.5+0.5;if(coords.z<0.01||coords.z>0.99||coords.x<0.01||coords.x>0.99||coords.y<0.01||coords.y>0.99){return 1.0;}float depth=coords.z;float pos=EVSM_FUNC0(depth);float neg=EVSM_FUNC1(depth);\n#ifdef SHADOWMAP_EVSM_PCF\nvec2 newCoords=v_dPositionLightSpace.xy/v_dPositionLightSpace.w*0.5+0.5;vec2 dCoords=min(abs(newCoords-coords.xy),_ShadowMapSizeInv);if(max(dCoords.x,dCoords.y)>=min(_ShadowMapSizeInv.x,_ShadowMapSizeInv.y)*0.5){vec2 coords0=coords.xy+vec2(-1.0,-1.0)*dCoords;vec2 coords1=coords.xy+vec2(-1.0,1.0)*dCoords;vec2 coords2=coords.xy+vec2(1.0,-1.0)*dCoords;vec2 coords3=coords.xy+vec2(1.0,1.0)*dCoords;float shadow0=computeEVSMShadow(coords0,pos,neg);float shadow1=computeEVSMShadow(coords1,pos,neg);float shadow2=computeEVSMShadow(coords2,pos,neg);float shadow3=computeEVSMShadow(coords3,pos,neg);return(shadow0+shadow1+shadow2+shadow3)*0.25;}else{return computeEVSMShadow(coords.xy,pos,neg);}\n#else\nreturn computeEVSMShadow(coords.xy,pos,neg);\n#endif\n}float getShadowContribution(){\n#if defined(SHADOWMAP_STANDARD)\nreturn getShadowContributionSM();\n#elif defined(SHADOWMAP_VSM)\nreturn getShadowContributionVSM();\n#else\nreturn getShadowContributionEVSM();\n#endif\n}\n#endif\n";
|
|
3829
3800
|
|
|
3830
3801
|
var webglCompatibilityGLSL = "#ifdef WEBGL2\n#define vsIn in\n#define vsOut out\n#define fsIn in\n#define fsOut out\n#define texture2D texture\n#define textureCube texture\n#define textureCubeLodEXT textureLod\n#else\n#define vsIn attribute\n#define vsOut varying\n#define fsIn varying\n#define fsOut varying\n#endif\n";
|
|
3831
3802
|
|
|
@@ -3952,7 +3923,7 @@ function getShadowPassShaderCode(context) {
|
|
|
3952
3923
|
* @param context - 着色器上下文
|
|
3953
3924
|
* @returns
|
|
3954
3925
|
*/ function getQuadFilterShaderCode(context) {
|
|
3955
|
-
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform sampler2D
|
|
3926
|
+
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform sampler2D _ColorSampler;\n\n varying vec2 v_UVCoord1;\n void main(){\n gl_FragColor = texture2D(_ColorSampler, v_UVCoord1);\n }\n ";
|
|
3956
3927
|
return {
|
|
3957
3928
|
vertexShaderCode: getQuadFilterVS(),
|
|
3958
3929
|
fragmentShaderCode: fragmentShaderCode
|
|
@@ -3989,7 +3960,7 @@ function getShadowPassShaderCode(context) {
|
|
|
3989
3960
|
* @param context - 着色器上下文
|
|
3990
3961
|
* @returns
|
|
3991
3962
|
*/ function getKawaseBlurShaderCode(context) {
|
|
3992
|
-
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform float
|
|
3963
|
+
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform float _Offset;\n uniform vec2 _TextureSizeInv;\n uniform sampler2D _TexturSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2(-_Offset-0.5, _Offset+0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5,-_Offset-0.5) * _TextureSizeInv);\n color += texture2D(_TexturSampler, v_UVCoord1 + vec2( _Offset+0.5, _Offset+0.5) * _TextureSizeInv);\n gl_FragColor = color * 0.25;\n }\n ";
|
|
3993
3964
|
return {
|
|
3994
3965
|
vertexShaderCode: getQuadFilterVS(),
|
|
3995
3966
|
fragmentShaderCode: fragmentShaderCode
|
|
@@ -4000,7 +3971,7 @@ function getShadowPassShaderCode(context) {
|
|
|
4000
3971
|
* @param context - 着色器上下文
|
|
4001
3972
|
* @returns
|
|
4002
3973
|
*/ function getSimpleFilterShaderCode(context) {
|
|
4003
|
-
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform sampler2D
|
|
3974
|
+
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n gl_FragColor = texture2D(_FilterSampler, v_UVCoord1) * vec4(0.5);\n }\n ";
|
|
4004
3975
|
return {
|
|
4005
3976
|
vertexShaderCode: getQuadFilterVS(),
|
|
4006
3977
|
fragmentShaderCode: fragmentShaderCode
|
|
@@ -4011,7 +3982,7 @@ function getShadowPassShaderCode(context) {
|
|
|
4011
3982
|
* @param context - 着色器上下文
|
|
4012
3983
|
* @returns
|
|
4013
3984
|
*/ function getGaussianBlurShaderCodeV2(context) {
|
|
4014
|
-
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform vec2
|
|
3985
|
+
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0);\n vec2 offset0 = vec2(0.53805) * _BlurScale.xy;\n vec2 offset1 = vec2(2.06278) * _BlurScale.xy;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset0) + texture2D(_FilterSampler, v_UVCoord1 - offset0)) * 0.44908;\n color += (texture2D(_FilterSampler, v_UVCoord1 + offset1) + texture2D(_FilterSampler, v_UVCoord1 - offset1)) * 0.05092;\n gl_FragColor = color;\n }\n ";
|
|
4015
3986
|
return {
|
|
4016
3987
|
vertexShaderCode: getQuadFilterVS(),
|
|
4017
3988
|
fragmentShaderCode: fragmentShaderCode
|
|
@@ -4022,7 +3993,7 @@ function getShadowPassShaderCode(context) {
|
|
|
4022
3993
|
* @param context - 着色器上下文
|
|
4023
3994
|
* @returns
|
|
4024
3995
|
*/ function getGaussianBlurShaderCodeV1(context) {
|
|
4025
|
-
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform vec2
|
|
3996
|
+
var fragmentShaderCode = "\n #version 100\n precision highp float;\n uniform vec2 _BlurScale;\n uniform sampler2D _FilterSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 color = vec4(0.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-3.0) * _BlurScale.xy)) * (1.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(-1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+0.0) * _BlurScale.xy)) * (20.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+1.0) * _BlurScale.xy)) * (15.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+2.0) * _BlurScale.xy)) * (6.0/64.0);\n color += texture2D(_FilterSampler, v_UVCoord1 + (vec2(+3.0) * _BlurScale.xy)) * (1.0/64.0);\n gl_FragColor = color;\n }\n ";
|
|
4026
3997
|
return {
|
|
4027
3998
|
vertexShaderCode: getQuadFilterVS(),
|
|
4028
3999
|
fragmentShaderCode: fragmentShaderCode
|
|
@@ -4038,7 +4009,7 @@ function getShadowPassShaderCode(context) {
|
|
|
4038
4009
|
hasNormals: true
|
|
4039
4010
|
});
|
|
4040
4011
|
} else {
|
|
4041
|
-
return "\n #version 100\n #extension GL_EXT_draw_buffers: require\n\n precision highp float;\n uniform vec4
|
|
4012
|
+
return "\n #version 100\n #extension GL_EXT_draw_buffers: require\n\n precision highp float;\n uniform vec4 _BaseColorFactor;\n\n #ifdef HAS_UVS\n uniform sampler2D _BaseColorSampler;\n varying vec2 v_UVCoord1;\n #endif\n\n varying vec3 v_Normal;\n\n float weight(float z, float a) {\n return clamp(pow(min(1.0, a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - z * 0.9, 3.0), 1e-2, 3e3);\n }\n\n void main() {\n vec4 color = _BaseColorFactor;\n\n #ifdef HAS_UVS\n color *= texture2D(_BaseColorSampler, v_UVCoord1);\n #endif\n\n color.rgb *= color.a * dot(normalize(v_Normal), normalize(vec3(0, 1, 3))) * 5.0;\n float w = weight(gl_FragCoord.z, color.a);\n gl_FragData[0] = vec4(color.rgb * w, color.a);\n gl_FragData[1] = vec4(color.a * w);\n }\n ";
|
|
4042
4013
|
}
|
|
4043
4014
|
}
|
|
4044
4015
|
/**
|
|
@@ -4049,7 +4020,7 @@ function getShadowPassShaderCode(context) {
|
|
|
4049
4020
|
if (isVertexShader) {
|
|
4050
4021
|
return getQuadFilterVS();
|
|
4051
4022
|
} else {
|
|
4052
|
-
return "\n #version 100\n precision highp float;\n uniform sampler2D
|
|
4023
|
+
return "\n #version 100\n precision highp float;\n uniform sampler2D _AccumColorSampler;\n uniform sampler2D _AccumAlphaSampler;\n\n varying vec2 v_UVCoord1;\n void main() {\n vec4 accumColor = texture2D(_AccumColorSampler, v_UVCoord1);\n vec4 accumAlpha = texture2D(_AccumAlphaSampler, v_UVCoord1);\n float finalAlpha = 1.0 - accumColor.a;\n vec3 finalColor = accumColor.rgb / clamp(accumAlpha.r, 0.001, 50000.0);\n gl_FragColor = vec4(finalColor, finalAlpha);\n }\n ";
|
|
4053
4024
|
}
|
|
4054
4025
|
}
|
|
4055
4026
|
function getBasicVS(params) {
|
|
@@ -4063,11 +4034,11 @@ function getBasicVS(params) {
|
|
|
4063
4034
|
if (params.hasNormals) {
|
|
4064
4035
|
featureList.push("#define HAS_NORMALS 1");
|
|
4065
4036
|
}
|
|
4066
|
-
featureList.push("\n precision highp float;\n\n uniform mat4
|
|
4037
|
+
featureList.push("\n precision highp float;\n\n uniform mat4 _ModelMatrix;\n uniform mat4 _ViewProjectionMatrix;\n attribute vec3 aPos;\n varying vec3 v_Position;\n\n #ifdef HAS_UVS\n attribute vec2 aUV;\n varying vec2 v_UVCoord1;\n #endif\n\n #ifdef HAS_NORMALS\n uniform mat4 _NormalMatrix;\n attribute vec3 aNormal;\n varying vec3 v_Normal;\n #endif\n\n void main(){\n vec4 pos = _ModelMatrix * vec4(aPos, 1);\n v_Position = pos.xyz / pos.w;\n\n #ifdef HAS_UVS\n v_UVCoord1 = aUV;\n #endif\n\n #ifdef HAS_NORMALS\n v_Normal = normalize(vec3(_ModelMatrix * vec4(aNormal, 0)));\n #endif\n\n gl_Position = _ViewProjectionMatrix * pos;\n }\n ");
|
|
4067
4038
|
return featureList.join("\n");
|
|
4068
4039
|
}
|
|
4069
4040
|
function getQuadFilterVS() {
|
|
4070
|
-
return "\n #version 100\n precision highp float;\n attribute vec3
|
|
4041
|
+
return "\n #version 100\n precision highp float;\n attribute vec3 aPos;\n attribute vec2 aUV;\n\n varying vec2 v_UVCoord1;\n void main(){\n v_UVCoord1 = aUV;\n gl_Position = vec4(aPos.xy, 0.0, 1.0);\n }\n ";
|
|
4071
4042
|
}
|
|
4072
4043
|
|
|
4073
4044
|
/**
|
|
@@ -5385,26 +5356,26 @@ var normal = new Vector3();
|
|
|
5385
5356
|
var data = MeshHelper.getPlaneVertexArray();
|
|
5386
5357
|
return {
|
|
5387
5358
|
attributes: {
|
|
5388
|
-
|
|
5359
|
+
aPos: {
|
|
5389
5360
|
type: glContext.FLOAT,
|
|
5390
5361
|
size: 3,
|
|
5391
5362
|
data: data,
|
|
5392
5363
|
stride: Float32Array.BYTES_PER_ELEMENT * 8,
|
|
5393
5364
|
offset: 0
|
|
5394
5365
|
},
|
|
5395
|
-
|
|
5366
|
+
aUV: {
|
|
5396
5367
|
type: glContext.FLOAT,
|
|
5397
5368
|
size: 2,
|
|
5398
5369
|
stride: Float32Array.BYTES_PER_ELEMENT * 8,
|
|
5399
5370
|
offset: Float32Array.BYTES_PER_ELEMENT * 3,
|
|
5400
|
-
dataSource: "
|
|
5371
|
+
dataSource: "aPos"
|
|
5401
5372
|
},
|
|
5402
|
-
|
|
5373
|
+
aNormal: {
|
|
5403
5374
|
type: glContext.FLOAT,
|
|
5404
5375
|
size: 3,
|
|
5405
5376
|
stride: Float32Array.BYTES_PER_ELEMENT * 8,
|
|
5406
5377
|
offset: Float32Array.BYTES_PER_ELEMENT * 5,
|
|
5407
|
-
dataSource: "
|
|
5378
|
+
dataSource: "aPos"
|
|
5408
5379
|
}
|
|
5409
5380
|
},
|
|
5410
5381
|
drawStart: 0,
|
|
@@ -6011,23 +5982,23 @@ var normal = new Vector3();
|
|
|
6011
5982
|
*/ PluginHelper.getAttributeName = function getAttributeName(name) {
|
|
6012
5983
|
switch(name){
|
|
6013
5984
|
case "POSITION":
|
|
6014
|
-
return "
|
|
5985
|
+
return "aPos";
|
|
6015
5986
|
case "NORMAL":
|
|
6016
|
-
return "
|
|
5987
|
+
return "aNormal";
|
|
6017
5988
|
case "TANGENT":
|
|
6018
5989
|
return "a_Tangent";
|
|
6019
5990
|
case "TEXCOORD_0":
|
|
6020
|
-
return "
|
|
5991
|
+
return "aUV";
|
|
6021
5992
|
case "TEXCOORD_1":
|
|
6022
|
-
return "
|
|
5993
|
+
return "aUV2";
|
|
6023
5994
|
case "JOINTS_0":
|
|
6024
5995
|
return "a_Joint1";
|
|
6025
5996
|
case "WEIGHTS_0":
|
|
6026
5997
|
return "a_Weight1";
|
|
6027
5998
|
}
|
|
6028
5999
|
if (!name.startsWith("a_")) {
|
|
6029
|
-
//
|
|
6030
|
-
//
|
|
6000
|
+
// aPos, aNormal, a_Tangent,
|
|
6001
|
+
// aUV, aUV2, a_Joint1, a_Weight1
|
|
6031
6002
|
// a_Target_XXX
|
|
6032
6003
|
console.warn("Unknown attribute name: " + name);
|
|
6033
6004
|
}
|
|
@@ -6418,8 +6389,8 @@ var AttributeArray = /*#__PURE__*/ function() {
|
|
|
6418
6389
|
var attributes = geometry.attributes;
|
|
6419
6390
|
//
|
|
6420
6391
|
this.index = geometry.getIndexData();
|
|
6421
|
-
var positionAttrib = attributes["
|
|
6422
|
-
var positionArray = geometry.getAttributeData("
|
|
6392
|
+
var positionAttrib = attributes["aPos"];
|
|
6393
|
+
var positionArray = geometry.getAttributeData("aPos");
|
|
6423
6394
|
this.position = new AttributeArray();
|
|
6424
6395
|
this.position.create(positionAttrib, positionArray);
|
|
6425
6396
|
//
|
|
@@ -6532,8 +6503,8 @@ var AttributeArray = /*#__PURE__*/ function() {
|
|
|
6532
6503
|
var attributes = geometry.attributes;
|
|
6533
6504
|
//
|
|
6534
6505
|
this.index = geometry.getIndexData();
|
|
6535
|
-
var positionAttrib = attributes["
|
|
6536
|
-
var positionArray = geometry.getAttributeData("
|
|
6506
|
+
var positionAttrib = attributes["aPos"];
|
|
6507
|
+
var positionArray = geometry.getAttributeData("aPos");
|
|
6537
6508
|
this.position = new AttributeArray();
|
|
6538
6509
|
this.position.create(positionAttrib, positionArray);
|
|
6539
6510
|
//
|
|
@@ -6957,14 +6928,14 @@ var AttributeArray = /*#__PURE__*/ function() {
|
|
|
6957
6928
|
// }
|
|
6958
6929
|
// maxLength = maxIndex + 1;
|
|
6959
6930
|
// }
|
|
6960
|
-
// const positionAttrib = opts.attributes['
|
|
6931
|
+
// const positionAttrib = opts.attributes['aPos'] as Attribute;
|
|
6961
6932
|
// if (positionAttrib === undefined) {
|
|
6962
6933
|
// throw new Error(`Position attribute is required, ${this.stringify(v)}`);
|
|
6963
6934
|
// }
|
|
6964
|
-
// this.assertGeometryBuffer(v, '
|
|
6965
|
-
// this.assertGeometryBuffer(v, '
|
|
6935
|
+
// this.assertGeometryBuffer(v, 'aPos', maxLength);
|
|
6936
|
+
// this.assertGeometryBuffer(v, 'aNormal', maxLength);
|
|
6966
6937
|
// this.assertGeometryBuffer(v, 'a_Tangent', maxLength);
|
|
6967
|
-
// this.assertGeometryBuffer(v, '
|
|
6938
|
+
// this.assertGeometryBuffer(v, 'aUV', maxLength);
|
|
6968
6939
|
// this.assertGeometryBuffer(v, 'a_Joint1', maxLength);
|
|
6969
6940
|
// this.assertGeometryBuffer(v, 'a_Weight1', maxLength);
|
|
6970
6941
|
// // 索引检查
|
|
@@ -7598,13 +7569,13 @@ var toHalf = function() {
|
|
|
7598
7569
|
* @param material - GE 材质
|
|
7599
7570
|
*/ _proto.updateUniforms = function updateUniforms(material) {
|
|
7600
7571
|
if (this.isMasked()) {
|
|
7601
|
-
material.setFloat("
|
|
7572
|
+
material.setFloat("_AlphaCutoff", this.alphaCutOff);
|
|
7602
7573
|
}
|
|
7603
7574
|
// 渲染 UV 结果输出时,设置 uv 大小
|
|
7604
7575
|
var renderMode = PGlobalState.getInstance().renderMode3D;
|
|
7605
7576
|
if (renderMode === spec.RenderMode3D.uv) {
|
|
7606
7577
|
var debugUVGridSize = PGlobalState.getInstance().renderMode3DUVGridSize;
|
|
7607
|
-
material.setFloat("
|
|
7578
|
+
material.setFloat("_DebugUVGridSize", debugUVGridSize);
|
|
7608
7579
|
}
|
|
7609
7580
|
};
|
|
7610
7581
|
/**
|
|
@@ -7848,15 +7819,15 @@ var toHalf = function() {
|
|
|
7848
7819
|
PMaterialBase.prototype.updateUniforms.call(this, material);
|
|
7849
7820
|
//
|
|
7850
7821
|
var uvTransform = new Matrix3().identity();
|
|
7851
|
-
material.setVector4("
|
|
7822
|
+
material.setVector4("_BaseColorFactor", this.baseColorFactor);
|
|
7852
7823
|
if (this.hasBaseColorTexture()) {
|
|
7853
|
-
material.setTexture("
|
|
7854
|
-
material.setInt("
|
|
7855
|
-
material.setMatrix3("
|
|
7824
|
+
material.setTexture("_BaseColorSampler", this.getBaseColorTexture());
|
|
7825
|
+
material.setInt("_BaseColorUVSet", 0);
|
|
7826
|
+
material.setMatrix3("_BaseColorUVTransform", uvTransform);
|
|
7856
7827
|
}
|
|
7857
|
-
material.setFloat("
|
|
7858
|
-
material.setFloat("
|
|
7859
|
-
material.setFloat("
|
|
7828
|
+
material.setFloat("_MetallicFactor", 0.0);
|
|
7829
|
+
material.setFloat("_RoughnessFactor", 0.0);
|
|
7830
|
+
material.setFloat("_Exposure", 1.0);
|
|
7860
7831
|
};
|
|
7861
7832
|
/**
|
|
7862
7833
|
* 是否有基础颜色纹理
|
|
@@ -8003,41 +7974,39 @@ var toHalf = function() {
|
|
|
8003
7974
|
this.materialType = mat.getInt("shaderType") ? PMaterialType.unlit : PMaterialType.pbr;
|
|
8004
7975
|
var _mat_getTexture;
|
|
8005
7976
|
//
|
|
8006
|
-
this.baseColorTexture = (_mat_getTexture = mat.getTexture("
|
|
7977
|
+
this.baseColorTexture = (_mat_getTexture = mat.getTexture("_BaseColorSampler")) != null ? _mat_getTexture : undefined;
|
|
8007
7978
|
var _mat_getVector4;
|
|
8008
|
-
this.baseColorFactor = (_mat_getVector4 = mat.getVector4("
|
|
8009
|
-
this.baseColorFactor.multiply(1 / 255.0);
|
|
7979
|
+
this.baseColorFactor = (_mat_getVector4 = mat.getVector4("_BaseColorFactor")) != null ? _mat_getVector4 : new Vector4(1.0, 1.0, 1.0, 1.0);
|
|
8010
7980
|
var _mat_getTexture1;
|
|
8011
|
-
this.metallicRoughnessTexture = (_mat_getTexture1 = mat.getTexture("
|
|
8012
|
-
this.useSpecularAA = mat.
|
|
7981
|
+
this.metallicRoughnessTexture = (_mat_getTexture1 = mat.getTexture("_MetallicRoughnessSampler")) != null ? _mat_getTexture1 : undefined;
|
|
7982
|
+
this.useSpecularAA = mat.getFloat("_useSpecularAA") === 1;
|
|
8013
7983
|
var _mat_getFloat;
|
|
8014
|
-
this.metallicFactor = (_mat_getFloat = mat.getFloat("
|
|
7984
|
+
this.metallicFactor = (_mat_getFloat = mat.getFloat("_MetallicFactor")) != null ? _mat_getFloat : 1;
|
|
8015
7985
|
var _mat_getFloat1;
|
|
8016
|
-
this.roughnessFactor = (_mat_getFloat1 = mat.getFloat("
|
|
7986
|
+
this.roughnessFactor = (_mat_getFloat1 = mat.getFloat("_RoughnessFactor")) != null ? _mat_getFloat1 : 1;
|
|
8017
7987
|
var _mat_getTexture2;
|
|
8018
|
-
this.normalTexture = (_mat_getTexture2 = mat.getTexture("
|
|
7988
|
+
this.normalTexture = (_mat_getTexture2 = mat.getTexture("_NormalSampler")) != null ? _mat_getTexture2 : undefined;
|
|
8019
7989
|
var _mat_getFloat2;
|
|
8020
|
-
this.normalTextureScale = (_mat_getFloat2 = mat.getFloat("
|
|
7990
|
+
this.normalTextureScale = (_mat_getFloat2 = mat.getFloat("_NormalScale")) != null ? _mat_getFloat2 : 1;
|
|
8021
7991
|
var _mat_getTexture3;
|
|
8022
|
-
this.occlusionTexture = (_mat_getTexture3 = mat.getTexture("
|
|
7992
|
+
this.occlusionTexture = (_mat_getTexture3 = mat.getTexture("_OcclusionSampler")) != null ? _mat_getTexture3 : undefined;
|
|
8023
7993
|
var _mat_getFloat3;
|
|
8024
|
-
this.occlusionTextureStrength = (_mat_getFloat3 = mat.getFloat("
|
|
7994
|
+
this.occlusionTextureStrength = (_mat_getFloat3 = mat.getFloat("_OcclusionTextureStrength")) != null ? _mat_getFloat3 : 1;
|
|
8025
7995
|
var _mat_getTexture4;
|
|
8026
|
-
this.emissiveTexture = (_mat_getTexture4 = mat.getTexture("
|
|
7996
|
+
this.emissiveTexture = (_mat_getTexture4 = mat.getTexture("_EmissiveSampler")) != null ? _mat_getTexture4 : undefined;
|
|
8027
7997
|
var _mat_getVector41;
|
|
8028
|
-
this.emissiveFactor = (_mat_getVector41 = mat.getVector4("
|
|
8029
|
-
this.emissiveFactor.multiply(1 / 255.0);
|
|
7998
|
+
this.emissiveFactor = (_mat_getVector41 = mat.getVector4("_EmissiveFactor")) != null ? _mat_getVector41 : new Vector4(0, 0, 0, 0);
|
|
8030
7999
|
var _mat_getFloat4;
|
|
8031
|
-
this.emissiveIntensity = (_mat_getFloat4 = mat.getFloat("
|
|
8000
|
+
this.emissiveIntensity = (_mat_getFloat4 = mat.getFloat("_EmissiveIntensity")) != null ? _mat_getFloat4 : 1;
|
|
8032
8001
|
var emissiveFactor = this.emissiveFactor.clone().multiply(this.emissiveIntensity);
|
|
8033
|
-
mat.setVector4("
|
|
8002
|
+
mat.setVector4("_EmissiveFactor", emissiveFactor);
|
|
8034
8003
|
this.enableShadow = false;
|
|
8035
|
-
this.depthMask =
|
|
8004
|
+
this.depthMask = true;
|
|
8036
8005
|
var _mat_getInt;
|
|
8037
8006
|
var blending = (_mat_getInt = mat.getInt("blending")) != null ? _mat_getInt : spec.MaterialBlending.opaque;
|
|
8038
8007
|
this.blendMode = this.getBlendMode(blending);
|
|
8039
8008
|
var _mat_getFloat5;
|
|
8040
|
-
this.alphaCutOff = (_mat_getFloat5 = mat.getFloat("
|
|
8009
|
+
this.alphaCutOff = (_mat_getFloat5 = mat.getFloat("_AlphaCutoff")) != null ? _mat_getFloat5 : 0;
|
|
8041
8010
|
var _mat_getInt1;
|
|
8042
8011
|
var side = (_mat_getInt1 = mat.getInt("side")) != null ? _mat_getInt1 : spec.SideMode.FRONT;
|
|
8043
8012
|
this.faceSideMode = this.getFaceSideMode(side);
|
|
@@ -8103,99 +8072,99 @@ var toHalf = function() {
|
|
|
8103
8072
|
if (this.fromMaterial) {
|
|
8104
8073
|
var uvTransform = new Matrix3().identity();
|
|
8105
8074
|
if (this.baseColorTexture !== undefined) {
|
|
8106
|
-
material.setInt("
|
|
8107
|
-
material.setMatrix3("
|
|
8075
|
+
material.setInt("_BaseColorUVSet", 0);
|
|
8076
|
+
material.setMatrix3("_BaseColorUVTransform", uvTransform);
|
|
8108
8077
|
}
|
|
8109
8078
|
//
|
|
8110
8079
|
if (this.metallicRoughnessTexture !== undefined) {
|
|
8111
|
-
material.setInt("
|
|
8112
|
-
material.setMatrix3("
|
|
8080
|
+
material.setInt("_MetallicRoughnessUVSet", 0);
|
|
8081
|
+
material.setMatrix3("_MetallicRoughnessUVTransform", uvTransform);
|
|
8113
8082
|
}
|
|
8114
8083
|
//
|
|
8115
8084
|
if (this.normalTexture !== undefined) {
|
|
8116
|
-
material.setInt("
|
|
8117
|
-
material.setMatrix3("
|
|
8085
|
+
material.setInt("_NormalUVSet", 0);
|
|
8086
|
+
material.setMatrix3("_NormalUVTransform", uvTransform);
|
|
8118
8087
|
}
|
|
8119
8088
|
//
|
|
8120
8089
|
if (this.occlusionTexture !== undefined) {
|
|
8121
|
-
material.setInt("
|
|
8122
|
-
material.setMatrix3("
|
|
8090
|
+
material.setInt("_OcclusionUVSet", 0);
|
|
8091
|
+
material.setMatrix3("_OcclusionUVTransform", uvTransform);
|
|
8123
8092
|
}
|
|
8124
8093
|
//
|
|
8125
8094
|
if (this.emissiveTexture !== undefined) {
|
|
8126
|
-
material.setInt("
|
|
8127
|
-
material.setMatrix3("
|
|
8095
|
+
material.setInt("_EmissiveUVSet", 0);
|
|
8096
|
+
material.setMatrix3("_EmissiveUVTransform", uvTransform);
|
|
8128
8097
|
}
|
|
8129
|
-
material.setFloat("
|
|
8098
|
+
material.setFloat("_Exposure", 3.0);
|
|
8130
8099
|
return;
|
|
8131
8100
|
}
|
|
8132
8101
|
//
|
|
8133
8102
|
var uvTransform1 = new Matrix3().identity();
|
|
8134
|
-
material.setVector4("
|
|
8103
|
+
material.setVector4("_BaseColorFactor", this.baseColorFactor);
|
|
8135
8104
|
if (this.baseColorTexture !== undefined) {
|
|
8136
|
-
material.setTexture("
|
|
8137
|
-
material.setInt("
|
|
8105
|
+
material.setTexture("_BaseColorSampler", this.baseColorTexture);
|
|
8106
|
+
material.setInt("_BaseColorUVSet", 0);
|
|
8138
8107
|
if (this.baseColorTextureTrans !== undefined) {
|
|
8139
|
-
material.setMatrix3("
|
|
8108
|
+
material.setMatrix3("_BaseColorUVTransform", this.baseColorTextureTrans);
|
|
8140
8109
|
} else {
|
|
8141
8110
|
// fill other data
|
|
8142
|
-
material.setMatrix3("
|
|
8111
|
+
material.setMatrix3("_BaseColorUVTransform", uvTransform1);
|
|
8143
8112
|
}
|
|
8144
8113
|
}
|
|
8145
8114
|
//
|
|
8146
|
-
material.setFloat("
|
|
8147
|
-
material.setFloat("
|
|
8115
|
+
material.setFloat("_MetallicFactor", this.metallicFactor);
|
|
8116
|
+
material.setFloat("_RoughnessFactor", this.roughnessFactor);
|
|
8148
8117
|
if (this.metallicRoughnessTexture !== undefined) {
|
|
8149
|
-
material.setTexture("
|
|
8150
|
-
material.setInt("
|
|
8118
|
+
material.setTexture("_MetallicRoughnessSampler", this.metallicRoughnessTexture);
|
|
8119
|
+
material.setInt("_MetallicRoughnessUVSet", 0);
|
|
8151
8120
|
if (this.metallicRoughnessTextureTrans !== undefined) {
|
|
8152
|
-
material.setMatrix3("
|
|
8121
|
+
material.setMatrix3("_MetallicRoughnessUVTransform", this.metallicRoughnessTextureTrans);
|
|
8153
8122
|
} else {
|
|
8154
8123
|
// fill other data
|
|
8155
|
-
material.setMatrix3("
|
|
8124
|
+
material.setMatrix3("_MetallicRoughnessUVTransform", uvTransform1);
|
|
8156
8125
|
}
|
|
8157
8126
|
}
|
|
8158
8127
|
//
|
|
8159
8128
|
if (this.normalTexture !== undefined) {
|
|
8160
|
-
material.setTexture("
|
|
8161
|
-
material.setFloat("
|
|
8162
|
-
material.setInt("
|
|
8129
|
+
material.setTexture("_NormalSampler", this.normalTexture);
|
|
8130
|
+
material.setFloat("_NormalScale", this.normalTextureScale);
|
|
8131
|
+
material.setInt("_NormalUVSet", 0);
|
|
8163
8132
|
if (this.normalTextureTrans !== undefined) {
|
|
8164
|
-
material.setMatrix3("
|
|
8133
|
+
material.setMatrix3("_NormalUVTransform", this.normalTextureTrans);
|
|
8165
8134
|
} else {
|
|
8166
8135
|
// fill other data
|
|
8167
|
-
material.setMatrix3("
|
|
8136
|
+
material.setMatrix3("_NormalUVTransform", uvTransform1);
|
|
8168
8137
|
}
|
|
8169
8138
|
}
|
|
8170
8139
|
//
|
|
8171
8140
|
if (this.occlusionTexture !== undefined) {
|
|
8172
|
-
material.setTexture("
|
|
8173
|
-
material.setFloat("
|
|
8174
|
-
material.setInt("
|
|
8141
|
+
material.setTexture("_OcclusionSampler", this.occlusionTexture);
|
|
8142
|
+
material.setFloat("_OcclusionStrength", this.occlusionTextureStrength);
|
|
8143
|
+
material.setInt("_OcclusionUVSet", 0);
|
|
8175
8144
|
if (this.occlusionTextureTrans !== undefined) {
|
|
8176
|
-
material.setMatrix3("
|
|
8145
|
+
material.setMatrix3("_OcclusionUVTransform", this.occlusionTextureTrans);
|
|
8177
8146
|
} else {
|
|
8178
8147
|
// fill other data
|
|
8179
|
-
material.setMatrix3("
|
|
8148
|
+
material.setMatrix3("_OcclusionUVTransform", uvTransform1);
|
|
8180
8149
|
}
|
|
8181
8150
|
}
|
|
8182
8151
|
//
|
|
8183
8152
|
if (this.emissiveTexture !== undefined) {
|
|
8184
8153
|
var emissiveFactor = this.getEmissiveFactor();
|
|
8185
|
-
material.setTexture("
|
|
8186
|
-
material.setVector4("
|
|
8187
|
-
material.setInt("
|
|
8154
|
+
material.setTexture("_EmissiveSampler", this.emissiveTexture);
|
|
8155
|
+
material.setVector4("_EmissiveFactor", emissiveFactor);
|
|
8156
|
+
material.setInt("_EmissiveUVSet", 0);
|
|
8188
8157
|
if (this.emissiveTextureTrans !== undefined) {
|
|
8189
|
-
material.setMatrix3("
|
|
8158
|
+
material.setMatrix3("_EmissiveUVTransform", this.emissiveTextureTrans);
|
|
8190
8159
|
} else {
|
|
8191
8160
|
// fill other data
|
|
8192
|
-
material.setMatrix3("
|
|
8161
|
+
material.setMatrix3("_EmissiveUVTransform", uvTransform1);
|
|
8193
8162
|
}
|
|
8194
8163
|
} else if (this.hasEmissiveFactor()) {
|
|
8195
8164
|
var emissiveFactor1 = this.getEmissiveFactor();
|
|
8196
|
-
material.setVector4("
|
|
8165
|
+
material.setVector4("_EmissiveFactor", emissiveFactor1);
|
|
8197
8166
|
}
|
|
8198
|
-
material.setFloat("
|
|
8167
|
+
material.setFloat("_Exposure", 3.0);
|
|
8199
8168
|
};
|
|
8200
8169
|
/**
|
|
8201
8170
|
* 是否有基础颜色纹理
|
|
@@ -8503,7 +8472,7 @@ function createInternalMaterial(options) {
|
|
|
8503
8472
|
var newProjViewMatrix = camera.getNewProjectionMatrix(camera.fov).multiply(viewMatrix).invert();
|
|
8504
8473
|
var material = this.skyboxMesh.material;
|
|
8505
8474
|
this.skyboxMaterial.updateUniforms(material);
|
|
8506
|
-
material.setMatrix("
|
|
8475
|
+
material.setMatrix("_InvViewProjectionMatrix", newProjViewMatrix);
|
|
8507
8476
|
}
|
|
8508
8477
|
};
|
|
8509
8478
|
_create_class(PSkybox, [
|
|
@@ -8624,10 +8593,10 @@ function createInternalMaterial(options) {
|
|
|
8624
8593
|
if (this.brdfLUT === undefined) {
|
|
8625
8594
|
throw new Error("Setup brdfLUT for skybox at first.");
|
|
8626
8595
|
}
|
|
8627
|
-
material.setVector2("
|
|
8628
|
-
material.setTexture("
|
|
8596
|
+
material.setVector2("_IblIntensity", new Vector2(2.0, 2.0));
|
|
8597
|
+
material.setTexture("_brdfLUT", this.brdfLUT);
|
|
8629
8598
|
if (this.diffuseImage !== undefined) {
|
|
8630
|
-
material.setTexture("
|
|
8599
|
+
material.setTexture("_DiffuseEnvSampler", this.diffuseImage);
|
|
8631
8600
|
} else {
|
|
8632
8601
|
var coeffs = this.irradianceCoeffs;
|
|
8633
8602
|
if (coeffs === undefined || coeffs.length != 9) {
|
|
@@ -8645,11 +8614,11 @@ function createInternalMaterial(options) {
|
|
|
8645
8614
|
"l22"
|
|
8646
8615
|
];
|
|
8647
8616
|
aliasName.forEach(function(n, i) {
|
|
8648
|
-
material.setVector3("
|
|
8617
|
+
material.setVector3("_shCoefficients." + n, Vector3.fromArray(coeffs[i]));
|
|
8649
8618
|
});
|
|
8650
8619
|
}
|
|
8651
|
-
material.setInt("
|
|
8652
|
-
material.setTexture("
|
|
8620
|
+
material.setInt("_MipCount", this.specularMipCount);
|
|
8621
|
+
material.setTexture("_SpecularEnvSampler", this.specularImage);
|
|
8653
8622
|
};
|
|
8654
8623
|
/**
|
|
8655
8624
|
* 设置对应的材质状态
|
|
@@ -9398,7 +9367,7 @@ var PSkyboxType;
|
|
|
9398
9367
|
* @param options - 加载选项
|
|
9399
9368
|
*/ ModelPlugin.prepareResource = function prepareResource(scene, options) {
|
|
9400
9369
|
return _async_to_generator(function() {
|
|
9401
|
-
var _options_pluginData, _options_pluginData1, keyList, pluginData, _options_env, runtimeEnv, _options_pluginData_compatibleMode,
|
|
9370
|
+
var _options_pluginData, _options_pluginData1, keyList, pluginData, _options_env, runtimeEnv, _options_pluginData_compatibleMode, _options_pluginData_autoAdjustScene;
|
|
9402
9371
|
return __generator(this, function(_state) {
|
|
9403
9372
|
switch(_state.label){
|
|
9404
9373
|
case 0:
|
|
@@ -9420,10 +9389,10 @@ var PSkyboxType;
|
|
|
9420
9389
|
//
|
|
9421
9390
|
runtimeEnv = (_options_env = options.env) != null ? _options_env : "";
|
|
9422
9391
|
scene.storage["runtimeEnv"] = runtimeEnv;
|
|
9423
|
-
|
|
9424
|
-
|
|
9392
|
+
(_options_pluginData_compatibleMode = (_options_pluginData = options.pluginData) == null ? void 0 : _options_pluginData["compatibleMode"]) != null ? _options_pluginData_compatibleMode : "gltf";
|
|
9393
|
+
(_options_pluginData_autoAdjustScene = (_options_pluginData1 = options.pluginData) == null ? void 0 : _options_pluginData1["autoAdjustScene"]) != null ? _options_pluginData_autoAdjustScene : false;
|
|
9425
9394
|
//
|
|
9426
|
-
PluginHelper.preprocessScene(scene, runtimeEnv, compatibleMode, autoAdjustScene);
|
|
9395
|
+
//PluginHelper.preprocessScene(scene, runtimeEnv, compatibleMode, autoAdjustScene);
|
|
9427
9396
|
return [
|
|
9428
9397
|
4,
|
|
9429
9398
|
CompositionCache.loadStaticResources()
|
|
@@ -11236,14 +11205,14 @@ var GeometryProxy = /*#__PURE__*/ function() {
|
|
|
11236
11205
|
var attributes = {};
|
|
11237
11206
|
if (this.hasPosition) {
|
|
11238
11207
|
var attrib = this.positionAttrib;
|
|
11239
|
-
attributes["
|
|
11208
|
+
attributes["aPos"] = this._getBufferAttrib(attrib);
|
|
11240
11209
|
} else {
|
|
11241
11210
|
throw new Error("Position attribute missing");
|
|
11242
11211
|
}
|
|
11243
11212
|
if (this.hasNormal) {
|
|
11244
11213
|
var attrib1 = this.normalAttrib;
|
|
11245
11214
|
if (attrib1 !== undefined) {
|
|
11246
|
-
attributes["
|
|
11215
|
+
attributes["aNormal"] = this._getBufferAttrib(attrib1);
|
|
11247
11216
|
}
|
|
11248
11217
|
}
|
|
11249
11218
|
if (this.hasTangent) {
|
|
@@ -11254,7 +11223,7 @@ var GeometryProxy = /*#__PURE__*/ function() {
|
|
|
11254
11223
|
}
|
|
11255
11224
|
this.texCoordList.forEach(function(val) {
|
|
11256
11225
|
var attrib = _this.texCoordAttrib(val);
|
|
11257
|
-
var attribName = "
|
|
11226
|
+
var attribName = "aUV" + (val + 1);
|
|
11258
11227
|
attributes[attribName] = _this._getBufferAttrib(attrib);
|
|
11259
11228
|
});
|
|
11260
11229
|
if (this.hasSkinAnimation) {
|
|
@@ -11732,7 +11701,7 @@ var GLTFHelper = /*#__PURE__*/ function() {
|
|
|
11732
11701
|
|
|
11733
11702
|
registerPlugin("tree", ModelTreePlugin, VFXItem, true);
|
|
11734
11703
|
registerPlugin("model", ModelPlugin, VFXItem);
|
|
11735
|
-
var version = "2.0.0-alpha.
|
|
11704
|
+
var version = "2.0.0-alpha.7";
|
|
11736
11705
|
logger.info("plugin model version: " + version);
|
|
11737
11706
|
|
|
11738
11707
|
export { BoxMesh, CameraGestureHandlerImp, CameraGestureType, CheckerHelper, CompositionCache, CompositionHitTest, FBOOptions, Float16ArrayWrapper, GeometryBoxProxy, HitTestingProxy, HookOGLFunc, InterpolationSampler, LoaderHelper, LoaderImpl, MeshHelper, ModelCameraComponent, ModelLightComponent, ModelMeshComponent, ModelPlugin, ModelPluginComponent, ModelSkyboxComponent, ModelTreeComponent, ModelTreeItem, ModelTreePlugin, PAnimInterpType, PAnimPathType, PAnimTexture, PAnimTrack, PAnimation, PAnimationManager, PBlendMode, PCamera, PCameraManager, PCoordinate, PEntity, PFaceSideMode, PGeometry, PGlobalState, PLight, PLightManager, PLightType, PMaterialBase, PMaterialPBR, PMaterialSkyboxFilter, PMaterialType, PMaterialUnlit, PMesh, PMorph, PObject, PObjectType, PPrimitive, PSceneManager, PShaderManager, PShadowType, PSkin, PSkybox, PSkyboxCreator, PSkyboxType, PTextureType, PTransform, PluginHelper, RayBoxTesting, RayIntersectsBoxWithRotation, RayTriangleTesting, TextureDataMode, ToggleItemBounding, TwoStatesSet, VFX_ITEM_TYPE_3D, VertexAttribBuffer, WebGLHelper, WebHelper, createAnimationSampler, createInternalMaterial, createPluginMaterial, getDefaultEffectsGLTFLoader, getDiffuseOnlyShaderCode, getGaussianBlurShaderCodeV1, getGaussianBlurShaderCodeV2, getKawaseBlurShaderCode, getNormalVisShaderCode, getPBRPassShaderCode, getPMeshList, getQuadFilterShaderCode, getRendererGPUInfo, getSceneManager, getShadowPassShaderCode, getSimpleFilterShaderCode, getSkyBoxShaderCode, getTransparecyBaseShader, getTransparecyFilterShader, setDefaultEffectsGLTFLoader, version };
|