Gamedev Евгений Серегин
7 851

Оптимизация VFX для игровых движков

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

В закладки
Аудио

Баланс качества и производительности

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

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

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

Итак, сперва нужно уяснить, что у вас за игра. Будь то скроллер с самолётиками, файтинг, 2D-платформер, 3D-аркада, гонки, карточная игра, шутер. Для каждого варианта будет своё оптимальное количество частиц на экране одновременно. Скажем, для карточной игры вроде Hearthstone их будет очень много, и они будут постоянно висеть на экране. Следовательно, их нужно делать лёгкими, из малого количества частиц. В файтинге на экране не особо много чего происходит, поэтому тут вполне можно сделать крупные, тяжёлые эффекты. Но лучше этим не увлекаться, если то же самое можно сделать проще и легче.

Кстати, этот вопрос вы должны задавать себе постоянно, пока работаете над проектом. Как я могу сделать это проще и легче в плане нагрузки на CPU и GPU, сохранив при этом качественный визуальный результат?

Следующий шаг — это поинтересоваться у главного программиста, на какое минимальное референсное устройство ориентируется проект. И какие его характеристики в плане количества полигонов одновременно на экране при минимум 30 fps (на консолях 24-25 — минимальная планка, с которой можно пройти апрув Sony и MS), количества доступной памяти под текстуры, поддерживает он те или иные кастомные шейдеры.

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

Как мы видим, простор для работы ощутимо сузился, и шаг влево или вправо может обернуться багами, артефактами, розовыми квадратами на устройстве игроков. Поэтому я рекомендую стараться использовать дефолтные шейдеры Unity. Из кастомных лучше брать проверенные временем и другими проектами. И совсем уж боярское решение — иметь под рукой программиста по шейдерам, который при первой необходимости перепишет и все исправит. Или god like вариант — писать их самому.

FumeFX в действии

Оптимизация текстур

Для отображения любого эффекта нужно что-то показывать. И это что-то — текстуры. Они являются самой важной, значимой и сложной частью эффектов. Текстура назначается на материал, материал назначается на систему частиц. Можно с помощью drag'n'drop перетащить материал из папки и бросить его на партикл систем (далее сокращенно ПС). На текстурах мы рисуем всё, что нам нужно, всё, что хотим показать в эффекте. Искры, звёздочки, лучи, круги, спрайты дыма. Основные правила создания текстур для эффектов следующие:

Делаем почти всегда только чёрно-белое изображение. Сохраняем в PNG с прозрачностью. Белая текстура на прозрачном фоне — оптимальный вариант. Иногда бывают нужны серые изображения, белое с серым. Чёрные — почти никогда. Чёрную картинку нельзя привести ни к какому цвету, а все градации серого — можно, в том числе и к чёрному. В ПС можно выставить любой цвет, так что, например белая звезда может быть жёлтой, красной, зелёной, какой угодно. Не нужно делать на каждый случай отдельную звезду определённого цвета. Одна белая подходит на все случаи.

Желательно, но не обязательно, делать разрешение текстуры, кратное степени двойки. А именно 32х32, 64х64, 128х128, 256х256, 128х32, 64х256 и так далее. Во-первых, это позволяет включать в свойствах текстуры компрессию и уменьшать её вес. А во-вторых, такие текстуры легче делить на одинакового размера кадры, если создавать анимированные текстуры. По сути, это последовательность кадров, которая идет слева направо и сверху вниз. Так же, как мы читаем любой текст.

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

А можно сделать все это в одной ПС с одним материалом и одной текстурой. В системах частиц Unity есть возможность проигрывать секвенцию кадров, как я уже упомянул раньше. Играть можно последовательно всю секвенцию или по одному ряду. В том числе и случайный ряд. Рядом считается горизонталь в которой находятся кадры. В атласе 8 на 2 будет два ряда по восемь кадров в каждом.

