perf(render3d): the sky light baked once at start, the terrain load in four steps, actor cull bounds by height
- sky_start_yaw: a game that turns the sky at boot sets it before r3d_init and the image-based light is baked once at that yaw; sky_set_yaw to a yaw already baked bakes nothing. - terrain_init_step: the height field and normals, the sun shadow, the materials, the patches and programs as separate steps; r3d_load_count is 8, so a loading bar moves through the terrain (half the start-up) instead of jumping over it. terrain_init runs the four in a row as before. - The per-cascade actor cull centres its sphere at half the model's height and sizes it by the larger of height and radius: centred at the radius, it dropped a head at a cascade's edge (11 px in town, found by the drawstats comparison). Lake was byte-identical before and after. OpenGL frames at the five viewpoints unchanged; the game's 59 self-tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
dcf6c55a4e
commit
00df8839e6
5 changed files with 52 additions and 16 deletions
|
|
@ -332,8 +332,12 @@ function actor_draw_casters(light_vp: words) -> void {
|
|||
let a = ac_actors[i]
|
||||
if not ac_visible(a, true) { continue }
|
||||
if a.radius != 0 {
|
||||
let r = f_mul(a.radius, a.scale)
|
||||
if not ac_in_light(light_vp, a.x, f_add(a.y, r), a.z, f_mul(r, fl(1.5))) { continue }
|
||||
# the radius is the horizontal extent: a person is far taller than wide, so the sphere is
|
||||
# centred at half the model's height and reaches the larger of the two, with a margin for
|
||||
# the pose (a first version centred it at the radius and dropped a head at a cascade's edge)
|
||||
let hh = f_mul(f_mul(a.model.height, F_HALF), a.scale)
|
||||
let r = f_max(f_mul(a.radius, a.scale), hh)
|
||||
if not ac_in_light(light_vp, a.x, f_add(a.y, hh), a.z, f_mul(r, fl(1.5))) { continue }
|
||||
}
|
||||
var ap = ac_sh
|
||||
if a.cutout { ap = ac_sh_cut }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue