f20b1a3071
Replace cubemap scenery reflections with SSR, add Vulkan ray traced reflections
2026-10-25 13:54:49 +01:00
89f11895fc
Keep the walk's model block after the depth and shadow passes of the gpu-culled draws
2026-10-25 11:18:34 +01:00
252b9373ea
Add gfx.antialiasing (off, msaax2/x4/x8, taa) with temporal anti-aliasing in the GL 4.6 and Vulkan renderers
2026-10-25 05:17:41 +01:00
c48c58776a
Vulkan: parity with GL (P1–P7), shared GPU culling records (N6c), threaded command recording and render thread (M1, M4)
2026-10-25 03:06:01 +01:00
9b7d02e5fb
Vulkan: scene rendering (D1–D7) on a scene walk shared with GL (N6a, N6b)
2026-10-24 20:10:24 +02:00
maj00r
69980b5540
perf(editor): the top view draws the terrain lighter: the cells of its grid some 16 pixels across, not 10, the chunks streamed only as far as the screen reaches, not the range of the 3D view, and the cube map of the reflections not made anew while it's shown, nothing in it reflecting
...
On test2 at an extent of 300 m: 55 chunks in place of 106, 204 thousand triangles of the terrain in place of 895 thousand (all drawn 0.82 million in place of 2.34), the GPU 1.46 ms a frame in place of 2.33, and 3.6 ms of the CPU less a frame for the reflections. The 3D view stays as it was; the range of 50 km of the tracks work area in 3D cost nothing measurable on l053. Selftest perf logs the chunks of the terrain, their triangles and the steps of their grids.
2026-10-24 19:23:01 +02:00
bd589f272d
feat(vulkan): vulkan 1.4 core with the user interface and the launcher, shaders split into ogl46/vk14 with SPIR-V binaries loaded first
2026-10-24 05:47:11 +02:00
68fa5dc2da
feat(vulkan): gfxrenderer picks the opengl 4.6 or the vulkan 1.4 renderer (B1-B3)
2026-10-24 03:06:33 +02:00
6bcdb7dd05
perf(gl46): the geometry of the banks without user data in a few large buffers shared by them, so the multi draws take the chunks of many models at once (gfx.geometry.shared)
2026-10-24 01:49:02 +02:00
maj00r
85b76acca5
perf(sleepers): the instances of the sleepers and timbers of a track sent to the gpu once, as it's laid, and kept there in a buffer of their own; in each pass the runs of them in sight turned by the modelviews of their cells into the instance buffer of the frame by a compute pass, one dispatch and one barrier a pass, and drawn in one instanced draw for each model, part and level of detail, in place of the cpu turning every instance every frame
2026-10-24 01:40:34 +02:00
e53c44ed4d
perf(debug): cpu time of the parts of the culling and the draws of the instances of the main view in the gpu culling section of the debug panel
2026-10-24 01:38:33 +02:00
3e2d292709
perf(gpucull): keep the walks of the submodel trees of the instances from frame to frame and make them again only when the model changes (gfx.gpucull.walkcache)
2026-10-24 01:01:43 +02:00
maj00r
f155956669
perf(sleepers): the rails of each track for the fastenings worked out once and kept until its geometry is made again, it goes far or the crossings change, not again for every track laid around it; the fastenings laid only out to 30 m past where they're drawn, the tracks further out keeping their beams to lay them on as they come near; out past 50 m the tracks laid while the laying in a frame took under 2 ms, the rest in the frames after
2026-10-24 00:23:50 +02:00
794ac578de
perf(textures): with texture streaming read the data ahead of the camera instead of the whole scenery at load, drop read-ahead data unused for 5 min
2026-10-23 23:35:02 +02:00
Claude
f30fefd91c
Sieć trakcyjna: przęsła wg typów sieci, wysięgniki z katalogu, bramki, kotwienia i edytor sieci
...
Sam kod exe z gałęzi siec-trakcyjna (bez testów, notatek i danych z tests/catenary).
Dane (data/traction_*.txt) leżą poza repozytorium.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_019Tqn7T8D1Gx3ptKtZgNtX5
2026-10-23 23:15:00 +02:00
336690ad8a
perf(debug): debug.memorystats switch for the heap counting (off by default) and the places of the large heap blocks in the memory section
2026-10-23 23:10:32 +02:00
16ee4ff65b
perf(debug): live heap blocks by size and the objects of the simulation tables in the memory section of the debug panel
2026-10-23 22:45:49 +02:00
4be94dd006
perf(debug): count what the program takes with new (global operator new/delete of the executable) and the objects of the model instances in the memory section of the debug panel
2026-10-23 22:26:01 +02:00
2dc70a50bc
perf(debug): memory of the process and of its parts in the debug panel: resident, peak and private memory, card memory (GL_NVX_gpu_memory_info), the copies kept by the textures, geometry banks, models, scenery shapes and lines, sleepers and sound buffers
2026-10-23 22:02:03 +02:00
1a42009dc2
perf(physics): performance.multithreading switches the work over many threads, which each job sizes by how much it has: the physics steps a thread per 128 vehicle steps, up to all logical cores
2026-10-23 21:07:05 +02:00
9f7217256b
fix(physics): the external program messages (multiplayer) no longer keep the physics steps in one thread, only network sessions do; the debug panel tells what keeps them in one
2026-10-23 20:12:02 +02:00
60667588b5
perf(physics): the steps of the vehicle physics on many threads, in groups of vehicles which act on one another (performance.cpucores, 0: all cores)
2026-10-23 19:56:36 +02:00
9a7ff372f7
perf(debug): count what wakes the physics of the vehicles (brake pipe, main reservoir pipe, command, speed, acceleration, neighbour, other) in the debug panel
2026-10-23 19:08:09 +02:00
f17462b186
perf(physics): road vehicles farther than 1 km from the camera go by one step of the physics in a frame (physics.roadlod); count what resets the switching time of the vehicles (compressor, mains, diesel, physics woken) in the debug panel
2026-10-23 18:47:01 +02:00
e054fe900d
perf(debug): count what keeps the physics on in rail vehicles standing still (active cab, speed, acceleration, switching, ezt/dmu, moving neighbour), for the debug panel
2026-10-23 18:06:12 +02:00
5a53c32b0a
perf(debug): forces and update of the vehicles by kind in the debug panel: rail and road, within 1 km of the camera and farther, with the counts of vehicles and of the ones standing still
2026-10-23 17:51:15 +02:00
52df707f30
perf(debug): parts of the vehicle update in the debug panel: scenery animations, power grid, roads, preparation, forces, vehicle update and ai, with the counts of vehicles and physics steps; input and the start of the ui frame timed apart
2026-10-23 17:26:44 +02:00
maj00r
5aedbcdc1b
feat(sleepers): the timbers of a switch get the fastenings of the rails from the submodels plate, chair and check of their model: a plate under each rail where it lies on a timber, slide chairs under the stock rails along the blades, a fastening of both where a check rail or another rail of the frog lies close beside, the legs of the nose in one plate where they're joined; the rails sit on the plate, the blades ride on the slide plates of the chairs as high as the model has them, their webs shortened; the fastenings drawn within 120 m; selftest fastenings
2026-10-23 16:46:58 +02:00
maj00r
5e846018b6
feat(editor): far out the top view shows the base map of OpenStreetMap from geoportal.gov.pl in place of the imagery, tiles as large as the view needs, the ground not drawn under it nor streamed as far as the view; the tracks over it in the colour of the rails, blue by default, and the joints of the pieces left out far out
2026-10-23 13:35:07 +02:00
maj00r
a892532fda
feat(editor): the top view draws the tracks whole, without the ballast or the rails alone, in a colour of their own over the imagery and the map: both rails close up, one line further out; a choice by the extent and in the View menu, kept in the settings
2026-10-23 13:20:06 +02:00
fc714d50ec
perf(debug): cpu timers of the simulation and the main loop, cpu time of the frame parts next to the gpu, renderer data of the debug panel in folding sections
2026-10-22 20:54:30 +02:00
5d3f857c39
perf(gl46): leave out instance buckets before the culling, lod bounds once per model, shared walks of the shadow cascades
2026-10-22 20:13:25 +02:00
925f5910bb
refactor(track): the ballast fades into that of the tracks joined, as the rails do
2026-10-21 23:36:03 +02:00
b8eb5c71a1
feat(track): parallax track materials blended at the joints
2026-10-21 23:25:40 +02:00
c5a894a674
feat(track): rails and ballast blended into those of the tracks joined, where their textures differ
2026-10-21 22:34:57 +02:00
2d7942786d
feat(track): each 3D sleeper at the level of detail of its own distance
2026-10-21 21:48:17 +02:00
9c2520ea52
fix(track): 3D sleepers let go of the beams of the tracks far away
2026-10-21 18:19:21 +02:00
30cb83584d
fix(track): timbermodel of a track lays switch timbers without sleepers3d in eu07.ini
2026-10-21 15:37:11 +02:00
maj00r
4512ed4e0b
fix(editor): guard the places where the editor could crash outright
...
Found with an address and undefined behaviour sanitizer build, random
monkey sessions on the test sceneries and broken inputs:
- A deleted model left its pointer in the pick list of the renderer, the
bound node of the panels, the bindings of the infrastructure and the
selection: the next pick or panel frame read freed memory. The renderer
forgets it, and one erase_model does the cleaning for all the places
which deleted a model by hand.
- The plan band of a route read the vertex before the first one in the
frame a drag was let go.
- A scenery which can't be opened goes back to the launcher with the
reason in the log, a track of an unknown type or a tributary loads as
a normal track or a river with a message, and a spline with no finite
length or step gets a sane number of segments.
- Typed numbers which aren't (NaN, inf, ends 0 m or 1000 km apart, a
vector of 1e30, a diverging track part of 5 km, a curve threshold of 0,
a zero history size, radius norms below zero) are refused or clamped,
where they made the geometry run away or divide by zero.
- Folders which can't be read and file names which aren't valid in the
locale no longer throw out of the scans of sceneries, textures, sweeps,
roads and signal plates; the scans skip them.
- The launcher: Ctrl+Del with no trainset selected, a dropped vehicle
whose skin is gone and a text with a percent sign.
- A terrain mesh made for another resolution of its chunk isn't put into
the chunk, and a slot is reused only for a mesh of the same size.
- Vehicles on a track changed by the editor are moved over a copy of the
list they leave.
- The table of the keyboard shortcuts gives its stretched column a
weight, else ImGui divides 0 by 0 in the first frame of the window.
2026-10-21 08:42:29 +02:00
maj00r
8903d15b94
fix(editor): a track dragged around no longer piles copies of its geometry up in the graphics memory
...
The geometry of a track made anew, ten times a second while it's
dragged, only forgot the chunks it had: the bank kept them all, so the
buffer of the section grew by the whole track and its neighbours each
time and was sent to the gpu in full again. Ten rebuilds of a test
scenery took the bank from 2 to 29 MB; a long session would run the
card out of memory. The old chunks are erased from the bank now, but
for those of a moving nose, laid again in place, and a moved traction
wire drops its old one too.
A chunk swapped for one without the extra vertex data kept the flag of
having it and the upload read from an empty array; the buffer is made
again when that changes.
2026-10-21 08:41:50 +02:00
cf36b24e8d
Let the smoke leave the exhaust as a widening jet that fades in
2026-10-20 18:00:51 +02:00
abbdca4773
Let the templates of smoke sources set how fast their particles rise or fall
2026-10-20 17:12:23 +02:00
867497b658
Simulate and light the smoke on the GPU and make rain and snow of particles
2026-10-20 16:44:27 +02:00
6a109e984c
perf(gl46): skip shapes out of the pass frustum and the motion blur when nothing moves
2026-10-20 15:23:03 +02:00
dfbe8a6d9e
feat(gl46): leave out instance buckets beyond their range before the culling
2026-10-20 14:57:30 +02:00
07ac7406a0
feat(terrain): grass follows the seasons and fades out over gfx.grass.fadedistance
2026-10-20 02:20:03 +02:00
ceb439b218
Fix windows build
2026-10-20 01:38:33 +02:00
f3bdadad66
feat(terrain): holes cut in the heightmap terrain and shader grass painted over it
2026-10-20 01:32:01 +02:00
34f206fefc
to de9f61b307
2026-10-19 22:14:04 +02:00
de9f61b307
Merge remote-tracking branch 'origin/feat/switch-blades' into feat/gl46-migration
2026-10-19 22:13:43 +02:00