В случае со снежинками оптимально сделать 1 на 4. То есть четыре ряда по одному кадру в каждом. Таким образом, ПС будет случайно выбирать любой ряд, в котором будет одно уникальное изображение снежинки, и показывать его. И так много раз. Так мы достигаем экономии в материалах, текстурах, упрощаем работу с настройками до одной ПС вместо четырёх и получаем разные снежинки. Как рассчитать кол-во кадров в атласе? Как расположить ряды и кадры в них? Делайте это заранее — до того, как собираете сложный много кадровый атлас. Чтобы не получалось текстур вроде 2048 на 32. Для этого собираем эффект с однокадровым изображением, убеждаемся в достаточной длительности жизни частиц и уже тогда делаем нужное количество кадров в атласе.

Расчёт примерно такой: одна секунда жизни частицы — это 30 кадров, значит оптимально сделать атлас из 32 кадров — 8 на 4, четыре ряда по восемь кадров в каждом. Допустимо понизить частоту кадров до 24, в крайнем случае до 20 за секунду. Меньше — и глаз будет видеть отчётливые «тормоза». Нужно снижать длительность жизни частицы. Для коротких эффектов вроде огня хорошо подходят 8-16 кадровые секвенции. Всполохи быстры по своей природе, так что их длительность вполне можно делать 0,3-0,5 секунды, что примерно и равно 10-15 кадрам.

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

Делаем минимально возможный размер текстуры. Например, для искры можно использовать 16 на 16 или 32 на 32. Для белого квадрата вообще достаточно 8 на 8. И визуально разницы не будет, если сделать его 1024 на 1024.

Для так называемого гало (halo), разблюренного круга, который имитирует свечение вокруг объекта, в большинстве случаев достаточно 128 на 128. Нет смысла делать 512 на 512 или больше. Делайте всегда такой маленький размер, чтобы не было видно пикселизации (пиксельной кромки изображения). Нужно ещё учитывать, что те же гало-текстуры являются универсальными и используются многократно в разных эффектах одного проекта. И размер частиц с ними может быть от самого маленького до во весь экран. Даже в этом случае 128 на 128 вполне достаточно, если хорошо сделать текстуру.

Ещё частый случай, когда изображение вытянутое, например, молния, и занимает пространство 64 на 256. Нет смысла делать квадратный кадр 256 на 256, оставляя по краям огромные пустые места на текстуре. В версиях Unity 5.0+ появилась возможность задавать размер билборда по сторонам. Так что проблема решается просто созданием вытянутого билборда. Экономим место на текстурах. Не оставляем пустое пространство без дела.

Оптимизация материалов и шейдеров

Здесь мало что зависит от самого художника по эффектам, если он не является одновременно и специалистом по шейдерам, и не делает их сам. В Unity 2018 анонсирован встроенный аналог известного и популярного ассета Shader Forge. Шейдеры можно будет собирать, как конструктор, набирая нужные функции и настраивая их без особых знаний в программировании.

Что же касается встроенных дефолтных шейдеров, то я рекомендую использовать шейдеры mobile>particles и прочие из вкладки mobile при работе с эффектами для мобильных устройств. Вроде как они чуть лучше оптимизированы для этого. Но ничто не мешает использовать и другие, полноценные шейдеры, идущие в комплекте с движком. Я частенько использую не мобильный шейдер Particles>Multiply (Double).

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

Например, вполне можно сделать атлас, где будут несколько вариантов гало с разной прозрачностью и интенсивностью «свечения» и, использовав один материал, уже в самой ПС вызывать нужный кадр.

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

Так же нередки случаи конфликтов ресурсов проекта и подобных «конструкторов». Ведь авторы делают их, чтобы продавать, а не чтобы они работали у всех идеально. Часто удается обойтись хорошо сделанной иллюзией на дефолтных шейдерах. Поэкспериментируйте с движением, появлением, прозрачностью в настройках ПС. Часто интересный результат получается случайно. И уже на его основе можно сделать интересный эффект. Если других вариантов нет — тогда используйте. Но помните об упомянутых рисках.

Очередной всеми любимый смерч

Оптимизация количества частиц на экране

Большие частицы против маленьких. Количество частиц на экране напрямую влияет на производительность: чем их больше, тем она хуже. Так же очень важен размер частицы. В настройках ПС даже есть ограничение, которое по дефолту равно 0,5. Сто частиц размером 5 миллиметров каждая будут намного меньше нагружать процесс рендеринга, чем те же сто частиц, но уже в половину экрана каждая. Да, площадь полупрозрачных изображений на экране очень сильно влияет на производительность. Об этом вам скажет любой программист.

