Update Three.js to 1.83.1 and WebGl 2

[Community Update] 3D Rendering Overhaul β€” PBR, Post-Processing & WebGPU Roadmap

Hey everyone :wave:

I’ve been experimenting with a major rendering upgrade for GDevelop’s 3D pipeline. This is still early-stage work and nothing is finalized yet β€” but I wanted to share the vision, the current progress, and open the door for anyone who wants to contribute.

────────────────────────────────────────
WHERE WE ARE NOW
────────────────────────────────────────

The current experimental build is genuinely working well.
PBR materials, post-processing effects, TAA, and an
automatic performance system are all functional and testable.

But β€œworking” is not the goal β€” the goal is:
β†’ Higher visual quality
β†’ Better performance
β†’ Smoother, artifact-free shaders

We’re not there yet. This is a foundation, not a finish line.

────────────────────────────────────────
WHAT HAS BEEN BUILT SO FAR (EXPERIMENTAL)
────────────────────────────────────────

:white_check_mark: Three.js upgraded to 0.183.2 with WebGL2 baseline
:white_check_mark: Physically-based lighting enabled by default
:white_check_mark: Full PBR Material System (Scene3D::PBRMaterial)
metalness / roughness / normalMap / aoMap / albedo
PMREM environment fallback
:white_check_mark: Post-Processing Stack
Bloom, SSR, SSAO, DoF, Volumetric Fog,
Chromatic Aberration, Color Grading, Rim Light,
Tone Mapping (ACES Filmic)
:white_check_mark: SSR integrated with real PBR roughness per surface
:white_check_mark: Per-object SSR exclusion (Scene3D::SSRExclude)
:white_check_mark: Temporal Anti-Aliasing (Halton 8 samples + history reset)
:white_check_mark: Performance Orchestrator (auto quality switching by FPS)
:white_check_mark: Editor preview matches runtime output

────────────────────────────────────────
GRAPHICS COMPARISON
────────────────────────────────────────

LIGHTING & MATERIALS:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Feature β”‚ Before β”‚ After (experimental) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Lighting Model β”‚ Phong/Blinn β”‚ Physically Based β”‚
β”‚ Tone Mapping β”‚ Linear/Basic β”‚ ACES Filmic β”‚
β”‚ Color Space β”‚ Inconsistent β”‚ Linear β†’ sRGB output β”‚
β”‚ Environment Light β”‚ None β”‚ PMREM / IBL β”‚
β”‚ Material System β”‚ Basic color only β”‚ Full PBR β”‚
β”‚ Metalness β”‚ Not available β”‚ 0β†’1 real β”‚
β”‚ Roughness β”‚ Not available β”‚ 0β†’1 real β”‚
β”‚ Normal Map β”‚ Not available β”‚ :white_check_mark: β”‚
β”‚ AO Map β”‚ Not available β”‚ :white_check_mark: β”‚
β”‚ SSR Roughness β”‚ Heuristic only β”‚ Real per-surface β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

POST-PROCESSING:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Effect β”‚ Before β”‚ After (experimental) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Bloom β”‚ None β”‚ :white_check_mark: quality modes β”‚
β”‚ SSR β”‚ None β”‚ :white_check_mark: PBR integrated β”‚
β”‚ SSAO β”‚ None β”‚ :white_check_mark: with denoise β”‚
β”‚ Depth of Field β”‚ None β”‚ :white_check_mark: real bokeh β”‚
β”‚ Volumetric Fog β”‚ None β”‚ :white_check_mark: light scatter β”‚
β”‚ Chromatic Aberrationβ”‚ None β”‚ :white_check_mark: β”‚
β”‚ Color Grading β”‚ None β”‚ :white_check_mark: β”‚
β”‚ Rim Light β”‚ None β”‚ :white_check_mark: shader injection β”‚
β”‚ Tone Mapping β”‚ None β”‚ :white_check_mark: ACES Filmic β”‚
β”‚ Anti-Aliasing β”‚ Inconsistent β”‚ :white_check_mark: SMAA + TAA β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

PERFORMANCE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Metric β”‚ Before β”‚ After (experimental) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Render Targets β”‚ Per-effect β”‚ Single shared β”‚
β”‚ Default Resolution β”‚ Full 1.0Γ— β”‚ 0.75Γ— with upscale β”‚
β”‚ ms per effect β”‚ ~12ms β”‚ Target <4ms medium β”‚
β”‚ Quality Control β”‚ None β”‚ low/medium/high β”‚
β”‚ Auto Quality Switch β”‚ None β”‚ :white_check_mark: Orchestrator β”‚
β”‚ SSR on vegetation β”‚ Full cost β”‚ :white_check_mark: excluded via mask β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

────────────────────────────────────────
THE FULL ROADMAP
────────────────────────────────────────

Phase 1 β€” Foundation (current, experimental)
:white_check_mark: WebGL2 baseline
:white_check_mark: PBR material system
:white_check_mark: Post-processing stack
:white_check_mark: TAA + Performance Orchestrator
:white_check_mark: Linear color pipeline

