Как Вы знаете, я занимаюсь Low-Poly Art и, в частности, использованием этого стиля в играх. При моделировании Low-Poly обычно используется множество разноцветных материалов вместо текстуры. С одной стороны можно экспортировать в Unity модель через fbx со всеми уже настроенными материалами и жить счастливо. Но как всегда есть одно НО!
Я решил сравнить производительность при рендеринге в Unity модели, которая экспортирована из Blender тремя разными способами:
1. Модель со всеми материалами (4 материала)
2. Модель с полноценной разверткой и запеченной текстурой (только color, 1024x1024 пикселей)
3. Модель с палитрой цветов (текстура 32x32 пикселя с 4 цветами)
1. Модель со всеми материалами (4 материала)
2. Модель с полноценной разверткой и запеченной текстурой (только color, 1024x1024 пикселей)
3. Модель с палитрой цветов (текстура 32x32 пикселя с 4 цветами)
Итак начнём!!
1. Модель со всеми материалами (4 материала)
Модель без UV-развертки, 4 материала, назначенные на разные полигоны модели.
Для сравнения посмотрим как модель выглядит при рендеринге в Blender и Unity.
Плюсы/минусы:
+ Быстрый перенос модели
+ Экономия оперативной памяти за счет отсутствия текстур
+ Быстрый перенос модели
+ Экономия оперативной памяти за счет отсутствия текстур
- Искажение цвета материалов (можно заметить на сравнение скриншотов)
- Большое количество DrawCalls
- Невозможно применить текстурные карты (normal map, specular map и т.п.) в связи с отсутствием UV-развертки
Вывод:
Такой подход хорошо использовать при прототипировании. Даже если вы "просто хотите посмотреть как будет выглядеть модель в движке", это плохой вариант (напомню, искажение цвета материалов).
Такой подход хорошо использовать при прототипировании. Даже если вы "просто хотите посмотреть как будет выглядеть модель в движке", это плохой вариант (напомню, искажение цвета материалов).
2. Модель с полноценной разверткой и запеченной текстурой
Модель была развернута, создана текстура 1024x1024 px и цвет материалов запечён в текстуру. В Unity экспортировались модель и текстура (1024, DXT5, 1.3MB).
Для сравнения посмотрим как модель выглядит при рендеринге в Blender и Unity.
Плюсы/минусы:
+ Малое количество DrawCalls
+ Можно применять текстурные карты (normal map, specular map и т.п.)
+ Цвет исходной модели сохраняется
+ Малое количество DrawCalls
+ Можно применять текстурные карты (normal map, specular map и т.п.)
+ Цвет исходной модели сохраняется
- Временые затраты на развертывание и запекание
- Самое большое использование оперативной памяти (из этих трех вариантов).
Вывод:
Если вам нужны текстурные карты (или UV-развертка в частности), то этот способ определенно для вас.
Если вам нужны текстурные карты (или UV-развертка в частности), то этот способ определенно для вас.
3. Модель с палитрой цветов (текстура 32x32 пикселя с 4 цветами)
Делается грубая развертка, чтобы запечь цвет и сохранить в файл (чтобы как можно точнее перенести цвет). Затем выбираются полигоны одного цвета и уменьшаются на UV-развертки до состояния точки (и так для всех 4 цветов). Затем в графическом редакторе создается текстура 32x32 px и заливается квадратами в цвета с запеченной текстуры (в соответствии с нашей "точечной разверткой").
В Unity экспортировались модель и текстура (32, DXT1, 0.7KB).
В Unity экспортировались модель и текстура (32, DXT1, 0.7KB).
Да, четыре маленькие точки это развёртка
Для сравнения посмотрим как модель выглядит при рендеринге в Blender и Unity.
Плюсы/минусы:
+ Малое количество DrawCalls
+ Экономия оперативной памяти за счет мизерного размера текстуры
+ Цвет исходной модели сохраняется
+ Малое количество DrawCalls
+ Экономия оперативной памяти за счет мизерного размера текстуры
+ Цвет исходной модели сохраняется
- Временые затраты на развертывание и создание текстуры
- Невозможно применить текстурные карты (normal map, specular map и т.п.) в связи со "своеобразной" UV-разверткой
Вывод:
Если вам НЕ нужны текстурные карты (или UV-развертка в частности), то этот способ вам подходит. Идеален для мобильных проектов.
Если вам НЕ нужны текстурные карты (или UV-развертка в частности), то этот способ вам подходит. Идеален для мобильных проектов.
Эксперимент проводился для личных целей, выводы довольно поверхностны. Какой-то глубокий анализ делайте на свой страх и риск =)
На такие жуткие эксперименты меня натолкнул цикл статей "Ад визуализации 1.1" на Хабре.
Ред. KO3bMA
Ред. ivostrikov
А почему вес будет меньше?
Ред. KO3bMA
просто для разных материалов модель нужно разделить на подмеши, хотя вру, можно не делить.
все что написал, действует для формата 3ds, fbx не пробовал
не знаю, как в блендере, у мя прога создает UV карту без текстуры
Ред. KO3bMA
я просто описал способ, как можно "закрасить" модель с бампом , но без текстуры, так как в пункте 1 это категорически отрицается. кстати, а как же экономия оперативной памяти?
просто по твоему примеру, будет также 4 материала, закрашено будет в юнити и еще можно применить всякие хитрые шейдеры
По поводу оперативной памяти. А как же процессорное время на обработку материалов?) конечно всё упирается в оптимизацию и целевую платформу.
глянь плз почту