Суть примерно в следующем: GPU приходится очень много просчитывать накладывающиеся друг на друга полупрозрачные слои. И чем их больше, тем сложнее просчёт. И если их площадь близка к общей площади экрана, то расчётов приходится делать больше, чем для маленьких частиц. Ведь нужно рассчитать, как будет выглядеть то, что находится за этими большими полупрозрачными частицами. Поэтому используйте их очень аккуратно и всегда старайтесь свести их количество и время жизни к минимуму. Другими словами, сделать дым на пол экрана лучше из 200 небольших частиц, чем из 40-50 больших. Визуально будет одинаково, зато производительность не просядет.

Используем время жизни частиц полностью. Бывают случаи, когда нужно сделать плавное пропадание частиц. И некоторые нехорошие господа делают это, срезая прозрачность частицы в середине её жизненного цикла. После этого она не видна на экране, но фактически GPU продолжает её рендерить. Это видно, если включить режим Wire (сетка). Так делать — просто позор. Вместо срезания видимости на середине жизни используйте вдвое меньшее время жизни, и срезайте видимость в конце. Визуально выглядит так же, но частиц в два раза меньше.

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

Ориентация билбордов в пространстве. Тоже очень полезная фича, которая позволяет сэкономить немного частиц. Бывает полезна при статичной камере, например в 2D-проектах. В этом контексте под статичной камерой имеется ввиду, что она не использует третье измерение, не поворачивается вокруг персонажа, а имеет строго закреплённое положение, так что всё происходящее на экране мы видим под заданным углом.

Для подобных случаев лучше использовать ориентацию билбордов Local в свитке Render в настройках ПС. А эмитить их только в двух плоскостях эмитерами типа Circle, Edge, а не Sphere, Hemisphere. Это позволяет меньшим количеством частиц добиться заполнения пространства. Поскольку все они будут повернуты в камеру и не будут улетать по оси Z вглубь экрана от камеры. Все они будут видны, что позволит снизить их количество по сравнению с тем, если бы часть частиц просто улетала внутрь экрана, закрытая другими частицами, более близкими к камере. Экономия небольшая, но все же экономия.

А ещё эта ориентация в некоторых случаях позволяет избежать частого артефакта в играх — заметного пересечения с другими объектами. Такое часто можно увидеть, когда частицы «пересекаются» с землей, где половина отсекается резкой границей. Например, дым от шин в гонках. Есть вариант использовать Soft Particles шейдер, но он чуть больше влияет на производительность, чем обычные шейдеры Particles и Mobile>Particles.

Для 3D-проектов со свободной камерой чаще всего приходится использовать ориентацию билбордов View или Face. Они всегда смотрят в камеру. Вариант Face будет смотреть только в активную камеру. И если вы используете две или больше камер одновременно, то лучше не использовать такую ориентацию. Могут возникнуть проблемы.

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

Летающий лев-медведо-тигр

Трейлы (trails)

Трейл — след, хвост за частицей. С некоторых пор трейлы перестали быть отдельным бесполезным компонентом и стали частью ПС Unity. У них появились дополнительные настройки, позволяющие их действительно использовать.

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

За количество сегментов отвечает очень важный параметр — Minimum Vertex Distance. Он напрямую влияет на производительность при использовании тейлов. По дефолту он равен 0,2, что очень много. Из подсказки можно понять, что он отвечает за то, через какое расстояние будет добавлен новый сегмент трейла. Другими словами, трейл длиной в два сантиметра будет состоять из сегментов, которые находятся друг за другом через каждые 0,2 пикселя. Поднимая этот параметр до 10, мы сокращаем количество сегментов в 50 раз. А если учесть, что частиц с трейлами может быть не один десяток на экране — мы срезаем огромное количество полигонов и улучшаем производительность. Правило использования трейлов такое: чем ровнее движение частиц, тем меньше сегментов трейла нужно. Чем хаотичнее движение частиц, тем сегментов трейла нужно больше.

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

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

Вообще, лучше стараться избегать трейлов в «тяжёлых» мобильных проектах, где много всего на экране, в том числе и эффектов. Используйте трейлы очень взвешенно и обдуманно. К таким же «тяжёлым» фичам в ПС Unity относится Noise. Он позволяет создавать красивые перемещения частиц, но уж очень прожорлив на вычисления. Отлично подойдёт для ПК-эффектов.

Холодное пенное хлещет в невидимый бокал. Взгляд с пола

Источники света

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

Нужно помнить, что шейдеры particles и mobile particles невосприимчивы к источникам света — он на них просто не влияет. Не затемняет и не осветляет. Шейдер всегда одинаково выглядит, что в темноте, что при освещении. Это свойство и позволяет сделать иллюзию засвета, освещённого пространства вокруг огня, костра, факела, фонаря. А нагружать GPU ещё и расчетом света от эффектов — явно лишнее. Для ПК-эффектов всё же, думаю, можно использовать ИС. Но всегда лучше посоветоваться со своими программистами на этот счёт.

Дружная семья фаерболов

Эффекты для UI (элементов интерфейса)

Эффекты для интерфейса создаются по тем же принципам и правилам, что и обычные эффекты, но с одним нюансом. Вы не можете разносить части эффекта по дальности и близости к камере. Другими словами, у вас пропадает третье измерение и остаётся всего два. И весь эффект превращается, буквально, в один слой, в котором нельзя как-то управлять очередностью частиц средствами настроек ПС.

В своей работе я использую скрипт, который вешается на каждую ПС, превращая её в подобие спрайта. И очередность перед камерой выстраивается обычной иерархией объектов и ПС на сцене. Что ниже стоит в списке, то ближе к камере. Объекты выше по иерархии будут находиться как бы за впереди стоящими.

Скрипт называется UI Particles — его мы вроде бы нашли где-то в сторе.

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

Порядок в проекте

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

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

Одна папка на все материалы избавит вас от дубликатов и позволит быстро мониторить уже готовые материалы для реюза на других эффектах. То же самое с текстурами. Например, имеем текстуру Halo01.png. Для неё делаем материал mobile>particles additive и называем его Halo01_Add. По аналогии делаем материал mobile>particles alpha blended и называем его Halo01_AB. Теперь мы всегда с ходу можем понять и использовать нужный материал, не просматривая весь список по сто раз. Это очень помогает, когда проект большой и счёт материалов и текстур идёт на сотни.

Во вторых, именуйте все файлы осмысленно. Никаких Material01, Material02. Если это звёзды, то так и пишем Star01_Add. Если какие то сплэши или лучи — тоже именуем понятно: Splash01, Rays01, Beams01 и так далее. Это не только сэкономит массу времени и облегчит работу лично вам, но и другой художник по эффектам сможет быстро понять, что к чему в этом проекте.

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

Эти три простых правила сэкономят массу времени и ресурсов проекта, а выполнять их не сложно, когда привыкнете.

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

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

Спросите себя, нравится ли вам то, что видите? Используйте различный софт для создания реалистичных, анимированных эффектов. Не зацикливайтесь на одном фотошопе. Чем больше у вас знаний и навыков, тем легче придумывать и создавать новые эффекты! Нет предела совершенству.

#опыт

Материал дополнен редакцией

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Евгений Серегин", "author_type": "self", "tags": ["\u043e\u043f\u044b\u0442"], "comments": 79, "likes": 188, "favorites": 214, "is_advertisement": false, "subsite_label": "gamedev", "id": 24419, "is_wide": false, "is_ugc": true, "date": "Sun, 05 Aug 2018 23:30:16 +0300" }
{ "id": 24419, "author_id": 35827, "diff_limit": 1000, "urls": {"diff":"\/comments\/24419\/get","add":"\/comments\/24419\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/24419"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "possessions": [] }

79 комментариев 79 комм.

Популярные

По порядку

Написать комментарий...
29

Жаль вот только, что такая годнота в оффтопе, а не в геймдеве!

Ответить
41

При написании нет возможности выбрать геймдев. Такой вот сайт про геймдев :)

Ответить
0

Перенесут завтра.

Ответить
2

Перенесли. В инди.

Ответить
0

Со временем переводят же, если достойно и подходит.

Ответить
13

Для меня эффекты как были, так и остаются какой-то магией.

