Батчинг

Раздел, посвящённый самому важному - скорости.

Батчинг

Сообщение Zahar123 16 янв 2021, 07:57

Вопрос такой - у меня на сцене большое множество асетов с ещё большим количеством самых разных моделей. У каждой модели свои материалы.Говорят, что для хорошего батчинга нужно использовать одни материалы, для хорошей производительности. Что посоветуете? Менять все существующие материалы на одни похожие? Или что нибудь ещё?
Zahar123
UNец
 
Сообщения: 33
Зарегистрирован: 29 авг 2020, 07:07

Re: Батчинг

Сообщение Jarico 16 янв 2021, 16:32

Есть 2 батчинга динамический и статический..

Статический батчинг объединяет все меши сцены в один (если они помечены как статические) тем самым уменьшая вызовы отрисовки, рендерится большой кусок сцены вместо нескольких маленьких
Динамический батчинг рисует по нескольку объектов которые используют какой-либо общий материал помеченный как GPU Instanting, рендерится не один объект за проход а сразу пачка из нескольких.

Без GPU Instanting
Изображение

С GPU Instanting
Изображение
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Батчинг

Сообщение waruiyume 16 янв 2021, 17:46

Есть 2 батчинга динамический и статический..

Четыре: один статический, два динамический и како-то новый о котором я ничего не знаю.

Статический батчинг объединяет все меши сцены в один

Не все, а только те которые имеют общий материал, и не в один он создаёт несколько вариантов меша, которые используются в зависимости от положения камеры.

Динамический батчинг рисует по нескольку объектов которые используют какой-либо общий материал помеченный как GPU Instanting

Главным условием для инстансинга является общий меш, если натянуть один материал на куб и сферу, они отрисуются как два совершенно разных объекта.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Батчинг

Сообщение Zahar123 24 янв 2021, 05:18

Это да, но что же мне делать со всеми этими материалами?
Zahar123
UNец
 
Сообщения: 33
Зарегистрирован: 29 авг 2020, 07:07

Re: Батчинг

Сообщение Alkos26Rus 28 янв 2021, 16:59

Да, берешь все свои текстуры и объединяешь в атлас (есть у тебя 16 текстур 512 - объединяешь их в одну 2048), тока придется на всех моделях изменять развертку в зд редакторе
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Батчинг

Сообщение Woolf 29 янв 2021, 03:39

Alkos26Rus писал(а): тока придется на всех моделях изменять развертку в зд редакторе


Для этого умные люди придумали в шейдере тайлинг и смещение )
Правда, там уже возникают проблемы с мипмапами, но это уже второй вопрос
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Батчинг

Сообщение Alkos26Rus 29 янв 2021, 17:55

Для этого умные люди придумали в шейдере тайлинг и смещение )
Правда, там уже возникают проблемы с мипмапами, но это уже второй вопрос


тайлинг ни как не решит проблему с дроуколами, фактически текстура будет использоваться одна а материалов много, так как тайлинг настраивать нужно будет отдельно для каждого объекта, поэтому только изменение развертки в зд редакторе и ни как иначе
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Батчинг

Сообщение waruiyume 29 янв 2021, 21:10

Нет. ГПУ инстансиг умеет через ↓ , с разными параметрами, рисовать одним инстансом, но нужен хитрый шейдер
https://docs.unity3d.com/ScriptReferenc ... Block.html
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Батчинг

Сообщение Alkos26Rus 30 янв 2021, 21:49

waruiyume писал(а):Нет. ГПУ инстансиг умеет через ↓ , с разными параметрами, рисовать одним инстансом, но нужен хитрый шейдер

ГПУ много чего умеет и динамический батчинг у него есть, тока вот вопрос в побочных затратах. Так, гпу может рисовать одним инстансом, но для этого нужен хитрый шейдер? И ты конечно нам его не дашь? А, или его нужно написать самому, ведь у нас тут просто все мастера написания шейдеров, ведь в большинстве случаев что можно найти в интернете так это назначение цвета. И стало быть что бы отрисовывать каждый объект со своими свойствами нужно каждый катдр маслать апдейт для всех объектов, ну это сомнительный выход для поднятия производительности в например мобилном устройстве, так что еще раз, самый лучшый вариант, замены которого пока нет, это лепить атласы и менять развертку во всех моделях, и другого лучшего варианта пока нет
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Батчинг

Сообщение waruiyume 30 янв 2021, 23:33

Чтобы менять развёртку моделек, нужно иметь 3д редактор и уметь им пользоваться. Но вы конечно за нас это делать не будете. А так, у нас тут все мастера мудельеры. Т.ч. самый лучший вариант- это шейдер.
Изображение
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Батчинг

Сообщение Alkos26Rus 31 янв 2021, 00:27

Чтобы менять развёртку моделек, нужно иметь 3д редактор и уметь им пользоваться. Но вы конечно за нас это делать не будете. А так, у нас тут все мастера мудельеры. Т.ч. самый лучший вариант- это шейдер.

Развертку может изменить любой школьник хоть в блендере хоть в 3д макс, не поверишь накидываешь один модификатор UVW Map и меняешь пару значений и о чудо, все получилось. А ты предлагаешь написать шейдер, но он такой хитрый что как его написать ты не знаешь, и будет ли он вобще работать, ведь все что люди смогли сделать так это менять цвет обьекта, а нам нужно менять развертку или рендерить отдельную текстуру на каждом объекте, но при этом вызывают в апдейте ресурсозатратную функцию. Да и вобще, с помощью написания собственных шедеров можно решить много проблем, но во первых это могут делать лишь единицы, да и нужно писать не абы как, а чтоб он был оптимизированный, так как данный пост о том как можно оптимизировать сцену, и лучше чем создание атласов еще ни кто не придумал.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Батчинг

Сообщение Zahar123 21 фев 2021, 12:18

Окей. На счет атласов понял - создавать развертку и всё это дело объединять, но у меня ещё вопрос. Во многих ассетах я видел как объекты использовали один материал, который состоял не из разверток объектов, а из различных цветов(красный, синий, серобуромалиновый, без какого-либо рисунка тупо цвета), которые использовались бы на каждом объекте как отдельный материал; так вопрос - это также атлас текстур или какой-то атлас материалов? Если второе, то как его создать?
Zahar123
UNец
 
Сообщения: 33
Зарегистрирован: 29 авг 2020, 07:07

Re: Батчинг

Сообщение Alkos26Rus 21 фев 2021, 13:36

Zahar123 писал(а):Окей. На счет атласов понял - создавать развертку и всё это дело объединять, но у меня ещё вопрос. Во многих ассетах я видел как объекты использовали один материал, который состоял не из разверток объектов, а из различных цветов(красный, синий, серобуромалиновый, без какого-либо рисунка тупо цвета), которые использовались бы на каждом объекте как отдельный материал; так вопрос - это также атлас текстур или какой-то атлас материалов? Если второе, то как его создать?

Ну атласом может это не называется, но принцип тот же, одна текстура с политрой цветов, один материал, только каждый элемент модели использует определенный цвет. Это конечно в основном можно увидеть в простых моделях типо майнкрафта или еще каких нибудь мультяшных моделях. Плюс такого метода что нужен всего лишь один пиксель цвета, тоесть сама текстура может весить очень мало и только с помощью этой тектуры можно сделать мультяшный мир. Но есть и минусы, полигональность при таком способе увеличивается, так как каждый елемент окрашенный в определенный цвет должен быть отделен ребрами.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Батчинг

Сообщение waruiyume 21 фев 2021, 15:00

как его написать ты не знаешь, и будет ли он вобще работать

Разумеется знаю, конечно работает. Для того чтобы шейдер начал поддерживать гпу инстансинг нужно поменять аш одну единственную настройку.
https://yadi.sk/i/oFNAwgdxMtEKhw
ведь все что люди смогли сделать так это менять цвет обьекта

Какие это люди смогли сделать только это, в третьем классе ЦПШ?
а нам нужно менять развертку или рендерить отдельную текстуру на каждом объекте, но при этом вызывают в апдейте ресурсозатратную функцию.

Может не надо пытаться блеснуть знаниями в том, в чём абсолютно не разбираетесь?
Вот все "ресурсоёмкие" операции которые нужно выполнять каждый кадр один раз.
Синтаксис:
Используется csharp
using UnityEngine;

public class RndAtlassTile : MonoBehaviour
{
    [ContextMenu("Setup")]
    void Start()
    {
        var  prb = new  MaterialPropertyBlock();
        prb.SetVector("_TexTransf", new Vector4(0.3f, .3f, Random.Range(0, 3)*0.333f, Random.Range(0, 3)*0.333f));

        var ren = GetComponent<Renderer>();
        ren.SetPropertyBlock(prb);
    }
}

 

https://yadi.sk/i/eYR9vmIKgcDhyg
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Батчинг

Сообщение Alkos26Rus 21 фев 2021, 17:47

Ну поздравляю что ты всего лишь за месяц разобрался как использовать ГПУ иснстенс.

Разумеется знаю, конечно работает. Для того чтобы шейдер начал поддерживать гпу инстансинг нужно поменять аш одну единственную настройку.

Да ладно? А где же хитрый шейдер? Это же вроже твои слова.

Какие это люди смогли сделать только это, в третьем классе ЦПШ?

Ну наверно, раз тебе на все про все понадобился месяц.

Вот все "ресурсоёмкие" операции которые нужно выполнять каждый кадр один раз.

Хоспади, то что ты поменял свойства шейдера один раз, это не значит что шейдер не маслает в апдейте прорисовку для каждого объекта и каждый кадр, может покажешь кишки стандартного шейдера, что именно он делает если стоит параметр GPU Instance?

Да, я не разбираюсь в шейдерах, но даже я понимаю что эта канетель нужна для часто меняющихся параметров материала во время игры, что бы не плодить дубликаты этих материалов, это подойдет для узких нужд, для растительности например, но для статичной сцены это ни кто не будет использовать, адекватные разработчики просто соберут атлас и все. Я уже просто не знаю как тебе объяснить, если ты думаешь что все эти магические превращения проходят бесследно для производительности, ну сбилди сцену с тысячей объектов на мобилу и сравни 2 варианта, 1 - банальный атлас и 2 - твой чудо гпу инстанс и посмотри результат.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

След.

Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1