Низкополигональные 3D-ассеты · бесплатные и сгенерированные

Низкополигональные 3D-ассеты — текстуры травы, персонажи и как их создавать

Создайте собственные низкополигональные 3D-ассеты

Бесплатные низкополигональные текстуры травы для Unity и Roblox, а также как генерировать низкополигональных 3D-персонажей — с живым низкополигональным миром, чтобы увидеть их в деле.

✦Игра
Создать низкополигональный объект: пучок травы

Низкополигональные 3D-ассеты — это меши, построенные с намеренно небольшим бюджетом треугольников, обычно с плоско затенёнными гранями и одним текстурным атласом. Смысл не в том, что модель грубая. Смысл в том, что каждый треугольник несёт видимую информацию о форме, поэтому куст читается как куст с другого конца карты и всё ещё читается как куст, когда игрок подходит к нему вплотную. Трава, камни, персонажи и реквизит подчиняются одному и тому же ограничению: сначала определите силуэт, а полигоны тратьте только там, где силуэт меняется.

Эта страница разбирает низкополигональные 3D-ассеты со стороны текстур и идёт дальше. Вы получите бесплатную низкополигональную текстуру травы, которую можно тайлить в Unity, Roblox или Godot, настройки импорта, которые действительно важны в каждом движке, и способ превратить письменное описание в низкополигонального 3D-персонажа вместо поиска готового ассет-пака. Всё здесь работает в браузере, а миры в конце страницы запущены вживую, так что вы можете оценивать ассеты в контексте, а не по миниатюре.

Бесплатные низкополигональные текстуры травы

Текстура травы тайлится без видимого шва, когда противоположные края совпадают пиксель в пиксель. Если ваш тайл 64x64, столбец 0 и столбец 63 должны быть соседними в реальном узоре, а не идентичными. Дублирование последнего столбца вместо его зацикливания даёт вертикальную полосу шириной в один пиксель, которая повторяется на каждом тайле и читается как артефакт сетки по большой плоскости. То же правило действует для строки 0 и строки 63. На практике вы создаёте тайл размером 65x65, рисуете через границу, а затем обрезаете до 64x64, чтобы зацикливание было непрерывным по построению.

Для низкополигональной работы есть три практичных варианта текстуры травы. Тайловая текстура повторяется по большой плоскости земли или по мешу ландшафта. Атлас упаковывает несколько состояний травы — короткая, высокая, сухая, в тени — в одно изображение, так что один материал может переключаться между ними сдвигом UV, а это важно, когда нужна вариативность без лишних вызовов отрисовки. Отдельный тайл 64x64 — самый дешёвый вариант и тот, что лучше всего переживает сжатие на мобильных, потому что каждый блок из четырёх пикселей покрывает большую площадь экрана и блочные артефакты остаются незаметными.

Травинки в низкополигональных мирах почти никогда не бывают одной лишь текстурой. Обычная конструкция — перекрещенный квад: две вертикальные плоскости, пересекающиеся под углом 90 градусов, каждая несёт текстуру пучка травы с альфа-каналом. Именно альфа-вырез даёт форму травинок без геометрии. Держите вырез жёстким — 1-битная альфа, — потому что мягкие альфа-края на перекрывающихся квадах плохо сортируются и дают видимые ореолы при движении камеры.

Почему бесшовный тайлинг не работает вдали

Тайл может быть идеально бесшовным и всё равно выглядеть неправильно при повторе по большой площади, потому что глаз улавливает частоту повторения, а не шов. Один тайл 64x64, растянутый на 100 метров, повторяется с фиксированным интервалом, который игрок видит. Решение — не текстура большего размера. Это либо вторая текстура другого масштаба, подмешанная сверху, либо низкочастотная вариация цвета, вписанная в вершинные цвета меша земли.

Вариация вершинных цветов — более дешёвое решение, и она соответствует низкополигональному арт-направлению. Вы сохраняете один маленький тайл, один материал, один вызов отрисовки и разбиваете повторение, затемняя и осветляя участки меша земли в масштабе нескольких метров. Текстура даёт зерно. Вершинные цвета дают крупномасштабный узор.

Мипмапы и сжатие

Генерируйте мипмапы для любой текстуры, которую будут рассматривать под углом или на расстоянии, а это любая текстура земли. Без них при движении игрока появляется мерцание. С ними жёсткому альфа-вырезу нужна особая настройка: используйте альфа-тестирование, а не альфа-смешивание, и задайте порог теста около 0,5. Ниже него уровни мипмапов размывают вырез в мягкое облако, и трава превращается в туман вокруг квада.

В этом масштабе сжатие важнее разрешения. Тайл 64x64 с блочным сжатием остаётся разборчивым, потому что блоки сжатия составляют заметную долю изображения, и GPU восстанавливает их в полном размере. Тайл 512x512 с той же визуальной информацией требует больше памяти и сжимается хуже в расчёте на видимую деталь. Если текстура хорошо выглядит в 64x64, выпускайте её в 64x64.

ВариантТипичный размерКогда использоватьЦена импорта
Тайловая текстура64x64 или 128x128Большие плоскости земли, базовый слой ландшафтаОдин материал, один вызов отрисовки, чистый тайлинг
Атласный лист256x256 или 512x512Несколько состояний травы в одном материалеВычисления UV для каждого экземпляра, больше памяти
Отдельный 64x6464x64Пучки травы на перекрещенных квадах, мобильные целиДешевле всего сжимается, блочные артефакты остаются скрытыми
Пучок с альфа-вырезом64x64 с 8-битной альфойОтдельные силуэты травинок на квадахТребует жёсткой альфы и правильного порядка сортировки

Трава в Unity / Roblox / Godot

Каждый движок обращается с текстурой травы по-своему, и важные настройки импорта следуют из этого. В Unity есть система травы ландшафта и система детализации на шейдерах; Roblox даёт Decal или Texture внутри SurfaceGui либо на MeshPart; в Godot есть MultiMeshInstance для расстановки и шейдер для материала. Текстуру для каждого из них нужно создавать под тот слот, в который она попадёт.

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

Unity

Для пучка на перекрещенных квадах импортируйте текстуру с Texture Type = Default, включённым Alpha Is Transparency, если вы смешиваете, и Wrap Mode = Repeat для тайловой земли. Включите Generate Mip Maps. Если вы используете жёсткий вырез, отключите Alpha Is Transparency и полагайтесь на порог альфа-отсечения шейдера, потому что сортировка прозрачности на перекрывающихся квадах — именно то место, где трава в Unity заметно ломается.

Для слоя земли ландшафта установите текстуре режим обёртки Repeat и включите мипмапы, затем проверьте плотность детализации ландшафта и дальность прорисовки травяной детали. При дальности детализации ниже примерно 30–50 метров становится заметно подёргивание при движении игрока; увеличивайте её, пока переход не скроется, или гасите детализацию затуханием по расстоянию, а не обрезайте её.

Roblox

В Roblox текстура травы обычно становится объектом Texture на части или внутри SurfaceGui, либо Decal. Задайте грань явно и управляйте масштабом тайлинга через StudsPerTileU и StudsPerTileV, а не масштабированием части, потому что масштабирование части меняет коллизию и физику вместе с внешним видом. Для тайла 64x64, покрывающего примерно четыре студа, задайте StudsPerTileU и StudsPerTileV равными 4.

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

Godot

В Godot 4 материал земли — обычно StandardMaterial3D с текстурой травы в слоте альбедо, масштабом UV1, заданным для тайлинга, и пресетом импорта текстуры Repeat. Для разбросанных пучков используйте MultiMeshInstance3D с одним ресурсом меша и одним материалом и задавайте количество экземпляров мультимеша, а не создавайте отдельные узлы под каждый пучок. Тысячи пучков, каждый в своём узле, затормозят дерево сцены раньше, чем это заметит GPU.

Для жёсткого альфа-выреза установите режим прозрачности материала Alpha Scissor, а не Alpha, и задайте порог отсечения около 0,5. Alpha Scissor оставляет пучки в непрозрачном проходе, а значит, между перекрывающимися квадами нет проблем с сортировкой по глубине. Это та единственная настройка, которая чаще всего превращает плохо выглядящее травяное поле в чистое.