Ответить
6

Так и должно быть))

Ответить
10

Краткая выжимка поста: не говнокодь, скотина!

Ответить
9

Урааа! Что то про геймдев и VFX, но ни капельки swj!

Ответить
2

Хочу заняться vfx с чего начать? Опыт небольшой

Ответить
5

С простых эффектов. Хороший вариант - придумать мини проект и под его нужды делать. Например, сделать статичную сцену в магическом лесу во время грозы и дождя. Мошки на болоте, костер, светлячки, мистические духи с болота, туман, дождь, гроза и тд :).
А технически для начала изучите возможности партикл системс. На этом же мини проекте как раз и изучайте.

Ответить
3

Я не особо по FX, но вот вроде как неплохой канал, есть несколько интересных уроков https://www.youtube.com/user/TheMirzaBeig/videos

Ответить
3

https://realtimevfx.com/
Здесь очень много информации всякой, в том числе и гайды с брейкдаунами. Я не специализируюсь на эффектах, но сайт давненько лежит в закладках.

Ответить
0

- С художественного понимания эффектов.
вот вам хорошая книга:
https://vk.com/unity3d_gamedev?w=wall-94697278_1834
https://pp.userapi.com/c623124/v623124827/45b0b/mHAVjhtBZpc.jpg

Ответить
5

Оставлю тут любителям посмотреть на красивые гифки
https://twitter.com/GagneMichel

Ответить
2

Спасибо, отличный материал

А вы в работе пользуетесь какими-то паками/сторонними ассетами для FX ? Что могли бы посоветовать как must have при создании эффектов ?

Ответить
3

FumeFx хороший плагин для 3дмакс. Но я сейчас редко им пользуюсь. не та стилистика проекта, да и работа с ним очень объемная. Для красивого результата, разумеется. В остальном стандартный макс, фотошоп и фантазия.
Как раз со дня на день запускаем проект, над которым больше года работали. Надеюсь тут его позволят осветить :)

Ответить
0

На днях засел за Гудини, там приятная связка с UE4. Но надо смотреть в сторону Unity по работе. В настоящее время сижу только в майке, по большей части риг и анимация. Если 3дмакс вообще никак, то что посоветуете для начинающего эфиксера под Unity?

Ответить
0

Майя вполне подойдет. Делать простенькие меши можно хоть в Блендере :). Другое дело, если вы настроены на FumeFX, то тут максовские "думающие партиклы" вне конкуренции. именно к ним цепляется fumefx. Но этот путь скорее не для начинающего, а для сильно продвинутого эфыксера :).

Ответить
0

Ну не надо так пренебрежительно к блендеру. Particle systems в Blender очень приличные, а дальше дело за node editor и фантазией. Основные ограничения накладывает все таки проект и в какие рамки необходимо вписаться.

Ответить
1

Дело не в партиклах Блендера, а в том, что к его партиклам не цепляется fumefx. И вряд ли когда то будет. Сами партиклы без этого чуть больше, чем бесполезны.

Ответить
0

Напрямую не цепляется, но импортировать и отрендерить можно. К примеру парни, которые рисуют "NextGen" для Netflix именно так и поступили.
Houdini and Fume FX were used to generate VDB and Alembic data for import and render in Cycles. Stefan Werner and Luca Rood (who did a fantastic job on improving the cloth sim in Blender that was used heavily in NextGen) worked on adding proper support for VDB voxel data, and improving the Alembic support, including importation and exposing attribute data for use in Cycles material networks

Ответить
1

Опять же, использовали Гудини и фумфх. Про блендер ни слова :).

Ответить
0

Вообще-то
Core work was all done in Blender and indeed rendered in cycles

And FX was partially done in Fume FX and Houdini, imported into Blender and also rendered in Cycles

Ответить
0

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

Ответить
0

В том и дело, что настроен на продвинутый уровень. Буду смотреть в сторону FumeFx. Он оказывается под майкой вполне себе здравствует.

Ответить
1

Тут дело не в самом fumefx, а именно в партиклах макса, которые очень круто можно настраивать. Если подобное есть в Майе, то да, дерзайте на Майе.

Ответить
2

Господи, неужто статья по геймдеву и не о монетизации!

Ответить
2