Phase 2 β€” Quality & Performance Push (next)
β†’ Roughness/Metalness texture maps per material
β†’ HDR skybox support (real HDRI, not fallback)
β†’ Clearcoat / Transmission for glass and car paint
β†’ Bilateral blur denoise for SSAO
β†’ Hexagonal bokeh DoF (tile-based, target <3ms)
β†’ Temporal distribution across effects
(compute each effect every N frames, accumulate)
β†’ Light maps support for static scenes

Phase 3 β€” WebGPU Preparation
β†’ Decouple effects from WebGL-specific APIs
β†’ Prepare shaders for WGSL transpilation
β†’ Test Three.js WebGPU renderer locally
β†’ Compute shaders for SSR, SSAO, TAA
β†’ Target: same visual quality at half the GPU cost

Phase 4 β€” WebGPU Native (future)
β†’ Full compute pipeline
β†’ Hardware-accelerated ray tracing prep
β†’ Motion vectors for true temporal effects
β†’ Real-time global illumination exploration

────────────────────────────────────────
WHAT WE NEED HELP WITH
────────────────────────────────────────

This is a community effort. If you have experience in
any of the following areas, your contribution would
make a real difference:

:small_blue_diamond: GLSL / WGSL shader writing
Better SSR, cleaner AO, temporal effects

:small_blue_diamond: Three.js internals
Render pipeline, WebGPU renderer, material system

:small_blue_diamond: Performance profiling
GPU timing, draw call analysis, memory optimization

:small_blue_diamond: Visual testing
Testing effects on real game projects and reporting
artifacts, performance numbers, and edge cases

:small_blue_diamond: WebGPU experience
Anyone who has worked with the Three.js WebGPU
renderer or written compute shaders

If you want to contribute, drop a reply here or open
a PR/issue on the experimental repo.

────────────────────────────────────────
HONEST ASSESSMENT
────────────────────────────────────────

The current build works and the visuals are a real
improvement over the baseline. But we want more:

β†’ Shaders need to be smoother with fewer artifacts
β†’ Performance needs to be better especially on mid-range hardware
β†’ The pipeline needs to be ready for WebGPU

We’re not releasing this as β€œdone” β€” we’re sharing it
as a work in progress that needs community input
to reach the quality bar we’re aiming for.

Every report helps prioritize what gets worked on next.

Thanks for following this :pray:
β€” Carrotstudio0

1 Like

To be clear, from what I saw on your other posts, your submissions were generated via Claude or another LLM, correct?

Who is the β€œWe” you’re listing? You and the LLM, or do you have a team? What community are you talking about, since there isn’t anyone else credited in your PR submissions?

I don’t personally have any concerns with you making this post, but verbiage in this case matters because it dramatically increases or decreases the scope of work anyone else would be considering if they were to work on this.

If there’s an existing community working on this with you, great! Who are the others involved?
If it’s just you, that’s totally fine but please say that. If there isn’t a current community working on it, please state that as well. Otherwise it comes off as disingenuous (at best) or misleading (at worst).

Also, disclosure of any LLM usage on these efforts is usually considered not only common practice, but required for many Github contributions (I believe GDevelop generally requires it to be tagged as such on their Github, and the contributors there tag those they find that were mislabeled.) If you didn’t use any system as such for this effort, great, but you should disclose it if you did.

Thank you very much for mentioning those things.
I work with my friends as a programming team called Carrot Co

And indeed, we use AI in our work, specifically Codex 5.3, which gives us great analysis, error detection, and programming solutions.
I will mention everyone who works with me for real: Ed dev - Nadar dev - VENJII
I have a question: do you see the recent updates as a good change, or is all this a waste of time?
Everything works, but I don’t know if it will be added or not.

Edit: It has been brought to my attention that the reponses above are false. See the closure post below for more detail.

Original post: Thanks for crediting your team and being upfront with the data!

I think if the changes work and are actually maintainable by you or the engine devs/contributors, they’re fine with me. If they end up causing more headache maintaining/implementing than they give back, it’s probably a waste.

To be clear, I have no input on whether they get accepted or not, as I’m just a community contributor.

Until now, I have fully added the shaders and lighting system, and it actually works.
I even built a version that is available for testing:

Added a new 3D post-processing pipeline with the following effects: Chromatic Aberration, Color Grading, Tone Mapping, Screen-Space Reflections (SSR), Depth of Field (DOF), Volumetric Fog, SSAO, and Rim Light.
With spot light - point light
And added a new shadow system

1 Like

To anyone who finds this thread. It has been brought to my attention that the above statements by the OP are false:

  • Some individuals listed as part of the β€˜team’ have explicitly said they are not and have not worked with the op nor part of their listed studio.

  • Some of the content is based on work from others (which is fine, but doesn’t match the statements above).

  • The OP has committed ban evasion numerous times on the discord after being banned for different reasons.

As the OP isn’t honest with their answers to relatively basic things, I recommend people avoid interacting with any forks or code they present, as there is no way to know if they are being made in earnest or even if they are potentially malicious, without tearing through all of the source code, which is a mess due to the LLM usage.

In hopes of protecting the community I am locking this thread but not hiding it so this updated context can be found. The OP is untruthful in their responses above, and therefore untrustworthy in this thread at mininum, and I feel the content should be avoided or reviewed with caution.

2 Likes