Уровни детализации

```
***Основная статья***

```

## **Описание**

Система детализации **entity** включает в себя следующее:

* детализация полигональных видов (в том числе отключение отдельных видов);
* отключение приема теней объектом;
* отключение отбрасывания теней объектом.

Для каждой сущности указывается класс детализации (блок **{lodclass "class\_name"}**). Если класс детализации не указан, то к сущности не применяются никакие правила детализации, даже если полигональные виды сущности имеют **LOD'ы**. В текущей реализации уровни детализации переключаются мгновенно, без гистерезиса.

## **Декларация LOD-класса**

Описание классов уровней детализации находится в **/set/level\_of\_detail.set**. Количество классов не ограничено. Ниже приводится описание класса:

```
{"<имя класса>"
;  нулевой LOD соответствует полигональным видам без приставки **\_lod** и настройкам теней из параметров сущности
    {distance <distanceN>; LOD_N, расстояние от камеры (в 1/20 метра), включается N-й уровень детализации полигональных видов (у которых он есть).
        {NoGetShadow}    ; отключить затенение сущности
        {NoCastShadow}   ; отключить отбрасывание тени сущностью
        {off}            ; не рисовать сущность вообще
    }
}

```

Блоки, указанные в одном из уровней детализации, распространяют свое действие на все последующие уровни. Настройки последнего уровня детализации распространяются до бесконечности.

## **Создание LOD'ов в 3DSMAX**

Для каждого мэша, для которого нужны уровни детализации, создаются дополнительные мэши с именами, дополненными суффиксом "**\_lod<N>**". Например, если мэш с именем "**body**" должен иметь еще два варианта детализации, то они называются "**body\_lod1**" и "**body\_lod2**". LOD'ы линкуются параллельно с основным мэшем. Например если "**body**" имеет родителем "**basis**", то "**body\_lod1**" и "**body\_lod2**" тоже должны иметь родителем "**basis**". Если в свойствах основного мэша указан параметр **LODLastOff**, то отрисовка мэша отключается на уровне детализации следующем за последним вариантом, в противном случае последний вариант распространяется на все менее детальные уровни. Для приведенного примера с '**body**" признак **LODLastOff** приведет к отключению вида "**body**" на третьем уровне детализации, в то время как отсутствие такого признака будет означать использование "**body\_lod2**" на всех уровнях детализации начиная со второго и ниже. Допускается использование **LODLastOff** без создания вариантов детализации мэша, в этом случае вид будет отключен на первом уровне детализации. Варианты детализации мэша могут иметь топологию, материалы и даже текстуры отличные от основного мэша. Однако использование других текстур не рекомендуется. Для этого желательно использовать текстурные MIP'ы. Рекомендуется так же для LOD'ов использовать более простые варианты материалов, например отключать бамп, отражение и т.п. Для скиновых мэшей полезно будет уменьшение количества влияющих костей.

## **Детализация полигональных видов**

Детализация полигональных видов заключается в создании для всех или части мэшей сущности вариантов с приставкой "**\_lodN**". Если для какого-то мэша LODы не созданы, считается что он выглядит одинаково на всех уровнях детализации. Если для мэша создано вариантов детализации меньше, чем уровней в классе детализации, то наименее детальный вариант распространяется на все последующие уровни детализации. Исключение составляет случай, когда для вида указан признак отключения на определенном уровне детализации. Структура описания вида с поддержкой детализации (в **.mdl**):

```
{LODView
    {view poly "name"}        ; мэш нулевого уровня детализации
    {view poly "name_lod1"} ; мэш первого уровня детализации
    ...
    {view poly "name_lodN"} ; мэш N-го уровня детализации
    {off}                   ; отключить вид на уровне N+1
}

```