Repository navigation
Conversation
…as-Engine into feature/point-lights
…as-Engine into feature/point-lights
…as-Engine into feature/point-lights # Conflicts: # data/shader/rtgi/temporal.csh
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8bbf60513b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| semaphore.acquire(); | ||
| condition = false; |
There was a problem hiding this comment.
Prevent lost wakeups in Signal::Wait
Signal::Wait clears condition only after semaphore.acquire() returns, so a concurrent Notify in that window sees condition == true and skips release(). That drops a wakeup and can leave worker threads sleeping even though new jobs were enqueued, which is especially visible in PriorityPool where workers immediately re-enter Wait() after Work().
Useful? React with 👍 / 👎.
| heightData[idx] == FLT_MAX ? FLT_MAX : heightData[idx] * heightFactor, | ||
| float(i) * stretchFactor | ||
| ); | ||
|
|
||
| aabb.min = glm::min(aabb.min, vertices[idx]); |
There was a problem hiding this comment.
Exclude hole sentinels from terrain cell bounds
In BuildBVH, hole samples are encoded as FLT_MAX but still fed into aabb.min/max updates. Any cell containing at least one hole will get an effectively unbounded Y extent, which breaks broad-phase culling/queries and can degrade ray-tracing and streaming decisions for that cell.
Useful? React with 👍 / 👎.
| bool hole = heightData[idx] == FLT_MAX || heightData[idx + 1] == FLT_MAX || | ||
| heightData[idx + heightFieldSideLength] == FLT_MAX || | ||
| heightData[idx + heightFieldSideLength + 1] == FLT_MAX; | ||
| if (hole) | ||
| continue; |
There was a problem hiding this comment.
Compact triangle indices when skipping hole quads
The index buffer is pre-sized for every quad, but hole quads continue without writing their 6 indices. Later, the code still builds/uploads triangles for the full indices.size(), so skipped quads become zero-index degenerate triangles (vertex 0) in the BLAS, causing incorrect intersections and unnecessary RT workload whenever holes are present.
Useful? React with 👍 / 👎.
Guard the SPIR-V cache and shader variant creation with locks, keep pipeline cache entries stable while they are used, skip incomplete entries during hot reload and track pending jobs explicitly. Worker and main thread priorities stay in the normal scheduling range.
Fixes descriptor binding conflicts, BLAS device addresses, a DDGI probe state race, invalid ray checks, spline baking and interpolation, light state clean up, terrain AABBs with holes, Euler angles close to gimbal lock, FSR2 resource formats and subgroup size control.
Scales the lighting before it is stored in the probes to extend the range of the probe format.
Editor overlays like grid, bounding volumes and brushes are now visible in the path tracer.
Instances with a negative determinant are drawn with a flipped front face and get correct normals, both in the rasterizer and in the ray tracer.
The material transmissive color is now used by the path tracer, DDGI, RTGI and ray traced reflections.
Clouds are now authored with a small set of parameters (coverage, cloud type, size, vertical development, detail, layer and quality). The renderer derives all model parameters, uses a multi channel weather map and moves the clouds with the scene wind. Older scenes are migrated.
Members of temporaries stay valid, spline control points and bake modes can be used from scripts.
References between files of a package (a directory with a package.aepackage file) are stored relatively, such that packages can be moved. Other references keep their previous form.
Adds a theme, command palette, status bar, keyboard shortcuts, ground grid, entity templates, inline renaming and an improved log window, content browser and component panels.
Summary
Integrates terrain authoring into the Atlas editor and updates the runtime/rendering stack needed to make terrain, vegetation, local lighting, ray tracing, and post-processing work together in editable scenes.
This PR adds editor-facing terrain generation, terrain painting, vegetation generation, spline editing, stronger hierarchy/content workflows, terrain streaming/storage improvements, terrain-aware ray tracing, clustered local lighting, SSR, auto exposure, bloom, and a broader render-state preparation path.
Major Changes
Editor terrain workflow
terrains/<name>/<name>.aeterrain.Vegetation generation
Editor UX and scene tools
Terrain runtime
Terrain tools and brushes
Rendering architecture
SceneRenderStateto own per-frame render preparation data, including render lists, material buffers, bindless texture state, bindless BLAS state, light buffers, volumetric light buffers, and async preparation jobs.Lighting and shadows
Ray tracing
Reflections, GI, AO, and post-processing
Shaders
data/shader/bloom.data/shader/exposure.data/shader/reflection.Scene, ECS, and components
SplineComponentwith linear, Catmull-Rom, and Hermite interpolation plus baked spline data.Resources, loaders, and asset data
Job system and async work
JobSemaphoreandSignal.Graphics/backend infrastructure
Build, dependencies, CI, and docs
0.2.1.Tests and demo app