1. Есть 4 объекта отличающиеся только разверткой. Можно использовать их и один материал на всех. 2. А можно сделать 4 материала. Установить у них нужные offset текстур. Сделать 4 префаба с одинаковым мешем (любым из вышеупомянутых 4-х объектов) и разными материалами. Вопрос. Что правильнее (быстрее) - 4 объекта с одним материалом, или 4 префаба с одним мешем и разными материалами. Если рассуждать логически. В первом случае должен быть больше объем ассета (меши все же больше места занимают, чем материалы), но быстрее, т.к. материал один - меньше дроуколлов. Верно ли рассуждаю?
Палка о двух концах. Перед девелопером может стоять и задача оптимизировать размер продукта, не взирая на конечный фреймрейт. Фанат игр Max Payne и Fahrenheit.
Всю ночь об этом думал... Все же не зря форум есть, быстро получил ответ Согласно протоколу испытаний, начиная с этого момента, мы перестаем говорить правду. Три, два, один.
Что правильнее (быстрее) - 4 объекта с одним материалом, или 4 префаба с одним мешем и разными материалами.
Если на сцене будет всегда использоваться не меньше 3 префабов из 4, то лучше сделать 1 материал для 4 объектов. Если по каким-то причинам будет использоваться только 1..2 префаба - то лучше сделать отдельно по материалу для объекта, чтобы не занимать видеопамять лишними данными (неиспользуемыми участками общей текстуры). имхо.
Quote (Shut)
чем меньше материалов, тем быстрее (если не так, поправьте). А вообще на практике, имхо, это будет не заметно
Наибольшую нагрузку на рендер и падение fps, вызывает, скорее, количество разных текстур используемых материалами, а не количество материалов. Больше всего грузит рендер качество текстур. Чем больше текстуры - тем больше нагрузка на рендер, т.к. просчитывать объем данных приходится намного больший. Ну и по ходу, добавляется нагрузка от шейдеров (Normal Bump и ему подобные) и геометрии (при высокой детализации без LOD-ов). Так что, оптимизация нужна не только по количеству материалов, но и по разрешению текстур, делализации геометрии, переключением шейдеров на более простые и т.д. Поиск | Правила | Новые сообщения
ИМХО, батчинг в Юне как то через зад работает.... МешКомбинеЧилдрен надежней работал. У меня вообще то батчит то нет (те же обьекты). Я вот подумываю, не вернуться ли мне к старому, доброму комбайну. X.cor.R (Prologue)
Я вот подумываю, не вернуться ли мне к старому, доброму комбайну.
А смысл есть? Если на производительность не сильно сказывается то ну его нафиг. Я включал CombimeChildren - тормоза были больше чем без него, fps падало, но это еще на Unity 2.5 было. Тот старый "батчинг" с помощью скрипта в Unity нагружал комп так-же, как и опция объединения объектов Group в 3ds max. Мне, честно, ни Group в максе, ни "комбайн" в Unity не понравилось, грузит процессор компа на ровном месте.
При разных углах зрения по разному батчится трава.
Может быть, влияет не угол зрения а дальность до объектов. Те что ближе - батчинг =6, те что дальше =3, может быть это нормально? Желательно проверять при большей нагрузке, когда травы аж за горизонт... и смотреть как работает батчинг и сколько fps, а не при 6 травинках на весь экран, имхо. Поиск | Правила | Новые сообщения
Ну это возможно, но тогда такие штуки увидеть сложнее. Как посчитать сколько травы на самом деле? На самом деле это не принципиально, просто засек, решил поделиться.
Тоже думаю, что батчинг реализуется через LODы. На первом скрине травка ведь ближе. Но, в принципе, другие параметры ведь не меняются, так что переживать не стоит. Фанат игр Max Payne и Fahrenheit.
на траву вешать скрипт, который будет сдвигать uv-координаты?
Наверно нет. Заранее в максе сдвинуть координаты и использовать 1 мат на все виды травы. Каждая мешь использует свой участок развертки текстуры. X.cor.R (Prologue)
Т.е. все же первый вариант из начального сообщения. Ну я уже так и делаю. Но вообще еще можно и так. Один меш, один материал, один атлас, один скрипт у которого на разных префабах разные установки сдвига UV-координат. Можно даже и префаб один сделать, но тогда установки скрипта нужно делать у каждой выставленной в сцену травинки, что не хорошо. Скрипт простейший:
Code
using UnityEngine;
public class ShiftUV : MonoBehaviour { public float xShift; public float yShift;
void Start () { MeshFilter mf = gameObject.GetComponent<MeshFilter>(); Mesh mesh = mf.mesh; Vector2[] uvs = mesh.uv; Vector2[] newUVs = new Vector2[uvs.Length]; for (int i = 0; i < uvs.Length; i++) { newUVs[i] = new Vector2(uvs[i].x + xShift, uvs[i].y + yShift); } mesh.uv = newUVs; mf.mesh = mesh; } }