Relief-Nachreich (t_3ebe4086): relief_color klammaert Kanaele auf 0..1 — der Mesh-Speicher ARRAY_COLOR/RGBA8 clamp't genauso, der Helfer muss die Render-Wahrheit liefern, sonst liegt der Probe-Vergleich um >0.05 daneben. Live-Material-Test t_55ed041a erwartet jetzt dieselbe relief_color-Formel statt der alten 0.72..1.15-Konstanten. Suite: test_terrain 112/112, 11 Suiten ALL OK.
This commit is contained in:
parent
ffb27645d4
commit
d6a0fe2196
2 changed files with 12 additions and 4 deletions
|
|
@ -267,7 +267,11 @@ static func relief_color(mat_id: int, h: float, hmin: float, hmax: float,
|
||||||
var lf := lerpf(LIGHT_LOW, LIGHT_HIGH, x * x * (3.0 - 2.0 * x))
|
var lf := lerpf(LIGHT_LOW, LIGHT_HIGH, x * x * (3.0 - 2.0 * x))
|
||||||
var f := clampf(hf * lf, SHADE_MIN, SHADE_MAX)
|
var f := clampf(hf * lf, SHADE_MIN, SHADE_MAX)
|
||||||
var base := MATERIAL_COLORS[m] as Color
|
var base := MATERIAL_COLORS[m] as Color
|
||||||
return Color(base.r * f, base.g * f, base.b * f, 1.0)
|
# Kanäle auf 0..1 klemmen: der Mesh-Speicher (ARRAY_COLOR, RGBA8) clamp't
|
||||||
|
# genauso — der Helfer muss die RENDER-Wahrheit liefern (Probe-Vergleich),
|
||||||
|
# nicht die unbehandelte Mathematik.
|
||||||
|
return Color(clampf(base.r * f, 0.0, 1.0), clampf(base.g * f, 0.0, 1.0),
|
||||||
|
clampf(base.b * f, 0.0, 1.0), 1.0)
|
||||||
|
|
||||||
|
|
||||||
func triangle_count() -> int:
|
func triangle_count() -> int:
|
||||||
|
|
|
||||||
|
|
@ -424,8 +424,10 @@ func _test_live_material_colors() -> void:
|
||||||
for v in heights:
|
for v in heights:
|
||||||
hmin = minf(hmin, v)
|
hmin = minf(hmin, v)
|
||||||
hmax = maxf(hmax, v)
|
hmax = maxf(hmax, v)
|
||||||
var shade := lerpf(0.72, 1.15, (heights[center] - hmin) / maxf(hmax - hmin, 0.0001))
|
# Karte t_3ebe4086: Shading = Material × Höhen-Kurve × Pseudo-Licht —
|
||||||
var expected := Color(0.78, 0.70, 0.45) * shade # Sand × Höhen-Shading
|
# die Erwartung kommt aus derselben relief_color()-Formel wie das Mesh.
|
||||||
|
var nrm: PackedVector3Array = (view.get("_mi").mesh.surface_get_arrays(0))[Mesh.ARRAY_NORMAL]
|
||||||
|
var expected := _relief_color(1, heights[center], hmin, hmax, nrm[center]) # Sand
|
||||||
var c := col[center]
|
var c := col[center]
|
||||||
_check(absf(c.r - expected.r) < 0.005 and absf(c.g - expected.g) < 0.005
|
_check(absf(c.r - expected.r) < 0.005 and absf(c.g - expected.g) < 0.005
|
||||||
and absf(c.b - expected.b) < 0.005,
|
and absf(c.b - expected.b) < 0.005,
|
||||||
|
|
@ -478,7 +480,9 @@ func _test_live_material_colors() -> void:
|
||||||
flat.resize(res * res)
|
flat.resize(res * res)
|
||||||
view2.call("update_heights", flat, res, size, size) # OHNE Schicht, Cache leer
|
view2.call("update_heights", flat, res, size, size) # OHNE Schicht, Cache leer
|
||||||
var col2: PackedColorArray = (view2.get("_mi").mesh.surface_get_arrays(0))[Mesh.ARRAY_COLOR]
|
var col2: PackedColorArray = (view2.get("_mi").mesh.surface_get_arrays(0))[Mesh.ARRAY_COLOR]
|
||||||
var grass_expected := Color(0.30, 0.45, 0.22) * 0.72 # flach: t=0 → shade=SHADING_LOW
|
# Karte t_3ebe4086: flach = t 0 (S-Kurve → SHADING_LOW) × Normale UP →
|
||||||
|
# Erwartung aus derselben relief_color()-Formel wie das Mesh.
|
||||||
|
var grass_expected := _relief_color(0, 0.0, 0.0, 0.0, Vector3.UP)
|
||||||
var c2 := col2[center]
|
var c2 := col2[center]
|
||||||
_check(absf(c2.r - grass_expected.r) < 0.005 and absf(c2.g - grass_expected.g) < 0.005
|
_check(absf(c2.r - grass_expected.r) < 0.005 and absf(c2.g - grass_expected.g) < 0.005
|
||||||
and absf(c2.b - grass_expected.b) < 0.005,
|
and absf(c2.b - grass_expected.b) < 0.005,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue