Release 1.0.0
Find the full changelog below.
Wonderland Engine 1.0.0 is about building a strong foundation for future versions:
By integrating NodeJS and esbuild for bundling, we are able to make all projects NodeJS based while keeping the convenience of the previous internal bundler. And we made sharing components as npm packages easier than ever before.
We rewrote the JavaScript API in TypeScript. Even if you keep using JavaScript for your projects, you will notice how your IDE is able to make more intelligent suggestions because of it. But then you would miss out on fancy new features like:
With the rewrite, we created a thorough test suite and fixed a large amount of bugs. Read all about the new API in our “Wonderland Engine 1.0.0 JavaScript Migration” blog post.
For rendering, we made some important changes, like adapting the lighting model of our
default shaders to use a more intuitive intensity
setting to replace attenuation
.
These changes are paving the way for wonderful rendering features in the future.
Wonderland Editor is the heart of the Wonderland Engine development workflow. We added a new experimental feature to launch your project directly onto Android devices, e.g. standalone VR browsers, setting up port-forwarding for you.
Finally, the open web enables you to reach a wide audience. Not just device compatibility, but also language can be a barrier. We added tools to help you translate your projects and reach an even wider audience.
Find the full changelog below.
Breaking Changes
Because we care about backwards compatibility a lot, we do not often get the chance to break things. With the major version switch, we have a rare opportunity to clean up and make things right.
So we were thorough, but we took the community with us! Your favorite libraries are already up to date and ready to go with the new version.
Here are a few examples of changes we made and how we decided on them. We are excited to see what you think of the result.
Example: .getTranslationWorld()
and .getTransformationWorld()
are dangerously
similar. Even with auto-completion in your IDE, you might not realize you are using the
wrong function.
Instead, we now use “Position” instead of “Translation” to describe the position of an
object.
Example: the old API was storing everything in a global WL
object. That made
it difficult to embed Wonderland Engine into other libraries, or running multiple
instances on one page. Now that instances of Wonderland Engine are wrapped in a
WonderlandEngine
class, you have full control over how and when you instantiate it.
Changelog
Editor
- Added Benchmarking view
- Added Localization view to aid translation of WebXR experiences
- Added WL_EDITOR JavaScript macro, which is set to
true
for when the editor bundles components - Added alpha value slider to color pickers
- Added choice for ETC1S (smaller, default) and UASTC (higher quality) for image compression
- Added defaults for Sky Material colorStop properties
- Added devices drop-down to launch page directly on connected Android devices instead of local device (port forwarding automatically set up)
- Packaging: Removed unused VR and AR button SVGs
- Windows: Fixed random error messages produce from file watch
- Animation component with empty animations are now inactive at runtime
- Automatically detect components from scripts and npm packages
- Fixed a rare bug where a component added in the editor could return
undefined
when retrieved at runtime - Fixed random darkening of the entire UI when making various changes to the project
- Fixed rotation Gizmo behavior on objects with non-uniform scaled ancestors
- Fixed crashes when switching projects
- Fixed retargeting of some FBX files
- Fixed crashes and import errors with some FBX files
- When retargeting, tracks for which no new target could be found are now dropped
- Made all color property alpha values default to
1.0
- Negative text component spacing values can now be set
- Removed legacy JavaScript bundler in favor of default “esbuild” bundler
- Removed “8thwallToken” setting in favor of specifying in the entrypoint script
- Text materials now have thumbnails
- Fonts now have thumbnails
- CLI
- Fix –import command not instantiating the scene
- Tokens were added as a more secure method of passing credentials to the editor for packaging on CI
- Added benchmarking framework
- Linux
- Fixed file watching
- Fixed modifier key states
- Views
- Asset Browser: Deleted files are now moved into system trash folder instead of deleting permanently
- Asset Browser: Working directories for default applications launched on double click is now project root
- Console: Error, Warning, Info checkbox states are now persisted per project
- Console: Fixed horizontal scroll
- Project Settings: Fixed huge lag when changing editor server port
- Properties: Fixed pasting of Euler rotations
- Resources: Added horizontal scroll to ensure entirety of the tables can be read even on smaller screens
- Profiler: Improved which profile sections are enabled by default
- Scene import
- Optimized mesh processing
- Added import for more light properties
Engine
- Rendering
- Fixed texture seam on Sky shader
- Updated to latest Slug Library
- Fixed shadowing bug due to internal shadow count was not updated
- Improved GPU profiling queries
- Negative animation speed now plays the animation backwards
- Shaders are now compiled asynchronously for even faster loading times
- Support UASTC compression
- Switched animation engine for upcoming features
- Systematically fix various rare crashes due to out of bounds array access
- Light “attenuation” was removed in favor for a more intuitive “intensity”
- Phong
- Ambient term is now retrieved by multiplying ambient color with the diffuse term
- Diffuse color is now multiplied with the diffuse texture
- Vertex color is now multiplied with diffuse texture and color
- Default light distance model is now a standard inverse squared falloff (old behavior is deprecated but still available through a feature checkbox)
- Added a basic
TONE_MAPPING
feature
- Flat
- Vertex color is now multiplied with color and texture
- Optimized CPU times of Texture Streaming
- Fixed various rare Texture Streaming crashes
- Added more profile sections to Profiler
Runtime
- PWA: Fixed various files not cached by service worker for offline use
- Fixed a potential crash in Profiler
- Fixed input type “Head”
- Fully consumed .bin file data is now discarded after load, improving memory use
- It is now possible to use multiple engine instances on a single webpage
- Lowered maximum available WebAssembly memory to 512 MB for better debugging experience and older iOS hardware compatibility
- The WebAssembly is now properly modularized to allow use with any other WebAssembly module
- Resize is now handled through
ResizeObserver
JavaScript API
- TypeScript
- Added
@property.<type>
decorator to define configurable properties directly in the class body - Fully rewrote the API in TypeScript
- Added
- Added
PhysXComponent.group
,PhysXComponent.block
and many more missing properties - Added
XR.currentReferenceSpace
,XR.currentReferenceSpaceType
andXR.referenceSpaceForType
- Added
XR
andWonderlandEngine.xr
for access to WebXR related state - Added a huge amount of new automated tests
- Added a new
Color
property type - Added equals() methods for Mesh, Material, Texture, Animation and Skin
- Added
LightComponent.setColor
- Added
_wl_nextUpdate
and_wl_nextFrame
to enable automated testing of components - Added remaining
LightComponent
properties LightComponent.color
now returns only 3-elements for RGB- Added runtime and API version compatibility checks
- Added
onRegister
to allow running addition behavior when a component is registered - All of the API’s global state has been removed
- Custom components are now classes:
export class CustomComponent extends Component
- Fixed
AnimationComponent.state
returning incorrect enum values - Fixed
Object3D.lookAt()
and clarified its behavior in the documentation - Fixed cloning of components with
Object3D.addComponent(type, otherComponent)
- Fixed
Component.destroy()
only destroying, but not removing components from objects - Fixed
RayHit.objects
elements notnull
for unused indices - Made default parameters apply consistent with the editor
- Removed
onXRSupported
callback, asWonderlandEngine.arSupported
andWonderlandEngine.vrSupported
are now available from the start of the application - Renamed
Material.shader
toMaterial.pipeline
- Replaced callbacks arrays (
onSceneLoaded
,onXRSessionStart
, …) with a newEmitter
class onXRSessionStart
is now aRetainEmitter
, which triggers callbacks immediately if an XR session is already running.AnimationComponent.animation
now properly returnsnull
when unsetComponent.onDestroy
is now called when a new scene is loadedObject
is nowObject3D
to avoid shadowing built-in JavaScript typeScene.load()
andScene.append()
are nowasync
- Renamed
Translation
functions toPosition
to avoid confusion withTransform
functions
Components
- Converted all components to classes
- Converted some components to TypeScript
- Added trail component
- Added plane-detection component
- Added anchor component
- cursor-target: Deprecated
add*Function
in favor ofonClick
,onHover
,onUnhover
,onMove
event emitters
Known Issues
- Input via WebXR Emulator extensions doesn’t work
- Missing custom components can cause a packaging loop on Windows