Страница 1 из 2

Батчинг

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

Re: Батчинг

СообщениеДобавлено: 16 янв 2021, 16:32
Jarico
Есть 2 батчинга динамический и статический..

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

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

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

Re: Батчинг

СообщениеДобавлено: 16 янв 2021, 17:46
waruiyume
Есть 2 батчинга динамический и статический..

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

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

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

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

Главным условием для инстансинга является общий меш, если натянуть один материал на куб и сферу, они отрисуются как два совершенно разных объекта.

Re: Батчинг

СообщениеДобавлено: 24 янв 2021, 05:18
Zahar123
Это да, но что же мне делать со всеми этими материалами?

Re: Батчинг

СообщениеДобавлено: 28 янв 2021, 16:59
Alkos26Rus
Да, берешь все свои текстуры и объединяешь в атлас (есть у тебя 16 текстур 512 - объединяешь их в одну 2048), тока придется на всех моделях изменять развертку в зд редакторе

Re: Батчинг

СообщениеДобавлено: 29 янв 2021, 03:39
Woolf
Alkos26Rus писал(а): тока придется на всех моделях изменять развертку в зд редакторе


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

Re: Батчинг

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


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

Re: Батчинг

СообщениеДобавлено: 29 янв 2021, 21:10
waruiyume
Нет. ГПУ инстансиг умеет через ↓ , с разными параметрами, рисовать одним инстансом, но нужен хитрый шейдер
https://docs.unity3d.com/ScriptReferenc ... Block.html

Re: Батчинг

СообщениеДобавлено: 30 янв 2021, 21:49
Alkos26Rus
waruiyume писал(а):Нет. ГПУ инстансиг умеет через ↓ , с разными параметрами, рисовать одним инстансом, но нужен хитрый шейдер

ГПУ много чего умеет и динамический батчинг у него есть, тока вот вопрос в побочных затратах. Так, гпу может рисовать одним инстансом, но для этого нужен хитрый шейдер? И ты конечно нам его не дашь? А, или его нужно написать самому, ведь у нас тут просто все мастера написания шейдеров, ведь в большинстве случаев что можно найти в интернете так это назначение цвета. И стало быть что бы отрисовывать каждый объект со своими свойствами нужно каждый катдр маслать апдейт для всех объектов, ну это сомнительный выход для поднятия производительности в например мобилном устройстве, так что еще раз, самый лучшый вариант, замены которого пока нет, это лепить атласы и менять развертку во всех моделях, и другого лучшего варианта пока нет

Re: Батчинг

СообщениеДобавлено: 30 янв 2021, 23:33
waruiyume
Чтобы менять развёртку моделек, нужно иметь 3д редактор и уметь им пользоваться. Но вы конечно за нас это делать не будете. А так, у нас тут все мастера мудельеры. Т.ч. самый лучший вариант- это шейдер.
Изображение

Re: Батчинг

СообщениеДобавлено: 31 янв 2021, 00:27
Alkos26Rus
Чтобы менять развёртку моделек, нужно иметь 3д редактор и уметь им пользоваться. Но вы конечно за нас это делать не будете. А так, у нас тут все мастера мудельеры. Т.ч. самый лучший вариант- это шейдер.

Развертку может изменить любой школьник хоть в блендере хоть в 3д макс, не поверишь накидываешь один модификатор UVW Map и меняешь пару значений и о чудо, все получилось. А ты предлагаешь написать шейдер, но он такой хитрый что как его написать ты не знаешь, и будет ли он вобще работать, ведь все что люди смогли сделать так это менять цвет обьекта, а нам нужно менять развертку или рендерить отдельную текстуру на каждом объекте, но при этом вызывают в апдейте ресурсозатратную функцию. Да и вобще, с помощью написания собственных шедеров можно решить много проблем, но во первых это могут делать лишь единицы, да и нужно писать не абы как, а чтоб он был оптимизированный, так как данный пост о том как можно оптимизировать сцену, и лучше чем создание атласов еще ни кто не придумал.

Re: Батчинг

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

Re: Батчинг

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

Ну атласом может это не называется, но принцип тот же, одна текстура с политрой цветов, один материал, только каждый элемент модели использует определенный цвет. Это конечно в основном можно увидеть в простых моделях типо майнкрафта или еще каких нибудь мультяшных моделях. Плюс такого метода что нужен всего лишь один пиксель цвета, тоесть сама текстура может весить очень мало и только с помощью этой тектуры можно сделать мультяшный мир. Но есть и минусы, полигональность при таком способе увеличивается, так как каждый елемент окрашенный в определенный цвет должен быть отделен ребрами.

Re: Батчинг

СообщениеДобавлено: 21 фев 2021, 15:00
waruiyume
как его написать ты не знаешь, и будет ли он вобще работать

Разумеется знаю, конечно работает. Для того чтобы шейдер начал поддерживать гпу инстансинг нужно поменять аш одну единственную настройку.
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

Re: Батчинг

СообщениеДобавлено: 21 фев 2021, 17:47
Alkos26Rus
Ну поздравляю что ты всего лишь за месяц разобрался как использовать ГПУ иснстенс.

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

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

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

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

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

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

Да, я не разбираюсь в шейдерах, но даже я понимаю что эта канетель нужна для часто меняющихся параметров материала во время игры, что бы не плодить дубликаты этих материалов, это подойдет для узких нужд, для растительности например, но для статичной сцены это ни кто не будет использовать, адекватные разработчики просто соберут атлас и все. Я уже просто не знаю как тебе объяснить, если ты думаешь что все эти магические превращения проходят бесследно для производительности, ну сбилди сцену с тысячей объектов на мобилу и сравни 2 варианта, 1 - банальный атлас и 2 - твой чудо гпу инстанс и посмотри результат.