WebXR immersive session and hand tracking fixes!
Sponsor A-Frame to help us move the 3D Web forward.
You can also buy a cool t-shirt
Major Changes
- Update to THREE r137 (@dmarcos)
Fixes
- Don't try to use hit test in VR. API only available in AR mode (#5005) (@AdaRoseCannon)
- Fix canvas size calculation on embedded mode (fix #4911) (@s-light)
- Fix reference space for WebXR Layers (#4991)
- Fix problem when material map doesn't reflect the
offset
andrepeat
properties set viasetAttribute
(#4985) (@diarmidmackenzie @arturitu) - More robust
componentchanged
event. We were skipping the last component state transition event during a component change burst if last modification happens within throttle interval. (fix #4972) (@diarmidmackenzie @dmarcos) - Emit
mouseenter
,mouseleave
,click
cursor events component when order of intersected entities changes (fix #4978) (@diarmidmackenzie @dmarcos) - Prevent render loop to start before the camera is ready (#4967) (@wtodd1)
- Fix mouse based cursor entity intersection when used with ortographic camera (#4935) (@kfarr)
- Fix wrapping on distortion maps (#4932) (@AdaRoseCannon)
- Remove checks to prompt the user to switch to mobile mode on mobile browsers disguised as desktop (e.g: iPad) Browsers now ship with DeviceOrientationEvent API enabled. (fix #4798) (@PlumCantaloupe @dmarcos)
- Adds support for glTF models compressed with EXT_meshopt_compression (#4910) (@donmccurdy)
- Add missing dependency to fix 360 image gallery example fade animation (#4896) (@vincentmi)
- Fix hand model to accommodate changes in the hand tracking API implementation (66e0c62) (@dmarcos)
- Fix hit-test logic on model-viewer example (db63302) (@dmarcos)
- Fix SDF text shader for WebGL1 devices (fix #4827) (@Dirk-27)
- Replace SphericalReflectionMapping (now deprecated in THREE) with EquirectangularReflectionMapping (fix #4818) ( @diarmidmackenzie)
- Automatic generation of environment map (#4797) (@AdaRoseCannon)
- Fix copy in device orientation permission dialog (#4794) (@antoninklopp)
Enhancements
- Add phong shader to material component (#5001) (@AdaRoseCannon)
- Allow newer npm version in package.json (#4870) (@cwadrupldijjit)
- Add support for AR hit-test for Augmented Reality headsets and handsets (#4892) (@AdaRoseCannon)
- Add some default styling to WebXR DOM-Overlay (#4901) (@AdaRoseCannon)
- Add some default styling to DOM-Overlay (#4901) (@AdaRoseCannon)
- Integrate WebXR background lighting estimation API and environment maps for AR scenes (#4890) (@AdaRoseCannon)
- Use THREE.Cache API with a-assets.js (#4864) (@takahirox)
- Add Reverb G2 Support (#4845) (@zach-capalbo)
- Remove workaround to match Vive profile id with the one returned by Chrome. Chrome is now reporting the id matching the official WebXR profile (fix #4846) (@juliusikkala, @dmarcos)
- Replace live-server by five-server (#4836) (@yandeu)
- Add sRGB encoding to perspective screenshot (#4822) (@kfarr)
- Add registerShader texture example (#4795) (@mordof)
- Docs improvements (@epic-developer @jacob-willden @barthy-koeln @vincentfretin @RobinMglsk @a0m0rajab @kfarr @technobotanist @cao-jacky @schmelto @jlecordier @oneWaveAdrian @danbuckland @diarmidmackenzie @dmarcos)
WebXR immersive session and hand tracking fixes!
Sponsor A-Frame to help us move the 3D Web forward.
You can also buy a cool t-shirt
Major Changes
- Update to THREE r125 (THREE.Geometry deprecated) (@dmarcos)
Fixes
- Fix hand tracking (97be815) (@dmarcos)
- Fix immersive mode in Chrome for Android and Microsoft Edge. (THREE r125)
- Don't initialize text mesh until the font has loaded. This prevents the raycaster to intersect prematurely and emit spurious events (#4742) (@quantumalchemy @dmarcos)
- Fix raycaster overriding line default color (#4743) (@GMartigny @dmarcos)
- Make sure enter-vr / exit-vr events are emitted when entering fullscreen (#4740) (@stefanhuber @dmarcos)
- Fix problem with wasd-controls when opening a contextual menu with right click while pressing WASD simultaneously. Camera movement doesn't stop when releasing keys (#4766) (@djoksimo @dmarcos)
- Fix inspector toggle on US international keyboards (#4516) (@svenkonings @dmarcos)
- Make sure generic controls have the lowest precedence when vendor specific ones are also defined (#4784) (@fordacious @dmarcos)
- Fix tests (@dmarcos)
Deprecations
- THREE r125 deprecates
THREE.Geometry
Enhancements
- Docs improvements (@tete-github @luics @KovacsGG @dmarcos)
5 years of A-Frame!
40 amazing A-Framers participated in this release. Thank you
AR, hand tracking, compositor layers, immersive navigation (Quest only), Quest 2 support and much more.
Buy a t-shirt
Major Changes
- Support for WebXR compositor layers API @rcabanier @Artyom17 @dmarcos
- Support for WebXR DOM Overlays support @klausw
- Support for the WebXR immersive navigation proposal @arpu @Artyom17 @dmarcos
- Support for the WebXR hand tracking API proposal (#4650) @machenmusik @dmarcos
- Support for Quest 2 controllers @dmarcos
- Update THREE to r123 @dmarcos
Fixes
- Fix problem with Windows Mixed Reality controller falling to generic model @arpu
- Fix incorrect values returned by the
axismove
event on Oculus Quest (#4472) @Sujoy-Ghosh - Fix
npm run dist
command when running in zsh @benallfree - Fix wasd-controls easing to prevent sudden position jumps (#4241) @ntamas
- Replace calls to
THREE: getWorld*
methods that don't know work in immersive mode (#4521) @NNskelly @dmarcos - Fix undetected controllers when using WebXR API @cabanier @Artyom17
- Fix
selectstart
/selectend
never detected by the cursor component @vincentfretin - Fix for duplicated cursor component events (#4494) @binzume
- Listen to
sessiongranted
event only if WebXR is available @dmarcos - Bump
webvr-polyfill
to fix magic window mode in iOS 13 (#4554) @jwjordan @dax72 @NomisGnos @dmarcos - Fix Gear VR controller detection @vincentfretin
- Fix spectator camera mode when entering VR mode (#4666) @broehl @dmarcos
- Fix duplicated cursor component event in VR mode (#4494) @binzume @dmarcos
- Background component can now be removed (#4676) @NVFedorov @dmarcos
- Fix screenshot component (#4685) @bknill @dmarcos
- Add user gesture to start video playback in examples @dmarcos
- Fix white stripe at the bottom of the screen when exiting VR mode in iOS (#4617) @jgutierro @dmarcos
- Fix msdf shader compatibility with WebGL 1 devices (Safari iOS) @dmarcos
- Fix for immersive navigation where the
sessiongranted
event was not captured @dmarcos - Move
raycaster
collision detection fromtick
totock
to prevent bogus collisions on first frame @dmarcos - Fix for camera pose not correctly restored when exiting VR mode @dmarcos
- Make sure exit immersive logic runs when exiting AR mode @dmarcos
- Add
vr-mode
state to<a-scene>
when entering immersive mode with WebXR @dmarcos - Fix Valve Index controller button mappings @dmarcos
Enhancements
- Pass high-performance to the WebGL context to prioritize rendering performance over power consumption @arpu
- Docs improvements @rotoglup @richardjbaker @klausw @dmarcos @kfarr @majecty @AdaRoseCannon @ngokevin @sonnynomnom @lordbron @da4throux @danbuckland @vikohone @pixelistik @vincentfretin @stefanhuber
- Code hygiene @Jamesgt @Shalwaban
- Use new
THREE.WebGLRenderer
outputEncoding @arpu - Make msdf shader WebGL 2 compliant @arpu
- Valve Index controller support @zach-capalbo
- Cordova compatibility @benallfree
- Change look-controls
hmdEnable
property name tomagicWindowTrackingEnabled
@dmarcos - Improve hand tracking pinch gesture accuracy @cesmoak (#4691)
- Improve error handling when entering immersive mode (#4660) @federico-camonapp @dmarcos
- Make text of device permission ui component dialogs configurable @dmarcos
- Add look controls
mouseEnabled
property to enable / disable mouse input @dmarcos - Add model viewer example with AR / VR and 2D mode compatibility @dmarcos
- Add user interface example that works in VR, desktop and mobile @dmarcos
- Make raycaster component line color configurable @dmarcos
- Add info panel to examples @thedart76 @dmarcos to show instructions, controls and credit authors.
Bug fixes
Subscribe to the newsletter to continue to support A-Frame!
Fixes
- Reset
referenceSpace
and controllers list when entering / exiting VR (#4406) @AG-LucidWeb @Artyom17 @dmarcos - Fix WebXR buttons mapping for Oculus Go controller @dmarcos
- Properly remove
selectstart
/selectend
event listeners when XR session ends @DougReeder - Apply handedness orientation directly to the hands model (#4388) @dbradleyfl @dala00 @dmarcos
- Set tracked-controls
armModel
default to false (#4405) @dmarcos matrixAutoupdate
tofalse
on camera in WebXR case (#4383) @liewol @dmarcos- Check if headset is connected when ignoring
mousedown
events (#4380) @AG-LucidWeb @dmarcos - Get rid of invalid character in TRHEE build (#4428) @kennardconsulting @dmarcos
Enhancements
- Dithering property in materials component (#4433) @Firepal
- Magic Leap Controller Support @atarng-magicleap
- New high poly, low poly and toon styles for
hand-controls
@arturitu - Listens to WebXR
selectstart
/selectstart
and reemits as mousedown / mouseup. Simple screen input for AR experiences (fix #4407) @dmarcos - Use full hash in dependencies to comply with pnpm @pleku
- Color property in
hand-controls
@arturitu - Docs improvements @d2s @ChicagoDev @dirkk0 @omgitsraven @dmarcos
- Add API to set WebXR far and near camera planes (#4387) @DougReeder
Bug fixes
Subscribe to the newsletter to continue to support A-Frame!
Fixes
- Add support for Gear VR controller over WebXR (@Artyom17, @dmarcos)
- Add support for Oculus Go controller over WebXR (@Artyom17, @arpu, @dmarcos)
- Fallback to a generic controller when a WebXR gamepad is not recognized (#4376) (@Artyom17, @dmarcos)
- Match physical and virtual position of Quest and Rift S controllers (fix #4374) (@Artyom17, @dmarcos)
- Consider initial device orientation for magic window tracking. Fix problem when experience loads in landscape orientation on Android devices (@dmarcos)
- Listen to DOMContentLoaded if scene is not defined before updating the enter VR UI (#4373) (@mkungla, @dmarcos)
Bug fixes
Subscribe to the newsletter to continue to support A-Frame!
Fixes
- Track DeviceMotionControls yaw delta instead of absolute value to honor initial camera orientation (fix #4368) (@dmarcos)
- Disable touchmove / mousemove tracking in VR mode. Pose is preserved when exiting VR (@dmarcos)
- Hide Device Motion permission dialog on desktop requests from mobile devices. Only the alert about requesting mobile page is shown (fix #4369) (@dmarcos)
- Reset camera rotation to 0 when entering VR to prevent collision between magic window and WebXR poses (fix #4371) (@karanganesan, @dmarcos)
- Check if headset is connected before disabling mouse controls (fix #4370) (@KrisMerckx, @dmarcos)
1.0.0 post release bug fixes.
Subscribe to the newsletter to continue to support A-Frame!
Fixes
- Reintroduce a-asset-item logic to assign response type to
glTF
models automatically. It now ignores query parameters that made it fail before. (#4219) (@dmarcos) - Prevent zoom on enter
VR / AR buttons
when double tapping on touch screens (@dmarcos) - Apply style to reset the enter
AR / VR buttons
background on mouseleave. CSS Hover is sticky on mobile devices (@dmarcos) - Fix
magic window mode
in Daydream / ARCore Android devices. Use DeviceOrientationControls for tracking. (#4355) (@MK-LucidWeb, @vincentfretin, @dmarcos) - Honor model property in
laser-controls
(#4354) (@dala00, @dmarcos) - Reduce
video-sphere / photo-sphere
radius to prevent far plane clipping in VR mode on Android devices (#4365) (@AntoineLucidWeb, @dmarcos)
Enhancements
- Improve visual design of
modal dialogs
(#4359) (@thedart76, @dmarcos) - Reinstate
WebXR
as the default code path for Oculus Browser. Oculus Browser 7.1 now ships the gamepad module (#4360) (@dmarcos) - Show
alert dialog
if the site is served over HTTP (#4357) (@brendanciccone, @thedart76, @mkungla, @dmarcos) - Improve text of
desktop requests dialog
. Change Ok button text to Close (@dmarcos)
Follow-up fix to 0.9.1 for fixing vrdisplayactivate
and link traversal flow.
Fixes
- Move
vrdisplayactivate
handler back earlier to fix auto entering VR in many cases (#4155). - Fix
vrdisplayactivate
and link traversal due to last build having outdated version our three.js fork. - Fix
Entity.destroy
not catching if entity is not attached to scenegraph (#4140). - Fix exiting fullscreen on Chrome m71+ (#4136).
- Fix URL bar not hiding in iOS Safari in fullscreen (#4146).
- Fix wrong sized canvas in iOS VR by preventing multiple
requestPresent
calls if already presenting (#4148).
Follow-up fixes and improvements to 0.9.0.
Released Hot Module Replacement loader for A-Frame: https://github.com/supermedium/aframe-super-hot-loader
Major Changes
- Detaching entity from scene will preserve component data. Add
Entity.destroy()
method to clear components and return their memory to the
pool (#4121). - Use controller index to determine left / right controllers which may impact
cases like Vive Trackers. Will look to make this more robust soon (#4013).
Deprecations
- Deprecate
utils.device.isOculusGo
in favor ofutils.device.isMobileVR
(#4032).
Fixes
- Updated documentation guides for 0.9.0.
- Fix text antialiasing from distance (#4039).
- Improve
vrdisplayactivate
path for more robust navigation (#4093, 3c2f68e). - Clean up object requested from pool by component to prevent pollution of old keys from other schemas (#4016).
- Fix initial camera position, rotation, scale potentially not getting applied (#4020).
- Fix
utils.coordinates.stringify
for zeroed vectors (#4017). - Handle if both WebVR and both WebXR APIs are available (#4022).
- Handle null device from WebXR (#4030).
- Catch
navigator.xr.requestDevice
error (#4035). - Fix animation for custom vec3 properties (#4051).
- Fix sound
onEnded
not settingisPlaying
to false (#4061, #4097, #4101). - Fix new materials not getting applied to
obj-model
recursively (#4062). - Fix boolean values in
.flushToDOM
(#4069). - Hide navigation buttons on Android (#4090).
- Fix Chrome gamepads by checking
getGamepads
on every tick for Chrome (#4116).
Enhancements
- Add
Component.events
API to define event handlers that are automatically attached and detached depending on entity lifecycle (#4114). - Improve animation error message when passing invalid
animation.property
(#4122). - Have
Entity.remove
detach entity to match HTML element behavior (#4082). - Migrate
hand-controls
model to glTF (#3932). - Add
shadow.enabled
property to shadow system (#4040). - Add
renderer.alpha
property to renderer system (#4040). - Add
AFRAME.coreComponents
for a list of the core components (#4064).
Performance
- Use a fork of anime.js that has memory improvements from Kevin (#4028).
Performance improvements, WebXR support, Inspector updates!
We continued to battle test A-Frame to produce native-like VR experiences and
continue to add large performance gains. We have also introduced initial WebXR
support! Although the spec is heavily in flux and yet to have feature parity
with WebVR 1.1, we had A-Frame get a head start to help test it out and smooth
out the changes.
Major Changes
- Bump to three.js r101 on a branch with a few extra patches for WebXR support (f9f314).
- WebXR support (#3875).
- Remove
<a-animation>
in favor of new animation component (#3678). - Remove
collada-model
component (#3866). - Add
renderer.colorManagement
property (disabled by default) to accurately match colors against modeling tools, but may changes in scene colors when flipped on.renderer.gammaFactor
will be set to 2.2. Callscene.renderer.systems.applyColorCorrection
onTHREE.Color
s andTHREE.Texture
s to normalize changes (#3757). - Have raycasters only intersect against objects defined via
.setObject3D
.raycaster.objects
should be specified (e.g.,objects: [data-raycastable] or objects: .raycastable
) because raycasting is expensive.raycaster.recursive
property removed (#3980) but will default to be recursive only under objects defined via.setObject3D
(#3652). - Add
renderer
component (#3757). antialias
attribute moved torenderer.antialias
.- Raycaster events such as
raycaster-intersected
no longer directly contain intersection data. Use.getIntersection
function supplied in event detail orel.components.raycaster.getIntersection(el)
to retrieve intersection data. Done to reduce garbage (a87e3b). - Disable link portal appearance by default (
link.visualAspectEnabled
), link component defaults to purely to listening to an event to trigger navigation (#3743).
Fixes
- Frame-independent easing for
wasd-controls
to prevent judders during framedrops (#3830). - Enable matrix auto updates for
tracked-controls
to fix children of camera and controllers not following parent (#3867). - Fix removing mixins not removing components (#3982).
- Fix timing issues with mixins on still-initializing entities (#3859).
- setPoseTarget to underlying object3D to fix issues with entities as child of camera (#3820).
- Don't disable
matrixAutoUpdate
for tracked-controls outside VR (643fdc). - Render spectator view after VR submit frame (#3577).
- Fix mouse cursor events not being re-enabled on resume (#3904).
- Allow components to write to camera Z rotation when look-controls enabled (9a78a)
- Clear raycaster intersections when toggling disabled (#3594).
- Postpone renderer until scene is appended to DOM (#3574).
- Fix canvas textures (b47f20).
- Fix faces and vertices numbers on stats panel (#3573).
- Fix magic window mode on Chrome (aaa3bf).
- Fix audio asset preloading (2a899c).
- Fix raycaster flatten to only include objects part of
el.object3DMap
versus arbitrary children (8809e7). - Fix canvas getting squished on orientation change on mobile (64ed3d).
- Update position, rotation, scale components when calling
.setAttribute
on them (#3738). - Update canvas bounds for mouse cursor on renderer resize (a4cf08).
- Fix controller reconnecting on Oculus Go and GearVR (dc8662).
- Fix playing sound on event with
sound.on
(#3844). - Fix Chrome WebView (#3852).
- Fix raycaster not grabbing all entities when
raycaster.objects
is not set. But you should always set it (#3840). - Fix WebVR polyfill buffer scale override (#3863).
- Fix text when used with other geometry types (#3909).
- Fix
daydream-controls
trigger not working with cursor by default (#3916). - Fix accessing Inspector in pointer lock mode (#3947).
- Fix mouse cursor not emitting click when fuse is set (#4000).
- Fix screenshots (#3998).
- Fix camera offset getting applied when entering 2D fullscreen (#3902).
Enhancements
- Add
oculus-go-controls
, thanks Oculus! (cbbe75) - Add
vive-focus-controls
(#3876). - Add
loading-screen
component (#3760). - Add
?inspector={selector}
andEntity.inspect()
to automatically launch Inspector and focus on entity (#3894). - Add
renderer.highRefreshRate
to enable 72hz mode on Oculus Browser (#3967). - Add
tracked-controls.autoHide
property to configure whether controllers automatically hide when connected or disconnected (#3912). - Enable multiple raycasters on an entity (fc18cd).
- Support custom enter VR buttons through vr-mode-ui (#3606).
- Add
material.blending
property (#3543). - Add
light.shadowRadius
property (21b38). - Add ability to cap canvas size to pixel value (92b2f9).
- Reduce npm bundle (53f58f).
- Allow double underscores in component IDs (e.g.,
animation__foo__bar
) (030023). - Add
renderer.logarithmicDepthBuffer
option (d210a2). - Add
look-controls.reverseTouchDrag
property (#3761). - Switch to jsdelivr with rawgit going away.
- Support preprocessing of sound in
sound.playSound()
(2b2819). - Consolidate fullscreen styles under single CSS class (
html.a-fullscreen
) (#3828). - Emit
displayconnected
event when headset connected (#3918). - Enable antialias by default on Oculus Go (#3942).
- Update to webvr-polyfill v0.10.10 (#3993).
Performance
- Large refactor of core component update path, reducing memory allocation and using object pooling (#3772).
- Skip
buildData
if updating component directly. 2x speed boost on.setAttribute
(#3835). - Remove spamming
navigator.getGamepad
calls in tracked-controls (#3816). - Optimize coordinates / vector utilities (#3908).
- Remove object allocation in
.setAttribute(component, propertyName, value)
(#3812). - Simplify text shader hacks and make text alpha look prettier (#3557).
- Remove garbage and bubbling from tracked-controls (#3589).
- Remove redundant matrix world update in raycaster (ae7eba).
- Replace Oculus OBJ model with a glTF one (#3539).
- Optimize coordinate parse (bf66ba).
- Simply wasd-controls tick (#3763).
- Optimize text component (#3768).
- Remove memory allocations in material code (#3789).
- Remove garbage in sound component (2b2819).
- Improve grabbing class cursor performance in 2D look-controls (#3790).
- Remove unused and redundant mixin observers (#3831).
- Add warning to developers to specify
raycaster.objects
(#3839). - Cache asset property type regex (#3854).
Inspector
Kevin spent some time getting the Inspector into ship shape.
Major Changes
- Introducing the A-Frame Watcher to sync updates of entities with IDs from Inspector to HTML files.
- Remove HTML exporter.
- Remove old A-Frame Registry code.
- Remove broken Uploadcare uploader.
- Remove motion capture tools.
Enhancements
- Orthographic cameras.
- Improve raycasting to picking entities.
- Syntax highlighting of entities.
- Highlight and describe entities on viewport bar when hovering.
- Added
?inspector={selector}
to automatically launch Inspector and focus on entity. - Show bounding box of selected entities.
- Show with icon what entities contain text in scenegraph.
- Sort component properties alphabetically.
- Display class names on entity panel.
- Only show camera and light helpers when respective entity is selected.
- Improve position when focusing on entity.
- Polish components panel.
- Center editor controls to the scene camera position.
- Support arrow keys for number widgets.
- .glb export.
- Add
o
shortcut to toggle transform widget. - Add
esc
shortcut to unselect entity. - Refactor most everything (modularize, data flow, Stylus, Prettier).
- Tweak grid colors.
- Bigger checkboxes.
- Fix color picker in components panel.
- Fix display of mixins.
Performance
- Don't load 50 images when opening the Inspector.
- Optimize and fix helpers for position, rotation, scale.
- Speed up scene graph search.
- Remove global mutation observer.