@onerjs/core 8.37.7 → 8.37.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.
Files changed (77) hide show
  1. package/Animations/animationGroup.d.ts +2 -3
  2. package/Animations/animationGroup.js +10 -15
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Bones/bone.d.ts +2 -0
  5. package/Bones/bone.js +2 -0
  6. package/Bones/bone.js.map +1 -1
  7. package/Bones/skeleton.js +7 -0
  8. package/Bones/skeleton.js.map +1 -1
  9. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -1
  10. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  11. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +3 -1
  12. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  13. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -1
  14. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  15. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -1
  16. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  17. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -1
  18. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  19. package/Layers/effectLayer.d.ts +4 -0
  20. package/Layers/effectLayer.js +2 -0
  21. package/Layers/effectLayer.js.map +1 -1
  22. package/Layers/highlightLayer.js +1 -0
  23. package/Layers/highlightLayer.js.map +1 -1
  24. package/Layers/index.d.ts +2 -0
  25. package/Layers/index.js +2 -0
  26. package/Layers/index.js.map +1 -1
  27. package/Layers/selectionOutlineLayer.d.ts +185 -0
  28. package/Layers/selectionOutlineLayer.js +326 -0
  29. package/Layers/selectionOutlineLayer.js.map +1 -0
  30. package/Layers/thinEffectLayer.d.ts +5 -1
  31. package/Layers/thinEffectLayer.js +21 -16
  32. package/Layers/thinEffectLayer.js.map +1 -1
  33. package/Layers/thinGlowLayer.js +1 -0
  34. package/Layers/thinGlowLayer.js.map +1 -1
  35. package/Layers/thinHighlightLayer.js +1 -0
  36. package/Layers/thinHighlightLayer.js.map +1 -1
  37. package/Layers/thinSelectionOutlineLayer.d.ts +154 -0
  38. package/Layers/thinSelectionOutlineLayer.js +611 -0
  39. package/Layers/thinSelectionOutlineLayer.js.map +1 -0
  40. package/Loading/Plugins/babylonFileLoader.js +136 -48
  41. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  42. package/Maths/math.vector.functions.d.ts +8 -0
  43. package/Maths/math.vector.functions.js +10 -0
  44. package/Maths/math.vector.functions.js.map +1 -1
  45. package/Meshes/abstractMesh.d.ts +4 -0
  46. package/Meshes/abstractMesh.js +4 -0
  47. package/Meshes/abstractMesh.js.map +1 -1
  48. package/Meshes/csg2.js +9 -1
  49. package/Meshes/csg2.js.map +1 -1
  50. package/Meshes/instancedMesh.js +2 -2
  51. package/Meshes/instancedMesh.js.map +1 -1
  52. package/Meshes/mesh.js +6 -1
  53. package/Meshes/mesh.js.map +1 -1
  54. package/Morph/morphTarget.js +2 -1
  55. package/Morph/morphTarget.js.map +1 -1
  56. package/Shaders/selection.fragment.d.ts +7 -0
  57. package/Shaders/selection.fragment.js +47 -0
  58. package/Shaders/selection.fragment.js.map +1 -0
  59. package/Shaders/selection.vertex.d.ts +17 -0
  60. package/Shaders/selection.vertex.js +95 -0
  61. package/Shaders/selection.vertex.js.map +1 -0
  62. package/Shaders/selectionOutline.fragment.d.ts +5 -0
  63. package/Shaders/selectionOutline.fragment.js +23 -0
  64. package/Shaders/selectionOutline.fragment.js.map +1 -0
  65. package/ShadersWGSL/selection.fragment.d.ts +7 -0
  66. package/ShadersWGSL/selection.fragment.js +47 -0
  67. package/ShadersWGSL/selection.fragment.js.map +1 -0
  68. package/ShadersWGSL/selection.vertex.d.ts +17 -0
  69. package/ShadersWGSL/selection.vertex.js +96 -0
  70. package/ShadersWGSL/selection.vertex.js.map +1 -0
  71. package/ShadersWGSL/selectionOutline.fragment.d.ts +5 -0
  72. package/ShadersWGSL/selectionOutline.fragment.js +24 -0
  73. package/ShadersWGSL/selectionOutline.fragment.js.map +1 -0
  74. package/package.json +1 -1
  75. package/scene.d.ts +2 -2
  76. package/scene.js +10 -2
  77. package/scene.js.map +1 -1
