@woosh/meep-engine 2.37.17 → 2.37.20
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/core/assert.js +1 -1
- package/core/binary/float2uint8.js +8 -0
- package/core/binary/uint82float.js +8 -0
- package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
- package/core/collection/array/typed/isTypedArray.js +20 -0
- package/core/collection/array/typedArrayToDataType.js +1 -0
- package/core/collection/list/List.d.ts +1 -1
- package/core/collection/table/RowFirstTable.js +34 -0
- package/core/collection/table/RowFirstTable.spec.js +59 -1
- package/core/color/Color.js +83 -1
- package/core/color/YCbCr_to_rgb_uint24.js +3 -4
- package/core/color/hsv2rgb.js +4 -3
- package/core/color/linear_to_sRGB.js +4 -5
- package/core/color/rgb2hex.js +1 -1
- package/core/color/rgb2uint24.js +6 -4
- package/core/color/rgb_to_YCbCr_uint24.js +11 -13
- package/core/events/signal/Signal.d.ts +11 -9
- package/core/events/signal/Signal.js +8 -8
- package/core/events/signal/Signal.spec.js +16 -0
- package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
- package/core/geom/Quaternion.d.ts +21 -1
- package/core/geom/Quaternion.js +279 -200
- package/core/geom/Quaternion.spec.js +71 -2
- package/core/geom/Vector2.js +3 -3
- package/core/geom/Vector3.d.ts +2 -0
- package/core/geom/Vector3.js +31 -7
- package/core/geom/Vector3.schema.json +16 -0
- package/core/geom/Vector4.js +16 -0
- package/core/json/JsonUtils.js +2 -20
- package/core/math/bell_membership_function.js +19 -0
- package/core/math/exp2.js +8 -0
- package/core/math/interval/NumericInterval.js +17 -0
- package/core/math/physics/brdf/brdf_burley.js +25 -0
- package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
- package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
- package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
- package/core/model/ObservedEnum.js +8 -0
- package/editor/Editor.js +97 -1
- package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
- package/editor/ecs/component/FieldDescriptor.js +34 -0
- package/editor/ecs/component/FieldValueAdapter.js +20 -0
- package/editor/ecs/component/TypeEditor.js +33 -0
- package/editor/ecs/component/TypeSchema.d.ts +38 -0
- package/editor/ecs/component/createFieldEditor.js +90 -0
- package/editor/ecs/component/createObjectEditor.js +266 -60
- package/editor/ecs/component/editors/ColorEditor.js +39 -0
- package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
- package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
- package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
- package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
- package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
- package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
- package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
- package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
- package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
- package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
- package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
- package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
- package/editor/ecs/component/editors/common/noEditor.js +9 -0
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
- package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
- package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
- package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
- package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
- package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
- package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
- package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
- package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
- package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
- package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
- package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
- package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
- package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
- package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
- package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
- package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
- package/editor/ecs/component/findNearestRegisteredType.js +59 -0
- package/editor/ecs/component/prototypeObjectEditor.js +379 -0
- package/editor/tools/SelectionTool.js +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
- package/editor/tools/paint/TerrainPaintTool.js +2 -1
- package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
- package/editor/view/EditorView.js +1 -1
- package/editor/view/ecs/ComponentControlView.js +2 -30
- package/editor/view/ecs/EntityEditor.js +61 -139
- package/editor/view/ecs/components/GridObstacleController.js +4 -4
- package/editor/view/ecs/components/TerrainController.js +1 -1
- package/editor/view/ecs/components/common/NumberController.js +19 -7
- package/engine/animation/keyed2/AnimationTrack.js +1 -1
- package/engine/asset/AssetManager.d.ts +1 -1
- package/engine/asset/AssetManager.js +390 -388
- package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
- package/engine/ecs/components/TagEditor.js +15 -0
- package/engine/ecs/fow/FogOfWarEditor.js +13 -0
- package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
- package/engine/ecs/terrain/ecs/Terrain.js +44 -43
- package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
- package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
- package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
- package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
- package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
- package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
- package/engine/ecs/transform/Transform.d.ts +2 -0
- package/engine/ecs/transform/Transform.editor.schema.json +16 -0
- package/engine/ecs/transform/Transform.js +3 -0
- package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
- package/engine/graphics/ecs/light/Light.js +0 -47
- package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
- package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
- package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
- package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
- package/engine/graphics/ecs/sprite/Sprite.js +11 -0
- package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
- package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1566 -0
- package/engine/graphics/micron/prototypeVirtualGeometry.js +2 -2
- package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +15 -15
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
- package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
- package/engine/graphics/shaders/TerrainShader.js +8 -8
- package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
- package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
- package/engine/graphics/texture/sampler/bicubic.js +59 -0
- package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
- package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
- package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
- package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
- package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
- package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
- package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
- package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
- package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
- package/engine/grid/components/GridObstacle.js +0 -44
- package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
- package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
- package/engine/navigation/ecs/components/Path.d.ts +2 -0
- package/engine/navigation/ecs/components/Path.js +6 -1
- package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
- package/engine/platform/GetURLHash.js +27 -0
- package/engine/platform/WebEnginePlatform.js +1 -22
- package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
- package/generation/GridGenerator.js +7 -6
- package/generation/example/SampleGenerator0.js +39 -35
- package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
- package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
- package/generation/example/generators/mir_generator_place_bases.js +7 -3
- package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
- package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
- package/generation/example/themes/SampleTheme0.js +11 -7
- package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
- package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
- package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
- package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
- package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
- package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
- package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
- package/generation/grid/GridData.d.ts +5 -1
- package/generation/grid/GridData.js +35 -36
- package/generation/grid/MarkerMatchCounter.js +5 -3
- package/generation/markers/GridActionRuleSet.js +15 -32
- package/generation/markers/GridCellActionPlaceMarker.js +12 -8
- package/generation/markers/debug/visualizeMarkers.js +56 -36
- package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
- package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
- package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
- package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
- package/generation/placement/GridCellPlacementRule.js +31 -25
- package/generation/theme/ThemeEngine.js +1 -1
- package/package.json +1 -1
- package/samples/terrain/from_image.js +7 -3
- package/samples/terrain/main.js +1 -1
- package/view/View.js +23 -1
- package/view/common/LabelView.js +1 -1
- package/view/compose3x3transform.js +32 -8
- package/view/controller/dat/DatGuiUtils.js +1 -1
- package/view/elements/DropDownSelectionView.js +11 -3
- package/view/elements/image/ImageView.js +3 -1
- package/core/model/ObservedReal.js +0 -55
- package/editor/ecs/component/ObjectEditor.js +0 -0
- package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
- package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
- package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
|
@@ -46,7 +46,7 @@ import { StaticMaterialCache } from "../../asset/loaders/material/StaticMaterial
|
|
|
46
46
|
import convertSampler2D2Canvas from "../texture/sampler/Sampler2D2Canvas.js";
|
|
47
47
|
import { CanvasView } from "../../../view/elements/CanvasView.js";
|
|
48
48
|
import { Sampler2D } from "../texture/sampler/Sampler2D.js";
|
|
49
|
-
import {
|
|
49
|
+
import { sampler2D_scale_down_linear } from "../texture/sampler/sampler2D_scale_down_linear.js";
|
|
50
50
|
import { ShadowMapRenderer } from "../shadows/ShadowMapRenderer.js";
|
|
51
51
|
import { mat4 } from "gl-matrix";
|
|
52
52
|
|
|
@@ -129,7 +129,7 @@ function debug_shadow_map() {
|
|
|
129
129
|
|
|
130
130
|
const resampled = Sampler2D.uint8(4, 512, 512);
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
sampler2D_scale_down_linear(sampler, resampled);
|
|
133
133
|
|
|
134
134
|
convertSampler2D2Canvas(resampled, 1, 0, cv.el);
|
|
135
135
|
|
|
@@ -187,17 +187,17 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
// shader.defines.USE_COLOR = true;
|
|
190
|
-
|
|
190
|
+
//
|
|
191
191
|
// rewrittenVertexShader = rewrittenVertexShader.replace(
|
|
192
192
|
// '#include <color_vertex>',
|
|
193
193
|
// `
|
|
194
194
|
// #include <color_vertex>
|
|
195
|
-
// vColor = vec3(1.0);
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
//
|
|
195
|
+
// //vColor = vec3(1.0);
|
|
196
|
+
// vColor.xyz = vec3(
|
|
197
|
+
// sin(float(micron_patch_address)*123.1),
|
|
198
|
+
// sin(float(micron_patch_address)*11.7),
|
|
199
|
+
// sin(float(micron_patch_address)*932.183)
|
|
200
|
+
// );
|
|
201
201
|
// `
|
|
202
202
|
// );
|
|
203
203
|
|
|
@@ -229,16 +229,16 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
|
|
|
229
229
|
|
|
230
230
|
shader.fragmentShader = shader.fragmentShader.replace(
|
|
231
231
|
'#include <dithering_fragment>',
|
|
232
|
-
// `gl_FragColor.rgb = vec3(
|
|
233
|
-
// sin(v_micron_patch_address*123.1)*0.5 + 0.5,
|
|
234
|
-
// sin(v_micron_patch_address*11.7)*0.5 + 0.5,
|
|
235
|
-
// sin(v_micron_patch_address*932.183)*0.5 + 0.5
|
|
236
|
-
// );`
|
|
237
232
|
`gl_FragColor.rgb = vec3(
|
|
238
|
-
sin(
|
|
239
|
-
sin(
|
|
240
|
-
sin(
|
|
233
|
+
sin(v_micron_patch_address*123.1)*0.5 + 0.5,
|
|
234
|
+
sin(v_micron_patch_address*11.7)*0.5 + 0.5,
|
|
235
|
+
sin(v_micron_patch_address*932.183)*0.5 + 0.5
|
|
241
236
|
);`
|
|
237
|
+
// `gl_FragColor.rgb = vec3(
|
|
238
|
+
// sin(v_micron_instance_id*123.1)*0.5 + 0.5,
|
|
239
|
+
// sin(v_micron_instance_id*11.7)*0.5 + 0.5,
|
|
240
|
+
// sin(v_micron_instance_id*932.183)*0.5 + 0.5
|
|
241
|
+
// );`
|
|
242
242
|
// `gl_FragColor.rgb = vec3(
|
|
243
243
|
// v_vertex_id*0.0026041666666666665,
|
|
244
244
|
// 1.0,
|
|
@@ -140,6 +140,11 @@ ParticularEngine.prototype.advanceEmitter = function (emitter, timeDelta) {
|
|
|
140
140
|
|
|
141
141
|
const step = steps[type];
|
|
142
142
|
|
|
143
|
+
if (step === undefined) {
|
|
144
|
+
// no step definition
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
143
148
|
step.emitter = emitter;
|
|
144
149
|
step.timeDelta = timeDelta;
|
|
145
150
|
step.particles = emitter.particles;
|
|
@@ -14,6 +14,8 @@ import { EmissionShapeType } from "./EmissionShapeType.js";
|
|
|
14
14
|
import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
|
|
15
15
|
import { computeHashFloat } from "../../../../../../core/math/hash/computeHashFloat.js";
|
|
16
16
|
|
|
17
|
+
const aabb3 = new AABB3(0, 0, 0, 0, 0, 0);
|
|
18
|
+
|
|
17
19
|
function ParticleLayer() {
|
|
18
20
|
/**
|
|
19
21
|
*
|
|
@@ -30,24 +32,26 @@ function ParticleLayer() {
|
|
|
30
32
|
|
|
31
33
|
/**
|
|
32
34
|
* Determines a range of particle life expectancy
|
|
35
|
+
* @readonly
|
|
33
36
|
* @type {NumericInterval}
|
|
34
37
|
*/
|
|
35
38
|
this.particleLife = new NumericInterval(1, 1);
|
|
36
39
|
|
|
37
40
|
/**
|
|
38
|
-
*
|
|
41
|
+
* @readonly
|
|
39
42
|
* @type {NumericInterval}
|
|
40
43
|
*/
|
|
41
44
|
this.particleSize = new NumericInterval(0.1, 0.2);
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
|
-
*
|
|
47
|
+
* @readonly
|
|
45
48
|
* @type {NumericInterval}
|
|
46
49
|
*/
|
|
47
50
|
this.particleRotation = new NumericInterval(0, 0);
|
|
48
51
|
|
|
49
52
|
/**
|
|
50
53
|
* Rotation speed of individual particles in Rad/s
|
|
54
|
+
* @readonly
|
|
51
55
|
* @type {NumericInterval}
|
|
52
56
|
*/
|
|
53
57
|
this.particleRotationSpeed = new NumericInterval(0, 0);
|
|
@@ -77,31 +81,31 @@ function ParticleLayer() {
|
|
|
77
81
|
this.emissionImmediate = 0;
|
|
78
82
|
|
|
79
83
|
/**
|
|
80
|
-
*
|
|
84
|
+
* @readonly
|
|
81
85
|
* @type {ParameterTrackSet}
|
|
82
86
|
*/
|
|
83
87
|
this.parameterTracks = new ParameterTrackSet();
|
|
84
88
|
|
|
85
89
|
/**
|
|
86
|
-
*
|
|
90
|
+
* @readonly
|
|
87
91
|
* @type {Vector3}
|
|
88
92
|
*/
|
|
89
93
|
this.position = new Vector3(0, 0, 0);
|
|
90
94
|
|
|
91
95
|
/**
|
|
92
|
-
*
|
|
96
|
+
* @readonly
|
|
93
97
|
* @type {Vector3}
|
|
94
98
|
*/
|
|
95
99
|
this.scale = new Vector3(1, 1, 1);
|
|
96
100
|
|
|
97
101
|
/**
|
|
98
|
-
*
|
|
102
|
+
* @readonly
|
|
99
103
|
* @type {ConicRay}
|
|
100
104
|
*/
|
|
101
105
|
this.particleVelocityDirection = new ConicRay();
|
|
102
106
|
|
|
103
107
|
/**
|
|
104
|
-
*
|
|
108
|
+
* @readonly
|
|
105
109
|
* @type {NumericInterval}
|
|
106
110
|
*/
|
|
107
111
|
this.particleSpeed = new NumericInterval(0, 0);
|
|
@@ -120,14 +124,19 @@ function ParticleLayer() {
|
|
|
120
124
|
|
|
121
125
|
/**
|
|
122
126
|
* Simulation steps that are to be applied
|
|
127
|
+
* @readonly
|
|
123
128
|
* @type {List<SimulationStepDefinition>}
|
|
124
129
|
*/
|
|
125
130
|
this.steps = new List();
|
|
126
131
|
|
|
132
|
+
/**
|
|
133
|
+
* transient property
|
|
134
|
+
* @type {number}
|
|
135
|
+
*/
|
|
127
136
|
this.scaledSpriteHalfSize = -1;
|
|
128
137
|
|
|
129
138
|
/**
|
|
130
|
-
*
|
|
139
|
+
* @readonly
|
|
131
140
|
* @type {AABB3}
|
|
132
141
|
*/
|
|
133
142
|
this.baseBoundingBox = new AABB3(0, 0, 0, 0, 0, 0);
|
|
@@ -159,7 +168,6 @@ ParticleLayer.prototype.computeScaledSpriteHalfSize = function () {
|
|
|
159
168
|
return maxParticleSize / 2;
|
|
160
169
|
};
|
|
161
170
|
|
|
162
|
-
const aabb3 = new AABB3(0, 0, 0, 0, 0, 0);
|
|
163
171
|
|
|
164
172
|
/**
|
|
165
173
|
* Bounding box without taking sprite size into account
|
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import { Group } from "three";
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Abstract base class for a particle renderer
|
|
5
3
|
*/
|
|
6
4
|
export class ParticleRenderer {
|
|
7
5
|
|
|
6
|
+
|
|
8
7
|
constructor() {
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
build_start() {
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
build_end() {
|
|
16
17
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
-
* @param {
|
|
21
|
+
*
|
|
22
|
+
* @param {ParticleLayer} layer
|
|
22
23
|
*/
|
|
23
|
-
|
|
24
|
+
add(layer) {
|
|
24
25
|
|
|
25
26
|
}
|
|
27
|
+
|
|
26
28
|
}
|
package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js
CHANGED
|
@@ -314,11 +314,16 @@ function make_fragment_shader() {
|
|
|
314
314
|
|
|
315
315
|
struct LambertMaterial {
|
|
316
316
|
vec3 diffuseColor;
|
|
317
|
+
float opacity;
|
|
317
318
|
};
|
|
318
319
|
|
|
319
320
|
void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
|
|
320
|
-
float
|
|
321
|
+
float unsaturated_direction_dot = dot( geometry.normal, directLight.direction );
|
|
322
|
+
|
|
323
|
+
float dotNL = saturate( unsaturated_direction_dot );
|
|
324
|
+
|
|
321
325
|
vec3 irradiance = dotNL * directLight.color;
|
|
326
|
+
|
|
322
327
|
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
323
328
|
}
|
|
324
329
|
|
|
@@ -373,7 +378,7 @@ function make_fragment_shader() {
|
|
|
373
378
|
|
|
374
379
|
vec3 transformedNormal = construct_spherical_normal_from_point_coord(gl_PointCoord.xy);
|
|
375
380
|
|
|
376
|
-
LambertMaterial material = LambertMaterial(texel.rgb);
|
|
381
|
+
LambertMaterial material = LambertMaterial(texel.rgb, texel.a);
|
|
377
382
|
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
|
|
378
383
|
|
|
379
384
|
${CHUNK_LAMBERT_LIGHTING}
|
package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ParticlePool } from "../../emitter/ParticlePool.js";
|
|
2
|
+
import { PARTICULAR_PARTICLE_SPECIFICATION } from "../../emitter/PARTICULAR_PARTICLE_SPECIFICATION.js";
|
|
3
|
+
|
|
4
|
+
export class SoftBillboardParticlePool {
|
|
5
|
+
__pool = new ParticlePool(PARTICULAR_PARTICLE_SPECIFICATION);
|
|
6
|
+
|
|
7
|
+
get particle_count() {
|
|
8
|
+
// TODO implement
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param {ParticleLayer} layer
|
|
14
|
+
*/
|
|
15
|
+
add(layer) {
|
|
16
|
+
// TODO implement
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
sort() {
|
|
21
|
+
// TODO implement
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
dispose() {
|
|
25
|
+
// TODO implement
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ParticleRenderer } from "../ParticleRenderer.js";
|
|
2
|
+
import { ShaderManager } from "../../shader/ShaderManager.js";
|
|
3
|
+
|
|
4
|
+
export class SoftBillboardParticleRenderer extends ParticleRenderer {
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @type {Map<Material, SoftBillboardParticlePool>}
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
10
|
+
__pools = new Map();
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
* @type {ShaderManager}
|
|
15
|
+
*/
|
|
16
|
+
__shaders;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param {Engine} engine
|
|
21
|
+
*/
|
|
22
|
+
constructor(engine) {
|
|
23
|
+
super();
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
this.__shaders = new ShaderManager(engine.assetManager, engine.graphics.getMaterialManager());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
build_start() {
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
build_end() {
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param {ParticleLayer} layer
|
|
41
|
+
* @returns {SoftBillboardParticlePool}
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
__obtain_pool(layer) {
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* @param {ParticleLayer} layer
|
|
51
|
+
*/
|
|
52
|
+
add(layer) {
|
|
53
|
+
// TODO test frustum visibility
|
|
54
|
+
|
|
55
|
+
const pool = this.__obtain_pool(layer);
|
|
56
|
+
|
|
57
|
+
pool.add(layer);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
__sort() {
|
|
61
|
+
for (const [mat, pool] of this.__pools) {
|
|
62
|
+
pool.sort();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// TODO sort pools themselves
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Release resources
|
|
70
|
+
*/
|
|
71
|
+
dispose() {
|
|
72
|
+
for (const [mat, pool] of this.__pools) {
|
|
73
|
+
pool.dispose();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this.__pools.clear();
|
|
77
|
+
|
|
78
|
+
this.__shaders.dispose();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -219,17 +219,22 @@ export class ShaderManager {
|
|
|
219
219
|
|
|
220
220
|
this.materialMap.forEach(function (entry) {
|
|
221
221
|
|
|
222
|
-
entry.emitters
|
|
222
|
+
const emitters = entry.emitters;
|
|
223
|
+
const emitter_count = emitters.length;
|
|
224
|
+
|
|
225
|
+
for (let i = 0; i < emitter_count; i++) {
|
|
226
|
+
const emitter = emitters[i];
|
|
223
227
|
//mark sprites for an update
|
|
224
228
|
emitter.setFlag(ParticleEmitterFlag.SpritesNeedUpdate);
|
|
225
|
-
}
|
|
229
|
+
}
|
|
230
|
+
|
|
226
231
|
});
|
|
227
232
|
|
|
228
233
|
// console.timeEnd("ShaderManager.updateSpriteTexture");
|
|
229
234
|
}
|
|
230
235
|
|
|
231
236
|
/**
|
|
232
|
-
*
|
|
237
|
+
* @private
|
|
233
238
|
* @returns {Material}
|
|
234
239
|
* @param {ParticleEmitter} emitter
|
|
235
240
|
*/
|
|
@@ -249,7 +254,7 @@ export class ShaderManager {
|
|
|
249
254
|
|
|
250
255
|
const ref = this.__material_manager.obtain(shader);
|
|
251
256
|
|
|
252
|
-
// TODO track
|
|
257
|
+
// TODO track reference and release it eventually
|
|
253
258
|
|
|
254
259
|
return ref.getValue();
|
|
255
260
|
}
|
|
@@ -424,6 +429,13 @@ export class ShaderManager {
|
|
|
424
429
|
|
|
425
430
|
this.__common_uniforms.resolution.value.set(x, y);
|
|
426
431
|
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Dispose of any used resources
|
|
435
|
+
*/
|
|
436
|
+
dispose() {
|
|
437
|
+
// TODO implement
|
|
438
|
+
}
|
|
427
439
|
}
|
|
428
440
|
|
|
429
441
|
/**
|
|
@@ -6,7 +6,6 @@ import ShaderChunks from './lib/ShaderChunks.js';
|
|
|
6
6
|
|
|
7
7
|
function vertex() {
|
|
8
8
|
return `
|
|
9
|
-
|
|
10
9
|
#define PHYSICAL
|
|
11
10
|
#define STANDARD
|
|
12
11
|
|
|
@@ -86,7 +85,6 @@ function vertex() {
|
|
|
86
85
|
|
|
87
86
|
function fragment() {
|
|
88
87
|
return `
|
|
89
|
-
|
|
90
88
|
#define PHYSICAL
|
|
91
89
|
#define STANDARD
|
|
92
90
|
|
|
@@ -305,6 +303,8 @@ function fragment() {
|
|
|
305
303
|
|
|
306
304
|
${ShaderChunks.clouds_pars_fragment}
|
|
307
305
|
|
|
306
|
+
out highp vec4 pc_fragColor;
|
|
307
|
+
|
|
308
308
|
void main() {
|
|
309
309
|
vec4 splatDiffuseColor = computeSplatMix(vUv);
|
|
310
310
|
|
|
@@ -363,30 +363,30 @@ function fragment() {
|
|
|
363
363
|
|
|
364
364
|
vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
|
|
365
365
|
|
|
366
|
-
|
|
366
|
+
pc_fragColor = vec4( outgoingLight, diffuseColor.a );
|
|
367
367
|
|
|
368
368
|
#if defined( TONE_MAPPING )
|
|
369
|
-
|
|
369
|
+
pc_fragColor.rgb = toneMapping( pc_fragColor.rgb );
|
|
370
370
|
#endif
|
|
371
371
|
|
|
372
372
|
//encode fragment
|
|
373
|
-
|
|
373
|
+
pc_fragColor = linearToOutputTexel( pc_fragColor );
|
|
374
374
|
#ifdef USE_FOG
|
|
375
375
|
#ifdef FOG_EXP2
|
|
376
376
|
float fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );
|
|
377
377
|
#else
|
|
378
378
|
float fogFactor = smoothstep( fogNear, fogFar, fogDepth );
|
|
379
379
|
#endif
|
|
380
|
-
|
|
380
|
+
pc_fragColor.rgb = mix( pc_fragColor.rgb, fogColor, fogFactor );
|
|
381
381
|
#endif
|
|
382
382
|
|
|
383
383
|
#ifdef PREMULTIPLIED_ALPHA
|
|
384
384
|
// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
|
|
385
|
-
|
|
385
|
+
pc_fragColor.rgb *= pc_fragColor.a;
|
|
386
386
|
#endif
|
|
387
387
|
|
|
388
388
|
#ifdef DITHERING
|
|
389
|
-
|
|
389
|
+
pc_fragColor.rgb = dithering( pc_fragColor.rgb );
|
|
390
390
|
#endif
|
|
391
391
|
}
|
|
392
392
|
`;
|