Use LOD0 for terrain queries and rendering
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m39s

This commit is contained in:
Valentin Popov committed 2026-10-18 05:59:15 +04:00
1 parent b0b8e14569
commit e5d273158c
5 files changed
+649 -91

No files matched your search

+25
View File
@@ -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`. Старший байт