---
id: TASK-0019
title: Добавить генерацию данжей-предфабов поверх биомов мира
summary: Реализовать BackLog-задачу на детерминированное размещение dungeon prefab в voxel-мире: одинаковая позиция по seed, встраивание через stamp/carve и сохранение результата.
priority: High
area: worldgen
owner: unassigned
created: 2026-03-30
updated: 2026-03-30
execution_time: 1d6h
depends_on:
  - TASK-0003
canonical_docs:
  - docs/tasks/Index.md
related_files:
  - Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs
  - Assets/ChunkTemplate.asset
---

# TASK-0019 - Добавить генерацию данжей-предфабов поверх биомов мира

## Status

Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там.

Допустимые значения статуса:

- `BackLog`
- `ToDo`
- `InProgress`
- `Review`
- `Done`

## Why

Dungeon prefab должны одинаково размещаться по seed и быть частью мира, а не отдельной "декорацией". Для voxel-мира это означает stamp/carve в данных чанков (и, при необходимости, пересборку визуального меша/коллайдеров).

## Expected Outcome

Система worldgen умеет по seed и biome rules выбрать место для dungeon prefab, встроить его в voxel-мир (stamp/carve в воксельных данных чанков), удалить конфликтующие воксели и воспроизвести тот же результат у всех клиентов.

## Current Context

В проекте есть `VoxelWorldGenerator` с chunked runtime loop. Dungeon placement должен строиться поверх deterministic world coordinates и biome sampling, но применять изменения на уровне voxel chunk data.

## Source Of Truth

- `docs/tasks/items/TASK-0003.md`
- готовые dungeon prefab assets
- future dungeon placement code

## Read First

- `docs/tasks/items/TASK-0003.md`
- `Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs`
- `Assets/ChunkTemplate.asset`

## Scope In

- deterministic placement dungeon prefab по seed и biome rules
- выбор world-space/voxel-space якоря (anchor) и bounded volume для stamp/carve
- stamp/carve в voxel chunk data и пересборка меша/коллайдера
- одинаковое размещение у всех игроков

## Scope Out

- процедурная сборка самих данжей из модулей
- сложная логика лута и боссов внутри данжа

## Constraints

- данж не должен существовать только как отдельный GameObject без интеграции в voxel данные мира
- размещение должно быть детерминированным и совместимым с chunked worldgen

## If You Find Drift

- если prefab placement требует недетерминированного ручного runtime-подбора, это drift

## Suggested Approach

1. Определить правила выбора позиции данжа по biome/world rules.
2. Определить формат dungeon stamp (например: набор voxel изменений, высотная маска, volume SDF или готовый "voxel brush").
3. Реализовать применение stamp/carve в voxel chunk data и пересборку визуала.
4. Подготовить интеграцию с chunk loading и world save.

## Acceptance Criteria

- один и тот же seed размещает один и тот же dungeon prefab в одном и том же месте
- данж встраивается в voxel-мир через stamp/carve и изменяет voxel chunk data
- результат одинаков у всех игроков и повторяем после загрузки мира

## Verification

- повторная генерация одинакового мира и сверка положения данжа
- ручная проверка отсутствия "парящих" коллайдеров/дыр после stamp/carve

## Risks / Open Questions

- нужно решить, как хранить пересечение данжа с несколькими чанками и как кэшировать/сохранять stamp results

## Human Decisions Needed

- none currently

## Decision Log

- `2026-03-31` - задача переписана под voxel worldgen: stamp/carve вместо grid/tile carving.

## Handoff Notes

При переводе в `ToDo` желательно отдельно перечислить доступные dungeon prefab и biome placement rules.
