aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/tomes/05-render.md25
1 files changed, 25 insertions, 0 deletions
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`. Старший байт