ДвижокТипичный слотСамая важная настройкаЧастая ошибка
UnityДетализация ландшафта или шейдер на перекрещенных квадахМипмапы включены, порог альфа-отсечения ~0,5Мягкое альфа-смешивание на перекрывающихся квадах даёт ореолы
RobloxОбъект Texture или SurfaceGui на частиStudsPerTileU / StudsPerTileV для масштабаТайлинг масштабированием части ломает коллизию
GodotАльбедо StandardMaterial3D, MultiMesh для пучковРежим прозрачности Alpha ScissorОтдельные узлы на каждый пучок тормозят дерево сцены
Все триТайловый слой землиРежим обёртки RepeatНезацикленные края дают повторяющуюся полосу

Сгенерируйте низкополигонального 3D-персонажа

3D-конструктор игр на Neta Studio принимает письменное описание и возвращает низкополигонального 3D-персонажа как настоящий меш — блочные грани, плоское затенение, небольшой бюджет треугольников, — а не отрендеренное изображение персонажа. Вы пишете, кто такой персонаж, а система строит геометрию, которую можно поместить в сцену, вращать и рассматривать под любым углом. Это различие — суть данного раздела, и именно его стоит проверить, прежде чем тратить время на промпт.

Описывайте персонажа через форму и роль, а не через настроение. Промпт вроде «приземистый каменный голем с широкой грудью, короткими ногами и одной увеличенной рукой» сработает лучше, чем «устрашающий страж глубин». Конструктору нужны слова, значимые для геометрии: пропорции, части тела, материалы, объекты в руках. Цвет помогает, но именно форма решает, будет ли результат пригоден в низкополигональной сцене.

1

01

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

2

02

Добавьте важные для геометрии детали: количество конечностей, объекты в руках, форму головы, есть ли плащ или крылья.

3

03

Назовите палитру материалов простыми словами: кость, ржавое железо, сухая трава, тёмно-синяя ткань.

4

04

Сгенерируйте результат и повращайте его, прежде чем принять. Проверьте силуэт сбоку и сзади, а не только вид спереди.

5

05

Перегенерируйте, изменив одну деталь, вместо переписывания всего промпта — так вы поймёте, какая фраза дала какое изменение.

6

06

Поместите персонажа в мир и обойдите его камерой. Меш, который хорошо читается отдельно, может потерять силуэт на пёстром фоне.

7

07

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

Низкополигональные персонажи против 2D-генераторов

Есть конкретное несоответствие, которое стоит назвать. Некоторые инструменты рекламируют генерацию 3D-персонажей, но возвращают плоский рендер — картинку персонажа, затенённую так, чтобы выглядеть объёмной, сохранённую в PNG. Это 2D-изображение того, что выглядит как 3D. Его нельзя повернуть, нельзя осветить иначе и нельзя экспортировать из него меш. В низкополигональной сцене разница видна сразу, потому что плоско затенённая геометрия реагирует на освещение вашей сцены, а запечённый рендер — нет.

Проверка проста и занимает секунды. Попросите инструмент показать одного и того же персонажа с двух разных углов. Настоящий 3D-генератор вернёт два согласованных вида одного меша, потому что меш существует. Плоский генератор вернёт два несвязанных изображения, которые разделяют стиль, но не тело: форма плеч не совпадёт, пряжка ремня сдвинется, объект в руке перескочит в другую руку. Согласованность между видами и есть доказательство.

Вторая проверка — что можно получить на выходе. Если результат — растровое изображение, то нет ни числа треугольников, ни UV-развёртки, ни меша для экспорта. Если результат — геометрия, у неё есть бюджет полигонов и её можно экспортировать как GLB. Спросите об этом заранее, прежде чем строить вокруг этого рабочий процесс, потому что узнать ответ, уже создав двенадцать персонажей, дорого.

  • Согласованность между видамиСгенерируйте один и тот же объект спереди, сбоку и сзади. Настоящая геометрия сохраняет согласованный силуэт и число конечностей во всех трёх видах; плоский рендер «плывёт» по пропорциям между видами.
  • Вращаемый результатОблетите результат камерой во вьюпорте. Если затенение поверхности не меняется при изменении направления света, вы смотрите на запечённое изображение, а не на меш.
  • Экспортируемая геометрияПроверьте наличие числа треугольников и экспорта в GLB, прежде чем браться. Нет меша — нет экспорта: PNG может быть текстурой, но не может быть персонажем.
  • Масштаб в реальной сценеПоставьте результат рядом с известным ассетом. Уплощённые рендеры обычно приходят произвольного размера без заданной точки отсчёта, что вы замечаете только на этапе сборки.

