Коротко: переконливий густий ліс — це бос-битва продуктивності: тисячі високополігональних дерев, шарувата прозорість та інстанси, що тягнуться до горизонту. Ви перемагаєте її дисциплінованим LOD-ланцюгом, що закінчується імпостером (білбордом, зверненим до камери, який підробляє 3D-дерево з будь-якого кута), агресивним інстансингом і кулінгом та кількома шейдинговими трюками, щоб дешеві далекі дерева не видавали себе. Ця стаття проходить весь ланцюг від повного меша до білборда, трюк октаедричних імпостерів та як не дати сильно оптимізованому лісу виглядати мертвим.
Кожне дерево тут на різній відстані від камери, тому кожне має коштувати різного. Мистецтво дешевого лісу: витрачати полігони лише на ті, що поблизу, і переконливо підробляти решту.
Головна ідея: платіть за відстанню
Дерево за 5 метрів і дерево за 500 метрів не повинні коштувати однаково. LOD-ланцюг витрачає повну деталізацію зблизька і поступово дешевші представлення з відстанню, закінчуючись плоским білбордом, тому загальна вартість залишається пласкою, коли ліс росте.
Уся гра, відмовитися платити повну ціну за дерева, які камера ледь роздільна. Зблизька дерево, це повний меш з індивідуальними картками листя; здалеку — це жменька пікселів, яку плоске зображення відтворює бездоганно. LOD-ланцюг (level-of-detail) формалізує це: кілька версій того ж дерева зі спадною вартістю, замінюваних за розміром на екрані, тож ліс із десяти тисяч дерев коштує приблизно того, що видно в деталях, а не суми кожного дерева в повній якості. Без нього щільність масштабує ваш час кадру лінійно в землю; з ним ви можете штовхнути кількість дерев значно вище за той самий бюджет.
LOD-ланцюг, крок за кроком
LOD0 повний меш з картками листя (близько); LOD1–2 зменшена геометрія і спрощене листя (середнє); LOD3 кілька карток або одна картка; фінальний LOD імпостер/білборд (далеко). Кожен крок приблизно вдвічі зменшує вартість, а перемикання залишається невидимим.
Типовий LOD-ланцюг рослинності виглядає приблизно так: LOD0, повнодетальний меш з усіма картками листя, для дерев прямо поруч із гравцем; LOD1–LOD2, зменшена геометрія стовбура та менше, більших карток листя, для середнього плану; LOD3, різко спрощений кластер карток; і фінальний імпостер, по суті, плоске зображення для всього далекого. Ремесло, у відстанях переходу та змішуванні, щоб перемикання не стрибало. Дитеровані або крос-фейд LOD-переходи приховують перемикач; жорсткий стрибок на неправильній відстані, ознака, що ламає ілюзію. Налаштовуйте відстані під вашу справжню камеру, а не під замовчування.
Імпостери: підробка 3D з будь-якого кута
Імпостер (октаедричний імпостер) попередньо рендерить дерево з десятків кутів в атлас, а потім показує найближчий захоплений вид як білборд. На відміну від плоского білборда, він виглядає правильно, коли камера рухається навколо, дешево, але 3D-подібно.
Далекий кінець ланцюга, там, де живуть найбільші заощадження, а імпостери, той хитрий трюк, що робить їх прийнятними. Простий білборд, одне плоске зображення, що обертається до камери, виглядає добре спереду, але сплющується та неприродно ковзає, коли ви рухаєтеся. Октаедричний імпостер розв'язує це, попередньо рендерячи дерево з багатьох точок огляду, розташованих навколо сфери, пакуючи їх у текстурний атлас та показуючи будь-який захоплений кут, найближчий до поточного напрямку камери (змішуючи між кількома найближчими). Результат читається як справжнє 3D-дерево з будь-якого кута за частку вартості, ось чому імпостери — це хребет переконливих далеких лісів. Їх запікають раз, і малювати їх коштує майже нічого.
Наземний шар швидко примножує кількість інстансів. Підлісок потребує тієї ж дисципліни, що й дерева: інстансуйте його, LOD-ьте його, і культе його жорстко: папороть на 80 метрах не повинна малюватися взагалі.
Інстансинг і кулінг
Малюйте повторювані дерева як інстанси, щоб тисячі коштували кілька draw call, і культе агресивно, frustum-культе те, що поза екраном, і distance-культе маленьке. Інстансинг виправляє вартість CPU; кулінг зупиняє вас від оплати за невидиме.
Навіть з ідеальним LOD, відправлення десяти тисяч дерев як окремих об'єктів ховає CPU. Інстансинг згортає всі копії дерева в жменьку draw call, що не підлягає обговоренню для справжнього лісу, і це саме те, що дає вам запікання розкидання в нативні інстанси движка. На додаток культе безжально: frustum-кулінг відкидає все поза оглядом, а distance-кулінг видаляє наземний хлам і дрібну рослинність, надто малу, щоб її помітити за певним діапазоном. Особливо трава та підлісок повинні мати жорсткі та близькі відстані кулінгу, оскільки вони примножують кількість інстансів швидше за дерева. Робочий процес, що малює щільність, а потім запікає в інстансовані меші (як у Numivo), передає движку саме ту згруповану та кулингову форму, яку потребує густий ліс.
Тримайте дешевий ліс живим
Важка оптимізація може зробити ліс статичним і мертвим, протидійте цьому тонким вітром на близьких LOD, варіацією кольору та масштабу між інстансами, і шейдингом, що не дозволяє далеким імпостерам читатися як плоский картон.
Ризик усієї цієї ефективності, ліс, який чудово працює і почувається бездушним. Три дешевих штрихи повертають його: вітер, вершинна анімація на близьких LOD, щоб близька рослинність рухалася, навіть якщо далекі імпостери залишаються нерухомими (ніхто не помічає нерухомого дерева на 300 метрах). Варіація, рандомізуйте масштаб, обертання і відтінок на інстанс, щоб око не вловлювало повторення; ідентичні дерева — це ознака копіювання-вставки. І турбота про шейдинг на імпостерах, запечіть їхнє освітлення, щоб вони не сплющувалися в очевидний картон, коли змінюється кут сонця. Витрачайте зекономлений час кадру на ці близькі деталі, де гравець насправді дивиться, і оптимізований ліс почувається так само живим, як неоптимізований, при цьому працюючи в кілька разів швидше.
Польові числа, які варто вкрасти
- Принцип вартості: платіть за відстанню, далеке дерево не повинно коштувати як близьке
- LOD-ланцюг: повний меш → зменшений → кластер карток → імпостер, кожен ~зрізає вартість наполовину
- Імпостер = попередньо відрендерені кути в атласі → 3D-подібний білборд з будь-якого огляду
- Інстансуйте повтори (мало draw call) + жорстко-культе дрібну далеку рослинність
- Тримайте живим: вітер близьких LOD + варіація на інстанс + запечений шейдинг імпостерів
Міні-FAQ
Білборд проти імпостера: у чому різниця? Білборд, одне плоске зображення, звернене до камери, що сплющується, коли ви рухаєтеся навколо. Імпостер зберігає багато кутів і показує правильний, тому тримає в 3D. Для всього, навколо чого гравець орбітує чи проходить, використовуйте імпостери; прості білборди годяться лише для по-справжньому далеких, статичних фонів.
Скільки рівнів LOD потрібно дереву? Зазвичай три-чотири плюс імпостер. Більше не автоматично краще: кожен рівень — це вартість авторства та пам'яті. Достатньо, щоб зробити кожне перемикання маленьким непомітним кроком — це ціль, а не максимум.
Чи робить Nanite це застарілим? Він змінює геометричну сторону, Nanite обробляє щільну деталь меша без традиційних LOD, але прозорість (картки листя), дисципліна інстансингу і кулінг усе ще мають значення, а імпостери досі корисні для далеких відстаней. Принципи виживають; інструментарій зсувається.
Що найчастіше вбиває продуктивність лісу? Overdraw від прозорих карток листя, що перекриваються, та некульингова наземна рослинність. Стисніть картки листя, культе підлісок близько, і інстансуйте все — це тріо забирає більшість бюджету назад, перш ніж ви взагалі торкнетеся мешів дерев.
Густий ліс, одна з найкараючих речей для рендерингу і одна з найзадовольняючих, щоб зробити правильно. Побудуйте LOD-ланцюг, дайте імпостерам нести відстань, інстансуйте і культе безжально, і витрачайте заощадження на вітер і варіацію зблизька, і у вас буде ліс, що тягнеться до горизонту і тримає свій кадр.