Есть пара видео на моем канале
https://www.youtube.com/channel/UC3bLv4AAspBU9OCSMpVhXoQ/videos?view_as=subscriber
А в целом, лучше на том же ютюбе поискать - там полно туторов для начинающих. А для профи вам никто не расскажет свои фишки :).

Ответить
1

Спасибо за материал. Как обычно - очень круто)

>Используйте различный софт для создания реалистичных, анимированных эффектов.

Например, какой?

Ответить
1

After Effect, FumeFX, 3dsmax, Maya и тд.

Ответить
0

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

Ответить
3

Я бы сделал просто кадрами. Это проще, легче и быстрее. Обсчитываться тоже будет быстрее. К тому же всякого рода кости и костевая анимация в юнити требует заморочек. Плюс есть ограничение по костям вообще. И лучше их оставить для персонажей. Точно не знаю, как там в Спайне, не разбирался, но скорее всего кости экспортятся с прискиненым 2д мешем через свой экспорт плагин в юнити. На мой взгляд ненужное и избыточное нагромождение. То, чего и надо избегать как раз при оптимизации :).

Ответить
0

Хмм, спасибо, буду знать

Ответить
0

Если что я имел ввиду ик анимацию (spine, dragon bones, moho)

Ответить
1

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

Ответить
0

Да, мне уже объяснили. По факту спайн лучше использовать как "рендер" этой самой анимации. Ты создал анимацию партикла и персонажа. И потом отредерил клип. Правда тут нужно (если персонаж) рендерить каждую комбинацию одежды оружия и действия. Но вот на партиклы если их очень лень делать (или не хватает скилла) то самое то. Сделал анимацию и потом движок спайна сам "зафоткает" кадры изменения объекта

Ответить
1

Очень крутая статья. К геймдеву отношусь приблизительно никак, но прочитал с удовольствием.

Ответить
1

Для тех кто хочеть втянуться в мир VFX поглубже)))

Ответить
0

Мне нечего сказать кроме того, что я тебя люблю. Пиши такие штуки чаще.

Ответить
2

Часто не обещаю, но периодически - вполне возможно.

Ответить
0

Может где-то есть видео о том, как Вы делаете эффекты для Unity? С нуля и до конца. Например, как тот же смерч из статьи.

Ответить
1

Давно собираю лучшие уроки по игровым эффектам ( и не только), в нашем сообществе.
В этой теме, вы их найдёте, но это лишь часть.
https://vk.com/topic-94697278_32854565
Ещё много на стене размещались, и не добавлены в тему. Поищите на стене, по запросу FX и #FX
Так же у нас есть отдельные видео и фото альбомы, посвящённые эффектам.
Лучшие эффекты - у китайцев и корейцев, поэтому в первую очередь, я собираю их туториалы и мастерклассы.
В частности, вот видеоурок по смерчу: (и вроде были у нас ещё)
https://youtu.be/oaWQSrAFYlo

Ответить
1

Вот вам ещё по торнадо урок:
https://youtu.be/2kA0BwMTNBY
(в поиске ютуба, эти уроки не доступны)

Ответить
0

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

Ответить
1

С нуля наверно трудно. Студии предъявляют высокие требования. У меня был большой опыт в моделировании и текстурировании, немного анимации, скининга и всего такого. К эффектам я после всего этого пришел :).

Ответить
1

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

Ответить
0

Эх, всё как всегда. Буду вникать, может звезды и совпадут.

Ответить
0

Евгений, а чего ты свои работы не прикрепил для иллюстрации, как примера?) Просто интересно)
Заранее благодарю за ответ;)

Ответить
1

На работы мои пока распространяется NDA. Как зарелизимся, так и покажу. Может даже статейку напишу про тернистый путь создания эффектов для этого проекта :). Остальное на артстейшн можно посмотреть.

Ответить
0

Спасибо, очень полезный материал. Мне кое что здесь даже в 3д моделирование пригодится

Ответить
0

А что, например?

Ответить
0

Да в основном больше связано с юви картами и текстурами кадровой анимацией. И как можно за этот счёт сэкономить. Но тут больше тех часть чем творчество.

Ответить
0

Крутые анимации!

Ответить
0