Посмотрите их в живом низкополигональном мире

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

Два наших собственных мира — полезные ориентиры. Mini World — небольшая низкополигональная сцена, где тайлинг земли и плотность растительности видны на обычной игровой дистанции; это помогает понять, держится ли тайл травы 64x64 или превращается в плоский цвет. The Cyclops' Island больше и показывает, как низкополигональные персонажи читаются на фоне ландшафта и реквизита на расстоянии — именно та проверка, которую проваливают плоские рендеры. Agent Sprite Forge демонстрирует тот же ассет-пайплайн, применённый к 2D-спрайтам персонажей.

Когда вы проверяете собственные ассеты, следите за дистанциями переходов, а не за эффектными кадрами. Отводите камеру назад, пока детализация травы не перестанет прорисовываться, и отметьте, где это происходит. Если на этой дистанции земля заметно меняет характер, значит нужно доработать мипмапы или затухание детализации, и никакое разрешение текстуры не исправит проблему перехода.

Four Seasons Courtyard — низкополигональный мир с травой, деревьями и реквизитом.
Ame-machi — миниатюрный низкополигональный полигон.
Низкополигональный трёхвидовой разворот — модельный лист, который должен возвращать генератор персонажей.
Низкополигональный референс персонажа

Войдите в мир, которому он принадлежит

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

FAQ

Низкополигональные текстуры травы бесплатны? +

Да. Тайлы травы, описанные на этой странице, можно бесплатно использовать в Unity, Roblox, Godot и других движках. Атрибуция не требуется, и для скачивания не нужен аккаунт.

Как сделать текстуру травы бесшовно тайловой? +

Создавайте её на один пиксель больше целевого размера, рисуйте через границу, чтобы узор продолжался, затем обрежьте до целевого. Для тайла 64x64 работайте в 65x65 и обрежьте. Столбец 0 и столбец 63 должны быть соседними в узоре, а не идентичными, иначе получится повторяющаяся полоса.

Как настроить текстуру травы в Unity и в Roblox? +

В Unity установите Wrap Mode = Repeat и включите мипмапы для земли; для пучков на перекрещенных квадах используйте порог альфа-отсечения около 0,5 вместо альфа-смешивания. В Roblox разместите текстуру на части или SurfaceGui и управляйте тайлингом через StudsPerTileU и StudsPerTileV, а не масштабированием части, поскольку масштабирование меняет коллизию.

Как сгенерировать низкополигонального 3D-персонажа? +

Напишите описание, в котором названы силуэт и значимые для геометрии детали — пропорции, конечности, объекты в руках, материалы, — и позвольте 3D-конструктору игр создать меш. Затем повращайте его во вьюпорте, чтобы проверить с нескольких углов, прежде чем строить вокруг него.

Сколько полигонов должно быть у низкополигонального персонажа? +

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

Можно экспортировать сгенерированных персонажей как GLB? +

Да. Сгенерированные персонажи выходят как геометрия с бюджетом полигонов, и именно это делает возможным экспорт в GLB. Убедитесь в наличии числа треугольников и экспорта, прежде чем браться за рабочий процесс, поскольку плоские генераторы изображений не могут дать ни того, ни другого.

Какой размер текстуры использовать для низкополигональной травы? +

64x64 или 128x128 в большинстве случаев. Маленький тайл лучше сжимается, скрывает блочные артефакты на расстоянии и занимает меньше памяти. Переходите к 256x256 или атласу, только если вам нужно несколько различных состояний травы в одном материале, и проверяйте результат в целевом движке, прежде чем решать.

Вернуться к 3D-конструктору игр

Все 31 готовых 3D-мира, игры и сцены собраны на одной странице — в каждую можно играть.

Платформа: Neta StudioСтраница: Низкополигональные 3D-ассетыЧитайте далее: /use-cases/en/voxel-game-engines · /use-cases/en/isometric-pixel-art · /explore/tool/ai-voxel-game-maker
×