README.md
Package detail
@needle-tools/engine
Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.
readme
changelog
Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[4.4.0] - 2025-04-17
Added
- Add: The needle-engine web-component
contactshadows
attribute now allows you to specify a factor for controlling the darkness/lightness. E.g.<needle-engine contactshadows="1">
will make the shadows appear darker vs.<needle-engine contactshadows=".2">
will make the contact shadow appear lighter. - Add: The needle-engine web-component does now support transparency for
background-color
. For example:rgba(255, 255, 100, .5)
or#ffdddd99
ortransparent
are valid values:<needle-engine background-color="rgba(255, 255, 100, .5)" />
- Add:
ObjectUtils.createPrimitive()
now supports scale as array
e.g.ObjectUtils.createPrimitive("Cube", { scale: [1, .25, 1] } );
- Add: Input
getGamepad(<index>)
function to query a connected gamepad. Example:this.context.input.getGamepad()
Add:
lookAtScreenPoint()
function which allows 3D object to look at points in 2D screen coordinates (e.g. your mouse position).
Example Component that makes the object look at the mouseimport { Behaviour, lookAtScreenPoint } from "@needle-tools/engine"; export class LookAtMouse extends Behaviour { update() { lookAtScreenPoint(this.gameObject, this.context.input.mousePosition, this.context.mainCamera); } }
- Add: Default environment lighting. If you don't configure any environment-image needle engine will now create a default scene to light your objects. Previously the scene was just black when the loaded model didn't contain any lighting information.
- Add: SyncedTransform does now also sync scale changes
- Add: SyncedTransform
freeOwnership()
method - Add: ReflectionProbe bounding box intersection check to automatically apply reflections to object's in a specific area (handled by the Renderer component)
- Add:
devicePixelRatio
option on Needle Context. This option controls the window.devicePixelRatio set on the renderer by Needle Engine (defaultauto
). It can be set tomanual
to disable this behaviour or a custom number which will then be set on the renderer or composer.
Fixed
- Fix: Implicit camera did not automatically set to skybox when using
background-image
. E.g. `<needle-engine background-image="<url>"> - Fix: Tonemapping falsely set tonemappingEsposure to undefined causing a black screen
- Fix:
background-color
attribute was not always applied. E.g.<needle-engine background-color="#ff3333">
- Fix:
screenshot()
checks if XR is presenting - Fix: Issue where MeshBVH worker import breaks for projects where the needle-engine vite plugins are not added to the plugins list
- Fix: SceneSwitcher regression with
Object3D
objects in scenes array - Fix: SceneSwitcher preload was not using three.js FileLoader to re-use three's caching system
- Fix: GroundProjection regression where background blurriness was hardcoded
- Fix: RenderTexture regression where deserialization was not properly handled anymore
- Fix: OrbitControls regression where forward direction in
setCameraAndLookTarget
was inverted - Fix: Physics bug where negative box collider scales were not correctly handled in all cases causing Rapier to break
- Fix: UI instantiate bug where three-mesh-ui
clone
method was not working and UI that was already in the scene could not be duplicated because of that. - Fix: Vite license plugin not waiting for the CLI process to start
- Fix: Vite improve license checks in CI environments (e.g. when running via a Github Action).
- Fix: Vite plugins for running in CI environment
- Fix: Vite
manualChunks
are not defined whenpreserveModules
is set to true
Changed
- Change: License check aborts now faster instead of retrying when connection is actively refused
- Change: OrbitControls
autoTarget
does now automatically update the look at target after panning and not when rotating the camera (previously the target would be updated after any input but this resultet in undesireable behaviour when rotating around objects) - Change: When no background-color is defined by either the loaded scene or by a
background-color
attribute then the default scene background color respects the user's accessibility setting forprefer-dark
orprefer-light
. This means that the background color will be set to a default light or dark value. - Change: Scene background color or image set on
<needle-engine>
are not overridden anymore by the camera component. - Change: Hide Needle logo automatically when using Needle Engine with a license
[4.4.0-beta.9] - 2025-04-07
- Add:
<needle-engine background-color="#ffdddd55">
does now support transparency. For example:rgba(255, 255, 100, .5)
or#ffdddd99
ortransparent
are valid values. - Add: SyncedTransform
freeOwnership()
method - Add: ReflectionProbe does now check boundingbox intersection
- Add:
devicePixelRatio
option on Needle Context. This option controls the window.devicePixelRatio set on the renderer by Needle Engine (defaultauto
). It can be set tomanual
to disable this behaviour or a custom number which will then be set on the renderer or composer. - Change: Scene background color or image set on
<needle-engine>
are not overridden anymore by the camera component. - Change: Hide Needle logo automatically when using Needle Engine with a license
- Fix: Improve license checks in CI environments (e.g. when running via a Github Action).
- Fix: Vite plugins for running in CI environment
- Fix: Vite
manualChunks
are not defined whenpreserveModules
is set to true - Fix:
screenshot()
checks if XR is presenting - Fix: Issue where MeshBVH worker import breaks for projects where the needle-engine vite plugins are not added to the plugins list
- Fix: Vite license plugin not waiting for the CLI process to start
[4.4.0-beta] - 2025-03-28
- Add:
ObjectUtils.createPrimitive()
now supports scale as array
e.g.ObjectUtils.createPrimitive("Cube", { scale: [1, .25, 1] } );
- Add: Input
getGamepad(index?:number)
function to query a connected gamepad. Example:this.context.input.getGamepad()
Add:
lookAtScreenPoint()
function which allows 3D object to look at points in 2D screen coordinates (e.g. your mouse position).
Example Component that makes the object look at the mouseimport { Behaviour, lookAtScreenPoint } from "@needle-tools/engine"; export class LookAtMouse extends Behaviour { update() { lookAtScreenPoint(this.gameObject, this.context.input.mousePosition, this.context.mainCamera); } }
- Add: SyncedTransform does now also sync scale changes
- Add: Default environment lighting. If you don't configure any environment-image needle engine will now create a default scene to light your objects. Previously the scene was just black when the loaded model didn't contain any lighting information.
- Add: The
contactshadows
attribute now allows you to specify a factor for controlling the darkness/lightness. E.g.<needle-engine contactshadows="1">
will make the shadows appear darker vs.<needle-engine contactshadows=".2">
will make the contact shadow appear lighter. - Fix: Implicit camera did not automatically set to skybox when using
background-image
. E.g.<needle-engine background-image="<url>">
- Fix: Tonemapping falsely set tonemappingEsposure to undefined causing a black screen
- Fix:
background-color
attribute was not always applied. E.g.<needle-engine background-color="#ff3333">
- Change: License check aborts now faster instead of retrying when connection is actively refused
- Change: OrbitControls
autoTarget
does now automatically update the look at target after panning and not when rotating the camera (previously the target would be updated after any input but this resultet in undesireable behaviour when rotating around objects) - Change: When no background-color is defined by either the loaded scene or by a
background-color
attribute then the default scene background color respects the user's accessibility setting forprefer-dark
orprefer-light
. This means that the background color will be set to a default light or dark value.
[4.3.2] - 2025-03-20
Added
- Documentation for
Gizmos
API this.context.time.fps
returning the FPS for the current frame (for a more stable FPS valuesmoothedFps
can be used)
Removed
- Vite license plugin check does not support Node 16 anymore
Changes
- Improve Vite preload link injection into HTML head
- The PostprocessingManager component does now expose a
multisampling
property which is set to"auto"
by default. By settingmultisampling
to a number it will force postprocessing to the configured samples. - Downloading of
<needle-engine>
attributes forskybox-image
andenvironment-image
does now start earlier. Previously it would only start loading the HDRi or EXR images after the root glTF file was finished loading. Now it will start downloading earlier which improves the time until the scene is ready to be displayed.
Fixed
- Vite dependency-watcher plugin warning
- Vite license check plugin is now using the latest Needle CLI version
- Browser cache busting issue related to loading the root scene where range requests (e.g. when download urls without a file extension). This caused Chrome to remove files from the disc cache causing a re-download
- Three.js core postprocessing effects support
- Loading glTF files without any components (e.g. when directly downloaded from Sketchfab) was causing Needle Engine to falsely keep a reference to the loaded glTF structure.
- Instancing issue where instancing did sometimes renderer wrong geometry when many objects where removed and added again and multiple different geometries were batched together. This was caused by a bug in the internal bucketing mechanism and has now been removed since it's not necessary anymore.
[4.3.2-beta.5] - 2025-03-20
- Change: Improve Vite preload link injection into HTML head
- Fix: Vite dependency-watcher plugin warning
[4.3.2-beta.4] - 2025-03-19
- Fix: Start loading earlier for
skybox-image
andenvironment-image
when configured in<needle-engine>
web component. Previously it would only start loading the HDRi or EXR images after the root glTF file was finished loading. Now it will start downloading earlier which improves the time until the scene is ready to be displayed. - Fix: Update vite license check using the latest CLI version
- Fix: Issue related to loading the root scene where range requests (e.g. when download urls without a file extension) caused Chrome to remove previously full downloads to be removed from disc cache
- Remove: Vite license check does not support Node 16 anymore
[4.3.2-beta.3] - 2025-03-18
- Fix: Support for three.js core postprocessing effects
[4.3.2-beta.2] - 2025-03-18
- Add: Documentation for
Gizmos
API
[4.3.2-beta.1] - 2025-03-17
- Fix: Bug when loading glTF files without any components where a reference to the loaded glTF structre was kept in memory causing the memory to not be freed
[4.3.2-beta] - 2025-03-14
- Add:
this.context.time.fps
returning the FPS for the current frame (for a more stable FPS valuesmoothedFps
can be used) - Change: The PostprocessingManager component does now expose a
multisampling
property which is set to"auto"
by default. By settingmultisampling
to a number it will force postprocessing to the configured samples. - Fix: Issue where instancing with multiple different geometries being batched together did sometimes be cause wrong rendering when many objects where removed and added again. This was caused by a bug in the internal bucketing mechanism which is not necessary anymore with the new BatchedMesh version.
[4.3.1] - 2025-03-14
- Add: Expose lifecylcle hooks in
Needle
global scope for usage in commonjs or without a bundler. For example this allows to subscribe to the update event withNeedle.onUpdate(ctx => console.log(ctx.time.time))
. - Fix: OrbitControls micro-movement after a pointer event was already used. For example previously when using DragControls and starting to drag an object the camera would still move slightly before stopping during drag. This is not the case anymore now and the camera does not move anymore during interaction with other objects.
- Fix: Canvas UI render settings not being applied in one rare case causing a worldspace image not being set to double sided rendering.
[4.3.0] - 2025-03-12
- Bump version to 4.3.0
[4.3.0-alpha.6] - 2025-03-11
- Change: Postprocessing effects in shared volume (when exported from Unity) are now added to the Volume gameObject during initialization
- Fix: improve Rigidbody physics poststep / smoothed velocity
[4.3.0-alpha.5] - 2025-03-06
- Add: more jsdoc comments to
Graphics.textureToCanvas
andMathf
methods - Change: AudioSource tries to get AudioListener from it's own object first before it checks camera and scene
- Fix: SpriteRenderer issue where runtime instantiate and setting Sprite would in some cases not update the texture on all instances
- Fix: Issue in
Graphics.copyTexture
where the blit material was not yet created
[4.3.0-alpha.4] - 2025-03-06
- Revert last AudioSource change
[4.3.0-alpha.3] - 2025-03-06
- Add: WebARSessionRoot
arScale
can now be changed while in AR to modify or reset the scale. - Change: AudioSource now creates it's own AudioListener instead of using one from the camera.
[4.3.0-alpha.1] - 2025-03-03
- Add: More API documentation for various core components
[4.3.0-alpha] - 2025-02-28
- Add: SceneSwitcher
sceneLoadingStart
andsceneLoadingProgress
events - Add: AssetReference
urlName
property - Fix: SceneSwitcher preloading if configured to not load scene at startup
- Fix: UI issue where text components were not correctly handled by the EventSystem for the
hasActiveUI
property
[4.2.5] - 2025-02-27
- Fix: keep FBX vertex color assignment when postprocessing materials
- Fix: ContactShadow flicker when point materials are in the scene
- Fix: OrbitControls keep
autoTarget
enabled infitCamera
- Fix: Static
BoxCollider.add
now correctly calculates bounding box - Fix: InputField
onValueChanged
event is now invoked after the new value has been assigned - Change:
getBoundingBox
now also takes a single object as well as an array of objects - Change: DropListener now exposes
DropListenerOnDropArguments
type
[4.2.4] - 2025-02-21
- Add: OrbitControls set to
autoTarget
now automatically updates rotation target in onPointerUp - Fix: USDZ add safeguard against potential issue in bone sorting
- Fix: USDZ remove extra check for bone type that might prevent bone structure ordering
- Fix: Static method for
BoxCollider.add
not correctly calculating object bounds when object is rotated - Fix: Ignore fullscreen plane for WebXR auto center
- Fix: Issue in FBXLoader where loading FBX files with out-of-bounds material assignments lead to incorrect geometry groups and subsequent errors
- Change: Improve input typings for
isKeyDown
,isKeyUp
andisKeyPressed
[4.2.3] - 2025-02-20
- Add: InputField setter for
text
- Fix: OrbitControls setCameraAndLookTarget
- Fix: Issue where updating KTX transcoder was not being correctly applied for offline usage
[4.2.2] - 2025-02-18
- Fix: WebXRImageTracking iOS size calculation due to change by Apple
- Fix: USDZ AudioSource not generating code for
playOnAwake
anymore - Fix: Lightmap and environment ligthing not working correctly anymore due to change in three v163
- Change: EventSystem simplification - it is now always created once in scene root, this removes the requirement of ObjectRaycasters in the scene which simplifies the usage of component input event methods like
onPointerClick
(which previously required users to ensure there are ObjectRaycasters in the parent hierarchy)
[4.2.0] - 2025-02-17
- Change: remove MXInk fallback codepath for pre-release OS versions
- Change: don't request "hand-tracking" on VisionOS devices unless explicit custom hand models are requested
- Fix: occluder generation in Plane/Mesh tracking should not be enforced when we have a data template
[4.1.1] - 2025-02-14
- Fix: ParticleSystem regression where particles using a transparent PBR shader are not being rendered as transparent
[4.1.0] - 2025-02-13
- Fix: Issue in WebXR component where disabling
usePlacementReticle
would not apply other settings to already existing WebARSessionRoot components in the scene
[4.1.0-beta.9] - 2025-02-12
- Add:
Object3D.hideFlags
property and ContactShadows sets generated shadow object toDontExport
to be excluded in runtime glTF export - Fix: ContactShadows
auto()
does now check if the scene already contains contact shadows
[4.1.0-beta.8] - 2025-02-12
- Fix: Handle
<needle-menu>
web component being present anywhere in the document already - Fix: Allow nextjs based projects to be deployed to Needle Cloud
- Change:
instantiate()
can now take an AssetReference as an argument as well - Change: Improve
context.input.addEventListener
function typing
[4.1.0-beta.6] - 2025-02-05
- Fix: issue with
parseSync
for loading a glTF file is a file path
[4.1.0-beta.5] - 2025-02-04
- Fix: Physics issue with mesh colliders where colliders were sometimes created with the wrong size depending on the users network speed. This was due to the change of lazily loading the physics engine in Needle Engine 4.
- Fix: Add workaround for a regression in the particle system where PBR materials would sometimes render with a wrong texture. Issue
- Fix: ParticleSystem gradients set to
Random Color
- Fix: import WebGLNodes to ensure nodes actually run
- Change: Physics engine
addMeshCollider
scale argument is now optional and treated as scale applied to the object's world scale when creating the collider.
[4.1.0-beta.4] - 2025-02-03
- Add: OrbitControls support for orthographic camera
- Fix: Orthographic camera aspect ratio
[4.1.0-beta.3] - 2025-01-30
- Fix: issue where networked values with the
@syncField
decorator would not be updated correctly on instances spawned at runtime (e.g. via PlayerSync).
[4.1.0-beta.2] - 2025-01-29
- Fix: VideoPlayer screenspace mode colorspace
- Fix: XRRig
setAsActiveRig()
now ensures the given rig has the highest priority. Previously it was possibly immediately overidden again if another XRRig with a higher priority was active in the scene. - Change: SpatialTrigger EventList events are now invoked without additional parameters. They did previously take a reference to the SpatialTriggerReceiver and active SpatialTrigger. If this information is important the SpatialTriggerReceiver can be saved when subscribing to the event and the trigger can be accessed using the
triggerReceiver.currentIntersected
array. - Change: TransformGizmo now exposes the underlying three.js TransformGizmo via a new
control
property. - Change: GroundProjection now uses the
scene.background
instead ofscene.environment
[4.1.0-beta.1] - 2025-01-29
- Fix: ParticleSystem custom behaviours
- Fix: OrbitControls not keeping the initial look direction if
autoTarget
was off - Fix: Invalid Rigidbody warning caused by async physics engine loading change
- Fix: SharpeningEffect
- Update gltf-progressive including a fix for loading texture LOD 0 (the highest resolution)
- Update three.quarks dependency to 0.15.6
[4.1.0-beta] - 2025-01-24
- Promote to beta
[4.1.0-alpha.14] - 2025-01-24
- Fix: glsl shader error at linear to sRGB conversion
[4.1.0-alpha.13] - 2025-01-23
- Update three.js dependency to fix issue in WebXRManager
[4.1.0-alpha.12] - 2025-01-21
- Change: Much improved initial loading speed making Needle Engine websites load up to 1000 ms faster.
Improved Needle Engine website lighthouse scores for all Vite based projects.
Improved bundle chunking and loading for better lighthouse scores.
Core bundles and entrypoint glTF files are not loaded as soon as the web document is ready. - Change: Needle Engine does now lazily import dependencies for
rapier
andpostprocessing
to reduce download and startup size.
This means that projects that don't use any collider or rigidbody components will not load the physics and postprocessing modules. Modules can be loaded at any time once they're need by e.g. components in the scene.
[4.1.0-alpha.11] - 2025-01-17
- Remove: legacy Flycontrols component
- Fix: MeshCollider contact normal direction
[4.1.0-alpha.10] - 2025-01-17
- Fix: Instanced meshes bug where sometimes an vertex count increase due to mesh compression was not handled correctly
[4.1.0-alpha.9] - 2025-01-15
- Fix: Better AgX and Neutral tonemapping
[4.1.0-alpha.8] - 2025-01-14
- Update three.js to r169
- Update dependencies: three-mesh-bvh to 0.8.3, three-quarks to 0.15.5, postprocessing to 6.36.6, n8ao to 1.9.3
- Fix: AR screenshot bug where the second screenshot would not look correct
- Fix: nextjs support
[4.1.0-alpha.5] - 2025-01-13
- Fix: Issue where MeshCollider with InterleavedBufferAttributes were not created correctly
- Fix: multi-object mesh collider handling for Groups and add warning for remaining case that are not supported
- Fix: transparency trimming for screenshot should happen before screenshot is returned
- Change: Reduced mesh LOD vertex reduction to improve quality of lowest LOD
- Update build pipeline to latest 2.7 alpha
- Update rapier dependency to 0.14.0
[4.1.0-alpha.4] - 2025-01-10
- Add: SceneSwitcher methods for
unload()
andreload()
the currently loaded scene
[4.1.0-alpha.1] - 2025-01-09
- Add: Support for loading KTX2 textures as
environment-image
andbackground-image
(e.g.<needle-engine background-image="my-skybox.ktx2">
) - Fix: Issue where raycasting was not using acceleration structures and instead falling back to slow raycasting. This release greatly improves raycasting performance
[4.1.0-alpha] - 2025-01-08
- Add: Screenshot support for AR:
To use you need to request thecamera-access
XR feature when starting a new XR session.
For that you can either simply add the WebARCameraBackground component to your scene
or add the feature in theNeedleXRSession.onSessionRequestStart
event hook.
[4.0.4-alpha] - 2025-01-02
- Fix: Detecting OBJ files starting with
mtllib
or content-type headermodel/obj
- Fix: Issue where
screenshot()
method with custom camera and postprocessing didn't work - Update gltf-progressive package to load higher texture LODs by default
[4.0.3-alpha] - 2014-12-20
- Add: OBJLoader now automatically loads mtl files
- Add: OBJLoader materials are now fixed like FBX materials
[4.0.2-alpha] - 2024-12-12
- Add: Support for custom scripts on WebXR custom hands
- Fix: OrbitControls should not listen to window.body for key events
[4.0.1-alpha] - 2024-12-11
- Fix: Objects spawned with
syncedInstantiate
should automatically be removed when disconnecting from the networking room - Fix: Issue where objects rendered with instancing enabled were not visible in screenshots
[4.0.0-alpha] - 2024-12-09
- Add: Builds can now be compressed on Needle Cloud instead of locally. Set the
NEEDLE_CLOUD_TOKEN
environment variable to your Cloud access token to enable this. This allows running compression in CI build pipelines, for example in a Github Action. Needle Cloud access tokens can be obtained on https://cloud.needle.tools/team. - Add:
DropListener
now optionally supports networking whenallowNetworking
is on. Dropped files will be network-synced if the file size does not exceed a certain size (50 MB for projects on paid plans; 5 MB for projects free plans). - Fix: Previously, when changing a
@syncField
property, only the last changed property was synchronized to the server. This is now fixed. Note that this is a breaking change: previously networked server state with the@syncField
attribute in Needle Engine 3.x projects will not be loaded in Needle Engine 4.0. - Change:
EventList
now takes a generic type code hints when usingmyEventList.addEventListener(...)
e.g.new EventList<string>()
- Change: The default networking server is now located at
networking.needle.tools
- Change: The
DropListener
API has changed - Change: OrbitControls
useKeys
is now false by default since the underlying three.js OrbitControls incorrectly capture ALL keyboard events on the page. - Change: Loading speed improvements and improved Lighthouse score
- Change: md5 hashing results are now S3-compatible
[3.51.1] - 2024-12-09
- Fix: DragControls snap to surface setting should use world normal
- Fix: Needle Menu missing focus-visible for overflow menu button
- Fix: Needle Menu :focus-visible on menu elements barely being visible
- Fix: edge case where we still showed the QR code when only the WebXR component is on and we're on mobile
- Fix: detect URL content format using "Content-Type" header as well
- Fix: double quotes in USDZ displayName need to be escaped
- Fix: don't fetch when we already know fetch won't work due to cross-origin isolation
- Change: for QuickLook, use "View in AR" instead of "Download for AR" even for cases where we're not sure if the device actually supports QuickLook – rel="ar" is not reliable
- Change: disable Needle logo being clickable during loading because users click it accidentally and then they're lost
- Docs: add @group Component to components since TypeDoc doesn't do inheritance as expected
[3.51.0] - 2024-11-28
- Add: API docs for networking methods
- Add: USDZ export automatically creates "hold" animations now to prevent animation snapping
- Add: USDZ export now supports ShadowCatcher component and materials
- Add: USDZ export now contains more meta-info about exported animations
- Add: Log warnings on USDZ export for overlapping animation roots so hierarchy can be manually adjusted
- Add: Use ?debugusdzbehaviours to log more information and Behaviour Graphs during USDZ export. A graph in mermaid format will be logged into the console, which can be pasted into https://massive-mermaid.glitch.me or other viewers.
- Fix: USDZ animation rounding error edge cases for long-running animations (>20.000 frames)
- Fix: USDZ export only adds physics extension now if required to work around QuickLook issue (FB15925487) for animated objects with physics components
- Fix: USDZ exporter adds rest poses properly again
- Fix: Developer console is now more robust against network errors, e.g. offline PWA usage
- Fix: Canvas parent element size now matches the canvas size
[3.50.0-beta] - 2024-10-28
- Add: PWA plugin now works with gzip compression
- Add: Asynchronous overload for
screenshot2
method that returns aPromise<Blob>
- Add: USDZExporter supports
animator.minMaxOffsetNormalized
andanimation.minMaxOffsetNormalized
for QuickLook now - Add: USDZExporter vertex color export. Use unlit white materials with only vertex colors to export as
displayColor
without a material. This is supported on iOS 18+ and visionOS 2+. - Fix: automatically instanced/batched meshes are not exported twice in USDZ anymore.
- Change: "Open in QuickLook" is now "View in AR" to be more consistent
- Change: Deprecate device utilities outside the
DeviceUtilities
namespace, use the methods directly from the namespace instead (e.g.DeviceUtilities.isSafari()
) - Change: legacy
Object3D.transform
wrapper that returns itself
[3.49.0-beta] - 2024-10-21
- Add: More jsdoc code API documentation
- Add:
OrbitControls
can now lerp to a target field of view - Add: Timeline animation tracks now can have 0..1 weights
- Add:
getBoundingBox
can now optionally respect a layer mask for determining which objects to include - Fix: Regression with animations not playing on instantiated objects
- Fix:
DeleteBox
usesgetBoundingBox
now instead of a custom implementation - Fix:
Duplicatable
now correctly checks for its target object already being deleted - Fix: vite plugins use vite 5.x API (and are still compatible with 4.x)
- Fix: MX Ink support for QuestOS v71+
- Fix: Some logs where incorrectly not behind debug flags
- Fix: Don't export cameras in USDZ when requesting QuickLook-compatible assets
- Fix: Exclude childs of
ContactShadows
andGroundProjectedEnv
from USDZ export - Fix: Custom hand models should not automatically become occluders in Passthrough XR
- Fix: Avoid potential exception in
GameObject.getAllComponents(...)
- Fix: Prevent exception in
DragControls
when dragged object or controller disappear mid-drag - Fix: Improve
EventList
usage from pure JS - Fix: Regression in
OrbitControls.autoFit
that resulted in a wrong fit in some cases - Fix: Improve order of batch validation for automatic instancing when some meshes have different attributes
- Change: Needle Menu styles are more consistent now
- Change: Change casing on
isiPad()
, deprecateisIPad()
[3.48.3] - 2024-09-30
- Add:
NeedleXRSession.start("ar")
support which will startimmersive-ar
on supported devices or export an interactive USDZ on iOS devices - Add: nextjs alias plugin
- Fix: Voip on iOS with connected bluetooth device should select the bluetooth device
[3.48.1] - 2024-09-24
- Add:
<needle-engine>
attributes forbackground-color
,background-blurriness
andbackground-image
- Fix: Loading of OBJ files exported from ZBrush
- Fix: Loading of FBX files with empty vertex color attributes
- Fix: Unregister mixer in Animation component
- Fix: Needle Menu CSS improvements when using custom html elements inside the menu
- Fix: Needle Menu top positioning now takes CSS safe area into account
- Fix: Balloon message styles adjusted
- Fix: ContactShadows auto fit calculation
- Change: Exit AR button style aligned with Needle Menu
[3.48.0] - 2024-09-19
- Add: Logitech MX Ink controller support
- Add: Quest menu button now shows Needle Menu in immersive-ar and immersive-vr
- Fix: Improved USDZ code generation regarding transformations/matrices
- Fix: USDZ multi-channel attribute export
- Fix: Minor jsdoc comment error
- Fix: Postprocessing Volume
removeEffect
does now also remove effects from assignedsharedProfile
- Internal: Warn if Rigidbody physics object could not be created due to a missing collider
[3.47.8] - 2024-09-10
- Fix: LookAt orientation fixed when both
copyRotation
andkeepUp
are active- If you have both options enabled and rely on the previous behaviour, toggle
invertForward
to get the same result as before.
- If you have both options enabled and rely on the previous behaviour, toggle
- Fix: USDZExporter correctly applying
arScale
again - Fix: Issue with Needle Menu buttons preventing AR or VR to start in certain cases/devices
- Fix: BatchedMesh/Instancing error after adding/removing many instances and growing the batched mesh buffers where internal state was not properly reset causing an error
- Change: Make Needle Menu text not selectable
- Change:
NeedleXRSession.start("immersive-ar")
now exports to USDZ when called on iOS (experimental) - Change: Needle Menu foldout is now closed when entering XR
- Change: Remove
Quit XR
button for screen based AR experiences (in favor of the X icon at the top right corner) - Change: Needle Menu foldout button has now an larger click area to avoid accidental clicks on the Needle logo
- Change: LookAt
copyTargetRotation
is now disabled automatically during VR/passthrough AR session
[3.47.7] - 2024-09-04
- Fix: Support loading FBX files in ASCII format
- Fix: Support loading OBJ files starting with
# Alias OBJ
- Change: Needle Menu buttons height adjusted for mobile
[3.47.6] - 2024-09-02
- Fix: USDZ animation interpolation. We're now using timesamples for
translation
,orientation
andscale
separately. This fixes an issue with animation optimization (optimization removing redundant keyframes) to just 2 keyframes where matrix timesamples would produce unexpected interpolations - Change: inline mesh bvh worker
[3.47.6-beta] - 2024-09-02
- Add:
Mathf.random()
can now also accept an array to randomly select an element - Add: AudioSource
pitch
property - Add: SpriteRenderer
addSprite
method - Add: SpriteRenderer
texture
setter to change the texture of the currently rendered sprite - Fix: SpriteRenderer
sprite
setter - Fix: OrbitControls double click to focus should not focus if the click was already used (e.g. by a button)
- Fix: XR
screenshot()
support - Fix: DragControls now work with physical objects again e.g. Rigidbodies that react to gravity
[3.47.5-beta.1] - 2024-08-28
- Add:
screenshot
option to output a texture - Fix:
screenshot
method when using a camera with a RenderTexture assigned - Fix:
ObjectUtils.createPrimitive
option linting - Change: Addressables
instantiate
method now returns Object3D type
[3.47.5-beta] - 2024-08-27
- Fix: Shader warmup when loading glTF file containing only materials (no scenes)
- Fix: OrbitControls
autoTarget
option causingsetLookTargetPosition
to be overriden during the first frame - Fix: Compressed RenderTexture not being updated on objects in the scene
- Fix: Physics mesh BVH generation on worker caused raycasts during processing to not work until the BVH was ready
[3.47.4-beta.3] - 2024-08-26
- Fix: three.js changing environment texture while in XR
- Fix: three.js OrbitControls zoom damping
- Fix: GroundProjectedEnv error when setting
height
as part of init properties as part ofaddComponent(..., { height: 4 })
- Fix: OrbitControls
minZoom
andmaxZoom
should be applied during update - Change: Camera
backgroundBlurriness
andbackgroundIntensity
should be undefined by default
[3.47.4-beta.1] - 2024-08-24
- Add: Support loading of glTF files in
<needle-engine src="...">
that don't contain any objects/scenes but just materials. These glTF files will be rendered with a shaderball - Fix: Regression in ParticleSystem trail rendering where
mode
was not set correctly - Change: OrbitControls
fitCamera
can now also take a single object as a first parameter
[3.47.4-beta] - 2024-08-17
- Add: OrbitControls
fitCamera
method overload which can directly take an options parameter. E.g. it can be invoked withfitCamera({ immediate: false })
- Fix: Lifecycle hooks like
onStart
andonInitialized
are now properly called again for new subscribers - Fix: Regression in raycasting with multi-material objects
- Fix:
<needle-engine>
canvas highlighting with touch on iOS - Change: The WebGL context is now automatically restored when lost
[3.47.3-beta.2] - 2024-08-14
- Fix: Issue where automatic camera change stopped working
- Fix:
screenshot
should update the camera aspect ratio before rendering - Fix: Physics raycasts do now run basic geometry validation
[3.47.3-beta] - 2024-08-13
- Add: Improved ParticleSystem MinMaxCurve and MinMaxGradient types with utility methods (
constant
,betweenTwoColors
/setConstant
,setMinMaxConstant
,setCurve
) - Add: preliminary support for MX Ink pens
- Add: NeedleXRController
pinchPosition
getter for hand tracking - Add: SceneSwitcher add
sceneLoaded
Eventlist - Add: DragControls static
CurrentlySelected
getter to access all currently active DragControls components - Fix: Gizmo label offset
- Fix: XRControllerFollow on VisionOS with hand tracking
- Fix: Vision OS depth buffer workaround (FB14720123)
- Fix: emulate grip space for hands that don't have grip space
- Fix:
screenshot2
should use passed in camera - Fix: nextjs plugin fix for error caused by mesh bvh worker integration
- Fix:
input.mouseDoubleClick
getter - Fix: EventList invocation with custom arguments (e.g.
myEvent.invoke("test")
)
[3.47.2-beta.3] - 2024-08-08
- Fix: Properly resolve EventList calls when using
instantiate
to the new instances - Fix: WebXR simulator hand gesture calculation
- Fix: WebXR desktop preview with postprocessing enabled
- Fix: WebXR input
click
detection
[3.47.2-beta.2] - 2024-08-06
- Add: Type definitions for Object3D Needle Engine extension methods like
addComponent
orworldPosition
- Add: ObjectUtils
createText
- Add: static
BoxCollider.add
method - Add: Experimental util method
PlayerSync.setupFrom
to easily setup networked player representations - Add: ContactShadows
minSize
property - Fix: ShadowCatcher should set
receiveShadow
to true - Fix: Animation
play
should restart the animation if it's at the end - Fix: ContactShadows should ignore Line materials
- Fix: SyncedRoom component is easier to setup from code
- Change: Physics collider center x should not be flipped. Instead the exporters need to ensure the correct space
[3.47.1-beta] - 2024-08-05
- Add: Voip microphone button option to allow users to mute and unmute themselves
- Add: More jsdoc documentation
- Fix: Improved audio and voicechat streams when using the Voip component to more reliably play audio and connect to all users in the room
- Fix: Prevent browsers translation of HTML icons
- Fix: Issue with Application audio playback permissions check
- Fix: SpriteRenderer setting
renderOrder
must be rounded to an integer
[3.47.0-beta.3] - 2024-08-01
- Add: NeedleXRController
emitPointerDown
,emitPointerUp
andemitPointerMove
properties to control if the controller should emit pointer events to the Needle Engine Input System - Add: NeedleXRController
pointerMoveDistanceThreshold
andpointerMoveAngleThreshold
for changing when controllerpointermove
events are emitted. These values can be set to 0 to emit events every frame or larger values to reduce the number of events emitted. - Add: Support to disable SpatialGrabRaycaster by setting the static property
SpatialGrabRaycaster.allow = false
- Fix: Vite issue where mesh bvh worker was not found in local dev server
- Fix: Mesh BVH should not raycast on meshes that don't have a position attribute
- Change: EventSystem now respects used events. This means if you subscribe to
pointerdown/pointermove/pointerup
with the queue set to a negative value and callevent.use()
orevent.preventDefault()
the EventSystem will ignore the event.
[3.47.0-beta] - 2024-07-31
- Add: accelerated raycasting using three-mesh-bvh. All calls to
physics.raycast()
now use a spatial grid solution under the hood to improve raycasting performance. (This can be disabled in the raycasting options by settinguseAcceleratedRaycast: false
) - Add:
physics.engine.raycast
methods now have an option to ignore theignoreRaycastLayer
on the Object3D (the three.js layer 2 is used to exclude objects from raycasting. This means settinglayers.set(2)
is equivalent to "Do not raycast on this object") - Minor UI performance improvements
[3.46.1-beta.4] - 2024-07-30
- Add: SpriteRenderer
toneMapped
option - Fix: minor iOS color fix in Needle Menu CSS
- Change: SyncedRoom auto-generated room name is now numbers only by default
[3.46.1-beta.3] - 2024-07-29
- Fix: Voip should stop audio sending and receiving when user disconnects from a networked room
- Fix: WebXR avatar head being offset when user is not centered in rig space
[3.46.1-beta.2] - 2024-07-29
- Fix: WebXR teleport and rotation now takes user position in rig space into account. This means when teleporting the user is now placed at the expected ray target point and when rotating the user is rotated around himself as expected (and the position stays the same)
- Fix: Animation component
fadeDuration
didn't fade out previously playing animations but instead stop immediately
[3.46.1-beta.1] - 2024-07-29
- WebXR performance improvements
- Add: Needle Menu foldout submenu for smaller screen sizes. The compact Needle Menu does now have a submenu which can be opened by clicking the 3 dots button at the right side. This improves the menu layout for smaller screen sizes.
- Fix: ContactShadows performance improvements
- Fix: Gizmo label performance improvements
[3.46.1-beta] - 2024-07-26
- Add:
isMacOS
utility method - Improve WebXR controller and hand raycasting and line rendering. Hide rays while the primary pointer i active.
- Improve DragControls performance
- Fix: Animation
play
should resume paused animations instead of restarting - Fix: PWA plugin now automatically disables gzip compression. Improved error message if there's missing configuration
- Fix: SyncedRoom
joinRoom
button not creating a new room if the room url parameter was present but empty - Change: Better error message for circular imports causing scripts to not work
- Change: On OSX and MacOS use power-preference
default
for improved performance (webkit issue)
[3.46.0-beta.5] - 2024-07-23
- Add: WebXR teleport using right hand pinch
- Add: WebXR
Quit XR
button - Add: SceneSwitcher
useSceneBackground
option to apply background skybox from loaded scene (if it has any) - Add: SceneSwitcher option to add Needle menu buttons
- Add:
Gizmos.DrawCircle
- Fix: issue where
depth-sensing
would cause camera near and far planes to have invalid values causing the scene to not render properly anymore when exiting AR - Fix: DropListener should not prevent propagation. Otherwise e.g. RemoteSkybox and DropListener would not work together
- Fix: DropListener
placeOnHit
should not raycast on just dropped object - Fix: issue where onPointerEnter is only invoked once if onPointerExit isnt declared
- Fix: WebXRController hits rendering on UI elements
- Fix: WebXRController rays are always visible when enabled but with a low opacity if no object was hit
- Change: WebXR
autoPlace
does now only place on flat surfaces with a small time threshold - Change: DragControls
SnapToSurface
now usesDynamicViewAngle
if no object was hit - Change: Needle Menu active and focus button CSS
[3.46.0-beta.1] - 2024-07-23
- Add: MeshTracking (WebXRPlaneTracking) is by default now generating occluder meshes for detected planes and meshes
- Fix: Animation
playOnAwake
regression - Fix: ContactShadows ignoring GroundProjectedEnv sphere, gizmos and depth only objects (e.g. occluder spheres from mesh tracking)
- Fix: Ensure Sprites when exporting to USDZ
- Change: Settings on WebARSessionRoot are now all moved to the WebXR component
- Update three.js dependency to 0.162.6
[3.46.0-beta] - 2024-07-22
- WebXR performance improvements for immersive-ar sessions as well as controller and hand tracking
- Add: GroundProjection can now blend with the AR environment using the
blending
property - Change: WebXR controller hits now only use object bounds
[3.45.2-beta.5] - 2024-07-22
- Add: AudioSource properties for
time
,time01
(normalized time),duration
- Add: Animation properties for
time
and method forpause()
- Add: WebXRPlaneTracking
occluder
property to automatically generate occluder meshes for detected meshes - Change: Hide GroundProjection in immersive-ar
- Update three.js dependency to 0.162.5
[3.45.2-beta.4] - 2024-07-19
- Fix: DragControls
Snap To Surface
when starting to drag - Change: Minimal increase of close distance for SpatialGrab in WebXR
[3.45.2-beta.3] - 2024-07-18
- Add: Support for immersive-ar
unbounded
session for unlimited passthrough experiences (enabled by default).
This is currently an experimental feature in the Quest browser. To enable it go tochrome://flags
and checkWebXR experiments
, then restart the Browser. The next time you start an immersive-ar session on quest the WebXR experience will run without guardian boundaries. - Add: NEPointerEvent
isSpatial
getter to easily determine if an input event was generated by a spatial device - Fix: Raycast handle null or empty objects in targets array
[3.45.2-beta.1] - 2024-07-17
- Add: Object
static:true
does now disablematrixAutoUpdate
- Fix: Animation component
play()
issue where previous animations were not always stopped/faded out - Fix: SceneSwitcher regression causing scenes to not be unloaded
- Change: pointer events are now captured and continue to work when they hover over other HTML elements (if started in the 3D scene)
[3.45.1-beta.7] - 2024-07-16
- Add: vite plugin that ensures that the npm folder exists
- Fix: Issue where completely empty scene without explicit XR rig caused invalid placement/rendering in VR
- Change: Disable touch-action on
<needle-engine>
element
[3.45.1-beta.5] - 2024-07-16
- Update gltf-progressive to version 1.2.5
[3.45.1-beta.3] - 2024-07-15
- Add: GroundProjection blurriness set from
scene.backgroundBlurriness
- Fix:
getTempVector
andgetTempQuaternion
set to 0,0,0 by default to return consistent values when called without parameters
[3.45.1-beta.1] - 2024-07-13
- Add: GroundProjection
autoFit
option - Fix: OrbitControls re-applying autoFit again when enabled/disabled
- Fix:
getBoundingBox
should ignore gizmos
[3.45.1-beta] - 2024-07-12
- Add: Camera
backgroundRotation
property - Add: GroundProjection environment rotation using
scene.backgroundRotation
- Fix: XRControllerModel
createHandModels
not working whencreateControllerModels
was disabled - Change: WebXR avatar does now hide local hand models when XRControllerModel models or hands are enabled
[3.45.0-beta.1] - 2024-07-11
- Add: The WebXR component now uses a static avatar from the CDN if none is assigned
[3.45.0-beta] - 2024-07-11
- Add: XRControllerFollow does now reset the object to the original pose after XR
- Fix: XRControllerFollow does now take original object scale into account
- Fix: OrbitControls autoFit now takes GroundProjection scale into account for the camera far plane
- Change: ContactShadows do now apply scale and transform to a child object so it does not modify the transform anymore of the object it was added to
- Change: GroundProjectionEnv default height to 3
- change: Increase GroundProjectionEnv resolution to 128 for smoother edges
- Change: ChangeMaterialOnClick does now change mouse cursor on hover
[3.44.6] - 2024-07-10
- Add: The default XR rig is now automatically placed to view the scene if no explicit XRRig component is found in the scene
- Add: XRControllerMovement does now allow teleportation on the current rig ground plane (if no object is hit when trying to teleport)
- Fix: XRController ray rendering should respect rig scale if the ray doesnt hit any object in the scene
- Fix: rare issue in input calculating world position from screenspace input
- Change: Voip component
autoConnect
default changed to true
[3.44.5] - 2024-07-10
- Add:
window[Needle].NeedleXRSession
- Change: WebARSessionRoot reticle without depth test for better use with depth sensing
- Change: VR default movement speed increased slightly from 1 to 1.5
- Change: VR default hit visualization adjusted to improve raycasting.
[3.44.4] - 2024-07-09
- Fix: SceneSwitcher can now activate and deactivate objects in the scene
- Fix:
XRControllerFollow
takes rig scale into account - Change: WebXR controllers do not raycast the scene for hit visualization anymore by default. To use add
XRControllerMovement
and enableshowHits
[3.44.3] - 2024-07-05
- Add: TonemappingEffect
exposure
setting to control tonemapping exposure - Fix: Animator transition for negative timescale
[3.44.1] - 2024-07-05
- Add:
instantiate
can now be invoked to clone objects without components - Fix: OrbitControls
autoTarget
andautoFit
at the start of a scene - Fix: KTX2Loader being created both by needle engine and gltf-progressive resulting in a warning
- Change: DragControls
SnapToSurface
is more snappy - Change: DragControls
SnapToSurface
drag start behaviour improved
[3.44.0] - 2024-07-04
- Add:
syncInstantiate(object, { deleteOnDisconnect:boolean })
andIModel { deleteOnDisconnect:boolean }
option to delete a networked instance in the networking storage when a user disconnects. This requires the networking server to use@needle-tools/networking@2.x
(instead of@needle-tools/needle-tiny-networking-ws
) - Fix: Improve
PlayerSync
networking, usedeleteOnDisconnect
- Fix: Update draco decoader to 1.5.7
- Fix: SharpeningEffect effect order
- Fix: SharpeningEffect alpha handling
- Fix: WebXR MeshTracking plane and mesh normals
- Fix: ChangeMaterialOnClick resolving of assigned material in certain cases
- Fix: Duplicatable + DragControls not properly networking on first duplication in cases where multiple DragControls components are nested
[3.44.0-beta.2] - 2024-07-02
- Add: Expose
AnimationUtils
- Fix: Dont apply reflection probes to unlit materials
- Fix: FBX loading can now handle multimaterial objects
- Fix: WebXR networked Avatar head position
- Fix: Needle Menu layout update is now enforced immediately when options change
- Fix: Initialize Postprocessing effects parameter when created from code
[3.44.0-beta.1] - 2024-07-01
- Add: support to use file extension for determining which loader to use to save initial header fetch
- Add: Tuned AGX tonemapping
- Fix: Sharpening effect causing color overflow
- Fix:
screenshot()
breaking transparent rendering
[3.43.0-beta.1] - 2024-06-29
- Add:
environment-image
magic names now use a lower-resolution version of the HDR/EXR image if the texture is just used for lighting - Fix: Toggle Volume component
enable
should add and remove the effects - Fix: Remove leftover log in
<needle-button>
[3.43.0-beta] - 2024-06-28
- Add: Postprocessing Sharpening effect
- Add: PostprocessingManager
addEffect
andremoveEffect
API - Fix: Error in spatial menu caused by slots
- Fix: Export of WebXRButtonFactory type
[3.42.0-beta] - 2024-06-27
- Add:
<needle-menu>
slot support - Add:
<needle-button>
with support forar
,vr
andquicklook
. For example:<needle-button ar>
creates a Needle VR button - Change: default tonemapping is now tuned AGX
[3.41.2-beta.3] - 2024-06-27
- Add: support to use file extension for determining which loader to use to save initial header fetch
- Fix: Patched neutral tonemapping issue
[3.41.2-beta] - 2024-06-25
- Add: DropListener can now take
dropArea
object to define a section of the scene that would accept the dropped file. - Add: DropListener support to fit a mesh into a defined volume (e.g. 1x1x1)
- Add: SyncedRoom option to create a share button for the view only room URL
- Fix: DragControls
SnapToSurface
option when dragged object is not a mesh / the mesh is in the child hierarchy
[3.41.1-alpha.1] - 2024-06-24
- Add:
<needle-engine tone-mapping>
attribute. Possible values arenone
,linear
,neutral
oragx
. - Change: Camera fitting near and far planes are now tighter to reduce z-fighting in some cases
[3.41.0-alpha.5] - 2024-06-22
- Add:
<needle-engine>
web component attributesenvironment-image
andskybox-image
can now be set to presets values: "studio", "blurred-skybox", "quicklook" or "quicklook-ar" - Fix: ContactShadows should capture objects on all layers
- Fix: Issue in LOD gizmo debug rendering
- Change: Use smaller icons font
[3.41.0-alpha.4] - 2024-06-19
- Add: AnimationRegistry, accessible via
this.context.animations
- Add: static AnimationUtils class
- Add:
TestSceneUtils.createComparisonScene
for quickly spinning up test scenes - Add: Menu
appendChild
can now create a button from a structured json object - Add: New
exportAsGLTF
function - Add:
<needle-engine contactshadows>
attribute - Add: Lifecycle hooks like
onStart
oronUpdate
can now be configured to only run once using the options argument. For example:onBeforeRender(ctx => { ... }, { once: true })
- Fix: Postprocessing where Tonemapping was not being applied in some cases
- Fix:
screenshot
method does now support Reflection Probe lighting - Fix: Lightmapped objects with MultiMaterial objects spamming warnings
- Change: Improve Postprocessing Bloom
- Change: Improve FBX loading
- Change: ContactShadows
autoFit
increases shadow area by factor 1 (previously 0.5) - Change: Bump three to 0.162.4 adding GLTFExporter plugin hooks and animation retargeting using
userData { name }
- Change: Bump postprocessing to ^6.35.5
- Change: Bump gltf-progressive dependency
[3.40.0-alpha.5] - 2024-06-14
- Add: start support for detecting and loading FBX files
- Fix: Camera fitting bounding box calculation where
instanceof Mesh
fails - Fix: OrbitControls background click only accept primary clicks
- Fix: Issue on Quest due to change in
isMobile
check - Internal: Deserialization of components can now resolve object if the requested type is an Object3D
[3.40.0-alpha.2] - 2024-06-12
- Add: Experimental support to load
.fbx
files via<needle-engine src>
- Change: Production build command changed - vite plugin now runs when
vite build
is invoked with--production
- e.g.vite build -- --production
. The legacy npm build script is automatically updated when the plugin runs for the first time.
[3.40.0-alpha.1] - 2024-06-10
- Fix: issue where
<needle-engine autoplay>
would not play animations - Change: "IsMobile" check because window.orientation is deprecated
- Change: USDZ move direct/indirect interaction logic to tapTrigger and add options (by default, both are allowed)
[3.40.0-alpha] - 2024-06-06
- Update gltf-progressive dependency for smarter LOD texture loading
[3.39.0-alpha.4] - 2024-06-04
- Add:
WebARSessionRoot.onPlaced
event hook - Fix: InputField click should open keyboard on Android and iOS
- Fix: ContactShadow and ShadowCatcher meshes should not be raycastable
- Change: OrbitControls
fitCamera
use options object, add "centerCamera" option
[3.39.0-alpha.3] - 2024-06-04
- Fix: Mesh particle LODs not being loaded
- Fix: UI Image/Raw Image texture LODs not being updated
[3.39.0-alpha.2] - 2024-06-03
- Fix: vite build pipeline plugin
[3.39.0-alpha] - 2024-06-03
- Fix: Issue where OrbitControls setTarget not working as expected sometimes due to first frame matrices not being updated yet
- Fix: Gizmos sometimes rendering for 2 frames instead of just 1
- Change: WebXRImageTracking now applies some smoothing based on jitter amount
- Change: Bump gltf-build-pipeline package to 2.1
[3.38.0-alpha.3] - 2024-05-30
- Fix: needle menu CSS blur in safari
- Fix: USDZ - move Animation component animations into correct sequence depending on whether it should loop or not
- Fix: QuickLook button being created by WebXR despite
usdzExporter.allowCreateQuicklookButton
explicitly being off
[3.38.0-alpha.2] - 2024-05-29
- Fix: Issue in vite plugin for Node 16 where fetch wasn't supported yet
- Fix: AudioListener should remove itself when disabled
[3.38.0-alpha.1] - 2024-05-29
- Add: OrbitControls
clickBackgroundToFitScene
property that can be used to allow autofitting when users click on the background. By default it is set to 2 clicks - Add: Vite plugin option to open browser with network ip address when the server starts by setting
needlePlugins(command, config, { openBrowser: true })
in vite.config.js - Fix: USDZ image tracking orientation corrects for node world matrix now, resulting in proper placement relative to the image
- Fix: WebARSessionRoot matrix and invertForward were not correctly applied for USDZ export
- Change: WebXR Image Tracking orientation was rotated by 180°. Now it's consistent between iOS USDZ and Android WebXR. If you're using image tracking, you might have to rotate your content 180° to adjust to the new orientation.
[3.37.16-alpha] - 2024-05-28
- Add:
Gizmos.DrawWireMesh
- Fix: use lowpoly raycast mesh again when available
- Fix: USDZ - issue where image tracking orientation was inconsistent between Android and iOS
- Change: USDZ - better logs when unsupported animation tracks are used during export (e.g. .activeSelf or material animations).
- Change: USDZ - show balloon warning when exporting unsupported track types
[3.37.15-alpha] - 2024-05-27
- Add: ScreenCapture
deviceFilter
anddeviceName
properties that simplify camera selection - Fix: Avatar hands being visible in screenbased AR
- Fix: USDZ workaround for Apple bug FB13808839 - skeletal mesh rest poses must be decomposable in RealityKit
- Fix: Issue where Lightmap LOD textures did not load
- Fix: Issue where Custom Shader LOD textures did not load
- Change:
Powered by Needle
tag can be hidden with indie license
[3.37.14-alpha] - 2024-05-24
- Fix: Issue where deactivated SpriteRenderer would not be included in USDZ
- Fix: Minor
@serializable
warning in SpriteRenderer - Fix: SpriteRenderer progressive textures
- Change: bump
gltf-progressive
package which includes a vanilla three.js example and fixes issue where texture settings were not re-applied correctly after having loaded the texture LOD (e.g. filter)
[3.37.13-alpha] - 2024-05-23
- Add: WebXRImageTracking
hideWhenTrackingIsLost
option to configure if objects should stay visible or hide when tracking is lost - Add: WebARSessionRoot
autoPlace
option to allow automatically placing the scene content on the first XR hit - Fix: WebXR component
createQRCode
options now respects Needle Menu QR code option - Change: QR code now warns when being used for scanning a
localhost
address
[3.37.12-alpha.5] - 2024-05-19
- Fix: Bump
gltf-progressive
package to support updating LODs when using postprocessing effects
[3.37.12-alpha.4] - 2024-05-18
- Fix: AR placement being prevented by other scripts that caused the event being
used
[3.37.12-alpha.1] - 2024-05-17
- Fix: USDZ rel arrays must contain no duplicate entries
- Change: Renderer now manually calls reset for stats at the very end of a frame
[3.37.12-alpha] - 2024-05-17
- Add:
onClear
(invoked e.g. when<needle-engine src>
changes) andonDestroy
hooks (invoked when the needle engine context is disposed)
[3.37.11-alpha] - 2024-05-15
- Add: USDZ API now supports playing back audio from custom behavior scripts. Usage from inside
createBehaviours
:const audioClip = ext.addAudioClip(clipUrl); const behavior = new BehaviorModel("playAudio", TriggerBuilder.tapTrigger(this.gameObject), ActionBuilder.playAudioAction(playbackTarget, audioClip, "play", volume, auralMode), );
- Add: USDZ API now supports registering animations from custom behavior scripts (experimental) better lighting response
- Add: animator state speed support in USDZ
- Fix: USDZ export had multiple identical textures for the same cloned image
- Fix: USDZ sprites had wrong lighting because of QuickLook bug with non-specified normals, now emitting (0,0,1) and not (0,0,0) as fallback normals
- Fix: HideOnStart should not hide objects in USDZ that were manually enabled in the scene before
- Fix: issue with texture tiling being 0 in any direction leading to invalid USDZ files
- Fix: Contact Shadows now have consistent blur independent of scene scale
- Fix: Regression with audio not playing at start of USDZ scene
- Fix: Contact Shadows now properly correct for different scene aspect ratios
- Fix: SceneSwitcher
scenes
array not immediately when creating from code - Fix:
onStart
hook not being called for all<needle-engine>
elements - Fix: Script registration to correct context when loading multiple
<needle-engine>
components on one page - Fix: Renderer allow changing the ReflectionProbe anchor at runtime
- Change: USDZ now exports disabled objects as well, sets their visibility to false (for regular USD) and hides them on start (for QuickLook)
[3.37.10-alpha.7] - 2024-05-14
- Add:
context.menu.setVisible
method for hiding the Needle Menu from code - Add:
screenshot2
method that takes an options object for easier configuration and transparent screenshots support. - Fix: Issue with OrbitControls
zoomToCursor
enabled in cases where the loaded glTF didn't contain any camera - Change: Allow hiding the needle menu for local development
[3.37.10-alpha.6] - 2024-05-13
- Add: OrbitControls
zoomSpeed
andzoomToCursor
properties - Fix: Reflection probes with lightmaps causing memory leak
- Fix: Contact Shadows now have consistent blur
- Fix: Contact Shadows auto fit box is now correctly setup to include the whole scene
- Fix: Balloon Messages overflowing for very long words
- Change:
clearOverlayMessages
has been renamed toclearBalloonMessages
[3.37.10-alpha.4] - 2024-05-09
- Fix: parents scaled to 0 could lead to
NaN
values appearing out oflookAt()
calls (three.js issue) - Fix: off-by-one error in determining which animation clips need to play in exclusive mode in USDZ
- Fix: use the same play action for
PlayAudioOnClick
and on scene start, and prevent scene start audio to play when a click action is also used
[3.37.10-alpha.3] - 2024-05-08
- Fix: lightmaps with progressive meshes
[3.37.10-alpha.2] - 2024-05-07
- Add: expose
clearOverlayMessages
method - Fix: SyncedTransform should not set kinematic if
overridePhysics
is false - Fix: CustomShader Screenspace support for shaders exported from Unity 2022
- Change: enable preload on audio sources dynamically created by PlayAudioOnClick
- Change: improve URL name parsing for loading screen for blob URLs
[3.37.10-alpha.1] - 2024-05-06
- Add: static
ContactShadows.auto
- Add: ContactShadows
autoFit
option to automatically fit the contact shadows at startup andfitShadows()
method for applying autofit manually - Change: Improve PWA logging and rename Vite
pwaOptions
topwa
in needlePlugin - Change: Improve loading screen rendering
[3.37.9-alpha] - 2024-05-03
- Add:
INeedleGLTFExtensionPlugin.onLoaded
hook providing access to the loaded glTF when registering custom extensions - Add: PWA ability to specify updateInterval (number in ms or undefined) for auto-updating apps while running
- Fix: WebXRImageTracking now restores tracked objects to their previous state after exit AR
- Fix: WebXRImageTracking extra check in session enabled features if image tracking is even enabled. Otherwise I did get tons of errors in mobile VR
- Fix: Input system now handles mouse wheel during pointer lock
- Fix: Simplify and improve PWA generation and passing workbox config to vite-pwa
- Fix: AnimatorController with multiple layers: don't select start state in another layer
- Fix: AnimatorController handle empty state to stay in last animated previous pose
- Bump gltf-progressive dependency for fixes regarding transparent materials as well as VRM materials
- Bump gltf-build-pipeline dependency to 1.5 alpha for VRM support
[3.37.8-alpha.1] - 2024-05-02
- Fix: Camera should not set skybox from scene again automatically if there's a background skybox already
- Fix: Multi-material LOD meshes
- Change: Only set GLTFLoaders if none others are already set
- Change: vite userconfig expose "allowHotReload" in jsdoc types (third argument in
needlePlugins
)
[3.37.8-alpha] - 2024-04-30
- Add:
@needle-tools/gltf-progressive
dependency that handles loading progressive meshes and textures.
[3.37.7-beta.1] - 2024-04-29
- Fix: USDZ regression in writing timeSamples > 1000
[3.37.7-beta] - 2024-04-29
- Fix: USDZ animation loops didnt work in some cases
- Fix: Properly apply and revert arScale on USDZ export
- Fix: Correctly apply WebXR arSceneScale on USDZ export even when no USDZExporter is present
- Fix: Hand models not being displayed on VisionPro – invalid data passed into registerExtensions leading to exception
- Fix:
time.timescale
set to 0 now fully pauses physics simulation - Fix:
@syncField
now properly applies room state once on connection - Fix: Timeline reset previously active animation actions then being disabled (e.g. when switching to another active timeline)
[3.37.6-beta] - 2024-04-26
- Fix: USDZExporter bug where geometry was getting duplicated on export when the same mesh was used multiple times
- Fix: USDZExporter duplicate export of scene start triggers
- Change: Improve USDZExporter animation export validation and improve handling of empty TransformData slots
- Change: Improve USDZ animation export allowing
RegisteredAnimationInfo
to also register a null clip for targeting the rest pose (e.g. empty state) - Change: Improve USDZ time formatting
- Change: Invoke engine lifecycle hooks in the order in which they were registered (e.g.
onStart(ctx => ...)
)
[3.37.6-alpha] - 2024-04-24
- Add: More API documentation
- Add: VideoPlayer can now play
m3u
livestream links - Fix: WebARBackground now checks if camera-access is granted
- Change: Progressively loaded assets now postfix urls with the content hash of the assets if available to make sure the correct version is loaded and not a old version from cache
- Change: VideoPlayer setting
url
now immediately updates the videoplayback
[3.37.5-alpha] - 2024-04-23
- Add: SceneSwitcher support for adding the
ISceneEventListener
on the sceneSwitcher gameObject - Fix: OrbitControls should not update on user input when the camera is not currently active
- Change: OrbitControls middle click/double click does not change camera position anymore and just set the look target
[3.37.4-alpha] - 2024-04-22
- Fix: Collider filtermask bug where it did previously override membership settings in certain cases
- Change: Menu now removes the buttons for very small sizes
- Change:
this.context.physics.engine.raycast
andraycastWithNormal
api changed to take an options parameter instead of single values. It now also exposes rapier'squeryFilterFlags
,filterGroups
and thefilterPredicate
options. It can now be called with e.g.this.context.physics.engine.raycast(origin, direction, { maxDistance: 2 })
[3.37.3-alpha] - 2024-04-19
- Fix: Regression in progressive mesh for multi material objects / multiple primitives per mesh
- Change: Improve LOD level selection based on available mesh density per level Level of detail switching now finds a good match for screen and mesh density that results in more consistent on-screen triangle density. This change also improves LOD switching for low-poly meshes considerably.
- Change: ScreenCapture now respects if user is in
viewonly
networked room
[3.37.2-alpha] - 2024-04-17
- Fix: Regression in USDZ export causing behaviours to stop working
[3.37.1-alpha] - 2024-04-16
- Fix: Eventlist now handles EventListeners being added or removed during
EventList.invoke
- Fix: Progressive LOD textures issue where compressed textures would not be loaded in some cases when using tiling
- Change: USDZExporter created by the WebXR component now enables
autoExportAnimation
andautoExportAudioSources
by default
[3.37.0-alpha] - 2024-04-15
- Add: USDZ physics export for VisionOS
- Add: Sprite
mesh
andmaterial
properties to simplify creating a new sprite object - Fix: Loading files that don't have a
.glb
or.gltf
extension but the correct mime type - Fix: PostProcessing error when using tonemapping from vanilla threejs
- Change: Bump rapier dependency to ^0.12.0
[3.36.6] - 2024-04-12
- Add: Needle Menu can now create QR button
- Change: Needle menu fullscreen button now switches the
needle-engine
element into fullscreen - Change: LODs are now switched at a slightly larger distance
[3.36.6-beta] - 2024-04-10
- Add: Expose
setAutoFitEnabled
method to remove objects from being included in camera fitting - Change: Improve WebAR wall and ceiling placement
[3.36.5-beta] - 2024-04-09
- Add: lifecycle hooks like
onUpdate(()=>{})
now return method to unsubscribe. For example you can now write it like thisconst unsubscribe = onUpdate(()=>{ console.log("One Frame"); unsubscribe(); })
- Add:
onAfterRender
hook - Add: RemoteSkybox can now handle locally dropped files
- Add:
ObjectUtils.createSprite
method - Fix:
<needle-engine camera-controls="0">
does now not create OrbitControls anymore if the assigned glTF file doesn't contain a camera - Fix: RemoteSkybox doesn't prevent drop events anymore if the dropped file can not be handled
[3.36.4-beta] - 2024-04-05
- Add: More API documentation
- Add:
SceneSwitcher.addScene
- Add: SceneSwitcher
scene-opened
event. Subscribe withsceneSwitcher.addEventListener('scene-opened', args => {})
- Fix:
OrbitControls.fitCamera
handle case where user passes in array with undefined entries
[3.36.3-beta.1] - 2024-04-04
- Fix: Needle Menu not visible in AR overlay
- Fix: Contact Shadows should not render transparent objects
- Fix: API docs warnings (internal)
[3.36.3-beta] - 2024-04-04
- Add: More API documentation for progressive loading, USDZExporter, getComponent methods etc
- Add: Needle Menu CSS for disabled buttons
- Add: Expose
onXRSessionStart
andonXRSessionEnd
hooks - Add:
isAndroidDevice
utility method - Fix: Bounds calculation of SkinnedMeshRenderer with multi-material (multiple three skinned meshes in children)
- Fix: ContactShadows rendering for AR
- Fix: WebAR touch transform does now ignore touches that start in top 10% of screen on android (e.g. when user is opening the menu by swiping down)
- Change: Needle Menu button height is clamped
- Change: Improve OrbitControls
fitCamera
- Change: Needle asap now displays custom logo if assigned to
needle-engine
web component (requires PRO license)
[3.36.2-beta] - 2024-04-03
- Add and improve API documentation
- Add:
onXRSessionEnd
method hook - Fix: Regression introduced by 3.36.0 causing stencil rendering to not work anymore
- Change: Move QR button method into
ButtonsFactory
[3.36.0-beta] - 2024-04-02
- Add: support for Auto LOD generation and runtime switching based on mesh density
- Add: support for progressive mesh loading which can reduce the initial download size significantly
- Add: BatchedMesh support for instancing
- Add:
Renderer.setInstanced(myMesh, true)
call to enable instancing for any Mesh - Change: raycasting will now use lowpoly LOD which can reduce intersection checks significantly for high-poly assets
[3.35.1-beta.2] - 2024-04-02
- Add: Animator api for
getCurrentStateInfo()
andcurrentAction
getter which returns the currently playing three action. - Add: More documentation
- Add:
Mathf.randomVector3
method - Internal: use
compileAsync
for prewarming newly loaded objects
[3.35.0-beta.2] - 2024-03-25
- Add: Support for
transient-pointer
input sources for VisionOS - Add: add metadata and intersections to
NEPointerEvent
type. Intersections are filled in from EventSystem. This information can be access viathis.input.addEventListener
or the input event callbacks - Fix:
GameObject.destroy
should not dispose resources - Fix: Needle Menu logo with black text
- Fix: Vite
command
check in build-pipeline plugin - Change:
ObjectUtils.createPrimitive
now has types strings e.g.ObjectUtils.createPrimitive("Cube")
- Change: ChangeMaterialOnClick doesnt require a Renderer component anymore
[3.34.4-alpha] - 2024-03-20
- Fix: OrbitControls autoFit frame delay causing a wrong perspective for one frame
- Fix: Multiple WebXR components causing menu item icons to appear multiple times
[3.34.3-alpha.1] - 2024-03-19
- Add: debug on-screen console (
?console
) now has a tab to inspect the scene - Fix: TransformGizmo component preventing OrbitControls input
[3.34.3-alpha] - 2024-03-18
- Add:
context.maxRenderResolution
clamping the max renderer size - Add:
PointerEventData
now expose raw three.js Intersection object (e.g. in onPointerDown) - Add:
addComponent
can now take an optional init parameter which can be used to set default values during creation of the component instance, modify options or assign fields. The init parameter is fully typed and only shows available options - Fix: Issue where async import of Needle Engine breaks registering custom gltf extensions registered from local packages. Needle Engine now waits for all dependent packages to be ready
- Change: Bloom effect defaults to normal Bloom effect for performance reasons (previously it was using SelectiveBloom by default). To change this back set
Bloom.useSelectiveBloom = true
in global scope - Change: Volume component now exposed
effects
array which is a list of the currently active postprocessing effects - Change: NEPointerEvents now create a threejs Ray when accessing the
ray
property and no ray was created before - Change: Allow audio playback when keyboard input is detected
- Change: Gizmos now ignore fog
- Change: Improve
getComponent
api types. For example previouslyaddComponent
did return the genericIComponent
interface instead of the concrete type (e.g.Animator
) - Change: Deprecate
addNewComponent
because it is redundant. You can just useaddComponent
[3.34.2-alpha.2] - 2024-03-13
- Fix: vite build pipeline plugin should wait for output directory up to 10 seconds
- Fix: input event button index for mouse on pointer move
- Fix: basic styles for links inside needle menu
[3.34.2-alpha] - 2024-03-13
- Fix: issue where asap plugin path would be falsely resolved causing a vite build error
- Fix: serializable warning in WebARCameraBackground and Animation components
- Change: set Needle Menu zindex to 1000
[3.34.1-alpha.1] - 2024-03-12
- Fix: Input regression when querying mouse button states (e.g.
getPointerClicked(1)
for the middle mouse button)
[3.34.1-alpha] - 2024-03-12
- Add: OrbitControls exposing min/maxPolarAngle and min/maxAzimuthAngle
- Fix: Input should subscribe to pointer events (
pointerdown
,pointermove
...) instead of touch and mouse. For fixing iOS and AR issues where pointerIds are stuck and we have wrong state - Fix: Button hover state when dragging with right mouse button
- Fix: Vite build plugin error when needle gltf build pipeline package doesnt exist
[3.34.0-alpha.3] - 2024-03-11
- Fix: TypeScript warnings in XR components
- Fix: Add correct @type for
Button.animationTriggers
- Fix: Incorrect serialization warnings for fields marked with
@serializable()
[3.34.0-alpha.2] - 2024-03-07
- Fix: Partially revert alias plugin changes to fix issues with md5 package
- Fix: Check if asap exists before referencing it
[3.34.0-alpha.1] - 2024-03-07
- Add: Show warning if a custom object is missing @serializable decorator
- Fix: Remove leftover console logs
- Fix: asap was not included in bundle + version
[3.34.0-alpha] - 2024-03-07
- Add: Vite plugin for showing indicator that needle engine bundle is still loading (Needle ASAP)
- Add: Vite plugin for build info now includes file hash so we can skip uploading unchanged files
- Add:
this.context.input.addEventListener
now exposes options foronce
(remove event listener after the first invocation) andsignal
(remove event listener when signal is aborted) - Add:
this.context.time
now hasdeltaTimeUnscaled
- Fix: Issue where Needle Menu size would sometimes switch between compact and stretched view
- Fix: Improve icon rendering while icon font is still being loaded
- Fix: Ensure NeedleXRSession does only subscribe once to
session granted
- Fix: Vite alias plugin now explictly resolved three exports for addons and nodes
- Fix: wrong colorspace in scene lighting texture
- Fix: Show Needle Menu in AR dom overlay
- Fix: LOD layers are now properly set (e.g. it's now possibly to disable raycasting via layer 2)
- Fix: Issue where timescale would affect XR movement
- Change: Bump three.js version to 0.162
- Change: Bump postprocessing to 6.35.1
[3.33.0-beta] - 2024-03-02
- Add: Needle Menu can now create
Mute
andFullscreen
buttons. - Add: Needle Menu buttons now have icons (configuration options will be added in a future version)
- Add: Needle Menu
postMessage
support to inject buttons to open an URL - Add: SyncedRoom now creates a
Join Room
button to the menu (orLeave Room
button) - Add: WebXR support for the Needle Menu
- Add: Pre-XR room when user enters via
sessiongranted
when the main content is still loading - Add: OneEuroFilter
reset
method - Fix: Resume AudioContext when interrupted (happens e.g. on VisionOS when entering VR)
- Fix: GroundProjection should not be visible when in pass-through AR
- Fix: XRController ray and hit rendering now correctly respects rig scale
- Fix: Button with state transition colors now correctly work with alpha values
- Fix: Issue where the Needle Menu was visible without any button or content
- Change: Spatial console becomes visible when an error happens on local server while in XR
[3.32.28-beta] - 2024-02-28
- Fix: AR placement for Chrome 122
[3.32.27-alpha] - 2024-02-26
- Fix: Quicklook export caused by typo in USDZ mime-type
- Fix: Workaround iOS/visionOS bug: always include the tap trigger for audio even if nothing to tap on
- Change: Input
addEventListener
can now take options as a third argument
[3.32.26-alpha] - 2024-02-23
- Add: Needle Menu. This first version will contain the WebXR options for now. Future versions will allow for more configuration
- Fix: webpack based project code optimization. This will improve e.g. nextjs production builds
- Fix: Raycasting offset in AR for touches near the screen border
- Fix: Spatial console text z fighting
- Fix: PostProcessing Exposure not working anymore with tonemapping
- Change:
NeedleWebXRHtmlElement
has been renamed toWebXRButtonFactory
- Change: bump postprocessing package to
6.34.3
- Change: Improve PostProcessing when tonemapping is enabled
[3.32.25-alpha] - 2024-02-22
- Fix: WebXR switching between controllers and hands
- Fix: WebXR
onControllerAdded
being called twice at the start of a session - Fix: WebXR buttons container should not capture pointer events
- Fix: Improve spatial console (visible in XR with
?console
in the URL) - Fix: Allow audio playback once a XRSession starts
- Fix: USDZ fill in missing transform data when multile animation clips on the same object have different detected animation roots
- Fix: generated USDZ mime type
- Change: new cleaner loading screen
[3.32.24-alpha] - 2024-02-21
- Add: Spatial debug console, add
?console
url parameter to get a debug console in XR floating before the camera view - Add: OpenURL component support for opening email addresses (without
mailto:
prefix, just enter your email address in the url field) - Add: Progress api for performance logging (use via
Progress.start
,Progress.report
andProgress.end
) - Fix: error when using RenderTextures
- Fix: USDZ text material missing
- Fix: USDZ prevent unclear animation export error
- Fix: USDZ improve endTimeCode calculation
- Fix: USDZ improve audio export, implicit register audio sources with scene start triggers
- Change: USDZ unpremultiplied texture readback on chrome
- Change: Expose DragControls.DragMode enum
[3.32.23-alpha] - 2024-02-19
- Add:
FileReference
support to reference, export and load almost any file:@serializable(FileReference) myFile?: FileReference;
- Add: initial support for building PWAs with needle engine and
vite-plugin-pwa
- Fix: false check in VideoPlayer
videoElement
getter
[3.32.22-alpha] - 2024-02-16
- Add: Needle build-pipeline plugin to run compression as part of the vite build process
- Fix: Loading of progressive textures in Canvas UI
- Fix: Loading of progressive textures in Spritesheet renderer
- Change: SpritesheetRenderer does now directly apply rounded sprite index (instead of relying on the value to be an integer)
[3.32.21-alpha] - 2024-02-16
- Add: USD
displayName
support for nodes and materials - Fix: input double click data on iOS
- Fix: USDZ material indenting
- Fix: check if
linearVelocity
exists on XRPose to prevent typecheck error in CI environment - Change: export USDZ materials, geometry and textures with proper names related to their original names
- Change: improve USDZ opacity and opacityThreshold conversion, add minimal alphaHash support since QuickLook seems to allow that now
[3.32.20-alpha] - 2024-02-10
- Fix: WebXR buttons should catch exception when accesing
navigator.xr
which can happen in iframe without spatial-tracking permissions - Fix: Issue where
getPointerDelta(pointerId)
did not return data when using multitouch except for the first touchpoint - Fix: Issue where
backgroundBlurriness
andbackgroundIntensity
would not be reset to the default when enabling a camera that didnt have explicit settings (NE-4243) - Change:
getComponentsInChildren
andgetComponentsInParents
now clear the optionally provided buffer arrays by default
[3.32.19-alpha] - 2024-02-09
- Fix: CanvasGroup causing performance to drop over time
[3.32.18-alpha] - 2024-02-09
- Add: vite plugin for collecting build information
- Fix: USDZExporter not respecting button option so
Open in Quicklook
button was always created - Fix: vite plugin for copying files didnt respect needle.config.json build directory
- Fix: AnimatorController exception happening in deepClone (NE-4227)
- Fix: minor false warning log for deserializing postprocessing effects
- Fix: vite dependency watcher plugin should handle version containing alias like
npm@three@160
- Fix: NeedleXRSession feature support should catch exception that might happen when running inside iframe with insufficient permissions
- Change: ARSessionRoot align placed scene to camera during placement preview and actual placement so they match up
- Change: bump postprocessing package to 6.33.4 for three 160 support
- Change: vite plugin dependency watcher should now reload website when the server has changed due to changed package.json dependency
[3.32.17-alpha] - 2024-02-08
- Fix: visionOS input handling and hands rendering
- Fix: Error during USDZ text export
- Fix: vite plugin error for cases where config object was missing
- Fix: Rare issue where re-entering AR causes error due to missing reticle
- Change: component
onDestroy
is now called before Object3D and resouces are disposed/destroyed - Change: WebARSessionRoot z-forward looks now towards user/camera
[3.32.16-alpha] - 2024-02-07
- Add: NeedleXRController
isHand
property - Add: WebARSessionRoot
customReticle
to allow how the AR session placement looks - Add: NeedleXRController
getHandJointPose(jointName)
API - Add: Static
NeedleXRSession.onXRSessionStart
andonXRSessionEnd
- Fix: Custom Avatar was despawning when not in multi-user session (added
dontDestroy
flag to PlayerState) - Fix: USDZExporter without WebXR component in scene does now again create quicklook button
- Fix: Bug in Avatar where assigning head or hands objects would cause errors
- Fix: Hide XR buttons during running session
- Fix: Bump threejs version to fix OrbitControls not handling
pointerup
if it doesnt happen over the passed in target element - Change: NeedleXRController does now not emit
pointermove
event every frame but only when above a set position/rotation threshold - Change: time.smoothedFPS is now smoothed over 60 frames
- Change: loaded GLB name in loading overlay is now less technical
- Change: static
NeedleXRSession.onXRStart
is nowonXRSessionStart
[3.32.15-alpha] - 2024-02-06
- Fix: Hands rendering on visionOS
- Fix: NeedleXRController now supports pinch gesture and emits pinch event for devices that don't properly implement the WebXR API and don't invoke the
selectstart
events (e.g. visionOS) - Fix: USDZExporter should not use
doubleSided
for skeletal meshes - Fix: safeguard against null reference error in DragControls.alignManipulator
- Fix: Gizmo labels being raycastable
- Fix: Gizmo cache stopped working due to wrong
isDestroyed
check - Fix: Error caused by Canvas UI when starting XR session
- Fix:
onPointerEnter
andonPointerExit
is not called for all controllers
[3.32.14-alpha] - 2024-02-04
- Add: Renderer
sharedMeshes
property to easily access all mesh objects that belong to the renderer - Fix: WebXRController ray rendering frame delay
- Fix: Avoid WebXRHand model sometimes not being properly cleaned up
- Fix: minor console.log fixes
[3.32.13-alpha] - 2024-02-03
- Add: AudioSource
preload
property - Fix: BoxCollider now automatically detects changes on
scale
property and updates underlying physics engine collider size - Fix: error in mobile VR touch (without physical controllers)
- Change: Calls to
instantiate
now don't accept a null or missing object to instantiate anymore - Change: Rigidbody component now updates underlying physics properties immediately when dirty before invoking
applyForce()
orapplyImpulse()
[3.32.12-alpha] - 2024-02-01
- Fix: ParticleSystem modifying assigned material instance in some cases
- Fix: PostProcessing DepthOfField effect api change in
postprocessing
package - Fix: nextjs production builds with needle-engine
- Fix:
input.addEventListener
for key events stopped working - Fix: issue in physics async draincollision callback sometimes failing when objects were already destroyed
- Fix: WebXR controller and hand models should not be destroyed with the XRRig
- Change: WebXR on non-secure connections now shows warning and button for WebAR and WebVR are disabled
[3.32.11-alpha] - 2024-01-30
- Add: various more documentation comments
- Add: NeedleXRController now exposes gripspace
linearVelocity
- Fix: input event causing error due to missing pointerId
- Fix: DragControls not checking if an event was already used
- Fix: EventSystem calling input event methods on disabled components
- Change: Calculate worldspace data only once per frame in NeedleXRController
[3.32.10-alpha] - 2024-01-30
- Add: XRControllerFollow option to follow gripspace or rayspace
- Fix: ParticleSystem trail not rendering if assigned material culling was set to front
- Fix: ParticleSystem incorrect InheritVelocity when creating a new instance
- Fix: NeedleXRController index in NeedleXRSession.controllers array now matches the
NeedleXRController.index
(the index of the inputdevice) - Change:
?stats
url parameter now also shows FPS in WebXR session - Change:
this.context.xr
now contains the whole type information
[3.32.9-alpha] - 2024-01-29
- Add: various more documentation comments
- Add: pointer events now expose
pressure
property - Fix:
pointerCapture
now works with all buttons - Fix: raycast call did not skip hidden objects
- Fix: XRController hit rendering does now skip SkinnedMeshes for performance reasons
- Change: touchup did emit
onPointerExit
every time, it now only happens if the touch hits another object (or none) - Change:
pointerId
now is a unique id generated from device-index + button-index, input events now also expose adeviceId
property - Change: EventSystem optimization for skipping raycast for e.g.
pointermove
event on objects that don't have a component that implements theonPointerMove
method
[3.32.8-alpha] - 2024-01-29
- Fix: AudioSource error when creating three's PositionalAudio object where GameObject was missing
- Fix: Collider center offset being falsely applied resulting in wrong object placement
- Fix: Physics debug visualization should be updated in post physics step fixing a visual frame delay
- Fix: WebXR AR/VR buttons are now always created
[3.32.7-alpha] - 2024-01-28
- Add: first version of
setPointerCapture
andreleasePointerCapture
that acts similarly to HTML pointer capture and can be used to receive onPointerMove events when the pointer has left the object until it is either released oronPointerUp
happens (this currently only works with the primary button) - Fix: Remove console.log in
instantiate
call - Change: used pointer events will still be propagated to all components
- Change: reduce default Gizmos.Label size
[3.32.6-alpha] - 2024-01-27
- Fix:
AssetRefernence.instantiate
does now clone instantiate options before awaiting asset loading - Fix:
onPointerMove
event was not being called in XR - Fix: Timeline paused but evaluated should still start audio playback e.g. when controller through scroll
[3.32.5-alpha] - 2024-01-26
- Fix: issue where
onEnterXR
callback was possibly not being invoked on all scripts if a script was removed or deleted during onEnterXR (and the underlying array was modified) causing e.g. the CollaborativeSandbox AR placement to not work - Fix: minor issue where controller ray visualization would not respect rig scale
[3.32.4-alpha] - 2024-01-26
- Add: NeedleXRSession
fadeTransition()
that can be used to cover teleportation. It returns a promise that is resolved when fade to black has completed - Fix: error in next template caused by wrong internal imports
- Fix: WebXR should not show quicklook button when
useQuicklookExport
is disabled - Change: debug mobile console now also captures errors at load time, mobile console shows automatically on quest browser (for local development)
[3.32.3-alpha] - 2024-01-26
- Add:
origin
field to NEPointerEvent which references the object that raised the event (e.g. the XRController) - Add:
delayForFrames(numOfFrames)
util method returning a promise that will resolve after the given amount of frames (equivalent todelay
which will take a time in milliseconds) - Fix: prevent access to geometry of a destroyed mesh in physics call
- Fix: AR passthrough placement with controllers
- Fix: issue where AR could not be started twice
- Change: AR placement fallback to camera placement if controller hit-test is not available (e.g. when using Quest simulator)
[3.32.2-alpha] - 2024-01-26
- Add: expose options to disable XRController rays, hit points and teleport on the XRControllerMovement component
- Add: NeedleXRController
emitEvents
to disable input events for controllers - Fix: Cases where XRController button
isDown
andisUp
wasn't updated forprimary
andsqueeze
buttons. - Change: WebXRButton container zIndex is now 5000
[3.32.1-alpha] - 2024-01-25
- Add: NeedleXRController
getButton()
now returns an enhanced GamepadButton object which contains bools forisUp
andisDown
- Add: Access to NeedleXRSession via
this.context.xr
- Fix: XR lifecycle issue where script became inactive during onEnterXR
- Fix: XR Avatar component for synchronization should not log an error when not connected to networking backend
- Fix: XR renderOnTop option for worldspace UI
- Fix: XR screenspace UI should not render for now
- Fix: change event argument for
space
(input in 3D space) is now of typeIGameObject
to exposeworldPosition
etc - Fix:
offerSession
should request AR mode when onlyshowAR
button is enabled in WebXR component - Change: calls to
instantiate(prefab, {})
can now be invoked with anonymous options object as second parameter, for exampleinstantiate(prefab, { parent: myParent })
- Change: the SyncedTransform component does now automatically throttle
fast
mode (reducing the frequency of updates) when running on the glitch backend and when having set more than 10 components tofast
[3.32.0-alpha] - 2024-01-24
- Add: new Needle WebXR system
- Core component event methods give much easier access to the XR system (e.g.
onEnterXR
oronXRControllerAdded
) - Easy access to XRSystem data like
gripWorldSpace
or controller buttons using theNeedleXRController
class - Default functionality like movement, teleport and rendering of controllers or hands is now encapsulated in separate components that can easily be enabled or disabled or overriden.
- All XR input events now go through the event system and can be received on components using the input event methods (like
onPointerDown
) - Support for
offerSession
for QuestBrowser - Support for new
depth-sensing
in Quest pass-through mode
- Core component event methods give much easier access to the XR system (e.g.
- Add: much improved
DragControls
offering different modes for screen and XR interaction, snapping or XR distance grab - Change: Update three.js to 0.160
- Change: pointer events don't need the
IPointerEventHandler
interface anymore - they're now already available on the coreBehaviour
class via e.g.onPointerDown
- Change: for networked avatars add a
PlayerState
and aAvatar
component to your avatar prefab
[3.31.0] - 2024-01-23
- Fix:
isDesktop()
util method should return false on iPad
[3.30.0] - 2024-01-19
- Add: VideoPlayer
preload
method to start loading the video file without having to start playback - Add: VideoPlayer support for m3u8 video stream format (set the mode to URL and assign the video streaming url)
- Add: SceneSwitcher
autoLoadFirstScene
option - Add:
this.context.connection
now has a getter for current websocket url - Add: USDZExporter option to set max texture size
- Fix: SceneSwitcher should not load it's own scene again causing recursive loading
- Fix: Gizmo lines being culled sometimes
- Fix: Gizmo parented to another object should not be returned to cache if it got destroyed while being rendered (e.g. Gizmo.Label)
- Fix: prevent destroyed component from being added to an object again
- Change: Physics.raycast does now ignore lines by default (you can pass in a custom line threshold >= 0 to override that)
[3.29.0] - 2024-01-08
- Add:
isDesktop
util method - Add: physics engine now has
debugRenderRaycasts
boolean ordebugraycasts
url parameter to visualize raycasts - Fix: issue where Gizmos would be rendered for more than one frame or the expected time
- Fix: issue in physics engine
sphereOverlap
where dynamic rigidbodies would not be captured - Change: more stable guid generator on initial scene load
- Change: Collider
membership
andfilter
can now be undefined for default collision groups (all enabled) - Change:
Collider.filter
is now set to undefined to include all groups in the filter (allow collision with all groups) - Change: vite meta plugin to write secure url
[3.28.8] - 2024-01-04
- Fix: pre-bundled version should contain Needle Engine version
- Change: generate component guids based on original guid for initial scene load per component for more stable guids across local and deployed versions and where the order of components in the scene will not affect the guid for components anymore
[3.28.7] - 2024-01-02
- Add: SceneSwitcher
progress
event,currentLoadingProgress
andcurrentlyLoadingScene
properties exposing loading progress. PassingsceneSwitcher
instance as first argument tosceneOpened
callback - Fix: Creating the renderer should not modify the static
Context.DefaultWebGLRendererParameters
, this caused multipage sites to not find the correct canvas anymore (e.g. causing sveltekit sample to not work anymore when changing back and forth between pages)
[3.28.7-beta.1] - 2023-12-30
- Fix: Revert AnimatorController condition evaluation change
[3.28.7-beta] - 2023-12-30
- Fix: Issue in AnimatorController evaluation of bool condition where the threshold wasnt taken into account (e.g. only making a transition if a bool parameter was set to false)
[3.28.6-beta] - 2023-12-30
- Add: EventList can now have multiple arguments allowing support for e.g.
setBool
on Animator component being called from a Button directly - Add: Animator
toggleBool
method - Fix: Issue where destroying an object in
onCollisionEnter
it would not be removed from the physics event queue and result inonCollisionStay
being called with an already destroyed component - Fix: Rigidbody matrix changed watcher should ignore events during physics to threejs synchronization
- Fix: Set gizmos renderOrder to be always rendered last to avoid cases where gizmos are hidden due to custom renderOrder on scene objects
[3.28.5-beta] - 2023-12-22
- Fix: WebXRController falsely triggering click in EventSystem
[3.28.3-beta] - 2023-12-21
- Fix: Issue in pointer events not triggering onPointerEnter and Exit in VR
- Remove: warning log in USDZ export about double sided materials not being supported
[3.28.2-beta] - 2023-12-20
- Add: Support double sided material export for USDZ
- Fix:
PlayAudioOnClick
when explicit clip is given, use loop from attached audio source - Change: Improve Everywhere Action
SetActiveOnClick
[3.28.1-beta] - 2023-12-18
- Add:
context.recreate
to destroy the whole scene and reload everything (including all script instances) - Fix: issue where EventSystem pointer events would not be received anymore if the event component was on e.g. an empty object in the parent hierarchy
[3.28.0-beta] - 2023-12-14
- Fix: USDZ:
emissiveIntensity
was not applied andemissiveColor
wasn't used for scale/bias properly - Fix: USDZ: compressed textures with alpha channel were not being read back correctly
- Change: USDZ: bake
effectiveOpacity
into the opacity texture if needed, since QuickLook/usdview don't support.a
scale values - Change: Bump UnityGLTF version to 2.6.0-exp to support GPU Instancing on imported glTF materials
[3.27.5-beta] - 2023-12-12
- Fix: Offscreencanvas support for iOS 16.x
- Fix:
PlayAudioOnClick
now respects playOnAwake if an explicit audio source is assigned - Change:
EventSystem
should only check objects if they're meshes
[3.27.4-beta] - 2023-12-11
- Fix: instancing now updating bounds in Needle Engine before render callback if necessary
- Change: expose
onPauseChanged
on components - Change: handle case where a added coroutine function is not a coroutine (Generator)
[3.27.3-beta] - 2023-12-09
- Add:
InstancingUtil.getRenderer
to get the three InstancedMesh for any Object3D (if it's using instancing) - Add: instancing does now automatically update culling bounds if it's dirty. This can be disabled via
InstancingUtil.setAutoUpdateBounds(obj, false)
- Add: Rigidbody method documentation
- Add:
ParticleSystem.addBehaviour
method and expose underlying particle system. We now also export the particle types - Fix: Issue where
this.physics.raycastFromRay
was modifying the default raycast options - Fix: Issue where sprites would be falsely interpreted as builtin sprite causing the image to be not displayed correctly
- Change:
this.physics.raycast()
can now be called with anonymous options (instead of having to use aRaycastOptions
class), for examplethis.physics.raycast({ray:myRay})
[3.27.2-beta] - 2023-12-08
- Fix: don't set font on
<needle-engine>
host styles to prevent leaking into child elements - Fix:
AssetReference.loadAsync
being called multiple times should always return theasset
result - Change: register OrbitControls events on the canvas and not the needle engine element to allow child HTML objects to capture input
[3.27.1-beta] - 2023-12-06
- Add
addCustomExtensionPlugin
API to register custom glTF importer and exporter extensions - Fix: issue where instanced and animated object was rendered for one frame with a wrong matrix
- Change: expose
imageToCanvas
method from USDZExporter - Change: GltfExporter component does not cache exporter anymore and expose all exporter options
[3.27.0-beta] - 2023-12-04
- Add: USDZ: skinned mesh export, including animations
- Add: USDZ: ability to specify if we're exporting for QuickLook or not
- Add: USDZ: animation export respects basic root motion (translation and rotation)
- Add: USDZ:
USDZExporter
API supports exporting binary buffer similar toGLTFExport
API - Fix: USDZ: correct
defaultPrim
encapsulation so that it also contains materials - Fix: USDZ: render texture readback failure when exporting
- Fix:
ISceneEventListener
only being found when first component - Fix: error in vite plugin facebook instant games if no config would exist
- Fix: Gizmo label padding and border radius were not properly applied when re-using label
- Change: USDZ: animation export now automatically includes Animator states
- Change: USDZ:
PlayAnimationOnClick
now automatically uses Animator state logic to determine looping and continuation of animation (what happens after the specified animation has finished playing) - Change: USDZ: current animator states are exported as
PlayAnimation
on scene start
[3.26.2-beta] - 2023-11-28
- Add physics NaN safeguards to avoid invalid rapier data propagating through three objects
[3.26.1-beta] - 2023-11-27
- Add: information about mouse button, hit point, hit normal, hit distance to
PointerEventData
- Fix: EventSystem regression where UI events stopped working
[3.26.0-beta] - 2023-11-27
- Fix: LOD update frame delay
- Change: EventSystem optimization to avoid raycasting objects without event receiver components
[3.25.5] - 2023-11-24
- Add: vite plugin for facebook deployment
- Fix: Physics collider center being not applied correctly with rotated parent
[3.25.4] - 2023-11-23
- Add:
onInitialized(ctx => {...})
andonBeforeRender
event functions - Add:
Camera.cullingLayer
property - Fix: Physics collider center being modified causing rapier runtime error
[3.25.3] - 2023-11-23
- Add:
onStart((ctx)=>{})
andonUpdate((ctx)=>{})
functions API - Fix: AudioSource not starting autoplay anymore after registered user interaction (which is necessary to playback audio in the browser)
- Fix:
TransformGizmo
component not working as expected anymore since it also definesworldPosition
- Change: Improve performance for colliders without rigidbody to not create an implicity rapier rigidbody anymore
[3.25.2] - 2023-11-20
- Add:
worldForward
,worldRight
andworldUp
to Object3D and GameObject types - Add:
getTempVector
utility method that has a circular array of vector3 instances for re-use - Fix: ImageTracking hysteresis for images to stay visible during bad tracking for up to a second after tracking has been lost
[3.25.1] - 2023-11-18
- Add: getters and setters on Object3D and GameObject types for
worldPosition
,worldRotation
,worldQuaternion
andworldScale
- Fix: ImageTracking now has hysteresis for how long to keep a tracked object visible before disabling it (if tracking is lost just for a few frames)
- Fix: Catch and log exception in rapier during collider creation
- Change: WebXRImageTracking objects that are already present in the scene are now hidden when entering WebXR/AR
[3.25.0] - 2023-11-18
- Add:
Mathf.easinOutCubic
utility method - Add: ObjectRaycaster expose option to ignore skinned mesh renderers
- Fix: detecing website interaction to allow playing audio before any component or audio component has been loaded
- Fix: Physics capsule height creation
- Fix: WebXRImageTracking not hiding tracked objects after tracking has been lost
- Change: Improved ContactShadows component
- Change: Improve OrbitControls for smoother lerping. Add methods to set camera position and look at target by passing in an Object3D reference.
- Change: PlayAudioOnClick does now create an AudioSource implictly if non is assigned
- Change: EventSystem does ignore SkinnedMeshRenderers by default now
- Change: WebXR reticle is now hidden when image tracking starts
[3.24.1] - 2023-11-15
- Fix: Everywhere Action material otherVariants was not cleared between behaviour generation
- Fix: Everywhere Action Change Material loosing track of the target material
- Fix: issue where SpatialTrigger calling AudioSource.play doesnt work because of wrong argument
- Fix: text linebreak in USDZ
- Fix: material bindings API for Preliminary_Text and don't apply material when no geometry is found
- Fix: material assignments for USDZ text and fix color space
- Fix: Capsulecollider height
- Fix: Core networking issue where throwing callbacks would silently be ignored and causing not all callbacks being called
- Fix: PlayerSync
owner-changed
being raised twice - Fix: PlayerSync unsubscribe from UserLeftRoom event once the player is leaving/has left
- Fix: Catch exception in creating
new type()
during deserialization of animationclip if the clip is just a string and could not be resolved because it's missing, falsely serialized or annotated - Change: OnClick Everywhere Actions now ensure they have a raycaster component assigned or in parent hierarchy
- Change: Everywhere Action PlayAnimationOnClick remove target field
[3.24.0] - 2023-11-13
- Add: ContactShadows component
- Add:
Gizmos.DrawLabel
- Fix: issue with AnimatorController behaviour when using loop and cycle offset
- Fix: error when loading component with missing AnimatorController field
- Fix: use correct colorspace for UI components
- Fix: loading of remote GLB and
skybox-image
url where default camera should set clearflags to skybox - Fix: Various colorspace issues fixed
- Change: USDZ export
imageToCanvas
now uses OffscreenCanvas for improved performance - Change: Update pmndrs postprocessing package to 6.33.3 to fix SSAO not working on mobile android
- Change:
ObjectUtils.createPrimitive
so all primitives use the same settings
[3.23.1] - 2023-11-09
- Add:
Gizmos.DrawLabel
method - Add:
LookAtObject
utils method with options to keep upwards direction and copying target rotation to stay screen aligned - Fix: WebXRPlaneTracking dispose old mesh data properly, heuristically determine if a shape should be convex or not
- Fix: AudioSource
play
not working anymore if called without parameters - Internal: rapier meshcolliders now use convexHull instead of convexMesh, the latter already expects the input data to be convex
[3.23.0] - 2023-11-08
- Add: support for changing animatorcontroller at runtime
- Add: AnimatorController support for cycle offset and speed being used from parameter (or fixed serialized value)
- Add:
OrbtiControls.allowInterrupt
property that can be set to false to prevent animation to a target point or autoRotate being interrupted by user input like clicking or dragging - Add: Physics collision now includes tangent vector for contact points
- Add: Physics exposes API for getting the object velocity per collider (
context.physics.engine.getLinearVelocity
) - Add: Physics Material can now be updated at runtime. Call
updatePhysicsMaterial
on the collider with the changed physics material - Fix: scaled capsule collider being created with wrong size
- Fix: timeline audiotracks not respecting speed property on PlayableDirector (effectively being cut-off instead of being played back at another speed/playbackRate)
- Fix: Prevent using XRAnchor on Quest in AR mode (pass-through)
- Fix: Timeline evaluate is now done in lateUpdate which gives animated objects time to apply the changed data (e.g. OrbitControls where the target object may be animated)
- Fix: Timeline Audio tracks do not require AudioListener in scene anymore
[3.22.6] - 2023-11-06
- Change: work on approximated transmission export in USDZ
[3.22.4] - 2023-11-03
- Add: Option to WebXRControllers to disable default controls (
enableDefaultControls
) and raycasting (enableRaycasts
) - Fix: AnimatorController transition with exitTime and trigger didnt work since trigger was reset before transition could be made
- Fix: USDZExporter isssue where compressed textures always ended up as JPG after decompression since format check was only checking for RGBAFormat, now also checks for compressed formats
- Change: catch and display unhandled exceptions during creation of engine, make sure bubble messages are on top of loading overlay
- Change: USDZExporter should re-use renderer
[3.22.3] - 2023-11-02
- Add: Coroutine can now yield on promise and wait for the promise to be resolved
- Fix: CharacterController not being grounded on mesh collider
- Fix: ShadowCatcher set to additive mode didnt work anymore
[3.22.2] - 2023-11-01
- Add: Optional
RectTransform.minWidth
andRectTransform.maxWidth
- Fix: GameObject instantiate should clone color objects (to not share instance)
- Fix: Call to
parseSync
with full url argument now correctly passes base url to three GLTFLoader for resolving external resources - Change: PhysicsMaterial properties are now all optional (e.g. so we can set only friction)
- Change:
Rigidbody.setForce
to take a vec3 - Change:
AudioSource.onDisable
should pause not stop - Change:
Mathf.random(<min>?, <max>?)
now takes optional min and max parameters
[3.22.1] - 2023-10-30
- Fix:
Screencapture.autoconnect
when already connected to networking server or connection is in progress / window selection is currently open - Change: when
isManagedExternally
is enabled then framerate is user controlled and not automatically clamped - Change: add more documentation to networking methods
[3.22.0] - 2023-10-26
- Fix: SyncedCamera deserialization warning
- Change: Collider property updates now trigger rigidbody mass recalculation immediately (if set to auto-mass)
- Change: Rigidbody methods now take Vec3 object as well as arguments like
{x:0, y:1, z:0}
- Change: Improve Screencapture
- Change: Screencapture now also allows
Microphone
as input device - Change: Updated VOIP script and removed old VOIP implementation - it now uses the same underlying codebase as screencapture
- Change: Update imports to use
type
where appropriate
[3.21.5] - 2023-10-25
- Fix: remove leftover console.log
- Fix: Hovered button should reset pointer state when destroyed
- Fix: WebXR Rig parenting in VR when switching scenes
- Fix: Timeline activation track not properly evaluating when timeline is paused and manually evaluated from user code
- Fix: Sphere Collider radius not being set correctly
[3.21.3] - 2023-10-23
- Fix: Issue where Chrome touch emulation caused "onPointerClick" being called twice per click
- Fix: EventList instances are now not shared anymore between components created via
instantiate
- Fix: Regression where SphereCollider radius was not being applied
[3.21.2] - 2023-10-23
- Change: Expose EventList subscriber count
- Change:
PointerEventArgs.use()
should not stop propagation
[3.21.1-alpha] - 2023-10-20
- Add: Multitouch support on
input
events, our EventSystem implementation now handles multitouch cases and is using the browser events directly and immediately (before events viawindow
where deferred and hanlded during the engine update loop)
[3.21.0-alpha] - 2023-10-19
- Add: support for translate, rotate and scale of AR scene on android devices (needs
WebXRSessionRoot.arTouchTransform
set to true right now) - Add:
SphereCollider.radius
andBoxCollider.size
updates at runtime are now automatically propagated to the physics engine updating the physics shapes. Additionally the object scale for SphereCollider objects is watched and automatically applied on change - Fix: removal of all colliders on an object now also fully cleansup the implictly created RigidBody
- Change:
Context.isManagedExternally
can now be set at runtime as a first step towards allowing complete external control over the Needle Engine lifecycle loop in cases where Needle Engine scenes or components are mixed with an external three.js scene (and projects that require more explicit control)
[3.20.3] - 2023-10-18
- Add: Expose Rapier dominance group option on Rigidbody
- Fix: Ignore root motion when animator weight is <= 0 due to Timeline playing
- Fix: Rapier race condition caused by dynamic loading
- Change: Allow setting Rigidbody mass explictly now by either setting
autoMass
to false or by setting themass
property
[3.20.2] - 2023-10-17
- Fix: renderer access nullreference exceptions caused by deferred initialization
- Fix: disabling postprocessing now restores renderer clear state (which got disabled by the postprocessing package)
- Fix: disable generating WebXRPlane tangents
[3.20.1] - 2023-10-16
- Change:
addComponent
can now take component instance or type
[3.20.0] - 2023-10-13
- Fix: issue where physics colliders where not yet fully initialized in
start
event - Fix: Pointer delta while cursor is locked
- Change: Expose
context.phyiscs.engine.world
andcontext.physics.engine.getComponent
method to directly work with rapier physics engine and to easily get access to Needle Engine components from rapier colliders - Change: Expose
Context.DefaultWebGLRendererParameters
that can be modified in static context before renderer is created
[3.19.9] - 2023-10-11
- Change:
AnimatorController.createFromClips
now sets the state hash to index of clip - Fix: AnimatorController root motion direction when runtime instantiating and using the same clip on multiple objects
- Fix: AnimatorController root motion forward direction when rotating object from script as well
[3.19.8] - 2023-10-10
- Add:
AnimatorController.createFromClips
utility method taking in a animationclips array to create a simple controller from. By default it creates transitions to the next clip - Fix: occasional issue where the scrollbar would cause flickering due to hiding/showing when the website was zoomed
- Fix: screenshot utility method respecting page zoom
- Fix: vite dependency watcher plugin running installation if dependency in package.json would change
- Fix: Animator root motion working with multiple states, clips and transitions
[3.19.7] - 2023-10-04
- Add: OrbitControls
enableRotate
property - Fix: LODGroup not using last LOD in cases where the last LOD is never culled
- Fix: PostProcessing EffectStack correctly ordered when using N8 Ambient Occlusion (together with Bloom for example)
- Fix: Postprocessing N8 should not modify gamma if it's not the last effect in the stack
[3.19.6] - 2023-10-02
- Fix: AudioSource does now create an AudioListener on the main camera if none is found in the scene
- Change: VideoPlayer does fallback to clip if src is empty or null
- Change: OrbitControls now expose
enableRotate
property
[3.19.5] - 2023-10-02
- Fix: web component font import
[3.19.4] - 2023-09-29
- Fix: Remove leftover OrbitControls log
- Change: Timeline TrackModel
markers
andclips
fields are now optional - Change: VideoPlayer is set to use url as default video source (if nothing is defined)
[3.19.3] - 2023-09-28
- Fix: regression in OrbitControls without lookat target assigned
- Fix: progressive textures loading with custom reflection probe
- Fix: WebAR touch event screenspace position using
this.context.input
[3.19.2] - 2023-09-27
- Add: OrbitControls
autoFit
property - Add: API to access underlying Rapier physics body using
context.physics.engine.getBody(IComponent | IRigidbody)
[3.19.1] - 2023-09-27
- Add: ParticleSystem now supports HorizontalBillboard and VerticalBillboard
- Fix: WebXR chromium bug where the tracking transform matrix rotates roughly by 90° - we now add an WebXR Anchor to keep the scene at the placed location in the real world
- Fix: SceneSwitcher does now call event on first
ISceneEventListener
found on root level of a loaded scene (e.g. if a Unity scene is loaded that contains multiple children and does not have just one root object) - Fix: Text UI clipping with multiple active screenspace canvases in scene
- Fix: Screenspace canvas events should not be blocked anymore by objects in 3D scene
- Fix: FirstPersonController rotation not being correctly / falsely resetted and flipped in some cases
[3.19.0] - 2023-09-26
- Fix: collider scale wrongly affecting physics objects
- Fix: collider debug lines should not be raycastable
- Fix: mesh-collider behaving unexpectedly
- Fix: animator root motion causing error due to uninitialized Quaternion object
[3.18.0] - 2023-09-21
- Add: SceneSwitcher has now a field for
loadingScene
which can be used to display a scene while loading other scenes - Add:
ISceneEventListener
which is called by the SceneSwitcher when a scene has been loaded or a scene is being unloaded. It can be used to handle showing and hiding content gracefully. It has to be added to the root of the scene that is being loaded (e.g. the root of the scene or prefab assigned to theloadingScene
field or the root of a scene assigned to thescenes
array) - Add:
hide-loading-overlay
attribute to<needle-engine>
webcomponent (use like<needle-engine hide-loading-overlay>
). Custom loading requires a PRO license. See all attributes in the documentation. - Fix: Loading overlay should not link to needle website anymore when using a custom logo
- Fix: Add safeguard to user assigned events on
<needle-engine>
for cases where methods are not defined in the global scope - Change: Update loading message displayed in overlay while waiting for
ContextCreated
promise (e.g. in cases where a large environment skybox is being loaded)
[3.17.0] - 2023-09-20
- Fix: handle exception when loading GLB/glTF files with invalid lightmapping extension
[3.16.5] - 2023-09-18
- Change: Ignore shadow catcher and GroundProjectedEnvironment sphere when running OrbitControls.fit
[3.16.4] - 2023-09-16
- Add: help balloon message if user tries to open a local file without using a webserver
- Add: helpful console.log if user tries to add a component that is not a Needle Engine component
[3.16.3] - 2023-09-15
- Add: logo now respects prefer-reduced-motion, reduce and is immediately added instead of after 1s
- Fix: use default background color if GLB without camera and skybox is loaded
- Fix: ensure custom KTX2 loader is correctly initialized
- Fix: revert RectTransform change that broke hotspot rendering
- Change: adjust default backgroundBlurriness to match Blender defaults
[3.16.2] - 2023-09-15
- Add: mesh collider handling for invalid mesh data (non-indexed geometry)
[3.16.2-beta] - 2023-09-13
- Add:
camera.environmentIntensity
property - Change: default background blurriness for fallback camera to match blender default
[3.16.1-beta] - 2023-09-13
- Change: if loaded glTF doesnt contain a camera we now also create the default OrbitControls (e.g. glTF exported from a Blender scene without a camera)
[3.16.0-beta] - 2023-09-13
- Add:
NEEDLE_lightmaps
entriespointer
property can now also be a path to a local texture on disc instead of a texture pointer. This allows Blender EXR and HDR maps to be used at runtime until Blender export supports hdr and exr images to be stored inside the GLB
[3.15.0-beta] - 2023-09-13
- Fix: remove leftover console.log
- Fix:
DeviceFlag
component not detecting devices correctly for iOS safari - Fix: loading glTF without any nodes
- Fix:
SceneSwitcher
bug where a scene would be added twice when switching in fast succession - Fix:
Animation.isPlaying
bool was always returning false - Fix: Handle typescript 5 decorator change to prevent VSCode error message (or cases where
experimentalDecorators
is off in tsconfig). See 179 - Fix: Improve internal lifecycle checks and component method calls
- Change: Improse ContextRegistry/NeedleEngine
ContextEvent
enum documentation - Change:
<needle-engine skybox-image=
andenvironment-image=
attributes are now awaited (loading overlay is still being displayed until loading the images have finished or failed loading)
[3.14.0-beta] - 2023-09-11
- Add: exposing
Needle.glTF.loadFromURL
in global scope to support loading of any glTF or GLB file with needle extensions and components when using the prebundled needle engine library (via CDN) - Add:
context.update
method for cases where needle engine is now owning renderer/scene/camera and the update loop is managed externally - Fix: animating custom shader property named
_Color
- Fix: issue with wrong CSS setting in Needle Engine breaking touch scroll
- Change:
?stats
now logs renderer statistics every few seconds - Change: simplify creating a new Needle Context that is controlled externally (not owning camera/renderer)
[3.13.0-beta] - 2023-09-08
- Add: ParticleSystem now also uses material color
- Add:
IEditorModificationListener.onAfterEditorModification
callback (requires@needle-tools/editor-sync@2.0.1-beta
) - Bump: Three.Quarks dependency to 0.10.6
- Update draco decoder include files
[3.12.2-beta] - 2023-09-04
- Add: option to override peerjs host and id (options) via
setPeerOptions
- Fix: potential nullreference error in AudioListener
- Fix: Networking component cases where invalid localhost input with "/" causes url to contain "//" sometimes -> we can skip one "/" in this case and make it just work for users
- Fix: package.json
overrides
syntax for quarks three.js version - Change: Screensharing bool to disable click to start networking + add deviceFilter to share(opts:ScreenCaptureOptions)
[3.12.1-beta] - 2023-09-04
- Fix: next.js/webpack useRapier setting
- Change: typestore is now globally registered
[3.12.0-beta.1] - 2023-08-28
- Fix: vite hot reload plugin to dynamically import needle engine to support usage in server-side rendering context
[3.12.0-beta] - 2023-08-28
- Add: Timeline api for modifying final timeline position and rotation values (implement
ITimelineAnimationCallbacks
and calldirector.registerAnimationCallback(this)
) - Change: Update three quarks particlesystem library to latest
- Fix: issue where onPointerExit was being called when cursor stops moving
- Fix: USDZ normal scale Z was incorrect
- Fix: Timeline Signal events using different casing than UnityEvent events
- Fix: issue where
isLocalNetwork
was falsely determined
[3.11.6] - 2023-08-15
- Remove beta
[3.11.6-beta] - 2023-08-14
- Fix: find exported animation by PropertyBinding
- Fix: USDZExporter was not exporting animation from Animation component but only from Animator
- Fix: potential issues with Animation component
clip.tracks
being null/undefined on USDZ export - Fix:
loadstart
event not being called - Fix: getComponent should always either the component or null (never undefined)
- Fix: dynamic import of websocket-ts package
- Fix: progressive texture loading wasn't properly awaited on USDZ export
- Fix: apply XR flags when exporting to QuickLook
- Fix: USDZ alpha clipping for materials without textures
- Fix: USDZ same material used in different ChangeMaterialOnClick resulted in duplicate behaviour names
- Change: set default WebARSessionRoot to "1" instead of "5"
[3.11.5-beta] - 2023-08-10
- Fix: components keep their gameObject references until
destroy
call of object's is completed when destroying an hierarchy. Previously child components might already be destroyed resulting inmyChildComponent.gameObject
being null when called inonDestroy
from a parent component - Fix: regression where timeline was not updating animations anymore if Animator had an empty AnimatorController assigned (without any states)
- Fix:
SceneSwitcher.switchScene
can now handle cases where it's called with a string url instead of an AssetReference - Fix: issue where
onPointerMove
event was being called continuously on mobile after touch had already ended - Fix: issue where GLTFLoader extensions where missing name field resulting in extensions not being properly registered (causing stencils to not work sometimes)
- Change: EventSystem raycast is now only performed when pointer has changed (moved, pressed, down, up) which should improve performance on mobile devices when raycasting on skinned meshes
- Change: peer and websocket-ts import asynchronously
- Remove: legacy include files
[3.11.4-beta] - 2023-08-04
- Fix: USDZExporter exception caused by programmatically calling
exportAsync
without quicklook button - Fix: Timeline
evaluate
while being paused - Bump three to fix issue with blend shape animation not being applied to Group objects (KHR_animation_pointer)
[3.11.3-beta] - 2023-08-03
- Change: improve styling of
<needle-engine>
DOM overlay element to allow positioning of child elements - Fix: USDZExporter normal bias when normalScale is used
- Fix: Nullreference in SceneSwitcher when creating the component from code and calling
select
with a new scene url - Fix: Quicklook button creation
- Fix: Particlesystem layermask not being respected
[3.11.2-beta] - 2023-07-31
- Fix:
ChangeMaterialOnClick
with multi material objects - Fix: progressive textures regression
[3.11.1-beta] - 2023-07-31
- Add:
saveImage
utility method and makescreenshot
parameter optional - Add:
loading-style="auto"
- Fix: skybox image caching
- Fix: finding animation tracks for unnamed nodes when using the
autoplay
attribute - Change: improved
<needle-engine>
default sizes - Change: smoother src changes on
<needle-engine>
by only showing loading overlay when loading of files takes longer than a second - Change: bump three version to 154.2 fixing KHR_animation_pointer not working with SkinnedMesh
[3.11.0-beta] - 2023-07-29
- Add: Support for blending between Timeline and Animator animation by fading out animation clips allowing to blend idle and animator timeline animations
- Fix: WebXR buttons style to stay inside
<needle-engine>
web component - Fix:
OrbitControls.fitCamera
now sets rotation target to the center of the bounding box - Fix: Timeline animation regression causing Animator not being enabled again after timeline has finished playing
- Fix: Timeline should re-enable animator when ended reached end with wrap-mode set to None
- Change: add
.js
extensions to all imports - Change: allow overriding loading style in local develoopment
- Change: expose flatbuffer scheme helper methods
[3.10.7-beta] - 2023-07-28
- Fix: Camera using RenderTarget (RenderTexture) now applies clear flags before rendering (to render with solid color or another skybox for example)
- Fix: RenderTexture not working in production build due to texture being compressed
- Fix: RenderTexture warning
Feedback loop formed between Framebuffer and active Texture
- Fix: Handle Subparticlesystem not being properly serialized avoiding runtime error
- Internal: add resource usage tracking of textures and materials
[3.10.6-beta] - 2023-07-27
- Fix: Timeline ActivationTrack behaves like
leave as is
when timeline is disabled (not changing the activate state anymore) - Fix: Timeline Signal Track with duration of 0 and signal at time 0 does now trigger
- Fix: Timeline disabling or pausing does now activate animator again
- Fix: CustomShader Time node for BiRP
- Fix: ParticleSystem simulation mode local now correctly applies parent scale
- Change: Show warning for wrong usage of
@serializable
withObject3D
where aAssetReference
is expected - Change: ParticleSystem shows warning when using unsupported scale mode (we only support local right now)
[3.10.5-beta] - 2023-07-25
- Fix: warning at runtime when methods called by
EventList
/UnityEvent
are in the wrong format - Fix: OrbitControls issue where double clicking/focus on screenspace UI would cause the camera to be moved far away
- Fix:
OrbitControls.fitCamera
where threeexpandByObject
now requires an additional call toupdateWorldMatrix
26485 - Change: replace some old
Texture.encoding
calls with newTexture.colorSpace
- Change: improve
PlayerSync
networking and addonPlayerSpawned
event - Remove:
RectTransform.offsetMin
andoffsetMax
because it's not implemented at the moment
[3.10.4-beta] - 2023-07-24
- Fix: activating UI elements in VR not applying transform
[3.10.3-beta] - 2023-07-21
- Fix: AnimatorController error caused by missing animationclip
- Fix: next.js webpack versions plugin
- Fix: Occasional
failed to load glb
error caused by not properly registeringKHR_animation_pointer
extension - Fix: UI issue where Text in worldspace canvas would be visible at wrong position for a frame
- Fix: UI issue where Text would not properly update when switching between text with and without richtext
- Fix: UI issue where Image would not automatically update when setting texture from script
- Fix: issue where RenderTexture would not be cleared before rendering
- Change: make
addEventListener
attribute on<needle-engine>
optional
[3.10.2-beta] - 2023-07-19
- Fix: iOS double touch / input
- Change: minor WebXRController refactor moving functionality into separate methods to be patchable
[3.10.1-beta] - 2023-07-18
- Fix: prebundled package
- Fix: runtime license check
- Fix: Input being ignored after first touch
- Fix: SpatialTrigger, reverting previous change where we removed the trigger arguments
[3.10.0-beta.2] - 2023-07-18
- Fix: prebundled package by locking vite to <= 4.3.9
[3.10.0-beta.1] - 2023-07-17
- Fix: prebundled package
[3.10.0-beta] - 2023-07-17
- Fix: Text clipping in VR
- Fix: AR overlay
quit-ar
button not being properly detected - Fix: Timeline animation track post-extrapolate set to
Hold
- Fix: iOS touch event always producing double click due to not properly ignoring mouse-up event
- Change: DragControls to automatically add ObjectRaycaster if none is found in parent hierarchy
- Change: DragControls now expose options to hide gizmo and to disable view-dependant behaviour
[3.10.0-alpha] - 2023-07-15
- Change: WebXR component now automatically adds a WebARSessionRoot on entering AR when no session root was found in the scene
- Change:
@syncField
can now sync objects by re-assigning the object to the same field (e.g.this.mySyncedObject = this.mySyncedObject
to trigger syncing) - Change: log error when
@syncField
is being used in unsupported types (currently we only support syncField being used inside Components directly) - Change: improve message when circular scene loading is detected and link to documentation page
[3.9.1-alpha] - 2023-07-14
- Add: SceneSwitcher now uses scene name by default. Can be turned off in component
- Fix: ParticleSystem lifetime not respecting simulation speed
- Fix: ParticleSystem prewarm with simulation speed and improved calculation of how many frames to simulate
- Fix: Exit AR and Exit VR now restores previous field of view
- Change: close AR button adjusted for better visibility on bright backgrounds
- Change: bump @types/three to 154
[3.9.0-alpha.1] - 2023-07-12
- Add: vite plugin to clamp version to
<= 4.3.9
since 4.4 and above currently cause issues with typescript decorators, vite#13736
[3.9.0-alpha] - 2023-07-12
- Add:
<needle-engine>
web component slot support, AR DOM overlay can now be added by simple adding HTML elements inside the<needle-engine></needle-engine>
web component. Fixing 164 - Add: Basic USDZ exporting of UI shadow hierarchies as mesh hierarchies for UI in Quicklook AR support
- Fix: WebXR Rig not being rotated as expected when setting up in Unity 129
- Fix: WebXR VR button click, hover is still not working
- Fix: Issue with Lightmaps breaking when switching back and forth between multiple lightmapped scenes
- Change: Button click should not invoke with middle or right mouse
[3.8.0-alpha] - 2023-07-11
- Update three.js to 154 (latest)
- Bump postprocessing dependency
- Add:
this.context.xrCamera
property - Fix: screenspace canvas should not run in VR
- Fix: OrbitControls should not update while in AR and touching the screen
- Change: allow using vanilla three.js by dynamically importing KHR_animation pointer api
[3.7.7-beta] - 2023-07-11
- Fix: LookAt copyTarget + keepUpDirection
- Fix: DragControls not working on first touch on mobile / clone input event
- Fix: Renderer assigning renderOrder in URP on SkinnedMesh with multi-material
[3.7.5-beta] - 2023-07-07
- Fix: USDZExporter should not show Needle banner when branding information is empty (pro only)
- Fix: USDZExporter sessionroot scale should be applied to object to be exported when the root is in the parent
- Fix: DropListener localhost without explicit backend url + dropping file caused exceptions
- Fix: instanceof error that tsc complained about
- Change: Fonts handle semibold variant
- Internal: DropListener re-use addFiles method, remove old code
- Internal: Bump tools package dependency
[3.7.5-alpha] - 2023-07-06
- Add: SignalEvents support for arguments
- Fix: SpatialTrigger Unity events removing extra (unexpected) event arguments
- Fix: safeguard
AudioSource.play
to not fail whenclip
argument is not a string - Change: change Timeline signal event trigger time to use last frame deltatime with padding to estimate if the event should fire
[3.7.4-alpha] - 2023-07-05
- Change: targetFps, use timestamp that we get from the animation callback event because it is more reliable on Firefox
[3.7.3-alpha] - 2023-06-26
- Add: physics gravity to
IPhysicsEngine
interface to be available viathis.context.physics.engine.gravity
- Fix: USDZ text alignment
[3.7.2-alpha] - 2023-06-23
- Fix: Nullref in SpectatorCamera.onDestroy when camera wasnt active
[3.7.1-alpha] - 2023-06-22
- Add: ChangeMaterialOnClick
fadeDuration
option (Quicklook only) - Change: USDZ export now enforces progressive textures to be loaded before export
- Change: USDZ export callbacks for
beforeCreateDocument
andafterCreateDocument
can now run async - Fix: USDZExporter quicklook button
- Fix: USDZExporter Quicklook button not being removed when exporter gets removed or disabled
- Fix: USDZ ChangeMaterialOnClick clear cache before exporting, this caused USDZ export to fail on third export in USDZ sample scene
- Fix: Engine loading bar not being updated
- Fix: USDZ text linebreaks
- Fix: UI font name style check. Unknown font styles are now not touched anymore (e.g. font name ending with
-Medium
)
[3.7.0-alpha] - 2023-06-21
- Change: Move HTML elements into <needle-engine> shadow dom
[3.6.13] - 2023-06-21
- Add: static Context.DefaultTargetFrameRate
- Add: option to prevent USDZExporter from creating the button
- Fix:
@prefix
handling promise resolving to false
[3.6.12] - 2023-06-20
- Update Readme
[3.6.11] - 2023-06-19
- Add: UI InputField API for clear, select and deselect from code
- Change: LODGroup serialization
- Fix: mobile debug console should be above loading overlay if error happens during loading
- Fix: LODGroup not being able to resolve renderer reference
- Fix: Particles direction being wrong in some causes with scaled parent and scaled particle system
- Fix: Particles subsystem emitter position being wrong when main particle system was scaled
- Fix: Bundled library failing to load due to undeclared variable
- Fix: UI InputField hide html element
- Fix: Joining empty room name is not allowed anymore
- Fix: Clamp Room name length to 1024 chars
[3.6.10] - 2023-06-14
- Fix: Text with richText not updating properly
- Internal: Change font style parsing
[3.6.9] - 2023-06-12
- Fix: Particles SizeOverLifetime module for mesh particles
[3.6.6] - 2023-06-12
- Internal updates
[3.6.5] - 2023-06-09
- Add: NestedGltf
loaded
event being raised when the glb has been loaded - Add: AnimationCurve cubic interpolation support
- Change: set targetFramerate to 60 by default (in
context.targetFrameRate
) - Fix: USDZ metalness/roughness potentially being undefined when exporting Unlit materials
- Fix: Handle exception when loading components due to bug when using meshopt compression and material count changes
- Fix: ColorAdjustments setting tonemapping exposure to 0 when exposure parameter override is off [824]
[3.6.4] - 2023-06-02
- Add:
ObjectUtils.createPrimitive
for cube and sphere - Change: expose
ObjectUtils
- Fix: BoxGizmo component
- Fix: vite copy plugin when needle.config.json "assets" directory starts with "/"
[3.6.3] - 2023-06-01
- Change: OrbitControls apply settings in update
- Fix: Rapier stripping not being respected
[3.6.2] - 2023-06-01
- Fix: wrong UI z-offset in some cases
- Fix: Particle velocity over lifetime not using world rotation
- Fix: Particle burst being played twice
- Fix: Particle
playOnAwake
option not being respected
[3.6.2-beta] - 2023-05-31
- Add:
setAllowOverlayMessages
to explictly disable overlay messages without url parameter - Add: allow larger textures for USDZ generation
- Fix: nested gltf with disposing of resources leading to broken files
[3.6.1-beta] - 2023-05-29
- Fix: removing
<needle-engine>
from DOM does now dispose the context properly and unsubscribes from browser events. Addkeep-alive
attribute to disable disposing
[3.6.0-beta] - 2023-05-29
- Add callbacks for ContextClearing
- Add: n8AO postprocessing effect (Screenspace Ambient Occlusion) support
- Add: option to disable automatic poster generation (use
noPoster
in options in vite.config) - Fix:
<needle-engine>
without any src should setup an empty scene - Change:
OrbitControls.fit
now handles empty scene and ignores GridHelper - Change: TimelineAudio disconnect audio in onDestroy
- Change: Ensure PostProcessing VolumeParameters are initialized
- Change: Improve memory allocs and disposing of resources
- Change: Update three.js fixing GLTFLoader memory leak
[3.6.0-alpha.3] - 2023-05-27
- Add:
auto-rotate
attribute - Add:
autoplay
attribute - Change: await loading of
skybox-image
andenvironment-image
- Change: do not clear renderer when switching
src
attribute
[3.6.0-alpha.2] - 2023-05-27
- Fix: error in vite plugin when
meta.json
was missing - Fix: three.js OrbitControls causing look direction to not work anymore due to forcing an update in the constructor
[3.6.0-alpha] - 2023-05-27
- Add: Changing
src
attribute now does scene cleanup and loads new files - Add:
skybox-image
andenvironment-image
attributes, allow changing both at runtime - Fix: error display overlapping in cases where somehow engine is imported twice
- Fix: logo overlay should only show when loading is done, change error during render loop message
- Fix: OrbitControls camera fitting now done once before rendering when loaded glb does not contain any camera
- Fix: Vite client plugin imports
- Change: Context now handle errors during initializing or when starting render loop
- Change: ContextRegistry exported as NeedleEngine and export hasIndieLicense function
- Change: Remove need to manually define global engine variables in cases without bundler or Needle plugins
[3.5.13-beta.1] - 2023-05-26
- Change: embed logo svg and avoid loading it
[3.5.13-beta] - 2023-05-26
- Change: OrbitControls camera fitting improved
[3.5.12-beta] - 2023-05-24
- Add: option to toggle collider visibility from script via
this.context.physics.engine.debugRenderColliders
- Change: engine.physics raycast doesnt need any parameters now anymore
- Change: OrbitControls default target should be related to distance to center (if nothing is hit by raycast)
- Fix: EventList object and component argument deserialization
[3.5.11-beta] - 2023-05-22
- Add:
@registerType
decorator that can be added to classes for registration in TypeStore. Currently only useful for cases outside of Unity or Blender for Hot Reload support - Fix:
Component.name
should return Object3D name - Fix: GameObject static methods generic
- Fix: Logo animation causing browser scrollbar to appear
[3.5.10-beta] - 2023-05-22
- Add: SpriteRenderer now exposes shadow casting and transparency options
- Fix: vite plugin issue caused by missing src/generated/meta
- Fix: nullref in debug_overlay, typo in physics comment
- Fix: disabling collider with rigidbody component did cause an error in rapier
- Fix: HTMLElement css, cleanup loading element, move logo into html element
- Fix: GameObject.addComponent now takes Object3D type too
- Fix: loading overlay not hiding when <needle-engine> src changes
- Change: OrbitControls now sets target to 10 meter by default if nothing is assigned or hit in the scene (previously it was set to 1 meter)
- Change: fit camera to scene after loading when no camera is present in file
[3.5.9-beta.2] - 2023-05-20
- Add: WebXRPlaneTracking should initiate room setup on Quest when no tracked planes are found
[3.5.9-beta.1] - 2023-05-19
- Fix: SceneSwitcher should ignore swipe events when
useSwipe
is disabled
[3.5.9-beta] - 2023-05-19
- Add: Support for progressive texture loading for custom shaders
- Fix: react-three-fiber template
[3.5.9-alpha.2] - 2023-05-18
- Add: needle-engine attributes documentation
- Change: assign main camera during gltf component deserialization when no camera is currently assigned
[3.5.9-alpha] - 2023-05-18
- Add: add nextjs plugin to handle transpiling and defines
- Change: expose USD types to make custom behaviours, add proximityToCameraTrigger
- Fix: loading element position to absolute to avoid jumps when added to e.g. nextjs template
- Fix: texcoords werren't quicklook compatible in ThreeUSDZExporter
- Fix:
LookAt
component with invertForward option was flipped vertically in QuickLook
[3.5.8-alpha] - 2023-05-16
- Add NeedleConfig
baseUrl
for codegen - Change: AudioSource should pause in background on mobile
- Fix: logo svg import for nextjs
- Fix: particle system playOnAwake
[3.5.7-alpha] - 2023-05-15
- Add: Initial support for text in USDZ
- Change: add generic to
networking.send
for validation of model - Change: SyncedRoom, expose tryJoinRoom method + remove error thrown when roomName.length <= 0, join room in onEnable
- Fix: setting position on UI object (RectTransform) works again
- Fix addressable instantiate options called with
{ position: .... }
and without a parent, it should then still take the scene as the default parent - Fix: WebXR
arEnabled
option - Fix: Worldspace canvas always being rendered on top
- Fix: CanvasGroup alpha not being applied to text
[3.5.6-alpha] - 2023-05-12
- Fix defines for vanilla JS usage
- Fix CanvasGroup not overriding alpha
- Remove some spurious logs
- Add
addComponent
method to this.gameObject - Add "light" version on bundle processing
[3.5.5-alpha.1] - 2023-05-11
- Fix: declare missing defines for pre-bundled engine
[3.5.5-alpha] - 2023-05-11
- Add: getWorldDirection
- Add: needle.config.json
build.copy = []
to copy files on build from arbitrary locations into the dist folder for example:"build": { "copy": [ "cards" <-- can be relative or absolute folder or file. In this case the folder is named "cards" in the web project directory ] }
- Add ip and location utils
- Change: add buffers for getWorldQuaternion, getWorldScale util methods
- Change: animatorcontroller should only log "no-action" warning when in debug mode
- Fix: apply and check license
[3.5.4-alpha] - 2023-05-11
- Fix: wrong serialization check if a property is writeable
- Fix: mark UI dirty when text changes
- Change: allow UI graphic texture to be set to null to remove any texture/image
- Change: rename USDZExporter
overlay
tobranding
[3.5.3-alpha.1] - 2023-05-10
- Fix: wrong check in serialization causing particles to break (introduced in 3.5.3-exp)
[3.5.3-alpha] - 2023-05-10
- Add:
IPointerMoveHandler
interface providingonPointerMove
event while hovered - Add: USDZ AudioSource support and PlayAudioOnClick
- Change: balloon messages can now loop
- Change: pointer event methods are now lowercase
- Change: allow
moveComponent
to be called with component instance that was not added to a gameObject before (e.g. created in global scope and not using theaddComponent
methods) - Fix: input pointer position delta when browser console is open
- Fix: GameObject.destroy nullcheck
- Fix: typescript error because of import.meta.env acccess
- Fix: issue where added scenelighting component by extension caused animation binding to break
- Fix: UI layout adding objects dynamically by setting anchorMinMax
- Fix: Prevent exception during de-serialization when implictly assigning value to setter property
- Fix: screenspace canvas being rendered twice when using explicit additional canvas data component
- Fix: EventSystem cached state of hovered canvasgroup not being reset causing no element to receive any input anymore after having hovered a non-interactable canvasgroup once
- Fix: empty array being returned in
GameObject.getComponents
call when the passed in object was null or undefined
[3.5.2-alpha] - 2023-05-09
- Add: SceneSwitcher preload feature
- Change: interactive behaviours for QuickLook are on by default now
- Fix: SetActiveOnClick toggle for QuickLook
- Fix: USDZ texture transform export works in more cases
[3.5.1-alpha] - 2023-05-09
- Fix: reflection probes not working anymore
- Fix: false RectTransform return breaking some cases with reparenting
- Fix: RectTransform mark dirty when anchors change (due to animation for example)
[3.5.0-alpha] - 2023-05-08
- Change: allow tree-shaking rapier physics
- Fix various USDZ export issues:
- fix UV2 for occlusion maps (paves the way for lightmaps), had to be texCoord2f[] instead of float2[]
- fix missing MaterialBindingAPI schema
- fix normal scale for non-ARQL systems (ARQL doesn't support it though, but needed for other viewers)
- fix input:scale for textures not being used if it's (1,1,1,1)
- fix normal maps not being in raw colorSpace
[3.4.0-alpha] - 2023-05-05
- Add: low-level USD Actions/Triggers API for building complex interactions for iOS devices
- Add: high-level USDBehaviours components: ChangeMaterialOnClick, PlayAnimationOnClick, SetActiveOnClick, HideOnStart
- Add: LookAt component now supports iOS AR
- Add: more settings for LookAt
- Add: support for Horizontal- and VerticalLayoutGroup (UI)
- Fix:
setWorldScale
was setting incorrect scale in some cases - Fix: WebXR Image Tracking now works with WebARSessionRoot / rig movements
- Fix: vite reload only when files inside "assets" change and only if its a known file type
[3.3.0-alpha] - 2023-05-02
- Add: AssetReference can now handle scene reference
- Add: UI update with support for screenspace UI, anchoring, pivots, image outline effect, image pixelPerUnit multiplier
- Add: basic LookAt component
- Add: basic UI outline support + handle builtin Knob image
- Add: WebXRImageTracking ability to directly add a tracked object to an image marker
- Fix: OrbitControls should only update when being the active camera
- Fix: UI input ignored browser "mouseDown" for each "touchUp" event
- Fix: OrbitControls requiring additional tab after having clicked on UI
- Fix: OrbitControls only being deactivated when down event starts on UI element
- Fix: loading bar text not being decoded (displayed e.g.
%20
for a space) - Fix: TransformGizmo not working anymore
[3.2.15-alpha] - 2023-04-28
- Add: SceneSwitcher.select(AssetReference) support to be invoked from a UnityEvent with an object reference (must be an asset)
- USDZExporter: change exported usdz name, remove needle name for license holders
[3.2.14-alpha] - 2023-04-28
- Add: OpenURL component
- Change: Implictly add Raycaster to scene if it is not found.
- Fix: USDZ export breaking if the object name is just a number
[3.2.13-alpha] - 2023-04-27
- Add: USDZExporter editor shows warning if no objects are assigned and exposes quicklook overlay texts
- Add: USDZExporter callToActionButton can now invoke url to open
- Add: SceneSwitcher can now use history without updating the url parameter
- Fix: Fix vite html transform plugin
[3.2.12-alpha] - 2023-04-26
- Fix: issue where removing an object from the scene would disable all its components
[3.2.11-alpha] - 2023-04-25
- Fix: lighting settings being implictly switched (enabled/disabled) when using SyncedCamera / any loaded prefab at runtime
[3.2.10-alpha] - 2023-04-25
- Fix: Remove log in
Animator.SetTrigger
- Fix: GroundEnv radius property setting wrong value internally
- Fix: Apply license to unnamed local vite chunk files
[3.2.9-alpha] - 2023-04-23
- Fix: VideoPlayer not restarting when enable/disable being toggled
- Fix: Builtin serializer for URLs
@serializable(URL)
should ignore empty strings - Change: set
enabled
to true before callingonEnable
- Change: VideoPlayer now deferrs loading of the video until the video should play
- Change: ScreenSharing component now changes cursor pointer on hover to indicate that is can be clicked
[3.2.8-alpha] - 2023-04-23
- Add: this.context.getPointerUsed(index) and setPointerUsed(index)
- Change: physics now by default receives collisions/triggers between two colliders that are set to trigger
[3.2.7-alpha] - 2023-04-22
- Change: ambient light does now look closer to Unity ambient light
- Fix: guard calls to component event methods when the component or object has been destroyed
[3.2.6-alpha] - 2023-04-21
- Add: SceneSwitcher has now option to automatically set scene environment lighting
- Fix: Issue caused by NeedleEngineHTMLElement import from SceneSwitcher
- Change: Allow component to be disabled in awake (e.g. calling
this.enabled = false
in awake callback) - Change: Export more types e.g. AnimatorStateMachineBehaviour
- Change: VolumeParameter.value should return rawValue (unprocessed)
- Change: rename "rendererData" to "sceneLighting"
- Change: scene lighting must now be enabled explictly when additional scene are being loaded, use
this.context.sceneLighting.enable(...)
with the AssetReference or sourceId of the scene you want to enable
[3.2.5-alpha.1] - 2023-04-20
- Change: export more types
[3.2.5-alpha] - 2023-04-20
- Add: WebXRPlaneTracking
- Add:
<needle-engine loading-style="light">
for a brighter loading screen - Fix: InputField.onEndEdit should send string
- Change: move webxr into subfolder
- Change: export more types
[3.2.4-alpha.2] - 2023-04-20
- Change: export more types
[3.2.4-alpha] - 2023-04-20
- Change: export more types (e.g.
syncField
) - Fix: PlayerSync
- Fix: Environment lighting
- Fix: license check
[3.2.3-alpha] - 2023-04-20
- Fix: VideoPlayer AudioOutput.None should mute video
- Fix: SpriteRenderer applies layer from current object (e.g. for IgnoreRaycast)
[3.2.2-alpha] - 2023-04-19
- Fix: issue where the environment lighting would be falsely disabled
- Change: minor improvements to initial state of the SceneSwitcher
[3.2.1-alpha] - 2023-04-19
- Change: SceneSwitcher clamp option
- Change: timeline signals without bound receiver are now invoked globally on all active SignalReceivers with the specific signal asset
- Change: internal check preventing errors during initialization for projects where the package is falsely added multiple times to the project by importing from internal types directly instead of
from "@needle-tools/engine"
[3.2.0-alpha] - 2023-04-19
- Add: built-in SceneSwitcher component
- Change: VideoPlayer.playInBackground is set to true by default
- Change: Screensharing should continue playback of receiving video when the sending tab becomes inactive
- Change: log additional information when button events can not be resolved
- Change: AudioSource.playInBackground set to true by default to allow audio playback when tab is not active
- Change: syncField can now take function argument
- Change: Renderer.sharedMaterials can now be iterated using
for(const mat of myRenderer.sharedMaterials)
- Fix: lightmap not being resolved anymore
- Fix: environment lighting / reflection not switching with scenes
- Fix: progressive texture did not check if the texture was disposed when switching to an unloaded scene resulting in textures being black/missing
- Fix: timeline does enable animator again when pausing/stopping allowing to switch to e.g. idle animations controlled by an AnimatorController
- Fix: changing material on renderer with lightmapping will now re-assign the lightmap to the new material
[3.1.0-alpha.2] - 2023-04-18
- Fix: UI font style resolving
[3.1.0-alpha.1] - 2023-04-18
- Fix: RemoteSkybox not being able to load locally reference dimage
- Fix: ParticleSystem sphere scale not being applied anymore
- Fix: WebXRImageTracking url not being resolved
[3.1.0-alpha] - 2023-04-18
- Add:
ImageReference
type, use to export textures to external files and load them asimg
,texture
or to get the binary data for e.g. image tracking - Add: api for
WebXRImageTracking
, this does currently require thewebxr-incubations
flag to be enabled - Add: TiltShift postprocessing effect
- Add: AnimatorController support for negative speed
- Change: ParticleSystem now has a reset method to allow for clearing state, stop has options for calling stop on Sub-Emitters and to clear already emitted particles
[3.0.1-alpha.5] - 2023-04-17
- Add:
this.context.xrFrame
to get access to the current XRFrame from every lifecycle event method - Change: license check is now baked
- Change: Rename "EngineElement" to NeedleEngineHTMLElement
- Change: disable "Enable Keys" on OrbitControls by default as it conflicts with so many things
- Fix: ParticleSystem circle shape
- Fix: balloon messages are now truncated to 300 characters
- Fix: Screensharing connection setup and start of video playback
- Fix: Screensharing muting now local audio
- Fix: AudioSource does not play again when it did finish and the user switches tabs
- Fix: ParticleSystem prewarm
- Fix: ParticleSystem minMax size, it's currently not supported and should thus not affect rendering
[3.0.1-alpha.4] - 2023-04-12
- Bump with changed package.json
[3.0.1-alpha.3] - 2023-04-11
- Fix: WebXR all layers should be visible
- Fix: WebXRController raycast on all layers
- Fix: issue with mouse vector position being re-used causing delta position being falsely modified
- Change: store static Context.Current in globalThis
- Change: alias resolve imports
@needle-tools/engine/engine
and@needle-tools/engine/src
to lib folder
[3.0.0-alpha] - 2023-04-05
- Add: vite alias plugin
- Add: vite copyfiles plugin
- Fix: lib sourcemap path
- Fix: Postprocessing not being applied
- Internal: needle vite plugin names now all start with "needle-"
[2.67.16] - 2023-04-13
- Add: static
AudioTrackHandler.dispose
for disposing loaded audio data in timeline - Fix: issue where only the first audio clip would be played in a timeline with multiple audio clips of the same file
- Change: Text should not change font name casing
- Change: Timeline does now wait for audio and first interaction by default (if any audio track is being used, this can be disabled by setting
waitForAudio
to false on the PlayableDirector component) - Change: postprocessing DOF exposes resolution scale and takes device pixel density into account. By default the resolution is slightly lowered on mobile devices
[2.67.14-pre] - 2023-04-12
- Change: WebXR camera now copies culling mask from main camera
- Fix: WebXRController raycast on all layers
- Fix: WebXR all layers should be visible
- Fix: set pointer position properly on mouse down to prevent jumps in delta
- Fix: respect IgnoreRaycast in physics raycasts
- Fix: issue with CircularBuffer where sometimes the same item was returned twice
- Fix: boxcolliders with scale 0 (such as adding a BoxCollider to a plane) resulted in flipped normals being returned from raycasts
- Fix: parenthesis error in CharacterController
- Fix: issue with mouse vector position being re-used causing delta position being falsely modified
[2.67.13-pre] - 2023-04-11
- Fix: Animation component settings
- Fix: instanced renderer matrix auto update
- Change: enable shadow casting in instanced rendering when any mesh has castShadow enabled
- Change: export ui pointer events
[2.67.12-pre] - 2023-04-09
- Add: SSAO color and luminance influence options
- Change: postprocessing now exposes effect order
[2.67.11-pre] - 2023-04-08
- Add: some checks for WebGPURenderer
[2.67.10-pre] - 2023-04-06
- Add vite copy files build plugin
- Fix: PostProcessing not applying effects when enabled for the second time as well as removing earlier hack
- Change: update user-select/touch-action in project templates style.css to prevent accidental iOS selection of canvas
- Change: disable text selection on Needle logo
- Bump three version, see changes below
Three
- change USDZExporter: pass writer into onAfterHierarchy callback, move onAfterHierarchy callback after scene hierarchy write
- fix USDZExporter: fix exception when trying to process render targets
- fix WebXRManager: Correctly update the user camera when it has a parent with a non-identity transform.
[2.67.9-pre] - 2023-04-03
- Change: SpriteRenderer material to transparent
- Bump: tools package dependency
[2.67.8-pre.1] - 2023-03-31
- Fix: exception when using BoxColliders caused by error in initial activeInHierarchy state assignment
[2.67.8-pre] - 2023-03-31
- Fix: vite plugins must have a name
- Fix: activeInHierarchy update when key is undefined (e.g. in r3f context)
- Change: cleanup r3f component
[2.67.7-pre] - 2023-03-30
- Add: time smoothed delta time
- Add this.context.targetFrameRate
- Fix: enum / type conversion errors
- Fix: CanvasGroup overriding text
raycastTarget
state in event handling causing problems with button events - Fix: Text z-fighting from invisible ThreeMeshUI frame object
- Change: Canvas
renderOnTop
moved into separate render call to avoid ordering issues and postprocessing affecting overlay UI - Internal: Move context from engine_setup to engine_context
[2.67.6-pre] - 2023-03-30
- Fix: Postprocessing enforce effect order
- Change: gizmos should not render depth
[2.67.5-pre] - 2023-03-30
- Fix: issue where postprocessing did not check composer type (e.g. when using threejs composer instead of pmndrs package)
- Change: Postprocessing now uses stencil layers
[2.67.4-pre] - 2023-03-28
- Change: Postprocessing effects value mapping / settings improved (Bloom & ColorAdjustments)
[2.67.3-pre] - 2023-03-28
- Fix: issue where progressive textures would not be applied correctly anymore
- Fix: Timeline audio loading on firefox
- Fix: issue where progressive textures with reflection probes wouldn't be applied correctly anymore
[2.67.2-pre] - 2023-03-28
- Change: calculations for rect transform animation offsets
- Change: Warn if engine element src contains a url without .glb or .gltf
[2.67.1-pre] - 2023-03-28
- Fix: PostProcessing failing to be re-applied after exit XR
[2.67.0-pre] - 2023-03-27
- Add:
this.gameObject.destroy
as a shorthand forGameObject.destroy(this.gameObject)
- Add: support for camera
targetTexture
to render into a RenderTexture (when assigned to e.g. the main camera in Unity) - Add: utility methods to toplevel engine export (for example
getParam
,delay
,isMobileDevice
,isQuest
) - Add: first version of usage tracking of materials, textures and meshes. This is off by default and can be enabled using the
?trackusage
url parameter. When enabledfindUsers
can be used to find users of an object. - Add: pmnders postprocessing package
- Change: improved PlayerState component and added event for PlayerState events for owner change (to properly listen to first assignment)
- Change:
AssetReference.unload
now calls dispose to free all resources - Change:
WebXR
component now has static field for modifying optionalFeatures - Change:
Physics.RaycastOptions
now have asetLayer
method to simplify setting the correct layer mask (similar to Unity's layers to enable e.g. just layer 4 for raycasting) - Change:
RemoteSkybox
now requests to re-apply clear flags on main camera when disabling to restore previous state. - Fix: issue where component instances were created using wrong method causing arrow functions to be bound to the wrong instance
- Fix:
@syncField
now properly handles destroy of an component - Fix: react-three-fiber template
- Fix: ParticleSystem prewarm safeguard and additional checks where emission is set to 0
- Fix: Timeline only playing first audio clip
- Fix: Issue where scene with multiple root glbs cross-referencing each other were not being resolved correctly in all cases
- Fix: Progressive textures not being loaded when using tiling
- Fix: Text UI anchoring
[2.66.1-pre] - 2023-03-16
- Add:
sphereOverlapPhysics
function for more accurate sphere overlap detection using rapier - Fix: Gizmos should be excluded from being hit by raycasts
- Fix: Gizmo sphere radius was twice the desired size
- Fix: Physics now prevent negative collider scale
- Fix: renderer instancing auto update when using multi material objects
- Change: Show warning that stencil and instancing doesnt work together at the moment
[2.66.0-pre] - 2023-03-14
- Add: particle system prewarm support
- Add:
poseMatrix
argument in WebARSessionRoot.placedSession event - Add: MeshCollider minimal support for submeshes (they can be added but currently not removed from the physics world)
- Fix: debug_overlay error when rejection reason is null
- Fix typo beginListenBinrary → beginListenBinary
- Fix: particle system staying visible after disabling gameObject
- Fix particle system not finding subemitter in certain cases
- Fix: particles with subemitters and trails and disabled "die with particle" should emit subemitter when the particle dies (and not when the trail dies)
- Fix: Loading overlay now hides when loading is done and the first frame has finished rendering
- Change: rename networking
stopListening
tostopListen
for consistency - Change: addressables allow up to 10k instantiations per frame before aborting
- Change: set material shadowSide to match side
- Change: generate poster image with 1080x1080 px and add
og:image:width
andog:image:height
meta tags
[2.65.2-pre] - 2023-03-11
- Change: custom shaders should not log warning for unsupported
OrthoParams
shader property - Change: Animator methods starting with uppercase are marked as deprecated because UnityEvent methods are now exported starting with lowercase letter, added lowercase methods
[2.65.1-pre] - 2023-03-10
- Fix: ParticleSystem using
min/max
size in the renderer module is now minimally handled - Fix: ParticleSystem emission when using local space with scaled parents
- Fix: ParticleSystem not finding SubEmitter systems
- Fix: ParticleSystem simulation speed not being applied to gravity and initial speed
- Fix: RemoteSkybox not resolving relative url correctly (when assigning a cubemap in the editor)
[2.65.0-pre.1] - 2023-03-10
- Fix: issue where
<needle-engine>
element was not yet in the DOM when queried by exporter codegen which caused the paths to not be assigned and the engine to not load
[2.65.0-pre] - 2023-03-09
- Add: runtime checks for recursive loading to prevent it from breaking
- Change: internal duplicate active state on
Object3D
has been removed, insteadvisible
is used. This was previously a workaround for theRenderer
setting the visible state when being enabled or disabled but this has been changed in a previous version and it now only sets a flag in the object's Layers instead (which allows for a single object in the hierarchy to not being rendered by settingRenderer.enabled = false
while objects in the child hierarchy stay visible) - Change:
<needle-engine>
src attribute can now also take an array of glbs to load. This simplifies codegen done by exporters and also prevents errors due to bundler optimizations as well as being easier to understand. Runtime changes of thesrc
attribute (especially when using arrays of files) have not been tested for this release. Networking forsrc
changes has been removed in this release. - Change: move engine into src subfolder. All paths to explicit script files are now
@needle-tools/engine/src/...
- Change: poster screenshot will be taken after 200ms now
- Change: canvas default set to false for castShadow and receiveShadow
- Change: Remote skybox should not set
scene.background
when in XR with pass through device (e.g. when using Quest Pro AR or AR on mobile) - Fix: issue where ColorAdjustments Volume effect was applied with
active
set to false - Fix:
Light
not being enabled again after disabling the component once
[2.64.0-pre] - 2023-03-07
- Add:
PlayableDirector
now correctly applies timescale - Add:
PlayableDirector.speed
property allowing to play the timeline at different speeds or even reverse (reversed audio playback is not supported at the moment) - Add:
Physics.enabled
property for disabling physics updates. This also prevents any collider shapes to be created - Add:
this.gameObject.transform
property to ease getting started for devs coming from Unity. This property is merely a forward tothis.gameObject
and shouldnt really be used. The property description contains information and a link to the docs with further information. - Fix: instanced materials using progressive loading are now correctly updated
- Fix: Timeline animation tracks now disable the
Animator
. This fixes cases where two animations were played at the same time. When the PlayableDirector is paused or stopped the animator state is reset - Fix: License styles leaking into website
- Fix: Timeline audio not stopping correctly at end of timeline when set to hold
- Change: improve instancing updates, instanced objects now auto update detect matrix changes. This includes improvements of instancing when used with
Animation
components - Change: set particle system layers to
IgnoreRaycast
to not receive wrong click events on batched particle meshes - Change: Timeline audio is now loaded on evaluation. Only clips in a range of 1 second to the current time are loading. To manually trigger preload of audio you can invoke
loadAudio
with a time range on audio tracks of a timeline
[2.63.3-pre] - 2023-03-03
- Fix: engine published to npm was missing vite plugins
[2.63.2-pre] - 2023-03-03
- Fix: license styling in some cases
- Fix: duplicatable + draggable issue causing drag to not release the object (due to wrong event handling)
- Fix duplicatable + deletion not working properly
- Fix: timeline breaking when time is set to NaN
[2.63.1-pre] - 2023-03-02
- Add: components now have
up
andright
vectors (access viathis.up
from a component) - Fix: import of license and logo for npm package
[2.63.0-pre] - 2023-03-01
- Add: licensing information
- Add: logo to loading display
- Change: VideoPlayer now exposes VideoMaterial
- Change: Screencapture now only accepts clicks with pointerId 0 (left mouse button, first touch) to toggle screen capture
- Change: expose physics gravity setting
this.context.physics.gravity
[2.62.2-pre] - 2023-02-27
- Add: support for
camera-controls
attribute on<needle-engine>
element. When added it will automatically add anOrbitControls
component on start if the active main camera has no controller (you can assign custom controllers by callingsetCameraController
with the camera that is being controlled) - Fix: rare error in extension_util
- Fix: timeline preExtrapolation setting
- Fix: disabling Light component should turn off light
- Fix: animating camera fov, near or far plane
- Fix: threejs layer patch for Renderer visibility is now always applied
- Fix: UI runtime instantiate of canvas from templates in scene
- Fix: UI text did not update shadow-component-owner on font loading
- Fix: UI EventSystem raising click event multiple times in some cases
- Fix: UI Text raycast now respects object layer (NoRaycast)
- Fix: UI duplicate pointerUp event
- Fix: UI highlighting getting stuck in wrong state sometimes
[2.62.1-pre] - 2023-02-23
- Fix: pause wasn't evaluating and thus not pausing audio tracks
- Fix: debug overlay styles were not properly scoped and affected objects inside needle-engine tag
- Fix: Addressables wrong recursive instantiation error
- Fix: UI not showing fully when setting active at runtime
- Change: timeline tracks are now created immediately but their audio clips are deferred until audio is allowed
[2.62.0-pre] - 2023-02-13
- Bump version
[2.61.0-pre] - 2023-01-30
- Add: canvas applyRenderSettings
- Add: progressive support for particle system textures
[2.60.4-pre] - 2023-01-27
- Fix UI prefab instantiate throwing error at runtime
- Change: show warning when unsupported canvas type is selected
- Change: show warning when trying to use webxr features in non-secure context
[2.60.3-pre] - 2023-01-26
- Fix: camera fov for blender export allowing fieldOfView property to be undefined, where the fov should be handled by the blender exporter completely.
[2.60.2-pre] - 2023-01-26
- Fix: particle textures being flipped horizontally
[2.60.1-pre] - 2023-01-25
- Change: export Mathf in `@needle.tools/engine`
[2.60.0-pre] - 2023-01-25
- Add: Particles support for horizontal and vertical billboards
- Add: Timeline now supports reversed clip (for blender timeline)
- Change: bump gltf pipeline package dependency adding support for global
NEEDLE_TOKTX
environment variable - Change: timeline clip pos and rot are now optional (for blender timeline)
- Fix: when first loading a gltf pass guidsmap to components (for blender timeline)
- Fix: scrubbing TimelineTrack scrubs audio sources as well now
- Fix: stencils for multimaterial objects
[2.59.2-pre] - 2023-01-21
- Add: particles basic support for on birth and ondeath subemitter behaviour
[2.59.1-pre.1] - 2023-01-20
- Fix: issue where click on overlay html element did also trigger events in the underlying engine scene
[2.59.1-pre] - 2023-01-20
- Add: SpectatorCam.useKeys to allow users to disable spectator cam keyboard input usage (
f
to send follow request to connected users andesc
to stop following) - Change: expose SyncedRoom.RoomPrefix
[2.59.0-pre] - 2023-01-18
- Add: AssetReference.unload does now dispose materials and mesh geometry
- Add:
setParamWithoutReload
now accepts null as paramValue which will remove the query parameter from the url - Change: timeline does now skip export for muted tracks
- Change: OrbitControls can now use a custom html target when added via script and before enable/awake is being called (e.g.
const orbit = GameObject.addNewComponent(this.gameObject, OrbitControls, false); orbit.targetElement = myElement
) - Change: Input start events are now being ignored if a html element is ontop of the canvas
- Fix: use custom element registry to avoid error with
needle-engine element has already been defined
- Fix: timeline not stopping audio on stop
- Fix: input click event being invoked twice in certain cases
- Fix: ParticleSystem start color from gradient
- Fix: ParticleSystem not properly cleaning up / removing particles in the scene in onDestroy
- Fix: ParticleSystem velocity now respects scale (when mode is set to worldscale)
[2.58.4-pre] - 2023-01-14
- Update gltf-extensions package dependency
[2.58.3-pre] - 2023-01-13
- Bump version
[2.58.2-pre] - 2023-01-12
- Change: use draco and ktx loader from gstatic server by default
- Change: reduce circular dependencies
- Fix: Reflectionprobe selecting wrong probe when multiple probes had the exact same position
[2.58.1-pre] - 2023-01-09
- Add: Prewarm rendering of newly loaded objects to remove lag/jitter when they become visible for the first time
- Change: renderer now warns when sharedMaterials have missing entries. It then tries to remap those values when accessing them by index (e.g. when another component has a material index serialized and relies on that index to be pointing to the correct object)
[2.58.0-pre] - 2023-01-09
- Add: EventSystem input events (e.g. IPointerClick) are now invoked for all buttons (e.g. right click)
- Add: Hot reload for components
[2.57.0-pre] - 2023-01-07
- Remove: Meshline dependency
- Fix: Testrunner Rigidbody import error
[2.56.2-pre] - 2023-01-06
- Change: Component.addEventListener argument can now derive from Event
[2.56.1-pre] - 2023-01-05
- Fix: UI setting Image.sprite property did apply vertical flip every time the sprite was set
[2.56.0-pre] - 2023-01-04
- Add: file-dropped event to DropListener
- Add: UI image and raw image components now support updating texture/sprite at runtime
- Change: Bump needle gltf-transform extensions package adding mesh compression and caching for texture compression leading to significant speedups for subsequent production builds (only changed textures are re-processed)
- Fix: light normal bias defaults
[2.55.2-pre] - 2023-01-02
- Add: Rigidbody.gravityScale property
- Add: Gizmos.DrawArrow method
- Add: Rigidbody.getAngularVelocity method
- Fix: Mesh collider center of mass
[2.55.1-pre] - 2022-12-30
- Add: Warning when serialized component field name is starting with uppercase letter
- Change: bump component compiler dependency
- Fix: Particle rotation over lifetime
- Fix: Particles should not emit when emission module is disabled
- Fix: LODGroup breaking rendering when used with multi-material objects or added on mesh to be culled directly
[2.55.0-pre] - 2022-12-21
- Add: PhysicsMaterial support
- Add:
Time.timesScale
factor - Change: VideoPlayer exposes underlying HTML video element
- Change: EffectComposer check if
setPixelRatio
method exists before calling - Change: WebARSessionRoot and Rig rotation
- Fix: WebXRController raycast line not being visible in Quest AR
- Fix: Renderer that is disabled initially now hides object
- Fix: Some ParticleSystem worldspace settings when calling emit directly
[2.54.2-pre] - 2022-12-19
- Change: debug parameter can now take
=0
for disabling them (e.g.freecam=0
) - Fix: InputField opens keyboard on iOS
[2.54.1-pre] - 2022-12-15
- Fix: issue with progressive loading, loading files multiple times if a texture was used in multiple materials/material slots. This was causing problems and sometimes crashes on mobile devices
- Fix: balloon messages using cached containers didnt update the message sometimes and displaying an old message instead
[2.54.0-pre.1] - 2022-12-14
- Fix: bump gltf extensions package fixing issue with progressive texture loading when multiple textures had the same name
[2.54.0-pre] - 2022-12-14
- Add: start and end events for progressive loading
- Add: USDZExporter events for button creation and after export
- Change: apply WebARSessionRoot scale to exported object, e.g. if scene is scaled down on Android it should receive the same scale when exporting for Quicklook
- Fix: process reflection probe update in update event to avoid visible flickr after component enabled state has changed
[2.53.1-pre.1] - 2022-12-12
- Fix: implement ButtonColors
[2.53.1-pre] - 2022-12-12
- Add: GroundProjection appyOnAwake to make it possible to just use it when the environment changes via remote skybox and not apply it to the default skybox
- Change: more strict tsconfig
- Change: allow overriding loading element
- Fix: apply shape module rotation to direction
- Fix: ParticleSystem world position not being set when shape module was disabled
[2.53.0-pre] - 2022-12-08
- Add: InstantiateIdProvider constructor can now take string too for initializing seed
- Add: USDZExpoter component enabling
Open in Quicklook
option by default when running on iOS Safari - Fix: Light intensity
- Fix: Add workaround texture image encoding issue: https://github.com/needle-tools/needle-engine-support/issues/109
- Fix: OrbitControls.enableKeys
- Fix: Remove warning message about missing
serializable
when the reference is really missing - Fix:
context.domX
anddomY
using wrong values when in AR mode
[2.52.0-pre] - 2022-12-05
- Add iOS platform util methods
- Add
?debugrig
to render XRRig gizmo - Add support for Spritesheet Animation
- Add: EventTrigger implementations for onPointerClick, onPointerEnter, onPointerExit, onPointerDown, onPointerUp
- Add: RemoteSkybox environmentBlurriness setting
- Fix: Renderer reflection probe event order issue not applying reflection probes when enabling/disabling object because reflection probes have not been enabled
- Fix: remove log in ParticleSystemModules
[2.51.0-pre] - 2022-11-30
- Change: remove nebula, dat.gui and symlink package dependencies
- Change: Light does not change renderer shadowtype anymore
- Change: update threejs to 146
- Change: update threejs types
- Change: Screencapture should not start on click when not connected to networked room
- Change: WebXR returns ar supported when using Mozilla WebXR
- Fix DragControls drag interaction not disabling OrbitControls at right time
- Fix physics collider position in certain cases
- Fix Rigidbody not syncing physics position when parent transform changes
- Fix Timeline awake / active and enable
- Fix: OrbitControls calulcating target position with middle mouse click in worldspace instead of localspace causing wrong movement when parent is transformed
- Fix: Raycast in Mozilla WebXR / using window sizes instead of dom element sizes
- Fix input with scrolled window
- Fix: destroy local avatar on end of webxr session (https://github.com/needle-tools/needle-engine-support/issues/117)
- Fix: WebXRAvatar setting correct XRFlags
[2.50.0-pre] - 2022-11-28
- Add warning to Light when soft shadows change renderer shadow type
- Add: RemoteSkybox can now load jpg and png textures as skybox
- Change: Instantiate does now copy Vector, Quaternion and Euler objects to ensure multiple components dont share the same objects
- Fix: AnimatorController causes threejs error when creating empty animationclip (Blender)
- Fix: AnimatorController error when transition has no conditions array (Blender)
[2.49.1-pre] - 2022-11-25
- Add circular instantiation check to AssetReference
- Allow filtering
context.input.foreachPointerId()
by pointer types (e.g. mouse or touch) - Fix typescript error in particle system module function (happened only when
strict
was set to false in tsconfig) - Fix XRFlag component not being applied on startup
[2.49.0-pre] - 2022-11-24
- Add: input iterator methods to loop over currently active input pointer ids
- Change: input refactor to work better with touch
- Fix GraphicRaycaster serialization warning
- Fix deserialization bug when Animation clips array is not serialized (exported from blender)
- Fix: remove leftover log in AnimatorController when cloning
- Fix XR flag not correctly restoring state
- Fix reticle not being rendered when XRRig is inside WebARSessionRoot
- Fix Mozilla XR AR overlay (https://github.com/needle-tools/needle-engine-support/issues/81)
- Fix Mozilla XR removing renderer canvas on exit AR (https://github.com/needle-tools/needle-engine-support/issues/115)
[2.48.0-pre] - 2022-11-23
- Add: debug console for better mobile debugging (shows up on error on mobile in local dev environment or when using the
?console
query parameter) - Add: dom element visibility checks and suspend rendering and update loops (if
this.context.runInBackground
is false) - Add:
this.context.isPaused
to manually suspend rendering - Add:
IComponent.onPausedChanged
event method which is called when rendering is paused or resumed - Change: update copy-from-to dev dependency version to fix build error when path contains
(
- Change:
this.context.input
does now support pointer lock state (properly reports delta) - Fix: make sure VRButton has the same logic as in three again (regex instead of try-catch)
- Fix: WebXRViewer DOM Overlay bugs when dom overlay element is inside canvas
- Fix: exitAR not being called in some cases when exiting AR
- Fix:
this.context.domX
andthis.context.domY
when web component is not fullscreen
[2.47.0-pre] - 2022-11-17
- Add: Initial react three fiber components
- Change: OrbitControls made lerp stop distance smaller
- Change: expose
*enumerateActions()
in AnimatorController - Fix: Flipped custom reflection texture
- Fix: Volume exposure not being applied when no Tonemapping effect was set
- Fix: Volume tonemapping not respecting override state setting
- Fix:
AudioSource.loop
not working - Fix: Collider center being not not applied correctly
- Fix: MeshCollider scale not being applied from object
[2.46.0-pre] - 2022-11-16
- Add: Particles subemitter support
- Add: Particles inherit velocity support
- Add: Particles size by speed support
- Add: Particles color by speed support
- Add: Particles trail now fadeout properly when "die with particle" is disabled
- Add: Particles circle shape
- Change: button hover now sets cursor to pointer
- Fix: WebXR controller disabling raycast line for hands
- Fix: WebXR hands path when not assigned in Unity
- Fix: Mesh Particles not rendering because of rotation being wrongly applied
- Fix: Mesh particles size in AR
- Fix: Particles color and size lerp between two curves
[2.45.0-pre] - 2022-11-14
- Add: RemoteSkybox option to control if its set as background and/or environment
- Add: @serializable decorator, @serializeable will be removed in a future version
- Add: getComponent etc methods to IGameObject interface
- Add: Renderer.enable does now set visible state only without affecting the hierarchy or component active state
- Change: Expose Typestore
- Change: Animation componet does loop by default (use the AdditionalAnimationData component to set the default loop setting)
- Fix: WebXR relative hands path in subfolders
- Fix: Rigidbody did not properly detect object position change if the position change was applied a second time at the exact same target position (it worked setting it once and didnt work in subsequent calls - now it does always detect it)
[2.44.1-pre] - 2022-11-13
- Add: RemoteSkybox exposes
background
andenvironmnet
properties to configure if the loaded skybox is set for the scene background and/or the environment light - Change: Expose TypeStore
[2.44.0-pre] - 2022-11-11
- Add: Particles limit velocity over time
- Add: Particles rotation by speed
- Add: ParticleSystem play, pause, stop and emit(count) methods
- Add:
WebXR.showRaycastLine
exposed so it can be disabled from code - Fix: issues in applying some forces/values for different scaling and worldspace <> localspace scenarios
- Change: raise input events in core method to also allow receiving WebAR mock touch events
- Change:
Animation.play()
does not require argument anymore
[2.43.0-pre] - 2022-11-10
- Add: particles emission over distance
- Add: particles can enable trail (settings are not yet applied tho)
- Add: camera now useses culling mask settings
- Add: particle VelocityOverLife
- Add: particle basic texture sheet animation support
- Change: ensure
time.deltaTime
is always > 0 and nevery exactly 0 - Fix: progressbar handle progress event not reporting total file size
- Fix: layer on camera did affect visibility
- Fix: cloning animatorcontrollers in builds did fail because of legacy AnimatorAction name check
- Fix:
RGBAColor.lerpColors
did produce wrong alpha value - Fix: custom shader
_ZTest
value is now applied as threejs depthTest function
[2.42.0-pre] - 2022-11-09
- add
Graphics.copyTexture
- add
Renderer.allowProgressiveLoad
- add
Gizmos.DrawBox
andDrawBox3
- add particles burst emission
- add particles color interpolation between two gradients
- fix: reflection probe material caching for when material is being changed at certain times outside of animation loop and cache applied wrong material
- fix: AnimationCurve evaluation when time and keyframe are both exactly 0
- change: reflection probe now requires anchor override
- change: bump threejs dependency
[2.41.0-pre] - 2022-11-07
- Add: start adding particle systems support again
- Change: update dependency version to needle gltf-transform-extensions package
- Change: light set to soft shadows now changes renderer shadow mode to
VSMShadowMap
(can be disabled by settingLight.allowChangingShadowMapType
to false) - Fix: WebXR creating AR button when called from script in awake
- Fix:
AnimationCurve.evaluate
[2.40.0-pre] - 2022-11-05
- Add support for deleting all room state by calling
context.connection.sendDeleteRemoteStateAll()
(requires backend to update@needle-tools/needle-tiny-networking-ws
to^1.1.0-pre
) - Add Hinge joint
- Add
Gizmos.DrawLine
,DrawRay
DrawWireSphere
andDrawSphere
- Add: physics Collision Contacts now contain information about
impulse
andfriction
- Add
physics.raycastPhysicsFast
as a first method to raycast against physics colliders, the returning object contains the point in worldspace and the collider. This is the most simplest and thus fastest way to raycast using Rapier. More complex options will follow in future versions. - Fix joint matrix calculation
- Fix and improve physics Contacts point calculations
- Fix issue in physics event callbacks where
onCollisionStay
andonCollisionExit
would only be called whenonCollisionEnter
was defined
[2.39.0-pre] - 2022-11-04
- Add: physics FixedJoint
- Change: CharacterController now rotates with camera
- Change: scaled mesh colliders are now cached
- Change: disable OrbitControls when in XR
- Change: first enabled camera component sets itself as rendering camera if no camera is yet assigned (mainCamera still overrides that)
- Change: package module field now shows to
src/needle-engine
- Change:
Camera.backgroundColor
assigning Color without alpha sets alpha to 1 now - Fix: improved missing
serializable
detection / warning: now only shows warning for members actually declared in script - Fix: wrong light intensity in VR when light is child of WebARSessionRoot issue 103
[2.38.0-pre] - 2022-11-02
- Add
context.isInAR
andcontext.isInVR
properties - Add physics capsule collider support
- Add basic character controller implementation (experimental)
- Add
context.input.getMouseWheelDeltaY()
- Add: SmoothFollow option to restrict following on certain axes only for position
- Add:
Rigidbody.teleport
method to properly reset internal state - Add: load glbs using build hash (appended as
?v=123
) - Change: Collision event args now exposes contacts array
- Fix Exit AR (X) button not showing up
- Fix physics collider center offset
- Fix removing colliders and rigidbodies throwing error (when trying to access properties for already removed bodies)
- Fix bug in AnimatorController causing broken animations when the same clip is used in multiple states (caused by
mixer.uncacheCip
) - Fix rigidbody friction allowing for physical bodies being transported on e.g. platforms
- Fix
onTriggerStay
being invoked with the correct collider argument - Fix AnimatorController exit time not being used properly
- Fix AnimatorController not checking all possible transitions if one transition did match conditions but could not be made due to exit time setting
- Fix
Renderer.sharedMaterials
not handling SkinnedMeshRenderer - Fix environment blend mode for mozilla XR browser on iOS
- Fix: Camera now removing self from being set as currently rendering in
onDisable
[2.37.0-pre] - 2022-10-28
- Add: rapier physics backend and overall improved physics system like constraint support, fixed physics collider updates and synchronization between rendering and physics world or animation of physical bodies
- Remove: cannon-es
- Add basic mesh collider support
- Add
@validate
decorator andonValidate
event method that can be used to automatically get callbacks when marked properties are being written to (for example internally this is used on the Rigidbody to update the physics body when values on the Rigidbody component are being updated) - Change: assign nested gltf layers
- Change: reworked Rigidbody api
- Fix: allow Draco and KRTX compression on custom hand models
- Fix: applying Unity layers to threejs objects
- Fix: BoxHelper stopped working with SpatialTrigger
- Fix: AR reticle showing up in wrong position with transformed WebARSessionRoot
[2.36.0-pre] - 2022-10-26
- Add: Expose WebXR hand model path
- Add: Animation component can now be configured with random time scale and offset
- Change: allow blocking overlay errors using the
?noerrors
query parameter - Change: don't use Composer for postprocessing in XR (see issue)
- Change: physics intersections causing NaN's are now reported prominently and physics bodies are removed from physics world as an interim solution, this provides more information about problematic colliders for debugging
- Fix: bug that caused component events for onEnable and onDisable not being called anymore in some cases
- Fix: cases where loading overlay using old project template wouldnt be removed/hidden anymore
- Fix: WebXR hide large hand grab sphere
- Fix: onPointerUp event not firing using WebXR controllers when grabbing an object for the second time
- Fix: GroundProjection can now be removed again
- Fix: Custom shaders exported using builtin RP can now use _Time property
- Fix: Only create two controllers when in AR on oculus browser
- Fix: BoxHelperComponent can now handle multi-material objects (groups)
[2.35.6-pre] - 2022-10-24
- Add: warning balloon when unknown components are detected and have been most likely forgot to be installed, linking to npmdef docs
- Fix: dont show serialization warning for builtin components where specific fields are not deserialized on purpose (since right now the serializer does not check which fields are actually implemented)
[2.35.5-pre] - 2022-10-24
- Change: AudioSource exposes
clip
field - Change: improve error and messaging overlay
- Change: detect when serialized Object3D and AssetReference are missing
@serializable
attribute and show message in overlay - Change: add WebXR hands path to controllers
- Fix: WebXR controllers now use interactable object when grabbing (instead of hit object previously) which fixes interaction with nested hierarchies in XR and DragControls
[2.35.4-pre] - 2022-10-23
- Change: Renderer
material
is nowsharedMaterial
to make it more clear for Unity devs that the material is not being cloned when accessed - Fix: When not specifying any explicit networking backend for glitch deployment it now falls back to the current glitch instance for networking
[2.35.3-pre] - 2022-10-21
- Add: Screenshare component
share
method now takes optional options to configure device and MediaStreamConstraints for starting the stream - Fix: WebXR should show EnterVR button when enabled in Unity
- Fix: component
enable
boolean wasnt correctly initialized when loaded from gltf - Fix: Object3D prototype extensions weren't correctly applied anymore
- Fix: Interaction bug when using DragControls with OrbitControls with multitouch
[2.35.2-pre] - 2022-10-20
- Add
Renderer.mesh
getter property - Change:
Renderer.material
now returns first entry insharedMaterials
array so it automatically works in cases where a Renderer is actually a multi-material object - Change: warn when trying to access components using string name instead of type
- Change: update needle gltf-transform-extensions to 0.6.2
- Fix: remove log from UIRaycastUtil
- Fix: move TypeStore import in builtin engine again to not break cases where
import @needle-engine
was never used - Fix: React3Fiber template and AR overlay container access when using react
[2.35.1-pre] - 2022-10-19
- Change: unify component access methods, first argument is now always the object with the component type as second argument
- Fix physics collision events throwing caused by refactoring in last version
- Fix loading screen css
[2.35.0-pre] - 2022-10-19
- Change: First pass of reducing circular dependencies
- Change: Update @needle-tools/gltf-transform-extensions version
- Change: Update component compiler to 1.9.0. Changed include:
- Private and protected methods will now not be emitted anymore
onEnable/onDisable
will be emitted asOnEnable
andOnDisable
issue 93
- Change: handle Vector3 prototype extensions
- Fix: issue with UI causing rendering to break when enabling text components during runtime that have not yet been active before
- Fix: OrbitControls LookAtConstraint reference deserialization
- Fix: WebXRController raycasting against UI marked as
noRaycastTarget
or in CanvasGroup with disabledinteractable
orblocksRaycast
[2.34.0-pre] - 2022-10-17
- Add: start adding support for 2D video overlay mode
- Change: Install threejs from @needle-tools/npm - this removes the requirement to have git installed and should fix a case where pulling the package from github would fail
- Change: Move Screensharing aspect mode settings into VideoPlayer component
- Change: Move
InstancingUtils
intoengine/engine_instancing.ts
- Change: BoxCollider now checks if
attachedRigidBody
is assigned at start - Change: Collision now exposes internal cannon data via
__internalCollision
property - Fix: EventSystem now properly unsubscribes WebXRController events
[2.33.0-pre] - 2022-10-17
- Add: ScreenCapture has mode for capturing webgl canvas (unfortunately it doesnt seem to work well in Chrome or Firefox yet)
- Change: move threejs prototype extensions into own file and make available to vanilla js builds
- Change: ScreenCapture component has explicit VideoPlayer component reference
- Fix: animating properties on custom shaders
[2.32.0-pre] - 2022-10-15
- Add: start implementing trigger callbacks for
onTriggerEnter
,onTriggerExit
andonTriggerStay
- Change:
GameObject.setActive
now updatesisActiveAndEnabled
state and executesawake
andonEnable
calls when the object was activated for the first time (e.g. when instantiating from an previously inactive prefab) - Change: improve collision callback events for components (
onCollisionEnter
,onCollisionExit
andonCollisionStay
) - Change: this.context.input keycode enums are now strings
- Fix: local dev error overlay now also displays errors that happen before web component is completely loaded (e.g. when script has import error)
- Fix: Rigidbody force is now correctly applied when the component was just instantiated (from inactive prefab) and added to the physics world for the first time
- Fix: DragControls component keyboard events ("space" and "d" for modifying height and rotation)
[2.31.1-pre] - 2022-10-14
- Change: Rigidbody now tracks position changes to detect when to update/override simulated physics body
- Fix: loading relative font paths when exported via Asset context menu
[2.31.0-pre] - 2022-10-13
- Add: inital ScreenCapture component for sharing screens and camera streams across all connected users
- Add:
onCollisionEnter
,onCollisionStay
andonCollisionExit
event methods to components
[2.30.0-pre] - 2022-10-12
- Add: Quest 2 passthrough support
- Add: UI Graphic components now support
raycastTarget
again - Add: VideoPlayer now supports
materialTarget
option which allows for assigning any renderer in the scene that should be used as a video canvas - Changed: updated three-mesh-ui dependency version
- Changed: updated needle-gltfTransform extensions package, fixing an issue with passthrough of texture json pointers
- Changed: selecting SpectatorCam now requires click (instead of just listening to pointer up event)
- Fix: Avatars using instanced materials should now update transforms correctly again
[2.29.0-pre] - 2022-10-10
- Add: Context.removeCamera method
- Add: SpectatorCam allows to follow other users across devices by clicking on respective avatar (e.g. clicking SyncedCam avatar or WebXR avatar, ESC or long press to stop spectating)
- Add:
Input
events for pointerdown, pointerup, pointermove and keydown, keyup, keypress. Subscribe viathis.context.input.addEventListener(InputEvents.pointerdown, evt => {...})
- Change: Default WebXR rig matches Unity forward
- Fix: WebXRController raycast line being rendered as huge line before first world hit
- Fix: SpectatorCam works again
- Fix:
serializable()
does now not write undefined values if serialize data is undefined - Fix: exit VR lighting
[2.28.0-pre] - 2022-10-06
- Add:
resolutionScaleFactor
to context - Fix
IsLocalNetwork
regex - Fix custom shaders failing to render caused by json pointer change
- Change: rename Context
AROverlayElement
toarOverlayElement
[2.27.0-pre] - 2022-10-06
- Fix: EventList failing to find target when targeting a Object3D without any components
- Fix: text now showing up when disabling and enabling again after the underlying three-mesh-ui components have been created
- Fix: Builtin sprites not rendering correctly in production builds
- Change: Bump needle glTF transform extensions version
- Change: json pointers now have correct format (e.g.
/textures/0
insteadtextures/0
) - Change: Bump UnityGLTF version
[2.26.1-pre] - 2022-10-05
- Fix animating
activeSelf
on GameObject in canvas hierarchy - Fix SpectatorCam component
- Fix WebXRController raycast line being rendered as huge line before first world hit
[2.26.0-pre] - 2022-10-05
- Add: experimental AlignmentConstraint and OffsetConstraint
- Remove: MeshCollider script since it is not supported yet
- Change: Camera does now use XRSession environment blend mode to determine if background should be transparent or not.
- Change: WebXR exposes
IsInVR
andIsInAR
- Fix: RGBAColor copy alpha fix
- Fix: Avatar mouth shapes in networked environment
[2.25.1-pre] - 2022-10-04
- Change: DropListener file drop event does send whole gltf instead of just the scene
[2.25.0-pre] - 2022-10-04
- Add: allow overriding draco and ktx2 decoders on <needle-engine> web component by setting
dracoDecoderPath
,dracoDecoderType
,ktx2DecoderPath
- Add:
loadstart
andprogress
events to <needle-engine> web component - Fix rare timeline animation bug where position and rotation of objects would be falsely applied
- Change: update to three v245
- Change: export
THREE
to global scope for bundled version
[2.24.0-pre] - 2022-10-01
- Add: make engine code easily accessible from vanilla javascript
- Fix: handle number animation setting component enable where values are interpolated
- Change: Remove internal shadow bias multiplication
- Change: Addressable references are now resolved using relative paths
- Change: Update package json
[2.23.2-pre] - 2022-09-29
- Add: Light component shadow settings can not be set/updated at runtime
- Fix: enter XR using GroundProjectedEnv component
- Fix: Light shadows missing when LightShadowData component was not added in Unity (was using wrong shadowResolution)
- Change: dont allow raycasting by default on GroundProjectedEnv sphere
[2.23.1-pre] - 2022-09-29
- Add: Light exposes shadow resolution
[2.23.0-pre] - 2022-09-28
- Add RemoteSkybox component to use HDRi images from e.g. polyhaven
- Add GroundProjectedEnv component to use threejs skybox projection
- Fix: export
GameObject
in@needle-tools/engine
[2.22.1-pre] - 2022-09-28
- Add:
noerrors
url parameter to hide overlay - Fix: WebXR avatar rendering may be visually offset due to root transform. Will now reset root transform to identity
[2.22.0-pre] - 2022-09-28
- Add:
@needle-tools/engine
now exports all components - Add: environment light from tricolor (used for envlight when set to custom but without custom cubemap assigned)
- Add: show console error on screen for localhost / local dev environment
- Fix: create environment lighting textures from exported colors
- Change: UI InputField expose text
- Change: Bump threejs version to latest (> r144) which also contains USDZExporter PR
[2.21.0-pre] - 2022-09-26
- Add: custom shader set
_ScreenParams
- Change: DropListener event
details
now contains whole gltf file (instead of just scene object)
[2.20.1-pre] - 2022-09-23
- Add: AudioSource volume and spatial blending settings can now be set at runtime
- Fix: AudioSource not playing on
play
whenplayOnAwake
is false
[2.20.0-pre] - 2022-09-23
- Add: VideoPlayer crossorigin attribute support
- Add:
debuginstancing
url parameter flag - Add: Image handle builtin
Background
sprite - Add: Component now implements EventTargt so you can use
addEventListener
etc on every component - Add: EventList does automatically dispatch event with same name on component. E.g. UnityEvent named
onClick
will be dispatched on component ason-click
- Add: experimental progressive loading of textures
- Add:
WebXR
exposesIsARSupported
andIsVRSupported
- Fix: remove Ambient Intensity
- Fix: ShadowCatcher material should not write depth
[2.19.1-pre] - 2022-09-21
- Fix: SpatialTrigger intersection check when it's not a mesh
- Fix: UnityEvent / EventList argument of
0
not being passed to the receiving method - Fix: Physics rigidbody/collider instantiate calls
- Fix: Physics rigidbody transform changes will now be applied to internal physics body
- Fix:
needle-engine.getContext
now listens to loading finished event namelyloadfinished
- Change: cleanup some old code in Rigidbody component
[2.19.0-pre] - 2022-09-20
- Add: initial support for
InputField
UI (rendering, input handling on desktop, mobile and AR, change and endedit events) - Add:
EventList.invoke
can now handle an arbitrary number of arguments - Change: lower double click threshold to 200ms instead of 500ms
- Change: runtime font-style does not change font being used in this version. This will temporarely break rich text support.
- Fix: custom shader regression where multiple objects using the same material were not rendered correctly
- Fix: Text sometimes using invalid path
- Fix: Remove unused imports
[2.18.0-pre] - 2022-09-20
- Add basic support for
CameraDepth
andOpaqueTexture
(the opaque texture still contains transparent textures in this first version) being used in custom shaders
[2.17.1-pre] - 2022-09-17
- Improve Animator root motion blending
- Fix SpatialTrigger error when adding both SpatialTrigger as well as SpatialTrigger receiver components to the same object
- AnimatorController can now handle states with empty motion or missing clips
[2.17.0-pre] - 2022-09-15
- Add: automatic runtime font atlas generation from Unity font assets
- Remove: shipped font assets in
include/fonts
- Fix: Physics pass custom vector into
getWorldPosition
, internal vector buffer size increased to 100 - Fix: SpatialTrigger and SpatialTrigger receivers didnt work anymore due to LayerMask serialization
[2.16.1-pre] - 2022-09-14
- Change: UI disable shadow receiving and casting by default, can be configured via Canvas
- Fix:
gameObject.getComponentInParent
was making false call togetComponentsInParent
and returning an array instead of a single object - Fix: light intensity in AR
[2.16.0-pre] - 2022-09-14
- Add: first draft of Animator root motion support
- Fix:
Renderer.sharedMaterials
assignment bug when GameObject was mesh - Fix: Buttons set to color transition did not apply transition colors
- Fix: UI textures being flipped
- Fix: UI textures were not stretched across panel but instead being clipped if the aspect ratio didnt match perfectly
[2.15.0-pre] - 2022-09-12
- Add stencil support to
Renderer
- Add timeline
removeTrackOffset
support - Fix timeline animation track offset only being applied to root
- Fix timeline clip offsets not being applied when no track for e.g. rotation or translation exists
[2.14.0-pre] - 2022-09-11
- Add initial UI anchoring support
- Add initial support for URP RenderObject Stencil via
NEEDLE_render_objects
extension
[2.13.4-pre] - 2022-09-09
- Fix UI transform handling for issue 42 and issue 30
- Fix AudioSource not restarting to play at onEnable when
playOnAwake
is true (this is the default behaviour in Unity)
[2.13.3-pre] - 2022-09-09
- Fix RGBAColor not implementing copy which caused alpha to be set to 0 (this caused
Camera.backgroundColor
to not work properly)
[2.13.2-pre] - 2022-09-07
- Add support to set OrbitControls camera position immediately
[2.13.1-pre] - 2022-09-07
- Fix EventList invocation not using deserialized method arguments
[2.13.0-pre] - 2022-09-07
- Add
context
toStateMachineBehaviour
- Fix
StateMachineBehaviour
binding (event functions were called with wrong binding)
[2.12.0-pre.1] - 2022-09-06
- Fix deserialization error when data is null or undefined
[2.12.0-pre] - 2022-09-05
- Add initial tonemapping and exposure support
- Add AR shadow catcher
- Fix objects parented to camera appear behind camera
- Fix reticle showing and never disappearing when no WebARSessionRoot is in scene
- Fix WebARSessionRoot when on same gameobject as WebXR component
- Fix deserialization of
@serializable(Material)
producing a new default instance in certain cases - Fix
OrbitControls
enable when called from UI button event - Fix EventList / UnityEvent calls to properties (e.g.
MyComponent.enable = true
works now from UnityEvent)
[2.11.1-pre] - 2022-09-02
- Change:
OrbitControls.setTarget
does now lerp by default. Use method parameterimmediate
to change it immediately - Change: bump component compiler dependency to
1.8.0
[2.10.3-pre] - 2022-09-01
- Fix EventList serialization for cross-glb references
- Fix AnimatorController transition from state without animation
[2.10.2-pre] - 2022-09-01
- Fix: skybox/camera background on exit AR
- Change: AnimatorController can now contain empty states
- Change: Expose
Animator.Play
transition duration
[2.10.1-pre] - 2022-08-31
- Improved RectTransform animation support and canvas element positioning
- Fix
Animator.Play
- Change: Expose
AnimatorController.FindState(name)
[2.10.0-pre] - 2022-08-29
- Add UI to gltf export
- Add button animation transition support for triggers
Normal
,Highlighted
andPressed
[2.9.0-pre] - 2022-08-26
- Add
Canvas.renderOnTop
option - Fix
OrbitControls
changing focus/moving when interacting with the UI - Fix nullref in AnimatorController with empty state
[2.8.0-pre] - 2022-08-25
- Add export for
Renderer.allowOcclusionWhenDynamic
- Fix: bug in
@serializable
type assignment for inherited classes with multiple members with same name but different serialized types - Change:
GameObject.findObjectOfType
now also accepts an object as a search root
[2.7.3-pre] - 2022-08-25
- Fix canvas button breaking orbit controls issue #4
[2.7.2-pre] - 2022-08-23
- Fix SyncedRoom to not append room parameter multiple times
[2.7.1-pre] - 2022-08-22
- Add: Timeline AudioTrack nullcheck when audio file is missing
- Fix: AnimatorController error when behaviours are undefined
- Change StateMachineBehaviour methods to be lowercase
[2.7.0-pre] - 2022-08-22
- Add initial StateMachineBehaviour support with "OnStateEnter", "OnStateUpdate" and "OnStateExit"
- Fix input raycast position calculation for scrolled content
[2.6.1-pre] - 2022-08-22
- Fix texture pointer remapping in gltf-transform opaque extension
- Change: skip texture-transform for textures starting with "Lightmap" for now until we can configure this properly
[2.6.0-pre] - 2022-08-18
- Add scale to instantiation sync messages
- Fix
BoxHelper
- Fix AR reticle being not visible when
XRRig
is child ofWebARSessionRoot
component - Fix exception in
DragControls
when dragged object was deleted while dragging
[2.5.0-pre] - 2022-08-18
- Change name of
KHR_webgl_extension
toNEEDLE_webgl_extension
- Change: dont write depth for custom shader set to transparent
- Deprecate and disable
AssetDatabase
[2.4.1-pre] - 2022-08-17
- Add
Mathf.MoveTowards
- Change: rename
needle-tiny
webcomponent toneedle-engine
- Fix ordering issue in needle web component when codegen.js is executed too late
[2.3.0-pre] - 2022-08-16
- Add SyncedCamera prefab/AssetReference support
- Add TypeArray support for
serializable
to provide multiple possible deserialization types for one field (e.g.serializable([Object3D, AssetReference])
to try to deserialize a type as Object3D first and then as AssetReference)
[2.2.0-pre] - 2022-08-14
- Add event callbacks for Gltf loading:
BeforeLoad
(use to register custom extensions),AfterLoaded
(to receive loaded gltf),FinishedSetup
(called after components have been created)
[2.1.2-pre] - 2022-08-14
- Fix AnimatorController exit state
- Fix AR camera background alpha to be fully transparent by default
[2.1.1-pre] - 2022-08-12
- Fix: light shadow bias
[2.1.0-pre] - 2022-08-11
- Add
@needle-tools/engine
to be used as import for "most used" apis and functions - Change: remove obsolete
Renderer.materialProperties
- Fix:
NEEDLE_persistent_assets
extension is now valid format (change from array to object)
[2.0.0-pre] - 2022-08-08
- Renamed package
[1.21.2-pre] - 2022-08-08
- Fix: NestedGltf transform
[1.20.1-pre] - 2022-08-06
- Remove: Duplicateable animation time offset hack
- Change: GameObjectData extension properly await assigning values
- Change: NestedGltf instantiate using guid
- Change:
instantiate
does now again create guids for three Objects too
[1.20.0-pre] - 2022-08-05
- Add: NestedGltf
listenToProgress
method - Add: Allow changing Renderer lightmap at runtime
- Fix: Environment lighting when set to flat or gradient (instead of skybox)
- Fix:
this.gameObject.getComponentInChildren
- was internally calling wrong method - Fix: Spectator camera, requires Camera component in glb now
[1.19.0-pre] - 2022-08-03
- Add: Animator.keepAnimatorStateOnDisable, defaults to false as in Unity so start state is entered on enable again
- Add: warning if different types with the same name are registered
- Add: timeline track
onMutedChanged
callback - Change: PlayableDirector expose audio tracks
- Change: BoxCollider and SphereCollider being added to the physics scene just once
- Change: try catch around physics step
[1.18.0-pre] - 2022-08-01
- Add: Addressable download progress is now observeable
- Add: Addressable preload support, allows to load raw bytes without actually building any components
- Add: PlayableDirector exposes tracks / clips
- Change: modify default engine loading progress bar to be used from user code
- Change: add option to Instantiate call to keep world position (set
keepWorldPosition
inInstantiateOptions
object that you can pass into instantiate) - Change: light uses shadow bias from Unity
- Fix: instancing requiring worldmatrix update being not properly processed
- Fix: Duplicatable world position being off (using
keepWorldPosition
) - Fix:
Animation
component, it does allow to use one main clip only now, for more complex setups please use AnimationController or Timeline - Fix:
SyncedRoom
room connection on enter WebXR - Fix: WebXR avatar loading
[1.17.1-pre] - 2022-07-27
- Change: bump component compiler dependency to
1.7.1
- Change:
context.mainCameraComponent
is now of typeCamera
- Fix: timeline control track
- Fix: timeline animation track post extrapolation
- Fix: custom shader does not fail when scene uses object with transmission (additional render pass)
[1.17.0-pre] - 2022-07-21
- engine: add loading bar and show loading state text
[1.16.0-pre] - 2022-07-20
- engine: add using ambient light settings (Intensity Multiplier) exported from Unity
[1.15.1-pre] - 2022-07-18
- engine: fix nullref in registering texture
[1.15.0-pre] - 2022-07-15
- engine: remove legacy file
- engine: add basic implementation of
Context.destroy
- engine: fix
<needle-tiny>
src attribute - engine: add implictly creating camera with orbit controls when loaded glb doesnt contain any (e.g. via src)
[1.14.2-pre] - 2022-07-12
- engine: fix dont apply lightmaps to unlit materials
- engine: remove log in PlayableDirector
- engine: add support to override (not automatically create) WebXR buttons
[1.14.1-pre] - 2022-07-11
- engine: Fix AnimatorController finding clip when cloned via
AssetReference.instantiate
- engine: Fix deep clone array type
- engine: Fix PlayableDirectory binding when cloned via
AssetReference.instantiate
[1.14.0] - 2022-07-10
- engine: add VideoPlayer using
AudioOutputMode.None
- engine: fix VideoPlayer waiting for input before playing video with audio (unmuted) and being loaded lazily
[1.13.0-pre] - 2022-07-07
- engine: Add
getComponent
etc methods to THREE.Object3D prototype so we can use it like in Unity:this.gameObject.getComponent...
- engine: Change
Duplictable
serialization
[1.12.2-pre] - 2022-07-06
- engine: Fix networking localhost detection
- engine: update component generator package version (supporting now CODEGEN_START and END sections as well as //@ifdef for fields)
[1.12.1-pre] - 2022-07-06
- engine: change lightmap extension to be object
[1.12.0-pre] - 2022-07-06
- engine: Add DeviceFlag component
- engine: Fix VideoPlayer loop and playback speed
- engine: Improve VideoTrack sync
[1.11.0-pre] - 2022-07-04
- engine: fix
enabled
not being always assigned - engine: fix react-three-fiber component setting camera
- engine: add support for custom timeline track
- engine: add VideoTrack npmdef
[1.10.3-pre] - 2022-07-01
- engine: Change; PlayableDirector Wrap.None now stops/resets timeline on end
- engine: Change; PlayableDirector now stops on disabling
[1.10.2-pre] - 2022-07-01
- engine: fix timeline clip offsets and hold
- engine: fix timeline animationtrack support for post-extrapolation (hold, loop, pingpong)
[1.10.1-pre] - 2022-06-30
- engine: improve timeline clip offsets
[1.10.0-pre] - 2022-06-30
- engine: Improved timeline clip- and track offset (ongoing)
- engine: Change assigning all serialized properties by default again (instead of require
@allProperties
decorator) - engine: Change; deprecate
@allProperties
and@strict
decorators
[1.9.1-pre] - 2022-06-29
- engine: add methods for unsubscribing to EventList and make constructor args optional
- engine: change camera to not change transform anymore
[1.9.0-pre] - 2022-06-28
- engine: add support for transparent rendering using camera background alpha
[1.8.0-pre] - 2022-06-27
- Add: transform gizmo component
- Change: component generator for npmdef is not required anymore
- Change: component gen runs in background now
- Fix: typescript drag drop adding component twice in some cases
- engine: update component gen package dependency
- engine: fix redundant camera creation when exported in GLTF
- engine: fix orbit controls focus lerp, stops now on input
[1.7.1-pre] - 2022-06-25
- Override PlayMode in sub-scene
- engine: lightmaps encoding fix
- engine: directional light direction fix
[1.7.0-pre] - 2022-06-25
- engine: animator controler can handle multiple target animators
- engine: fix WebXR being a child of WebARSessionRoot
- engine: improve Camera, OrbitControls, Lights OnEnable/Disable behaviour
- engine: add
Input.getKeyPressed()
[1.6.0-pre] - 2022-06-23
- engine: fix light error "can't add object to self" when re-enabled
- engine: remove extension log
- engine: log missing info when UnityEvent has not target (or method not found)
- engine: use lightmap index for supporting multiple lightmaps
[1.5.2-pre] - 2022-06-23
- engine: Camera dont set skybox when in XR
- engine: dont add lights to scene if baked
[1.5.1-pre] - 2022-06-22
- engine: fix threejs dependency pointer
[1.5.0-pre] - 2022-06-22
- engine:
<needle-tiny>
added awaitablegetContext()
(waits for scene being loaded to be used in external js) - engine: fix finding main camera warning
- engine: add
SourceIdentifier
to components to be used to get gltf specific data (e.g. lightmaps shipped per gltf) - engine: persistent asset resolve fix
- engine: update three dependency to support khr_pointer
- engine: remove custom khr_pointer extension
- engine: fix WebARSessionRoot exported in gltf
- engine: smaller AR reticle
[1.4.1-pre] - 2022-06-17
- engine: create new GltfLoader per loading request
- engine: fix bug in core where it could happen that scripts were added multiple times
- engine: Added SyncedRoom auto rejoin option (to handle disconnection by server due to window inactivity)
- engine: guid resolving first in loaded gltf and retry in whole scene on fail
- engine: fix nullref in DropListener
- engine: register main camera before first awake
[1.4.0-pre] - 2022-06-15
- engine: add
GameObject.getOrAddComponent
- engine:
OrbitControl
exposing controlled object - engine:
getWorldPosition
now uses buffer of cached vector3's instead of only one - engine: add
AvatarMarker
to synced camera (also allows to easily attachPlayerColor
) - engine: fix
Animation
component when using khr_pointer extension - engine:
VideoPlayer
expose current time - engine: fix
Animator.runtimeController
serialization - engine: make
SyncedRoom.tryJoinRoom
public
[1.3.1-pre] - 2022-06-10
- engine: allow
@serializeable
taking abstract types - engine: add
Renderer.sharedMaterials
support
[1.3.0-pre] - 2022-06-09
- engine: move log behind debug flag
- engine: improved serialization property assignment respecting getter only properties
- engine: add optional serialization callbacks to
ISerializable
- engine: default to only assign declared properties
[1.2.3-pre] - 2022-06-09
- engine: downloading dropped file shows minimal preview box
- engine:
DropListener
can use localhost - engine:
SyncedRoom
avoid reload due to room parameter - engine:
LODGroup
instantiate workaround - engine: improve deserialization supporting multiple type levels
[1.2.2-pre] - 2022-05-30
- engine: change md5 hashing package
- engine: file upload logs proper server error
[1.2.1-pre] - 2022-05-30
- engine: disable light in gltf if mode is baked
- engine: use tiny starter as default networking backend
- engine: synced file init fix for resolving references
- engine: allow removing of gen.js completely
- engine: expose
Camera.buildCamera
for core allowing to use blender camera - engine: on filedrop only add drag control if none is found
[1.2.0-pre] - 2022-05-27
- engine: fix networked flatbuffer state not being stored
- engine: make
src
on<needle-tiny>
web component optional - engine:
src
can now point to glb or gltf directly - engine: fix
Raycaster
registration - engine: add
GameObject.destroySynced
- engine: add
context.setCurrentCamera
- engine: make
DropListener
to EventTarget - engine: make
DropListener
accept explicit backend url
[1.1.0-pre.6] - 2022-05-26
- Fix gltf transform textures output when used in custom shaders only
[1.1.0-pre.5] - 2022-05-25
- engine: fix
VideoPlayer
being hidden, play automatically muted until interaction - engine: added helpers to update window history
- engine: fix setting custom shader
Vector4
property [1.1.0-pre.4] - 2022-05-25
- engine: fix tsc error in
Animation
component - engine: fix
Animation
component assigning animations for GameObject again - engine: fix
Animation
calling play before awake - engine:
AnimatorController
handle missing motion (not assigned in Unity) - engine:
AnimatorController.IsInTransition()
fix
[1.1.0-pre.1] - 2022-05-20
- engine: minor tsc issues fixed
[1.1.0-pre] - 2022-05-20
- engine: add
isManagedExternally
if renderer is not owned (e.g. when using react-fiber)
[1.0.0-pre.18] - 2022-05-19
- engine: add basic support for
stopEventPropagation
(to make e.g.DragControls
camera control agnostic in preparation of react support)
[1.0.0-pre.17] - 2022-05-17
- fix
EventList
outside of gltf - fix
EventList
without any function assigned (No Function
in Unity) - engine: support changing
WebARSessionRoot.arScale
changing at runtime
[1.0.0-pre.16] - 2022-05-12
- engine: fix webx avatar instantiate
- engine: stop input preventing key event defaults
[1.0.0-pre.15] - 2022-05-12
- engine: log error if
instantiate
is called with false parent - engine: fix instantiate with correct
AnimatorController
cloning
[1.0.0-pre.14] - 2022-05-11
- engine: fix
@syncField()
- engine: fix
AssetReference.instantiate
andAssetReference.instantiateSynced
parenting - engine: improve
PlayerSync
andPlayerState
[1.0.0-pre.13] - 2022-05-11
- engine: prepend three canvas to the web element instead of appending
- engine:
SyncedRoom
logs warning when disconnected - engine: internal networking does not attempt to reconnect on connection closed
- engine: internal networking now empties user list when disconnected from room
- engine:
GameObject.instantiate
does not always generate new guid to support cases where e.g.SyncedTransform
is on cloned object and requires unique id - engine:
syncedInstantiate
add fallback toContext.Current
when missing - engine:
EventList
refactored to use list ofCallInfo
objects internally instead of plain function array to more easily attach meta info likeUnityEvent.off
- engine: add
GameObject.instantiateSynced
[1.0.0-pre.12] - 2022-05-10
- engine: fix font path
- engine: add
debugnewscripts
url parameter - engine: start adding simplifcation to automatic instance creation + sync per player
- engine: allow InstantiateOptions in
GameObject.instantiate
to be inlined as e.g.{ position: ... }
- engine: add
AvatarMarker
creation and destroy events - engine: fix networking message buffering
[1.0.0-pre.11] - 2022-05-08
- engine:
SpatialTrigger
is serializable - engine: fix
DragControls
offset when using without ground - engine: fix
WebXRController
interaction with UIButton.onClick
[1.0.0-pre.10] - 2022-05-04
- engine: fix gltf extension not awaiting dependencies
- engine: fix persistent asset @serializable check for arrays
- engine: add
setWorldScale
- engine: fix
instantiate
setting position - engine:
AssetReference
does now create new instance ininstantiate
call - engine: add awaitable
delay
util method - engine: fix scripts being active when loaded in gltf but never added to scene
- engine: minimal support for mocking pointer input
- engine: emit minimal down and up input events when in AR
[1.0.0-pre.9] - 2022-05-03
- improved default loading element
- changed animation pointer to support emissive intensity
[1.0.0-pre.8] - 2022-05-02
- lightmaps fixed
- glitch upload shows time estimate
- deployment build error fix
- json pointer resolve
- improved auto install
- started basic
SpriteRenderer
support - basic
AnimationCurve
support - fixed
PlayerColor
- fixed
persistent_assets
andserializeable
conflict - basic export of references to components in root prefab
[1.0.0-pre.7] - 2022-04-30
WebXR
does not load avatar from prefab referenceWebXRSync
is added implictly and creates local avatar even when not networkedSpectatorCam
is using local avatarSpectatorCam
camera component in Unity is now optional and implictly added if missing
[1.0.0-pre.6] - 2022-04-29
- fix environment light
- fix light shadows setting
- fix video player in extension
- fix video player texture not overlaying rendering while awaiting interaction
- fix webAR root reticle when no rig component is in scene
[1.0.0-pre.5] - 2022-04-28
- start adding support for
AssetReference
again
[1.0.0-pre.4] - 2022-04-27
- add persistent asset extension
- removed timeline and animator controller extensions as both are now serialized and resolved in assets
- can resolve json pointers (
animations/
,materials/
,textures/
,extensions
) in component paths - add
syncField()
decorator
[1.0.0-pre.2] - 2022-04-20
- updated to https:// three.js url instead of git:// url
- fixated flatbuffers dependency to 2.0.4 due to breaking changes and bugs in 2.0.6
[1.0.0-pre] - 2022-04-19
- initial release