maj00r
2f8aeb24c0
fix(track): a crossing of grooved rails is one flat block where their lofts overlap; the rail cut by the other covers the roundings of the rail going through, the tops in the block are flat in one texture, the plates of the V reach up to the rail top, the walls of the cuts are lit and textured as walls, and the nose between two flangeways starts blunt at the width of a nose tip instead of a thin sliver standing in the groove
2026-10-17 23:28:41 +02:00
maj00r
9343ebcb13
feat(track): frogs and crossings for every rail profile; grooved rails share the floor of their grooves where they cross and need no check rails, the V beside the rail going through is one block where the lofts of the rails overlap; the nose of an acute frog of flat rails is filled between its legs as far as their lofts overlap, like a cast insert
2026-10-17 23:28:41 +02:00
maj00r
59f1a5a144
fix(track): the lowest of two height lists also takes the points where they cross, so the top of an obtuse point rail is not cut narrower than its sides; the end of a short neighbour track joined at a crossing is the nearer one, not any within half a metre
2026-10-17 23:28:41 +02:00
maj00r
215f16e871
fix(editor): self-test frog takes the throat, nose, wing end and check rails from the sizes the rails are laid with, so the wing end is logged where it is laid; self-test crossings tells crossings at middle angles apart and counts them
2026-10-17 23:28:41 +02:00
maj00r
1a3a38e96d
refactor(track): one plan projection, cross product and meeting of two lines in plan for the crossings of rails, the frog of a switch and the check rails, in place of copies in each
2026-10-17 23:28:41 +02:00
maj00r
405081e81c
refactor(track): the rails of the two paths of a switch are laid by one loop for left and right switches alike, the side of the blade of a path and the blade itself come from one place, used when a switch is made, thrown and its frog found
2026-10-17 23:28:41 +02:00
maj00r
809b48c2ab
refactor(track): the blades of a thrown switch are drawn again with their cut faces by one helper instead of four copies; self-test command switches sets every switch to a path and moves its blades there at once
2026-10-17 23:28:41 +02:00
maj00r
e324eb10f9
perf(track): pieces of gauge lines whose bounding boxes do not meet are skipped before they are intersected; self-test railtime logs how much of the time goes to finding the crossings
2026-10-17 23:28:41 +02:00
maj00r
36fb68d8f9
perf(track): the gauge lines, crossings and check rails of a track are kept until a track is made, rebuilt or removed, so laying the rails of a track no longer recomputes its neighbours' crossings for each wing rail; self-test command railtime times planning the rails of all tracks
2026-10-17 23:28:41 +02:00
maj00r
929294af24
feat(editor): self-test command guards logs each guard rail and what each of its ends and breaks is cut along: the rail of the other track, how far off its gauge line and how skewed; a fault when a cut is not along a rail, or a glued end of the frame of a crossing at a middle angle is not on the face of a guard rail of the other track
2026-10-17 23:28:41 +02:00
maj00r
7088618d90
feat(editor): every switch laid in the editor gets the key frogs, a box in the Switch panel sets or clears it as one undo step; the editor rebuilds the tracks crossing a changed or removed one; self-test commands frog, crossings, frogkey and geomhash; Polish translation
2026-10-17 23:28:41 +02:00
maj00r
2159d682f2
feat(track): rails are cut where they cross other rails: a switch with the key frogs draws its frog, wing rails and check rails from its rails, tracks crossing other tracks get acute frogs with wing rails and check rails, obtuse points, guard rails along the quadrilateral of a crossing between 20 and 45 degrees and broken rails with guard rails at wider angles, the track going through chosen by name; sizes come from the rail profile, only for the profiles default, s60, uic60 and s39, others are laid whole; rail ends left open are closed with their cross-section; switches of older sceneries, with check rails in their includes and no key, are drawn as before
2026-10-17 23:28:41 +02:00
maj00r
7e1b2c553c
feat(renderer): a matte variant of a material for the parts of rails no wheel rolls on: it lights the same maps as weathered steel, with the weathering scaled per vertex by userdata, so a polished running surface fades into unused steel without a bright stripe; the cut faces of rails are drawn in it in an extra pass
2026-10-17 23:28:41 +02:00
7221c153dd
Let eu07.ini scale how much the moon lights the scenery at night (gfx.moonlight)
2026-10-17 23:10:01 +02:00
41cc966103
Show the moon by day as bright as its sunlit surface, and where the sun and the moon are in the sky window
2026-10-17 22:59:23 +02:00
435110cef9
Place the sun and the moon where they are and light the night by the phase of the moon
2026-10-17 22:47:24 +02:00
5a5c67aaaf
Let the instances drawn from the GPU hide one another, in two phases
2026-10-17 21:50:23 +02:00
918c056b83
Merge branch 'master' into feat/gl46-migration
2026-10-17 20:57:15 +02:00
802e356c91
Curve the bases of the clouds up towards their edges and start every billow at a height of its own
2026-10-17 20:03:26 +02:00
0dae1f0b9f
Give the fog volume a slice of the fog without its clouds for the sky
2026-10-17 19:56:35 +02:00
1730f400ad
Let the base and the top of every cloud stand a little off those of its layer
2026-10-17 19:43:18 +02:00
df48637718
Switch the fog over the sky to the fog without the clouds as soon as the volume holds any cloud
2026-10-17 19:31:45 +02:00
56889679d9
Keep the clouds of the fog volume off the sky, where the ray march draws them already
2026-10-17 19:24:36 +02:00
1eeb5013cb
Light the volumetric clouds by the sun three times as brightly
2026-10-17 19:03:46 +02:00
1152791e8c
Space the steps towards the sun of the clouds geometrically and follow more orders of scattering
2026-10-17 19:01:39 +02:00
e1900a9cd3
Leave the finest octaves out of the cloud coverage noise so the sides of the clouds get no upright grooves
2026-10-17 18:41:15 +02:00
dd89aa5396
Fray the edges of the volumetric clouds with a finer noise and let their billows shade one another
2026-10-17 17:57:25 +02:00
22bf015939
Shade the volumetric clouds by the cloud over each point, not by the density at it
2026-10-17 17:24:51 +02:00
27e5c07837
Add screen-space contact shadows for the sun, lamps and headlights
2026-10-17 03:11:47 +02:00
c4da5c9867
Give the prefiltered environment map a texture unit of its own
2026-10-17 02:16:58 +02:00
97112b143b
Draw the depth of the whole scene before its colour
2026-10-17 02:15:50 +02:00
f352718e4a
Stream model data through persistently mapped buffers
2026-10-17 01:24:33 +02:00
8dd80c4d2e
Even out the fog cells with their neighbours and stagger the points next to lamps
2026-10-17 00:37:58 +02:00
d07204db5c
Take the light of a lamp in the fog along four rays in the cells next to it
2026-10-17 00:31:59 +02:00
f1c12ca651
Spread the light of a lamp in the fog over the size of a cell next to the lamp
2026-10-17 00:27:28 +02:00
e31a49f917
Sample the fog cells across their whole size and take their lamps from fixed clusters
2026-10-17 00:22:29 +02:00
e8dbaf70a9
Sample the fog cells in their middle across the view and dither the output
2026-10-17 00:11:27 +02:00
aa522d7376
Integrate the light of lamps across the fog cells instead of one point sample
2026-10-16 23:52:17 +02:00
0662df23a7
Copy the Python runtime next to the executable only when the Python install has changed
2026-10-16 23:37:27 +02:00
6ee628aaa5
Steady the volumetric fog and add a switch for the old headlight beams
2026-10-16 23:23:51 +02:00
8b929fc1da
Give the volumetric clouds lumps, sky and ground light and a fog colour by the angle from the sun
2026-10-16 22:25:11 +02:00
2be85410ce
Draw volumetric clouds, their shadows, a volumetric fog and catalogue stars from a new weather system in the GL 4.6 renderer
2026-10-16 21:44:47 +02:00
jerrrrycho
c7f9796387
fix(ai): release horn when human driver takes over from AI ( #210 )
...
* fix(ai): release what the AI was holding when the player takes over
* fix(ai): keep the light selector lookup within its table, Sonar findings of the handover
- the light selector size comes from the vehicle definition (LightsList Size)
and isn't limited, while the table holds 18 positions; a bigger selector
read past the table, and so did a table index other than the front or
rear one. Only the positions the table holds are looked at now, and the
selector stays where it is for a bad table index (cpp:S2259),
- the lambdas of the handover capture what they use explicitly (cpp:S3608),
- the chained assignments resetting the headlight state on the AI taking
over are split (cpp:S1121).
2026-10-16 14:44:30 +02:00
d509775269
Cast shadows of vehicle headlights from the scene in their beam in the GL 4.6 renderer
2026-10-16 14:13:36 +02:00
466cb5339e
Draw instances from the GPU culling with indirect draws, occlusion culling and a depth prepass
2026-10-16 12:54:52 +02:00
2f0a06b98e
Cast shadows of scenery lamps from the scenery, nearby vehicles and the cab in the GL 4.6 renderer
2026-10-16 11:32:45 +02:00
06d7b9e9f0
Cast shadows of the cab lamp from the cab in the GL 4.6 renderer
2026-10-16 02:43:27 +02:00
4d3a401aae
Cull and assign LOD to instances in a compute pass
2026-10-16 01:08:44 +02:00
9277c28805
Cull instances by compact records and draw them from a shader storage buffer
2026-10-16 00:37:54 +02:00
fd98d4eea5
Light the scene with lamps of models, vehicle compartments and the cab lamp in the GL 4.6 renderer
2026-10-16 00:07:08 +02:00