@galacean/engine 0.0.0-experimental-2.0-game.8 → 0.0.0-experimental-2.0-game.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +95 -12
- package/dist/browser.js.map +1 -1
- package/dist/browser.min.js +1 -1
- package/dist/browser.min.js.map +1 -1
- package/dist/bundled.module.js +95 -12
- package/dist/bundled.module.js.map +1 -1
- package/dist/bundled.module.min.js +1 -1
- package/dist/bundled.module.min.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/module.js +1 -1
- package/package.json +5 -5
package/dist/browser.js
CHANGED
|
@@ -7017,7 +7017,7 @@
|
|
|
7017
7017
|
_inherits$2(FontAtlas, ReferResource);
|
|
7018
7018
|
function FontAtlas(engine) {
|
|
7019
7019
|
var _this;
|
|
7020
|
-
_this = ReferResource.call(this, engine) || this, _this._charInfoMap = {}, _this._space =
|
|
7020
|
+
_this = ReferResource.call(this, engine) || this, _this._charInfoMap = {}, _this._space = 4, _this._curX = 4, _this._curY = 4, _this._nextY = 4;
|
|
7021
7021
|
_this.isGCIgnored = true;
|
|
7022
7022
|
var format = engine._hardwareRenderer.isWebGL2 ? TextureFormat.R8 : TextureFormat.Alpha8;
|
|
7023
7023
|
var texture = new Texture2D(engine, 512, 512, format, false);
|
|
@@ -14611,6 +14611,28 @@
|
|
|
14611
14611
|
// Order: cheap reference checks → mask state → tag lookup (rare opt-out)
|
|
14612
14612
|
return preElement.subChunk.chunk === curElement.subChunk.chunk && preElement.texture === curElement.texture && preElement.material === curElement.material && maskInteraction === renderer.maskInteraction && (maskInteraction === SpriteMaskInteraction.None || preRenderer.maskLayer === renderer.maskLayer) && curElement.subShader.passes[0].getTagValue(VertexMergeBatcher._disableBatchTag) !== true;
|
|
14613
14613
|
};
|
|
14614
|
+
/**
|
|
14615
|
+
* Text-specific batch check: extends sprite check with outline parity.
|
|
14616
|
+
* Different outlineWidth or outlineColor must split into separate draw calls,
|
|
14617
|
+
* because outline uniforms are shared per draw call.
|
|
14618
|
+
*/ VertexMergeBatcher.canBatchText = function canBatchText(preElement, curElement) {
|
|
14619
|
+
if (!VertexMergeBatcher.canBatchSprite(preElement, curElement)) {
|
|
14620
|
+
return false;
|
|
14621
|
+
}
|
|
14622
|
+
var preRendererAny = preElement.component;
|
|
14623
|
+
var curRendererAny = curElement.component;
|
|
14624
|
+
if (preRendererAny._outlineWidth !== curRendererAny._outlineWidth) {
|
|
14625
|
+
return false;
|
|
14626
|
+
}
|
|
14627
|
+
if (preRendererAny._outlineWidth > 0) {
|
|
14628
|
+
var a = preRendererAny._outlineColor;
|
|
14629
|
+
var b = curRendererAny._outlineColor;
|
|
14630
|
+
if (a.r !== b.r || a.g !== b.g || a.b !== b.b || a.a !== b.a) {
|
|
14631
|
+
return false;
|
|
14632
|
+
}
|
|
14633
|
+
}
|
|
14634
|
+
return true;
|
|
14635
|
+
};
|
|
14614
14636
|
VertexMergeBatcher.canBatchSpriteMask = function canBatchSpriteMask(preElement, curElement) {
|
|
14615
14637
|
if (preElement.subChunk.chunk !== curElement.subChunk.chunk) {
|
|
14616
14638
|
return false;
|
|
@@ -16130,13 +16152,18 @@
|
|
|
16130
16152
|
_inherits$2(TextRenderer, Renderer);
|
|
16131
16153
|
function TextRenderer(entity) {
|
|
16132
16154
|
var _this;
|
|
16133
|
-
_this = Renderer.call(this, entity) || this, _this._textChunks = Array(), /** @internal */ _this._subFont = null, /** @internal */ _this._dirtyFlag = 15, _this._color = new Color(1, 1, 1, 1), _this._text = "", _this._width = 0, _this._height = 0, _this._localBounds = new BoundingBox(), _this._font = null, _this._fontSize = 24, _this._fontStyle = FontStyle.None, _this._lineSpacing = 0, _this._characterSpacing = 0, _this._horizontalAlignment = TextHorizontalAlignment.Center, _this._verticalAlignment = TextVerticalAlignment.Center, _this._enableWrapping = false, _this._overflowMode = OverflowMode.Overflow;
|
|
16155
|
+
_this = Renderer.call(this, entity) || this, _this._textChunks = Array(), /** @internal */ _this._subFont = null, /** @internal */ _this._dirtyFlag = 15, _this._color = new Color(1, 1, 1, 1), _this._text = "", _this._width = 0, _this._height = 0, _this._localBounds = new BoundingBox(), _this._font = null, _this._fontSize = 24, _this._fontStyle = FontStyle.None, _this._lineSpacing = 0, _this._characterSpacing = 0, _this._horizontalAlignment = TextHorizontalAlignment.Center, _this._verticalAlignment = TextVerticalAlignment.Center, _this._enableWrapping = false, _this._overflowMode = OverflowMode.Overflow, _this._outlineColor = new Color(0, 0, 0, 1), _this._outlineWidth = 0;
|
|
16134
16156
|
var engine = _this.engine;
|
|
16135
16157
|
_this._font = engine._textDefaultFont;
|
|
16136
16158
|
_this._addResourceReferCount(_this._font, 1);
|
|
16137
16159
|
_this.setMaterial(engine._basicResources.textDefaultMaterial);
|
|
16160
|
+
var shaderData = _this.shaderData;
|
|
16161
|
+
shaderData.setFloat(TextRenderer._outlineWidthProperty, _this._outlineWidth);
|
|
16162
|
+
shaderData.setColor(TextRenderer._outlineColorProperty, _this._outlineColor);
|
|
16138
16163
|
//@ts-ignore
|
|
16139
16164
|
_this._color._onValueChanged = _this._onColorChanged.bind(_this);
|
|
16165
|
+
// @ts-ignore
|
|
16166
|
+
_this._outlineColor._onValueChanged = _this._onOutlineColorChanged.bind(_this);
|
|
16140
16167
|
return _this;
|
|
16141
16168
|
}
|
|
16142
16169
|
var _proto = TextRenderer.prototype;
|
|
@@ -16158,6 +16185,7 @@
|
|
|
16158
16185
|
Renderer.prototype._cloneTo.call(this, target);
|
|
16159
16186
|
target.font = this._font;
|
|
16160
16187
|
target._subFont = this._subFont;
|
|
16188
|
+
target.outlineWidth = this._outlineWidth;
|
|
16161
16189
|
};
|
|
16162
16190
|
/**
|
|
16163
16191
|
* @internal
|
|
@@ -16191,7 +16219,7 @@
|
|
|
16191
16219
|
/**
|
|
16192
16220
|
* @internal
|
|
16193
16221
|
*/ _proto._canBatch = function _canBatch(preElement, curElement) {
|
|
16194
|
-
return VertexMergeBatcher.
|
|
16222
|
+
return VertexMergeBatcher.canBatchText(preElement, curElement);
|
|
16195
16223
|
};
|
|
16196
16224
|
/**
|
|
16197
16225
|
* @internal
|
|
@@ -16234,6 +16262,7 @@
|
|
|
16234
16262
|
var distanceForSort = this._distanceForSort;
|
|
16235
16263
|
var renderPipeline = camera._renderPipeline;
|
|
16236
16264
|
var textChunks = this._textChunks;
|
|
16265
|
+
var textTextureSize = TextRenderer._tempVec20;
|
|
16237
16266
|
for(var i = 0, n = textChunks.length; i < n; ++i){
|
|
16238
16267
|
var _renderElement;
|
|
16239
16268
|
var _textChunks_i = textChunks[i], subChunk = _textChunks_i.subChunk, texture = _textChunks_i.texture;
|
|
@@ -16241,6 +16270,7 @@
|
|
|
16241
16270
|
renderElement.set(this, material, subChunk.chunk.primitive, subChunk.subMesh, texture, subChunk);
|
|
16242
16271
|
(_renderElement = renderElement).shaderData || (_renderElement.shaderData = new ShaderData(ShaderDataGroup.RenderElement));
|
|
16243
16272
|
renderElement.shaderData.setTexture(TextRenderer._textureProperty, texture);
|
|
16273
|
+
renderElement.shaderData.setVector2(TextRenderer._textTextureSizeProperty, textTextureSize.set(texture.width, texture.height));
|
|
16244
16274
|
renderElement.priority = priority;
|
|
16245
16275
|
renderElement.distanceForSort = distanceForSort;
|
|
16246
16276
|
renderPipeline.pushRenderElement(context, renderElement);
|
|
@@ -16372,10 +16402,11 @@
|
|
|
16372
16402
|
charRenderInfo.texture = charFont._getTextureByIndex(charInfo.index);
|
|
16373
16403
|
charRenderInfo.uvs = charInfo.uvs;
|
|
16374
16404
|
var w = charInfo.w, ascent = charInfo.ascent, descent = charInfo.descent;
|
|
16375
|
-
var
|
|
16376
|
-
var
|
|
16377
|
-
var
|
|
16378
|
-
var
|
|
16405
|
+
var ow = this._outlineWidth * pixelsPerUnitReciprocal;
|
|
16406
|
+
var left = startX * pixelsPerUnitReciprocal - ow;
|
|
16407
|
+
var right = (startX + w) * pixelsPerUnitReciprocal + ow;
|
|
16408
|
+
var top = (startY + ascent) * pixelsPerUnitReciprocal + ow;
|
|
16409
|
+
var bottom = (startY - descent) * pixelsPerUnitReciprocal - ow;
|
|
16379
16410
|
localPositions.set(left, top, right, bottom);
|
|
16380
16411
|
i === firstLine && (maxY = Math.max(maxY, top));
|
|
16381
16412
|
minY = Math.min(minY, bottom);
|
|
@@ -16449,6 +16480,10 @@
|
|
|
16449
16480
|
var vertices = subChunk.chunk.vertices;
|
|
16450
16481
|
var indices = subChunk.indices = [];
|
|
16451
16482
|
var charRenderInfos = textChunk.charRenderInfos;
|
|
16483
|
+
var ow = this._outlineWidth;
|
|
16484
|
+
var texture = textChunk.texture;
|
|
16485
|
+
var owU = ow > 0 ? ow / texture.width : 0;
|
|
16486
|
+
var owV = ow > 0 ? ow / texture.height : 0;
|
|
16452
16487
|
for(var i = 0, ii = 0, io = 0, vo = subChunk.vertexArea.start + 3; i < count; ++i, io += 4){
|
|
16453
16488
|
var charRenderInfo = charRenderInfos[i];
|
|
16454
16489
|
charRenderInfo.indexInChunk = i;
|
|
@@ -16456,10 +16491,13 @@
|
|
|
16456
16491
|
for(var j = 0; j < tempIndicesLength; ++j){
|
|
16457
16492
|
indices[ii++] = tempIndices[j] + io;
|
|
16458
16493
|
}
|
|
16459
|
-
// Set uv and color for vertices
|
|
16494
|
+
// Set uv and color for vertices, expand uv outward by outline width
|
|
16460
16495
|
for(var j1 = 0; j1 < 4; ++j1, vo += 9){
|
|
16461
16496
|
var uv = charRenderInfo.uvs[j1];
|
|
16462
|
-
|
|
16497
|
+
var su = j1 === 1 || j1 === 2 ? 1 : -1;
|
|
16498
|
+
var sv = j1 >= 2 ? 1 : -1;
|
|
16499
|
+
vertices[vo] = uv.x + owU * su;
|
|
16500
|
+
vertices[vo + 1] = uv.y + owV * sv;
|
|
16463
16501
|
vertices[vo + 2] = r;
|
|
16464
16502
|
vertices[vo + 3] = g;
|
|
16465
16503
|
vertices[vo + 4] = b;
|
|
@@ -16488,6 +16526,9 @@
|
|
|
16488
16526
|
_proto._onColorChanged = function _onColorChanged() {
|
|
16489
16527
|
this._setDirtyFlagTrue(16);
|
|
16490
16528
|
};
|
|
16529
|
+
_proto._onOutlineColorChanged = function _onOutlineColorChanged() {
|
|
16530
|
+
this.shaderData.setColor(TextRenderer._outlineColorProperty, this._outlineColor);
|
|
16531
|
+
};
|
|
16491
16532
|
_create_class$2(TextRenderer, [
|
|
16492
16533
|
{
|
|
16493
16534
|
key: "color",
|
|
@@ -16674,6 +16715,35 @@
|
|
|
16674
16715
|
}
|
|
16675
16716
|
}
|
|
16676
16717
|
},
|
|
16718
|
+
{
|
|
16719
|
+
key: "outlineWidth",
|
|
16720
|
+
get: /**
|
|
16721
|
+
* The outline width in pixels. 0 means outline is disabled. Clamped to [0, 8].
|
|
16722
|
+
*/ function get() {
|
|
16723
|
+
return this._outlineWidth;
|
|
16724
|
+
},
|
|
16725
|
+
set: function set(value) {
|
|
16726
|
+
value = Math.max(0, Math.min(value, 3));
|
|
16727
|
+
if (this._outlineWidth !== value) {
|
|
16728
|
+
this._outlineWidth = value;
|
|
16729
|
+
this.shaderData.setFloat(TextRenderer._outlineWidthProperty, value);
|
|
16730
|
+
this._setDirtyFlagTrue(14);
|
|
16731
|
+
}
|
|
16732
|
+
}
|
|
16733
|
+
},
|
|
16734
|
+
{
|
|
16735
|
+
key: "outlineColor",
|
|
16736
|
+
get: /**
|
|
16737
|
+
* The outline color. Only effective when outlineWidth > 0.
|
|
16738
|
+
*/ function get() {
|
|
16739
|
+
return this._outlineColor;
|
|
16740
|
+
},
|
|
16741
|
+
set: function set(value) {
|
|
16742
|
+
if (this._outlineColor !== value) {
|
|
16743
|
+
this._outlineColor.copyFrom(value);
|
|
16744
|
+
}
|
|
16745
|
+
}
|
|
16746
|
+
},
|
|
16677
16747
|
{
|
|
16678
16748
|
key: "maskInteraction",
|
|
16679
16749
|
get: /**
|
|
@@ -16724,9 +16794,13 @@
|
|
|
16724
16794
|
]);
|
|
16725
16795
|
return TextRenderer;
|
|
16726
16796
|
}(exports.Renderer);
|
|
16727
|
-
TextRenderer.
|
|
16797
|
+
TextRenderer._tempVec20 = new Vector2();
|
|
16728
16798
|
TextRenderer._tempVec30 = new Vector3();
|
|
16729
16799
|
TextRenderer._tempVec31 = new Vector3();
|
|
16800
|
+
TextRenderer._textureProperty = ShaderProperty.getByName("renderElement_TextTexture");
|
|
16801
|
+
TextRenderer._textTextureSizeProperty = ShaderProperty.getByName("renderElement_TextTextureSize");
|
|
16802
|
+
TextRenderer._outlineColorProperty = ShaderProperty.getByName("renderer_OutlineColor");
|
|
16803
|
+
TextRenderer._outlineWidthProperty = ShaderProperty.getByName("renderer_OutlineWidth");
|
|
16730
16804
|
TextRenderer._worldPositions = [
|
|
16731
16805
|
new Vector3(),
|
|
16732
16806
|
new Vector3(),
|
|
@@ -16785,12 +16859,21 @@
|
|
|
16785
16859
|
__decorate$1([
|
|
16786
16860
|
assignmentClone
|
|
16787
16861
|
], TextRenderer.prototype, "_overflowMode", void 0);
|
|
16862
|
+
__decorate$1([
|
|
16863
|
+
deepClone
|
|
16864
|
+
], TextRenderer.prototype, "_outlineColor", void 0);
|
|
16865
|
+
__decorate$1([
|
|
16866
|
+
ignoreClone
|
|
16867
|
+
], TextRenderer.prototype, "_outlineWidth", void 0);
|
|
16788
16868
|
__decorate$1([
|
|
16789
16869
|
ignoreClone
|
|
16790
16870
|
], TextRenderer.prototype, "_onTransformChanged", null);
|
|
16791
16871
|
__decorate$1([
|
|
16792
16872
|
ignoreClone
|
|
16793
16873
|
], TextRenderer.prototype, "_onColorChanged", null);
|
|
16874
|
+
__decorate$1([
|
|
16875
|
+
ignoreClone
|
|
16876
|
+
], TextRenderer.prototype, "_onOutlineColorChanged", null);
|
|
16794
16877
|
var TextChunk = function TextChunk() {
|
|
16795
16878
|
this.charRenderInfos = new Array();
|
|
16796
16879
|
};
|
|
@@ -29626,7 +29709,7 @@
|
|
|
29626
29709
|
var spriteMaskVs = "uniform mat4 camera_VPMat;\n\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\n\nvarying vec2 v_uv;\n\nvoid main()\n{\n gl_Position = camera_VPMat * vec4(POSITION, 1.0);\n v_uv = TEXCOORD_0;\n}\n"; // eslint-disable-line
|
|
29627
29710
|
var spriteFs = "#include <common>\nuniform sampler2D renderer_SpriteTexture;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main()\n{\n vec4 baseColor = texture2DSRGB(renderer_SpriteTexture, v_uv);\n gl_FragColor = baseColor * v_color;\n}\n"; // eslint-disable-line
|
|
29628
29711
|
var spriteVs = "uniform mat4 renderer_MVPMat;\n\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main()\n{\n gl_Position = renderer_MVPMat * vec4(POSITION, 1.0);\n\n v_uv = TEXCOORD_0;\n v_color = COLOR_0;\n}\n"; // eslint-disable-line
|
|
29629
|
-
var textFs = "uniform sampler2D renderElement_TextTexture;\nuniform vec4 renderer_UIRectClipRect;\nuniform float renderer_UIRectClipEnabled;\nuniform vec4 renderer_UIRectClipSoftness;\nuniform float renderer_UIRectClipHardClip;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\nvarying vec2 v_worldPosition;\n\nfloat getUIRectClipAlpha()\n{\n vec4 edgeDistance = vec4(\n v_worldPosition.x - renderer_UIRectClipRect.x,\n v_worldPosition.y - renderer_UIRectClipRect.y,\n renderer_UIRectClipRect.z - v_worldPosition.x,\n renderer_UIRectClipRect.w - v_worldPosition.y\n );\n vec4 hardClipFactor = step(vec4(0.0), edgeDistance);\n vec4 softness = max(renderer_UIRectClipSoftness, vec4(1e-5));\n vec4 softClipFactor = clamp(edgeDistance / softness, 0.0, 1.0);\n vec4 useSoftness = step(vec4(1e-5), renderer_UIRectClipSoftness);\n vec4 clipFactor = mix(hardClipFactor, softClipFactor, useSoftness);\n return clipFactor.x * clipFactor.y * clipFactor.z * clipFactor.w;\n}\n\nvoid main()\n{\n float rectClipAlpha = 1.0;\n if (renderer_UIRectClipEnabled > 0.5) {\n rectClipAlpha = getUIRectClipAlpha();\n }\n\n
|
|
29712
|
+
var textFs = "uniform sampler2D renderElement_TextTexture;\nuniform vec2 renderElement_TextTextureSize;\nuniform vec4 renderer_OutlineColor;\nuniform float renderer_OutlineWidth;\n\nuniform vec4 renderer_UIRectClipRect;\nuniform float renderer_UIRectClipEnabled;\nuniform vec4 renderer_UIRectClipSoftness;\nuniform float renderer_UIRectClipHardClip;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\nvarying vec2 v_worldPosition;\n\nfloat getUIRectClipAlpha()\n{\n vec4 edgeDistance = vec4(\n v_worldPosition.x - renderer_UIRectClipRect.x,\n v_worldPosition.y - renderer_UIRectClipRect.y,\n renderer_UIRectClipRect.z - v_worldPosition.x,\n renderer_UIRectClipRect.w - v_worldPosition.y\n );\n vec4 hardClipFactor = step(vec4(0.0), edgeDistance);\n vec4 softness = max(renderer_UIRectClipSoftness, vec4(1e-5));\n vec4 softClipFactor = clamp(edgeDistance / softness, 0.0, 1.0);\n vec4 useSoftness = step(vec4(1e-5), renderer_UIRectClipSoftness);\n vec4 clipFactor = mix(hardClipFactor, softClipFactor, useSoftness);\n return clipFactor.x * clipFactor.y * clipFactor.z * clipFactor.w;\n}\n\nfloat sampleCoverage(vec2 uv)\n{\n vec4 c = texture2D(renderElement_TextTexture, uv);\n #ifdef GRAPHICS_API_WEBGL2\n return c.r;\n #else\n return c.a;\n #endif\n}\n\nvoid main()\n{\n float rectClipAlpha = 1.0;\n if (renderer_UIRectClipEnabled > 0.5) {\n rectClipAlpha = getUIRectClipAlpha();\n }\n\n float coverage = sampleCoverage(v_uv);\n vec4 finalColor;\n\n if (renderer_OutlineWidth > 0.0) {\n vec2 texelSize = 1.0 / renderElement_TextTextureSize;\n vec2 step = texelSize * renderer_OutlineWidth;\n float outlineCoverage = coverage;\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2( step.x, 0.0)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2(-step.x, 0.0)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2( 0.0, step.y)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2( 0.0, -step.y)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2( step.x * 0.7071, step.y * 0.7071)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2(-step.x * 0.7071, step.y * 0.7071)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2( step.x * 0.7071, -step.y * 0.7071)));\n outlineCoverage = max(outlineCoverage, sampleCoverage(v_uv + vec2(-step.x * 0.7071, -step.y * 0.7071)));\n\n vec3 rgb = mix(renderer_OutlineColor.rgb, v_color.rgb, coverage);\n float alpha = max(coverage * v_color.a, outlineCoverage * renderer_OutlineColor.a);\n finalColor = vec4(rgb, alpha);\n } else {\n finalColor = vec4(v_color.rgb, v_color.a * coverage);\n }\n\n finalColor.a *= rectClipAlpha;\n if (renderer_UIRectClipEnabled > 0.5 && renderer_UIRectClipHardClip > 0.5 && finalColor.a < 0.001) {\n discard;\n }\n gl_FragColor = finalColor;\n}\n"; // eslint-disable-line
|
|
29630
29713
|
var textVs = "uniform mat4 renderer_MVPMat;\nuniform mat4 renderer_ModelMat;\n\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\nvarying vec2 v_worldPosition;\n\nvoid main()\n{\n gl_Position = renderer_MVPMat * vec4(POSITION, 1.0);\n\n v_uv = TEXCOORD_0;\n v_color = COLOR_0;\n v_worldPosition = POSITION.xy;\n}\n"; // eslint-disable-line
|
|
29631
29714
|
var trailFs = "#include <common>\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform vec4 material_BaseColor;\n\n#ifdef MATERIAL_HAS_BASETEXTURE\n uniform sampler2D material_BaseTexture;\n#endif\n\nuniform mediump vec3 material_EmissiveColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\n uniform sampler2D material_EmissiveTexture;\n#endif\n\nvoid main() {\n vec4 color = material_BaseColor * v_color;\n\n #ifdef MATERIAL_HAS_BASETEXTURE\n color *= texture2DSRGB(material_BaseTexture, v_uv);\n #endif\n\n // Emissive\n vec3 emissiveRadiance = material_EmissiveColor;\n #ifdef MATERIAL_HAS_EMISSIVETEXTURE\n emissiveRadiance *= texture2DSRGB(material_EmissiveTexture, v_uv).rgb;\n #endif\n\n color.rgb += emissiveRadiance;\n\n gl_FragColor = color;\n}\n\n"; // eslint-disable-line
|
|
29632
29715
|
var trailVs = "attribute vec4 a_PositionBirthTime; // xyz: World position, w: Birth time (used by CPU only)\nattribute vec4 a_CornerTangent; // x: Corner (-1 or 1), yzw: Tangent direction\nattribute float a_Distance; // Absolute cumulative distance (written once per point)\n\nuniform vec4 renderer_TrailParams; // x: TextureMode (0: Stretch, 1: Tile), y: TextureScaleX, z: TextureScaleY\nuniform vec2 renderer_DistanceParams; // x: HeadDistance, y: TailDistance\nuniform vec3 camera_Position;\nuniform mat4 camera_ViewMat;\nuniform mat4 camera_ProjMat;\nuniform vec2 renderer_WidthCurve[4]; // Width curve (4 keyframes max: x=time, y=value)\nuniform vec4 renderer_ColorKeys[4]; // Color gradient (x=time, yzw=rgb)\nuniform vec2 renderer_AlphaKeys[4]; // Alpha gradient (x=time, y=alpha)\nuniform vec4 renderer_CurveMaxTime; // x: colorMaxTime, y: alphaMaxTime, z: widthMaxTime\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\n#include <particle_common>\n\nvoid main() {\n vec3 position = a_PositionBirthTime.xyz;\n float corner = a_CornerTangent.x;\n vec3 tangent = a_CornerTangent.yzw;\n\n // Distance-based relative position: 0=head(newest), 1=tail(oldest)\n float distFromHead = renderer_DistanceParams.x - a_Distance;\n float totalDist = renderer_DistanceParams.x - renderer_DistanceParams.y;\n float relativePos = totalDist > 0.0 ? distFromHead / totalDist : 0.0;\n\n // Billboard: expand perpendicular to tangent and view direction\n vec3 toCamera = normalize(camera_Position - position);\n vec3 right = cross(tangent, toCamera);\n float rightLenSq = dot(right, right);\n if (rightLenSq < 0.000001) {\n right = cross(tangent, vec3(0.0, 1.0, 0.0));\n rightLenSq = dot(right, right);\n if (rightLenSq < 0.000001) {\n right = cross(tangent, vec3(1.0, 0.0, 0.0));\n rightLenSq = dot(right, right);\n }\n }\n right = right * inversesqrt(rightLenSq);\n\n float width = evaluateParticleCurve(renderer_WidthCurve, min(relativePos, renderer_CurveMaxTime.z));\n vec3 worldPosition = position + right * width * 0.5 * corner;\n\n gl_Position = camera_ProjMat * camera_ViewMat * vec4(worldPosition, 1.0);\n\n // u = position along trail (affected by textureMode), v = corner side.\n float u = renderer_TrailParams.x == 0.0 ? relativePos : distFromHead;\n float v = corner * 0.5 + 0.5;\n v_uv = vec2(u * renderer_TrailParams.y, v * renderer_TrailParams.z);\n\n v_color = evaluateParticleGradient(renderer_ColorKeys, renderer_CurveMaxTime.x, renderer_AlphaKeys, renderer_CurveMaxTime.y, relativePos);\n}\n"; // eslint-disable-line
|
|
@@ -56079,7 +56162,7 @@
|
|
|
56079
56162
|
], EXT_texture_webp);
|
|
56080
56163
|
|
|
56081
56164
|
//@ts-ignore
|
|
56082
|
-
var version = "0.0.0-experimental-2.0-game.
|
|
56165
|
+
var version = "0.0.0-experimental-2.0-game.9";
|
|
56083
56166
|
console.log("Galacean Engine Version: " + version);
|
|
56084
56167
|
for(var key in CoreObjects){
|
|
56085
56168
|
Loader.registerClass(key, CoreObjects[key]);
|