Skip to content

Latest commit

 

History

History
133 lines (96 loc) · 14.1 KB

07_Механика_генерации_травы.md

File metadata and controls

133 lines (96 loc) · 14.1 KB

Механика генерации травы

  • Коротко о том, как работает трава (на что влияют основные параметры INI-файлов) и почему не получится сесть сразу на несколько стульев.

Классическая механика

  1. Полностью "исправить" дальность прорисовки травы не удастся из-за ограничений движка. Игра по умолчанию грузит траву только в двух ячейках вокруг тебя, дальше - только мутные текстуры ЛОДов. Увеличить максимальную дальность травы выше некоего предела ни из настроек, ни через ini без последствий нельзя.

  2. По идее, этот параметр контролируется строкой в Skyrim.ini:

    iGrassCellRadius=2

    Он должен быть равен параметру uGridsToLoad (радиус загрузки ячеек в полном качестве), деленному на 2 и округленному вниз. Дефолтный uGridsToLoad равен 5, повышать его можно только с шагом 2 (7, 9, 11 и т.д.), соответственно, iGrassCellRadius будет 3, 4, 5... Но играться с этим параметром - очень нездоровая идея, которая в разы повышает лаги и нестабильность, которую просто так назад не откатить. Поэтому чаще всего проблему с травой решают иначе.

  3. Задирают дальность прорисовки на максимум и устанавливают градиент "выцветания" травы вдалеке, чтобы её появление не так бросалось в глаза. Можно попробовать следующие параметры:

    Skyrim.ini
    [Grass]
    bAllowCreateGrass=1
    bAllowLoadGrass=0
    bDrawShaderGrass=1
    fGrassFadeRange=13400.0000
    fGrassWindMagnitudeMin=5.0000
    fGrassWindMagnitudeMax=125.0000
    iGrassCellRadius=2
    iMaxGrassTypesPerTexure=15
    iMinGrassSize=XX
    SkyrimPrefs.ini
    [Grass]
    fGrassStartFadeDistance=2360.0000
    fGrassMinStartFadeDistance=0.0000
    fGrassMaxStartFadeDistance=18000.0000

    Параметр iMinGrassSize влияет на густоту травы, для разных реплейсеров и оверхолов свой оптимум, надо экспериментировать. Чем выше значение - тем менее густой травон. Если результат не понравится, можно поиграть с параметром fGrassFadeRange (расстояние градиента "выцветания" травы после fGrassStartFadeDistance, можно попробовать значения до 18000) и fGrassStartFadeDistance (дальность прорисовки травы в полный размер, можно тоже повышать и смотреть на результат).

  4. Текстуры травы, земли и ЛОДов, а также текстура шума, накладываемого на ЛОДы для имитации мелких деталей, подгоняются друг к другу так, чтобы граница, где исчезает трава, не бросалась в глаза. Хорошо, если ты скачал какой-то оверхол типа Cathedral или Velanimus, где всё подобрано заранее. Хуже, если собираешь всё сам, тогда придется помучаться с ручным подбором текстур, генерацией текстур ЛОДов и т.д.

  5. Ещё способ - накатить дымку или туман, закрывающий детали на расстоянии. Можно либо через ENB, либо модами типа "Volumetric Mists" или "Cresty's distant mists".


