From e5d273158cd27545479276120dba8c02913f7930 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sun, 18 Oct 2026 05:59:15 +0400 Subject: Use LOD0 for terrain queries and rendering --- docs/tomes/05-render.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'docs') diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index dce7724..b04af31 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -930,6 +930,31 @@ sun-ray queries поэтому используют исходные коорд Эти два указателя нельзя подменять друг другом. Формулы камеры и размещения реализованы и проверяются в `fparkan-render`. +## LOD ландшафта + +У `Land.msh` список slot-ссылок terrain хранится в 38-байтовых записях +Node38, а диапазоны граней — в 68-байтовых Slot68. В текущем runtime первые +две ссылки Node38 выбирают соответственно LOD0 и LOD1; каждая запись слота +задаёт начало и число граней в исходном массиве `TerrainFace28`. Все грани +проверяются на единственное назначение, а выходящий за массив, повторный или +неподдерживаемый диапазон считается ошибкой загрузки. + +Первый рендер карты, terrain-запросы высоты и пересечения, receiver-ы теней и +обрезка контуром зданий используют только LOD0. Отбор сохраняет порядок +исходных граней, а контурный проход отдельно переводит индекс спроецированной +грани обратно в исходный. LOD1 пока не подставляется по расстоянию: такой +переход не реализован. + +```rust +let assignments = mesh.face_lod_assignments()?; +for (face, assignment) in mesh.faces.iter().zip(assignments.iter()) { + if assignment.lod != TerrainLod::Lod0 { + continue; + } + // Build terrain query geometry from this source face. +} +``` + ## Материалы ландшафта Рядом с `Land.msh` лежат `Land1.wea` и `Land2.wea`. Старший байт -- cgit v1.2.3