Technology Overhaul

I have been following three.js for many years now, as well as using it in my own projects. I have watched it develop into the amazing library and community surrounding it that it is today. There are many amazing things in three.js, but overall, as far as state of the art for real-time rendering engines goes – three.js has remained relatively stagnant for about 4 years now. Therefore, i would like to list some of the features i’d like to see in three.js in the future, and the reasons I believe them to be necessary for continued success of this library.

Deferred rendering

Forward rendering doesn’t fit well with most advanced use cases, and when it does – it lacks performance. I want to see a Deferred, Tiled renderer as the main renderer in three.js, not something relegated to /examples folder.

Motivation

Any kind of post processing you want to have today requires you to build part of the pipeline, depth buffer, normals and colour also. This results in duplicated effort for the hardware in most cases resulting in sub-optimal performance.
If you wish to have any kind of sub-system which relies on a G-buffer, such as G-buffer based decal system which writes into colour+normal buffers – you require what three.js doesn’t have.

Better Shadows.

More specifically, i want to see a better shadow-mapping implementation than PCF. Such as Variance shadowmaps. Second, i wish to see a cascading shadowmaps. They were once at the core of thee.js, but fell victim to bitrot and lack of support.

Motivation

Currently shadows require a fair amount of artistry just to make them look okay. If we had a better shadowmap algorithm – a lot of existing problems with acne and filtering would go away. If we had a cascading shadowmap implementation – it would remove the need for artistry currently required to set up shadow camera for each shadow-casting light in the scene.

Spatial Index

Spatial index is necessary when dealing with large scenes, such large scenes are very common in games for example.

Motivation

If you want to do a raycast into the scene – currently you are stuck with a linear search, which is dominated by number of objects and polygons. A spatial index would enable a lot of internal optimizations, such as faster occlusion culling and sorting.

Occlusion culling

Good occlusion culling is required for good performance. Point above would help here. There are a lot of techniques that can be utilized further here.

Optimizations to animation engine

Currently animation engine chokes on some 500 bones being animated simultaneously, resulting in a very high CPU usage.

Motivation

It is not uncommon to see 3-5 characters at the same time with 500+ bones each in modern games, with current CPU demand such fidelity is not achievable, instead you have to compromise to about 15 bones per character in order to achieve decent performance.

Compressed Textures

Compressed textures as a first-class citizen, along with tools for on-line compression

Motivation

Compressed textures offer a great amount of extra detail requiring only a little space, for applications with large textures and/or large number of textures, this draws a line between interactive frame-rate and a slide-show, this point becomes more relevant for lower-end GPUs, as they tend to have less RAM, being able to draw 2024 compressed textures instead of 512 uncompressed ones is a extremely important, as they take up potentially the same amount of GPU RAM. Compressed textures take less time to load and put less stress on browser, since decompression is not done by default (unlike PNG).

Competent Particle Engine (nice to have)

Particles are the magic stuff of the real-time visualization. As such, i believe it is necessary for a comprehensive real-time visualization to have a good particle engine. Simulation aspect can be kept rudimentary, have a way to plug in simulation logic, but handle things like sorting particles in view-space according to depth, and offer solution for tracking lifecycle of a particle, such as spawning/dying. Things like self-shadowing could be amazing to have also.

Author: Fantashit

4 thoughts on “Technology Overhaul

  1. three.js has remained relatively stagnant for about 4 years now

    I don’t agree with that statement. In that time period, a lot of features were added which are valuable for many projects:

    • PBR materials (MeshStandardMaterial/MeshPhysicalMaterial)
    • WebVR related entities
    • Improved quality/features of importer/exporters like GLTFLoader/GLTFExporter, FBXLoader or ColladaLoader
    • Modularization of WebGLRenderer
    • And many more. Just read the release notes.

    All these stuff required a lot of development effort. Please do not misunderstand me, I think you’ve made valid suggestions in your post. But saying three.js has remained relatively stagnant for about 4 years is not really fair.

  2. I agree with @Mugen87 apart from working on new features as he exposed, just keeping up do date with compatibility between different browsers and platform and fixing bugs is a huge work for a project that is basically growing up with the open source community without any big company behind.
    So it’s something really awesome what @mrdoob and the community have been doing so far.

    I also agree with the idea from @Usnul that we need to keep adding new features to the engine but actually modularizing the renderer is something needed to include some of these changes. As for example with the deferred rendering, that’s something I see as optional, as not everyone will take that as a the default, if I need to choose I would prefer something like a tile-clustered forward rendering, so you don’t want to mess with the core renderer for each option.

    In any case I would suggest to create single issues for each feature so we could keep the discussion there more focused on the specific feature. And as it seems that no one is working right now on these features feel free to pick one you want to work and submit a PR it will be really valuable for the engine.

  3. Just FYI — no problem with having a holistic initial conversation here if it’s helpful to set direction, but I am not planning to give any specific feedback in this thread. I think it would get lost and be hard to follow in the future if we get too much detail here, “technology overhaul” is very broad, so I am planning to wait until issue-specific threads are started before commenting further.

  4. RemusMar you’re reading a lot into a 👍..

    I see a lot of 👍 between the collaborators.
    😆

    Better shadows and an improved animation engine in particular I’d love to see.

    👍

    Again, this topic is about “general purpose” vs “more specialized” 3D library.
    At least from my point of view.

Comments are closed.