Запекание травы в LODы

  1. В целом, это доработанный гайд STEP, который находится здесь. Отличие в том, что я дополнительно расскажу, как исправить нулевой размер травы в плагинах, чтобы TexGen в составе DynDOLOD не пропускал записи при генерации LOD-текстур травы.

  2. Скачай скрипт для xEdit, который облегчит копирование записей травы в новый плагин. Установи его в xEdit, запусти xEdit и загрузи нужные плагины (можно все).

  3. Когда загрузка будет завершена, кликни ПКМ по любому плагину ➔ Apply Script ➔ выбери CopyGrassToThePatch ➔ нажми ОК. Это скопирует записи травы в новый плагин "Grass-Bounds-Patch.esp", закрой xEdit и согласись сохранить его.

  4. Запусти Creation Kit SE (если его нет, можешь взять его здесь, не забудь фиксы, кликни File ➔ Data, выбери плагин "Grass-Bounds-Patch.esp", кликни "Set as active file" и нажми ОК.

  5. Когда загрузка завершится, перейди в Object Window в раздел WorldObjects ➔ Grass, там будут записи травы. Выбери их все, кликни ПКМ ➔ Recalc Bounds, затем File ➔ Save. Закрой Creation Kit SE.

  6. Снова запусти xEdit и загрузи плагин "Grass-Bounds-Patch.esp". Проверь его записи травы, скорее всего они будут отличаться от оригинальных в суб-записи "OBND - Object Bounds". По желанию можешь применить к плагину скрипт "Remove identical to previous override records" и поставить флаг ESL в записи плагина File Header ➔ Record Header ➔ Record Flags.

🔷━━━🔷
🔷 Далее идёт краткое повторение гайда STEP 🔷
🔷

  1. Открой файл SkyrimPrefs.ini (можно через МО2, чтобы не ошибиться с нужным), добавь секцию [TerrainManager] и строки:
; если секция и значения уже есть, то замени нужное
[TerrainManager]
fBlockLevel0Distance=53248
fBlockLevel1Distance=159744
fBlockMaximumDistance=331776
fSplitDistanceMult=1.000
  1. Скачай скрипт Worldspaces with grass, запусти xEdit, загрузи все плагины и примени скрипт "List worldspaces with grass". Когда он всё сделает, то покажет форму, в которой будут все записи, где есть трава в виде "AlftandWorld;Blackreach;BloatedMansGrottoWorld;...". Сохрани эту строку и закрой xEdit.

  2. В файле GrassControl.ini мода "No Grass In Objects" установи следующие параметры (это не все доступные, не затирай остальные):

[RayCastConfig]
Ray-cast-enabled = true
[GrassConfig]
Super-dense-grass = false
Profiler-report = false
Use-grass-cache = true
Extend-grass-distance = true
Extend-grass-count = true
Ensure-max-grass-types-setting = { установи здесь своё значение параметра iMaxGrassTypesPerTexure }
Overwrite-grass-distance = { установи здесь своё значение параметра fGrassStartFadeDistance }
Overwrite-grass-fade-range = { установи здесь своё значение параметра fGrassFadeRange }
Overwrite-min-grass-size = { установи здесь своё значение параметра iMinGrassSize }
Global-grass-scale = 1.15
Only-load-from-cache = true
Skip-pregenerate-world-spaces = { значение должно оставаться пустым }
Only-pregenerate-world-spaces = { сохранённая строка из пункта 8 без кавычек, т.е. "AlftandWorld;Blackreach;BloatedMansGrottoWorld;..." }
DynDOLOD-Grass-Mode = 1
  1. Опционально - сделай так, чтобы игра загружалась в оконном режиме с маленьким разрешением, например 800:600. Это нужно, чтобы при рендеринге травы в фоне игра не потребляла много ресурсов, а процесс может затянуться. Используй SSE Display Tweaks.

  2. Скачай "Grass Generation MO2 Plugin" со страницы "No Grass In Objects", установи его и перезапусти МО2. Теперь ты можешь запускать генерацию кэша травы с автоматическим перезапуском в случае краша игры, это полезно. Подожди, не запускай, есть один подводный камень.

  3. Генерация травы начинается сразу в главном меню, а в последних версиях игры одновременно с этим запускается логин на Bethesda.net, что приводит к крашу. Чтобы временно отключить этот логин, создай в папке мода "No Grass In Objects" папку Interface, в этой папке создай текстовой файл и переименуй его в BethesdaNetLogin.swf - т.е. создай заглушку.

  4. Запусти генерацию кэша травы через МО2: Tools ➔ Tool Plugins ➔ Precache Grass. Процесс может затянуться или вообще выявить проблемные локации игры, где она гарантированно крашится. Если такие локации есть, Crash Logger приблизительно укажет на проблему, и тебе будет нужно её исправить. Когда процесс будет завершён, ты увидишь сообщение с "ошибкой": "Grass generation finished successfully!".

  5. Опционально - если ты выполнил пункт 10, то верни разрешение игры в норму.

  6. Запусти TexGen, отметь все галочки и настрой размер текстур по желанию (не переусердствуй). Проверь, чтобы сжатие всех типов текстур было BC7 Quick. Нажми Start, а когда генерация будет завершена - Zip & Exit. Установи получившийся архив в МО2 и подключи его.

  7. В файле "DynDOLOD/Edit Scripts/DynDOLOD/DynDOLOD_SSE.ini" укажи параметр Expert=1, дополнительно можешь настроить параметры цвета LOD-текстур травы в общем атласе:

; при использовании ENB подгонка этих значений под твои настройки превращается в пытку,
; потому что ENB использует разные шейдеры на настоящей траве и на LOD-ах
; grass LOD brightness multipliers
GrassBrightnessTopR=0.365
GrassBrightnessTopG=0.36
GrassBrightnessTopB=0.355
; make bottom darker to fake shadowing
GrassBrightnessBottomR=0.200
GrassBrightnessBottomG=0.203
GrassBrightnessBottomB=0.205
  1. Будем считать, что ты уже умеешь пользоваться DynDOLOD-ом в его расширенном режиме, так что всё, что будет отличаться от обычной генерации, это галочка Grass LOD и её настройки. Установи Density 35, Mode 1, запусти генерацию. По завершении кликни Save & Zip & Exit, установи получившийся архив в МО2 и подключи его.

  2. Удали или скрой файл BethesdaNetLogin.swf из пункта 12. С этой заглушкой у тебя не получится пройти главное меню, чтобы поиграть, она нужна только при генерации кэша травы.

  3. Proof of concept всего этого действа, текстуры в верхней половине изображения - LOD-ы. Другой цвет, да? Настраивай значения из пункта 16, запускай DynDOLOD и кликай Rebuild Atlas. Снова не то? Повторяй, пока не будешь удовлетворён или пока тебе не надоест.


Назад к оглавлению