@@ -260,10 +260,11 @@ export class MorphTarget {
260
260
  const serializationObject = {};
261
261
  serializationObject.name = this.name;
262
262
  serializationObject.influence = this.influence;
263
- serializationObject.positions = Array.prototype.slice.call(this.getPositions());
264
263
  if (this.id != null) {
265
264
  serializationObject.id = this.id;
266
265
  }
266
+ serializationObject.uniqueId = this.uniqueId;
267
+ serializationObject.positions = Array.prototype.slice.call(this.getPositions());
267
268
  if (this.hasNormals) {
268
269
  serializationObject.normals = Array.prototype.slice.call(this.getNormals());
269
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\n\r\nimport type { Animation } from \"../Animations/animation\";\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _uv2s: Nullable<FloatArray> = null;\r\n private _colors: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride && this._scene) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n */\r\n public constructor(\r\n /** defines the name of the target */\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null\r\n ) {\r\n this.id = name;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates 2 data\r\n */\r\n public get hasUV2s(): boolean {\r\n return !!this._uv2s;\r\n }\r\n\r\n public get hasColors(): boolean {\r\n return !!this._colors;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices stored in this target\r\n */\r\n public get vertexCount(): number {\r\n return this._positions\r\n ? this._positions.length / 3\r\n : this._normals\r\n ? this._normals.length / 3\r\n : this._tangents\r\n ? this._tangents.length / 3\r\n : this._uvs\r\n ? this._uvs.length / 2\r\n : this._uv2s\r\n ? this._uv2s.length / 2\r\n : this._colors\r\n ? this._colors.length / 4\r\n : 0;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates 2 data to this target\r\n * @param data defines the texture coordinates 2 data to use\r\n */\r\n public setUV2s(data: Nullable<FloatArray>) {\r\n const hadUV2s = this.hasUV2s;\r\n\r\n this._uv2s = data;\r\n\r\n if (hadUV2s !== this.hasUV2s) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates 2 data stored in this target\r\n * @returns a FloatArray containing the texture coordinates 2 data (or null if not present)\r\n */\r\n public getUV2s(): Nullable<FloatArray> {\r\n return this._uv2s;\r\n }\r\n\r\n /**\r\n * Affects color data to this target\r\n * @param data defines the color data to use\r\n */\r\n public setColors(data: Nullable<FloatArray>) {\r\n const hadColors = this.hasColors;\r\n\r\n this._colors = data;\r\n\r\n if (hadColors !== this.hasColors) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color data stored in this target\r\n * @returns a FloatArray containing the color data (or null if not present)\r\n */\r\n public getColors(): Nullable<FloatArray> {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n newOne._uv2s = this._uv2s;\r\n newOne._colors = this._colors;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n if (this.hasUV2s) {\r\n serializationObject.uv2s = Array.prototype.slice.call(this.getUV2s());\r\n }\r\n if (this.hasColors) {\r\n serializationObject.colors = Array.prototype.slice.call(this.getColors());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n if (serializationObject.uv2s) {\r\n result.setUV2s(serializationObject.uv2s);\r\n }\r\n if (serializationObject.colors) {\r\n result.setColors(serializationObject.colors);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene());\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n result.setUV2s(<FloatArray>mesh.getVerticesData(VertexBuffer.UV2Kind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n result.setColors(<FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\n\r\nimport type { Animation } from \"../Animations/animation\";\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _uv2s: Nullable<FloatArray> = null;\r\n private _colors: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride && this._scene) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n */\r\n public constructor(\r\n /** defines the name of the target */\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null\r\n ) {\r\n this.id = name;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates 2 data\r\n */\r\n public get hasUV2s(): boolean {\r\n return !!this._uv2s;\r\n }\r\n\r\n public get hasColors(): boolean {\r\n return !!this._colors;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices stored in this target\r\n */\r\n public get vertexCount(): number {\r\n return this._positions\r\n ? this._positions.length / 3\r\n : this._normals\r\n ? this._normals.length / 3\r\n : this._tangents\r\n ? this._tangents.length / 3\r\n : this._uvs\r\n ? this._uvs.length / 2\r\n : this._uv2s\r\n ? this._uv2s.length / 2\r\n : this._colors\r\n ? this._colors.length / 4\r\n : 0;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates 2 data to this target\r\n * @param data defines the texture coordinates 2 data to use\r\n */\r\n public setUV2s(data: Nullable<FloatArray>) {\r\n const hadUV2s = this.hasUV2s;\r\n\r\n this._uv2s = data;\r\n\r\n if (hadUV2s !== this.hasUV2s) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates 2 data stored in this target\r\n * @returns a FloatArray containing the texture coordinates 2 data (or null if not present)\r\n */\r\n public getUV2s(): Nullable<FloatArray> {\r\n return this._uv2s;\r\n }\r\n\r\n /**\r\n * Affects color data to this target\r\n * @param data defines the color data to use\r\n */\r\n public setColors(data: Nullable<FloatArray>) {\r\n const hadColors = this.hasColors;\r\n\r\n this._colors = data;\r\n\r\n if (hadColors !== this.hasColors) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color data stored in this target\r\n * @returns a FloatArray containing the color data (or null if not present)\r\n */\r\n public getColors(): Nullable<FloatArray> {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n newOne._uv2s = this._uv2s;\r\n newOne._colors = this._colors;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n if (this.hasUV2s) {\r\n serializationObject.uv2s = Array.prototype.slice.call(this.getUV2s());\r\n }\r\n if (this.hasColors) {\r\n serializationObject.colors = Array.prototype.slice.call(this.getColors());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n if (serializationObject.uv2s) {\r\n result.setUV2s(serializationObject.uv2s);\r\n }\r\n if (serializationObject.colors) {\r\n result.setColors(serializationObject.colors);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene());\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n result.setUV2s(<FloatArray>mesh.getVerticesData(VertexBuffer.UV2Kind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n result.setColors(<FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,7 @@
1
+ import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
2
+ import "./ShadersInclude/clipPlaneFragment.js";
3
+ /** @internal */
4
+ export declare const selectionPixelShader: {
5
+ name: string;
6
+ shader: string;
7
+ };
@@ -0,0 +1,47 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
4
+ import "./ShadersInclude/clipPlaneFragment.js";
5
+ const name = "selectionPixelShader";
6
+ const shader = `#ifdef INSTANCES
7
+ flat varying float vSelectionId;
8
+ #else
9
+ uniform float selectionId;
10
+ #endif
11
+ #ifdef STORE_CAMERASPACE_Z
12
+ varying float vViewPosZ;
13
+ #else
14
+ varying float vDepthMetric;
15
+ #endif
16
+ #ifdef ALPHATEST
17
+ varying vec2 vUV;uniform sampler2D diffuseSampler;
18
+ #endif
19
+ #include<clipPlaneFragmentDeclaration>
20
+ #define CUSTOM_FRAGMENT_DEFINITIONS
21
+ void main(void) {
22
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
23
+ #include<clipPlaneFragment>
24
+ #ifdef ALPHATEST
25
+ if (texture2D(diffuseSampler,vUV).a<0.4)
26
+ discard;
27
+ #endif
28
+ #ifdef INSTANCES
29
+ float id=vSelectionId;
30
+ #else
31
+ float id=selectionId;
32
+ #endif
33
+ #ifdef STORE_CAMERASPACE_Z
34
+ gl_FragColor=vec4(id,vViewPosZ,0.0,1.0);
35
+ #else
36
+ gl_FragColor=vec4(id,vDepthMetric,0.0,1.0);
37
+ #endif
38
+ #define CUSTOM_FRAGMENT_MAIN_END
39
+ }
40
+ `;
41
+ // Sideeffect
42
+ if (!ShaderStore.ShadersStore[name]) {
43
+ ShaderStore.ShadersStore[name] = shader;
44
+ }
45
+ /** @internal */
46
+ export const selectionPixelShader = { name, shader };
47
+ //# sourceMappingURL=selection.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/selection.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,oCAAoC,CAAC;AAE5C,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/clipPlaneFragment\";\n\nconst name = \"selectionPixelShader\";\nconst shader = `#ifdef INSTANCES\nflat varying float vSelectionId;\n#else\nuniform float selectionId;\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvarying float vViewPosZ;\n#else\nvarying float vDepthMetric;\n#endif\n#ifdef ALPHATEST\nvarying vec2 vUV;uniform sampler2D diffuseSampler;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\ndiscard;\n#endif\n#ifdef INSTANCES\nfloat id=vSelectionId;\n#else\nfloat id=selectionId;\n#endif\n#ifdef STORE_CAMERASPACE_Z\ngl_FragColor=vec4(id,vViewPosZ,0.0,1.0);\n#else\ngl_FragColor=vec4(id,vDepthMetric,0.0,1.0);\n#endif\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const selectionPixelShader = { name, shader };\n"]}
@@ -0,0 +1,17 @@
1
+ import "./ShadersInclude/bonesDeclaration.js";
2
+ import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
3
+ import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
4
+ import "./ShadersInclude/morphTargetsVertexDeclaration.js";
5
+ import "./ShadersInclude/clipPlaneVertexDeclaration.js";
6
+ import "./ShadersInclude/instancesDeclaration.js";
7
+ import "./ShadersInclude/morphTargetsVertexGlobal.js";
8
+ import "./ShadersInclude/morphTargetsVertex.js";
9
+ import "./ShadersInclude/instancesVertex.js";
10
+ import "./ShadersInclude/bonesVertex.js";
11
+ import "./ShadersInclude/bakedVertexAnimation.js";
12
+ import "./ShadersInclude/clipPlaneVertex.js";
13
+ /** @internal */
14
+ export declare const selectionVertexShader: {
15
+ name: string;
16
+ shader: string;
17
+ };
@@ -0,0 +1,95 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ import "./ShadersInclude/bonesDeclaration.js";
4
+ import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
5
+ import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
6
+ import "./ShadersInclude/morphTargetsVertexDeclaration.js";
7
+ import "./ShadersInclude/clipPlaneVertexDeclaration.js";
8
+ import "./ShadersInclude/instancesDeclaration.js";
9
+ import "./ShadersInclude/morphTargetsVertexGlobal.js";
10
+ import "./ShadersInclude/morphTargetsVertex.js";
11
+ import "./ShadersInclude/instancesVertex.js";
12
+ import "./ShadersInclude/bonesVertex.js";
13
+ import "./ShadersInclude/bakedVertexAnimation.js";
14
+ import "./ShadersInclude/clipPlaneVertex.js";
15
+ const name = "selectionVertexShader";
16
+ const shader = `attribute vec3 position;
17
+ #ifdef INSTANCES
18
+ attribute float instanceSelectionId;
19
+ #endif
20
+ #include<bonesDeclaration>
21
+ #include<bakedVertexAnimationDeclaration>
22
+ #include<morphTargetsVertexGlobalDeclaration>
23
+ #include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]
24
+ #include<clipPlaneVertexDeclaration>
25
+ #include<instancesDeclaration>
26
+ uniform mat4 viewProjection;
27
+ #ifdef STORE_CAMERASPACE_Z
28
+ uniform mat4 view;
29
+ #else
30
+ uniform vec2 depthValues;
31
+ #endif
32
+ #ifdef INSTANCES
33
+ flat varying float vSelectionId;
34
+ #endif
35
+ #ifdef STORE_CAMERASPACE_Z
36
+ varying float vViewPosZ;
37
+ #else
38
+ varying float vDepthMetric;
39
+ #endif
40
+ #ifdef ALPHATEST
41
+ varying vec2 vUV;uniform mat4 diffuseMatrix;
42
+ #ifdef UV1
43
+ attribute vec2 uv;
44
+ #endif
45
+ #ifdef UV2
46
+ attribute vec2 uv2;
47
+ #endif
48
+ #endif
49
+ #define CUSTOM_VERTEX_DEFINITIONS
50
+ void main(void) {
51
+ #define CUSTOM_VERTEX_MAIN_BEGIN
52
+ vec3 positionUpdated=position;
53
+ #ifdef UV1
54
+ vec2 uvUpdated=uv;
55
+ #endif
56
+ #ifdef UV2
57
+ vec2 uv2Updated=uv2;
58
+ #endif
59
+ #include<morphTargetsVertexGlobal>
60
+ #include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]
61
+ #include<instancesVertex>
62
+ #include<bonesVertex>
63
+ #include<bakedVertexAnimation>
64
+ vec4 worldPos=finalWorld*vec4(positionUpdated,1.0);gl_Position=viewProjection*worldPos;
65
+ #ifdef ALPHATEST
66
+ #ifdef UV1
67
+ vUV=vec2(diffuseMatrix*vec4(uvUpdated,1.0,0.0));
68
+ #endif
69
+ #ifdef UV2
70
+ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0));
71
+ #endif
72
+ #endif
73
+ #ifdef STORE_CAMERASPACE_Z
74
+ vViewPosZ=(view*worldPos).z;
75
+ #else
76
+ #ifdef USE_REVERSE_DEPTHBUFFER
77
+ vDepthMetric=((-gl_Position.z+depthValues.x)/(depthValues.y));
78
+ #else
79
+ vDepthMetric=((gl_Position.z+depthValues.x)/(depthValues.y));
80
+ #endif
81
+ #endif
82
+ #ifdef INSTANCES
83
+ vSelectionId=instanceSelectionId;
84
+ #endif
85
+ #include<clipPlaneVertex>
86
+ #define CUSTOM_VERTEX_MAIN_END
87
+ }
88
+ `;
89
+ // Sideeffect
90
+ if (!ShaderStore.ShadersStore[name]) {
91
+ ShaderStore.ShadersStore[name] = shader;
92
+ }
93
+ /** @internal */
94
+ export const selectionVertexShader = { name, shader };
95
+ //# sourceMappingURL=selection.vertex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/selection.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAE1C,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/clipPlaneVertex\";\n\nconst name = \"selectionVertexShader\";\nconst shader = `attribute vec3 position;\n#ifdef INSTANCES\nattribute float instanceSelectionId;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<clipPlaneVertexDeclaration>\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\n#ifdef STORE_CAMERASPACE_Z\nuniform mat4 view;\n#else\nuniform vec2 depthValues;\n#endif\n#ifdef INSTANCES\nflat varying float vSelectionId;\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvarying float vViewPosZ;\n#else\nvarying float vDepthMetric;\n#endif\n#ifdef ALPHATEST\nvarying vec2 vUV;uniform mat4 diffuseMatrix;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef UV1\nvec2 uvUpdated=uv;\n#endif\n#ifdef UV2\nvec2 uv2Updated=uv2;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);gl_Position=viewProjection*worldPos;\n#ifdef ALPHATEST\n#ifdef UV1\nvUV=vec2(diffuseMatrix*vec4(uvUpdated,1.0,0.0));\n#endif\n#ifdef UV2\nvUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0));\n#endif\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvViewPosZ=(view*worldPos).z;\n#else\n#ifdef USE_REVERSE_DEPTHBUFFER\nvDepthMetric=((-gl_Position.z+depthValues.x)/(depthValues.y));\n#else\nvDepthMetric=((gl_Position.z+depthValues.x)/(depthValues.y));\n#endif\n#endif\n#ifdef INSTANCES\nvSelectionId=instanceSelectionId;\n#endif\n#include<clipPlaneVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const selectionVertexShader = { name, shader };\n"]}
@@ -0,0 +1,5 @@
1
+ /** @internal */
2
+ export declare const selectionOutlinePixelShader: {
3
+ name: string;
4
+ shader: string;
5
+ };
@@ -0,0 +1,23 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ const name = "selectionOutlinePixelShader";
4
+ const shader = `uniform sampler2D maskSampler;uniform sampler2D depthSampler;varying vec2 vUV;uniform vec2 screenSize;uniform vec3 outlineColor;uniform float outlineThickness;uniform float occlusionStrength;uniform float occlusionThreshold;
5
+ #define CUSTOM_FRAGMENT_DEFINITIONS
6
+ void main(void) {
7
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
8
+ vec2 texelSize=1.0/screenSize;vec2 sampleOffset=texelSize*outlineThickness;vec2 centerMask=texture2D(maskSampler,vUV).rg;vec2 maskX=texture2D(maskSampler,vUV+vec2(sampleOffset.x,0.0)).rg;vec2 maskY=texture2D(maskSampler,vUV+vec2(0.0,sampleOffset.y)).rg;vec2 maskXY=texture2D(maskSampler,vUV+sampleOffset).rg;vec3 gradient=vec3(
9
+ centerMask.r-maskX.r,
10
+ centerMask.r-maskY.r,
11
+ centerMask.r-maskXY.r
12
+ );float edgeStrength=length(gradient);float outlineMask=step(0.1,edgeStrength);
13
+ float depthCenter=texture2D(depthSampler,vUV).r;float depthX=texture2D(depthSampler,vUV+vec2(sampleOffset.x,0.0)).r;float depthY=texture2D(depthSampler,vUV+vec2(0.0,sampleOffset.y)).r;float depthXY=texture2D(depthSampler,vUV+sampleOffset).r;float occlusionCenter=step(occlusionThreshold,abs(centerMask.g-depthCenter));float occlusionX=step(occlusionThreshold,abs(maskX.g-depthX));float occlusionY=step(occlusionThreshold,abs(maskY.g-depthY));float occlusionXY=step(occlusionThreshold,abs(maskXY.g-depthXY));float occlusionFactor=min(min(occlusionCenter,occlusionX),min(occlusionY,occlusionXY));float finalOutlineMask=outlineMask*(1.0-occlusionStrength*occlusionFactor);gl_FragColor=vec4(outlineColor,finalOutlineMask);
14
+ #define CUSTOM_FRAGMENT_MAIN_END
15
+ }
16
+ `;
17
+ // Sideeffect
18
+ if (!ShaderStore.ShadersStore[name]) {
19
+ ShaderStore.ShadersStore[name] = shader;
20
+ }
21
+ /** @internal */
22
+ export const selectionOutlinePixelShader = { name, shader };
23
+ //# sourceMappingURL=selectionOutline.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionOutline.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/selectionOutline.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,6BAA6B,CAAC;AAC3C,MAAM,MAAM,GAAG;;;;;;;;;;;;CAYd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"selectionOutlinePixelShader\";\nconst shader = `uniform sampler2D maskSampler;uniform sampler2D depthSampler;varying vec2 vUV;uniform vec2 screenSize;uniform vec3 outlineColor;uniform float outlineThickness;uniform float occlusionStrength;uniform float occlusionThreshold;\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvec2 texelSize=1.0/screenSize;vec2 sampleOffset=texelSize*outlineThickness;vec2 centerMask=texture2D(maskSampler,vUV).rg;vec2 maskX=texture2D(maskSampler,vUV+vec2(sampleOffset.x,0.0)).rg;vec2 maskY=texture2D(maskSampler,vUV+vec2(0.0,sampleOffset.y)).rg;vec2 maskXY=texture2D(maskSampler,vUV+sampleOffset).rg;vec3 gradient=vec3(\ncenterMask.r-maskX.r,\ncenterMask.r-maskY.r,\ncenterMask.r-maskXY.r\n);float edgeStrength=length(gradient);float outlineMask=step(0.1,edgeStrength); \nfloat depthCenter=texture2D(depthSampler,vUV).r;float depthX=texture2D(depthSampler,vUV+vec2(sampleOffset.x,0.0)).r;float depthY=texture2D(depthSampler,vUV+vec2(0.0,sampleOffset.y)).r;float depthXY=texture2D(depthSampler,vUV+sampleOffset).r;float occlusionCenter=step(occlusionThreshold,abs(centerMask.g-depthCenter));float occlusionX=step(occlusionThreshold,abs(maskX.g-depthX));float occlusionY=step(occlusionThreshold,abs(maskY.g-depthY));float occlusionXY=step(occlusionThreshold,abs(maskXY.g-depthXY));float occlusionFactor=min(min(occlusionCenter,occlusionX),min(occlusionY,occlusionXY));float finalOutlineMask=outlineMask*(1.0-occlusionStrength*occlusionFactor);gl_FragColor=vec4(outlineColor,finalOutlineMask);\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\n/** @internal */\nexport const selectionOutlinePixelShader = { name, shader };\n"]}
@@ -0,0 +1,7 @@
1
+ import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
2
+ import "./ShadersInclude/clipPlaneFragment.js";
3
+ /** @internal */
4
+ export declare const selectionPixelShaderWGSL: {
5
+ name: string;
6
+ shader: string;
7
+ };
@@ -0,0 +1,47 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
4
+ import "./ShadersInclude/clipPlaneFragment.js";
5
+ const name = "selectionPixelShader";
6
+ const shader = `#ifdef INSTANCES
7
+ flat varying vSelectionId: f32;
8
+ #else
9
+ uniform selectionId: f32;
10
+ #endif
11
+ #ifdef STORE_CAMERASPACE_Z
12
+ varying vViewPosZ: f32;
13
+ #else
14
+ varying vDepthMetric: f32;
15
+ #endif
16
+ #ifdef ALPHATEST
17
+ varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;
18
+ #endif
19
+ #include<clipPlaneFragmentDeclaration>
20
+ #define CUSTOM_FRAGMENT_DEFINITIONS
21
+ @fragment
22
+ fn main(input: FragmentInputs)->FragmentOutputs {
23
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
24
+ #include<clipPlaneFragment>
25
+ #ifdef ALPHATEST
26
+ if (textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vUV).a<0.4) {discard;}
27
+ #endif
28
+ #ifdef INSTANCES
29
+ var id: f32=fragmentInputs.vSelectionId;
30
+ #else
31
+ var id: f32=uniforms.selectionId;
32
+ #endif
33
+ #ifdef STORE_CAMERASPACE_Z
34
+ fragmentOutputs.color=vec4(id,fragmentInputs.vViewPosZ,0.0,1.0);
35
+ #else
36
+ fragmentOutputs.color=vec4(id,fragmentInputs.vDepthMetric,0.0,1.0);
37
+ #endif
38
+ #define CUSTOM_FRAGMENT_MAIN_END
39
+ }
40
+ `;
41
+ // Sideeffect
42
+ if (!ShaderStore.ShadersStoreWGSL[name]) {
43
+ ShaderStore.ShadersStoreWGSL[name] = shader;
44
+ }
45
+ /** @internal */
46
+ export const selectionPixelShaderWGSL = { name, shader };
47
+ //# sourceMappingURL=selection.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/selection.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,oCAAoC,CAAC;AAE5C,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/clipPlaneFragment\";\n\nconst name = \"selectionPixelShader\";\nconst shader = `#ifdef INSTANCES\nflat varying vSelectionId: f32;\n#else\nuniform selectionId: f32;\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvarying vViewPosZ: f32;\n#else\nvarying vDepthMetric: f32;\n#endif\n#ifdef ALPHATEST\nvarying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n#ifdef ALPHATEST\nif (textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vUV).a<0.4) {discard;}\n#endif\n#ifdef INSTANCES\nvar id: f32=fragmentInputs.vSelectionId;\n#else\nvar id: f32=uniforms.selectionId;\n#endif\n#ifdef STORE_CAMERASPACE_Z\nfragmentOutputs.color=vec4(id,fragmentInputs.vViewPosZ,0.0,1.0);\n#else\nfragmentOutputs.color=vec4(id,fragmentInputs.vDepthMetric,0.0,1.0);\n#endif\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const selectionPixelShaderWGSL = { name, shader };\n"]}
@@ -0,0 +1,17 @@
1
+ import "./ShadersInclude/bonesDeclaration.js";
2
+ import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
3
+ import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
4
+ import "./ShadersInclude/morphTargetsVertexDeclaration.js";
5
+ import "./ShadersInclude/clipPlaneVertexDeclaration.js";
6
+ import "./ShadersInclude/instancesDeclaration.js";
7
+ import "./ShadersInclude/morphTargetsVertexGlobal.js";
8
+ import "./ShadersInclude/morphTargetsVertex.js";
9
+ import "./ShadersInclude/instancesVertex.js";
10
+ import "./ShadersInclude/bonesVertex.js";
11
+ import "./ShadersInclude/bakedVertexAnimation.js";
12
+ import "./ShadersInclude/clipPlaneVertex.js";
13
+ /** @internal */
14
+ export declare const selectionVertexShaderWGSL: {
15
+ name: string;
16
+ shader: string;
17
+ };
@@ -0,0 +1,96 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ import "./ShadersInclude/bonesDeclaration.js";
4
+ import "./ShadersInclude/bakedVertexAnimationDeclaration.js";
5
+ import "./ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
6
+ import "./ShadersInclude/morphTargetsVertexDeclaration.js";
7
+ import "./ShadersInclude/clipPlaneVertexDeclaration.js";
8
+ import "./ShadersInclude/instancesDeclaration.js";
9
+ import "./ShadersInclude/morphTargetsVertexGlobal.js";
10
+ import "./ShadersInclude/morphTargetsVertex.js";
11
+ import "./ShadersInclude/instancesVertex.js";
12
+ import "./ShadersInclude/bonesVertex.js";
13
+ import "./ShadersInclude/bakedVertexAnimation.js";
14
+ import "./ShadersInclude/clipPlaneVertex.js";
15
+ const name = "selectionVertexShader";
16
+ const shader = `attribute position: vec3f;
17
+ #ifdef INSTANCES
18
+ attribute instanceSelectionId: f32;
19
+ #endif
20
+ #include<bonesDeclaration>
21
+ #include<bakedVertexAnimationDeclaration>
22
+ #include<morphTargetsVertexGlobalDeclaration>
23
+ #include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]
24
+ #include<clipPlaneVertexDeclaration>
25
+ #include<instancesDeclaration>
26
+ uniform viewProjection: mat4x4f;
27
+ #ifdef STORE_CAMERASPACE_Z
28
+ uniform view: mat4x4f;
29
+ #else
30
+ uniform depthValues: vec2f;
31
+ #endif
32
+ #ifdef INSTANCES
33
+ flat varying vSelectionId: f32;
34
+ #endif
35
+ #ifdef STORE_CAMERASPACE_Z
36
+ varying vViewPosZ: f32;
37
+ #else
38
+ varying vDepthMetric: f32;
39
+ #endif
40
+ #ifdef ALPHATEST
41
+ varying vUV: vec2f;uniform diffuseMatrix: mat4x4f;
42
+ #ifdef UV1
43
+ attribute uv: vec2f;
44
+ #endif
45
+ #ifdef UV2
46
+ attribute uv2: vec2f;
47
+ #endif
48
+ #endif
49
+ #define CUSTOM_VERTEX_DEFINITIONS
50
+ @vertex
51
+ fn main(input: VertexInputs)->FragmentInputs {
52
+ #define CUSTOM_VERTEX_MAIN_BEGIN
53
+ var positionUpdated: vec3f=vertexInputs.position;
54
+ #ifdef UV1
55
+ var uvUpdated: vec2f=vertexInputs.uv;
56
+ #endif
57
+ #ifdef UV2
58
+ var uv2Updated: vec2f=vertexInputs.uv2;
59
+ #endif
60
+ #include<morphTargetsVertexGlobal>
61
+ #include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]
62
+ #include<instancesVertex>
63
+ #include<bonesVertex>
64
+ #include<bakedVertexAnimation>
65
+ var worldPos: vec4f=finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;
66
+ #ifdef ALPHATEST
67
+ #ifdef UV1
68
+ vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uvUpdated,1.0,0.0)).xy;
69
+ #endif
70
+ #ifdef UV2
71
+ vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uv2Updated,1.0,0.0)).xy;
72
+ #endif
73
+ #endif
74
+ #ifdef STORE_CAMERASPACE_Z
75
+ vertexOutputs.vViewPosZ=(uniforms.view*worldPos).z;
76
+ #else
77
+ #ifdef USE_REVERSE_DEPTHBUFFER
78
+ vertexOutputs.vDepthMetric=((-vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));
79
+ #else
80
+ vertexOutputs.vDepthMetric=((vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));
81
+ #endif
82
+ #endif
83
+ #ifdef INSTANCES
84
+ vertexOutputs.vSelectionId=vertexInputs.instanceSelectionId;
85
+ #endif
86
+ #include<clipPlaneVertex>
87
+ #define CUSTOM_VERTEX_MAIN_END
88
+ }
89
+ `;
90
+ // Sideeffect
91
+ if (!ShaderStore.ShadersStoreWGSL[name]) {
92
+ ShaderStore.ShadersStoreWGSL[name] = shader;
93
+ }
94
+ /** @internal */
95
+ export const selectionVertexShaderWGSL = { name, shader };
96
+ //# sourceMappingURL=selection.vertex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.vertex.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/selection.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,gDAAgD,CAAC;AACxD,OAAO,6CAA6C,CAAC;AACrD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,2CAA2C,CAAC;AACnD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAE1C,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/bonesDeclaration\";\nimport \"./ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobalDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexDeclaration\";\nimport \"./ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"./ShadersInclude/instancesDeclaration\";\nimport \"./ShadersInclude/morphTargetsVertexGlobal\";\nimport \"./ShadersInclude/morphTargetsVertex\";\nimport \"./ShadersInclude/instancesVertex\";\nimport \"./ShadersInclude/bonesVertex\";\nimport \"./ShadersInclude/bakedVertexAnimation\";\nimport \"./ShadersInclude/clipPlaneVertex\";\n\nconst name = \"selectionVertexShader\";\nconst shader = `attribute position: vec3f;\n#ifdef INSTANCES\nattribute instanceSelectionId: f32;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#include<clipPlaneVertexDeclaration>\n#include<instancesDeclaration>\nuniform viewProjection: mat4x4f;\n#ifdef STORE_CAMERASPACE_Z\nuniform view: mat4x4f;\n#else\nuniform depthValues: vec2f;\n#endif\n#ifdef INSTANCES\nflat varying vSelectionId: f32;\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvarying vViewPosZ: f32;\n#else\nvarying vDepthMetric: f32;\n#endif\n#ifdef ALPHATEST\nvarying vUV: vec2f;uniform diffuseMatrix: mat4x4f; \n#ifdef UV1\nattribute uv: vec2f;\n#endif\n#ifdef UV2\nattribute uv2: vec2f;\n#endif\n#endif\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input: VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvar positionUpdated: vec3f=vertexInputs.position;\n#ifdef UV1\nvar uvUpdated: vec2f=vertexInputs.uv;\n#endif\n#ifdef UV2\nvar uv2Updated: vec2f=vertexInputs.uv2;\n#endif\n#include<morphTargetsVertexGlobal>\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar worldPos: vec4f=finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;\n#ifdef ALPHATEST\n#ifdef UV1\nvertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uvUpdated,1.0,0.0)).xy;\n#endif\n#ifdef UV2\nvertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uv2Updated,1.0,0.0)).xy;\n#endif\n#endif\n#ifdef STORE_CAMERASPACE_Z\nvertexOutputs.vViewPosZ=(uniforms.view*worldPos).z;\n#else\n#ifdef USE_REVERSE_DEPTHBUFFER\nvertexOutputs.vDepthMetric=((-vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));\n#else\nvertexOutputs.vDepthMetric=((vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));\n#endif\n#endif\n#ifdef INSTANCES\nvertexOutputs.vSelectionId=vertexInputs.instanceSelectionId;\n#endif\n#include<clipPlaneVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const selectionVertexShaderWGSL = { name, shader };\n"]}
@@ -0,0 +1,5 @@
1
+ /** @internal */
2
+ export declare const selectionOutlinePixelShaderWGSL: {
3
+ name: string;
4
+ shader: string;
5
+ };
@@ -0,0 +1,24 @@
1
+ // Do not edit.
2
+ import { ShaderStore } from "../Engines/shaderStore.js";
3
+ const name = "selectionOutlinePixelShader";
4
+ const shader = `var maskSamplerSampler: sampler;uniform maskSampler: texture_2d<f32>;var depthSamplerSampler: sampler;uniform depthSampler: texture_2d<f32>;varying vUV: vec2f;uniform screenSize: vec2f;uniform outlineColor: vec3f;uniform outlineThickness: f32;uniform occlusionStrength: f32;uniform occlusionThreshold: f32;
5
+ #define CUSTOM_FRAGMENT_DEFINITIONS
6
+ @fragment
7
+ fn main(input: FragmentInputs)->FragmentOutputs {
8
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
9
+ var texelSize: vec2f=1.0/uniforms.screenSize;var sampleOffset: vec2f=texelSize*uniforms.outlineThickness;var centerMask: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV,0.0).rg;var maskX: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+vec2f(sampleOffset.x,0.0),0.0).rg;var maskY: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+vec2f(0.0,sampleOffset.y),0.0).rg;var maskXY: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+sampleOffset,0.0).rg;var gradient: vec3f=vec3f(
10
+ centerMask.r-maskX.r,
11
+ centerMask.r-maskY.r,
12
+ centerMask.r-maskXY.r
13
+ );var edgeStrength: f32=length(gradient);var outlineMask: f32=step(0.1,edgeStrength);
14
+ var depthCenter: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV,0.0).r;var depthX: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+vec2f(sampleOffset.x,0.0),0.0).r;var depthY: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+vec2f(0.0,sampleOffset.y),0.0).r;var depthXY: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+sampleOffset,0.0).r;var occlusionCenter: f32=step(uniforms.occlusionThreshold,abs(centerMask.g-depthCenter));var occlusionX: f32=step(uniforms.occlusionThreshold,abs(maskX.g-depthX));var occlusionY: f32=step(uniforms.occlusionThreshold,abs(maskY.g-depthY));var occlusionXY: f32=step(uniforms.occlusionThreshold,abs(maskXY.g-depthXY));var occlusionFactor: f32=min(min(occlusionCenter,occlusionX),min(occlusionY,occlusionXY));var finalOutlineMask: f32=outlineMask*(1.0-uniforms.occlusionStrength*occlusionFactor);fragmentOutputs.color=vec4f(uniforms.outlineColor,finalOutlineMask);
15
+ #define CUSTOM_FRAGMENT_MAIN_END
16
+ }
17
+ `;
18
+ // Sideeffect
19
+ if (!ShaderStore.ShadersStoreWGSL[name]) {
20
+ ShaderStore.ShadersStoreWGSL[name] = shader;
21
+ }
22
+ /** @internal */
23
+ export const selectionOutlinePixelShaderWGSL = { name, shader };
24
+ //# sourceMappingURL=selectionOutline.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionOutline.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/selectionOutline.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,IAAI,GAAG,6BAA6B,CAAC;AAC3C,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\n\nconst name = \"selectionOutlinePixelShader\";\nconst shader = `var maskSamplerSampler: sampler;uniform maskSampler: texture_2d<f32>;var depthSamplerSampler: sampler;uniform depthSampler: texture_2d<f32>;varying vUV: vec2f;uniform screenSize: vec2f;uniform outlineColor: vec3f;uniform outlineThickness: f32;uniform occlusionStrength: f32;uniform occlusionThreshold: f32;\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\nvar texelSize: vec2f=1.0/uniforms.screenSize;var sampleOffset: vec2f=texelSize*uniforms.outlineThickness;var centerMask: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV,0.0).rg;var maskX: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+vec2f(sampleOffset.x,0.0),0.0).rg;var maskY: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+vec2f(0.0,sampleOffset.y),0.0).rg;var maskXY: vec2f=textureSampleLevel(maskSampler,maskSamplerSampler,fragmentInputs.vUV+sampleOffset,0.0).rg;var gradient: vec3f=vec3f(\ncenterMask.r-maskX.r,\ncenterMask.r-maskY.r,\ncenterMask.r-maskXY.r\n);var edgeStrength: f32=length(gradient);var outlineMask: f32=step(0.1,edgeStrength); \nvar depthCenter: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV,0.0).r;var depthX: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+vec2f(sampleOffset.x,0.0),0.0).r;var depthY: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+vec2f(0.0,sampleOffset.y),0.0).r;var depthXY: f32=textureSampleLevel(depthSampler,depthSamplerSampler,fragmentInputs.vUV+sampleOffset,0.0).r;var occlusionCenter: f32=step(uniforms.occlusionThreshold,abs(centerMask.g-depthCenter));var occlusionX: f32=step(uniforms.occlusionThreshold,abs(maskX.g-depthX));var occlusionY: f32=step(uniforms.occlusionThreshold,abs(maskY.g-depthY));var occlusionXY: f32=step(uniforms.occlusionThreshold,abs(maskXY.g-depthXY));var occlusionFactor: f32=min(min(occlusionCenter,occlusionX),min(occlusionY,occlusionXY));var finalOutlineMask: f32=outlineMask*(1.0-uniforms.occlusionStrength*occlusionFactor);fragmentOutputs.color=vec4f(uniforms.outlineColor,finalOutlineMask);\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const selectionOutlinePixelShaderWGSL = { name, shader };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onerjs/core",
3
- "version": "8.37.7",
3
+ "version": "8.37.9",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
package/scene.d.ts CHANGED
@@ -2046,13 +2046,13 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
2046
2046
  */
2047
2047
  getLastTransformNodeById(id: string): Nullable<TransformNode>;
2048
2048
  /**
2049
- * Gets a the last added node (Mesh, Camera, Light) using a given Id
2049
+ * Gets a the last added node (Mesh, Camera, Light, Bone) using a given Id
2050
2050
  * @param id defines the Id to search for
2051
2051
  * @returns the found node or null if not found at all
2052
2052
  */
2053
2053
  getLastEntryById(id: string): Nullable<Node>;
2054
2054
  /**
2055
- * Gets a node (Mesh, Camera, Light) using a given Id
2055
+ * Gets a node (Mesh, Camera, Light, Bone) using a given Id
2056
2056
  * @param id defines the Id to search for
2057
2057
  * @returns the found node or null if not found at all
2058
2058
  */