Отличный профильный материал, спасибо.
И написано хорошо. Единственное замечание - не употреблять "Вам" (с заглавной буквы) в текстах для массового чтения. Это для личной переписки с подчеркиванием уважения к конкретной персоне.

Ответить
0

Я так и обращался ближе к концу статьи, персонально к читающему. Чтобы мотивировать не абстрактных "вы", а конкретного "Вас" :).

Ответить
0

Ну я бы ещё понял, если бы писатель-классик на встрече с молодым поколением растрогался и вещал, воображая, что каждый представитель мОлодежи - готовый строитель коммунизма и мира во всем мире.
Но в контексте "Вы, читатель, оптимизируйте текстуры" это как-то пафосно получается :D.

Ответить
0

Теперь элементарная вежливость это пафосно? Ну ладно :).

Ответить
0

Евгений вообще просто пафосный чувак. Это естественно для него. Не придирайтесь.

Ответить
0

Интересно было бы почитать про UI и FX

Ответить
0

А что именно Вас интересует?

Ответить
0

Ну если в Unity то как позиционировать их в RectTransform с закреплением по пивотам UI. От этого и масштабирование относительно Canvas или вложенных объектов. И что бы эти частицы работали в Screen space overlay

Ответить
0

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

Ответить
0

Большинство проблем вроде масштабирования и маскирования частиц в UI решаются скриптами подобными упомянутому в статье UI Particles.

Ответить
0

Евгений, спасибо за крутую статью! Чуток поправил оформ и вывел в геймдев.

Ответить
0

Благодарю. Мне кажется, крутость явно преувеличена :).

Ответить
0

Отличная статья, спасибо!

Ответить
0

Другими словами, сделать дым на пол экрана лучше из 200 небольших частиц, чем из 40-50 больших. Визуально будет одинаково, зато производительность не просядет.

Почему так? Ведь экранное пространство будет занято таким же объёмом, а сортировка 200 небольших частиц между собой и всем остальным займёт много больше времени, чем 40-50.

Ответить
0

Вот только игры на мобилках - ПОЛНЫЙ отстой и безвкусица! Это кем надо быть, чтобы удобный мощный ПК, и шикарный большой экран, с шикарным обзором и мощной видеокартой, променять на какие-то мелкие игрушечные экранчики?! - ну уж точно не ценителем хороших игр. :(
Не понимаю всю эту повальную, маниакальную увлечённость мобилками.
Вот и эффекты на мобилках такие же бедные, как и сами игры...

Ответить
0

Ну не скажите. Я вот в долго играл в Battle Bay, мне их эффекты очень даже нравились. Особенно как сундуки открываются. Конечно, не как на ПК, но тоже достойно.
Да и удобно это - играть на телефоне. Чтоб на ПК поиграть, надо выделить время, настроиться. А тут запустил в перерывчике, пару боев по 3-4 мин сыграл, удовольствие получил. ))
Только блин с такими играми иногда получается сидишь по часу-полтора, очень затягивает (((

Ответить
0

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

Ответить
0

Не в каждой игре должен быть огромный игровой мир :) На экране 5.5 вполне годно играть. Просто надо попробовать.

Ответить
0

ну вот! то есть, есть игры, не пригодные для мобилок (с большим миром, с открытым миром, ММО, RPG многопользовательские...
Но у нас в РФ, эти игры похоже, никто не умеет ещё делать, или не решается на такие большие проекты. на мобилки-то проще игры ляпать...

Ответить
0

Я стремлюсь делать полноценные эффекты, но чтобы они шли на мобилках.

Ответить
0

Это очень сложно обеспечить на маленьком экране!
главная проблема - это утрата большого обзора, и ощущения большого пространства.

Ответить
0

В целом - хорошая статья, спасибо! Выложили ссылку в нашем сообществе по Unity3d и GameDev.
Кого интересуют мастерклассы и уроки по спецэффектам для игр, - вы много найдёте их у нас на стене (ищите по FX и #FX), в специальных темах, а так же, в видео альбомах.

Ответить
0

ой, ссылку на сообщество забыл: https://vk.com/unity3d_gamedev

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Хидео Кодзима оказался алгоритмом
машинного обучения
Подписаться на push-уведомления