Как Вы знаете, я занимаюсь Low-Poly Art и, в частности, использованием этого стиля в играх. При моделировании Low-Poly обычно используется множество разноцветных материалов вместо текстуры. С одной стороны можно экспортировать в Unity модель через fbx со всеми уже настроенными материалами и жить счастливо. Но как всегда есть одно НО!
Я решил сравнить производительность при рендеринге в Unity модели, которая экспортирована из Blender тремя разными способами:
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 и т.п.)
+ Цвет исходной модели сохраняется
  • Временые затраты на развертывание и запекание
  • Самое большое использование оперативной памяти (из этих трех вариантов).
Вывод:
Если вам нужны текстурные карты (или UV-развертка в частности), то этот способ определенно для вас.

3. Модель с палитрой цветов (текстура 32x32 пикселя с 4 цветами)

Делается грубая развертка, чтобы запечь цвет и сохранить в файл (чтобы как можно точнее перенести цвет). Затем выбираются полигоны одного цвета и уменьшаются на UV-развертки до состояния точки (и так для всех 4 цветов). Затем в графическом редакторе создается текстура 32x32 px и заливается квадратами в цвета с запеченной текстуры (в соответствии с нашей "точечной разверткой").
В Unity экспортировались модель и текстура (32, DXT1, 0.7KB).
Да, четыре маленькие точки это развёртка
Для сравнения посмотрим как модель выглядит при рендеринге в Blender и Unity.
Плюсы/минусы:
+ Малое количество DrawCalls
+ Экономия оперативной памяти за счет мизерного размера текстуры
+ Цвет исходной модели сохраняется
  • Временые затраты на развертывание и создание текстуры
  • Невозможно применить текстурные карты (normal map, specular map и т.п.) в связи со "своеобразной" UV-разверткой
Вывод:
Если вам НЕ нужны текстурные карты (или UV-развертка в частности), то этот способ вам подходит. Идеален для мобильных проектов.
Эксперимент проводился для личных целей, выводы довольно поверхностны. Какой-то глубокий анализ делайте на свой страх и риск =)
На такие жуткие эксперименты меня натолкнул цикл статей "Ад визуализации 1.1" на Хабре.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
26
9 лет назад
Отредактирован KO3bMA
0
по пункту 2 - можешь создать UV карту в блендере, а текстуру не импортировать, тогда ты можешь закрашивать как угодно, применять другие текстуры, нормал мап и тд, а вес будет меньше. то есть возможно объединение способов по пунктам 1 и 2
0
6
9 лет назад
Отредактирован ivostrikov
0
KO3bMA, так это и есть пункт 2, только текстура не запекается, а создается в стороннем редакторе. К 1 пункту это никакого отношения не имеет.
А почему вес будет меньше?
0
26
9 лет назад
Отредактирован KO3bMA
0
нет, делай как в пункте 2, но не импорти текстуру (вес меньше), а закрашивай в юньке (пункт 1 - то есть редактируй материал, как вздумается, и можно не применять текстуру), при этом можешь применять нормал мап и тд, так как UV параметры сохранены в модели
просто для разных материалов модель нужно разделить на подмеши, хотя вру, можно не делить.
все что написал, действует для формата 3ds, fbx не пробовал
не знаю, как в блендере, у мя прога создает UV карту без текстуры
0
6
9 лет назад
0
KO3bMA, наиболее "неоптимального" способа сложно придумать.
  1. Большое количество дроуколов. Т.К. когда на модель назначено несколько материалов, то при рендеринге на видеокарте модель разбивается на N (количество материалов) мешей. Про это всё можно почитать в статье на хабре, приведенной в конце статьи.
  2. UV-развертка + несколько материалов + нормал мап. Если я не ошибаюсь (не проворачивал такие трюки)), Вам для натягивания нормал мапа на модель придется все материалы модели сделать bumped и всем назначит этот нормал мап. Как понимаете это тоже скажется на производительности.
0
26
9 лет назад
Отредактирован KO3bMA
0
насчет неоптимальности не знаю =), получается у меня все в проекте неоптимально =)), ну и да, материал bump, он мне необходим =)
я просто описал способ, как можно "закрасить" модель с бампом , но без текстуры, так как в пункте 1 это категорически отрицается. кстати, а как же экономия оперативной памяти?
просто по твоему примеру, будет также 4 материала, закрашено будет в юнити и еще можно применить всякие хитрые шейдеры
0
6
9 лет назад
0
KO3bMA, с 1 пунктом да, ошибочка)
По поводу оперативной памяти. А как же процессорное время на обработку материалов?) конечно всё упирается в оптимизацию и целевую платформу.
2
26
9 лет назад
2
по пункту 3 - полигоны в точку не есть хорошо, тогда лучше уж пункт 1, , или текстуру можно вполне делать 2х2 например =), по пикселю на цвет, результат один будет. Может лучше полигоны одного цвета расположить с наложением друг на друга, ну и масштаб соблюдать, тогда реален и нормал мап
глянь плз почту
0
24
9 лет назад
0
Второй вариант для меня самый оптимальный - я люблю лоуполи стилизовать под сложенный из бумаги, эдакий бумажный мир из детства) Правда ничего я толком и не сделал
Чтобы оставить комментарий, пожалуйста, войдите на сайт.