Делаю игру на Unity3d
11 постов
11 постов
Здравствуйте, дорогие Пикабушники и Пикабушницы! 👋
Я занимаюсь разработкой 3D action RPG в открытом мире на Unity. И в процессе разработки такой игры можно столкнуться с кучей проблем. Одна из самых больших — это производительность. Когда у тебя в кадре сотни объектов, от гигантских замков до мелких камешков, твой FPS начинает плакать в уголке. Знакомо? Одна из техник, позволяющих решить эту проблему - LOD.
Для тех, кто не в теме: LOD (Level of Detail) — это штука, которая позволяет объектам в игре подменять свои модели в зависимости от расстояния до игрока. Чем дальше объект — тем проще его модель. Например, когда герой смотрит на дерево в 100 метрах, это уже не дерево с 10к полигонов, а «китайская копия» из 300. А если дерево совсем далеко, то это вообще плоская картинка (ну или вообще ничего, кто его разглядит?).
Кстати, знаете, что самое классное? Игрок этого не замечает. Если настроить всё грамотно, подмена моделей происходит настолько плавно, что игроку никогда не придёт в голову, что на экране происходят подобные чудеса обмана.
Почему это правда важно для RPG в открытом мире?
В моём случае это не просто способ "немного ускорить игру". Если включать в расчет весь мир — леса, горы, здания, NPC — то без LOD такую игру просто невозможно сделать комфортной. Да и не все игроки будут запускать мою игру на золотой RTX 5090, а хочется, чтобы поиграли все.
Я записал видео, где показываю, как работать с Unity LOD Group и новой системой Mesh LOD!
А пока напишите, сталкивались ли вы с проблемами оптимизации в своих проектах? Или, может, у вас есть свои трюки для разгрузки сцены? Делитесь в комментариях! 🚀
Youtube:
VK:
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Темой "пятничного моё" будет вышеупомянутая AI генерация. И генерировать будем в ComfyUI.
ComfyUI — это современный и модульный графический интерфейс для работы с нейросетями Stable Diffusion, разработанный для максимально простого и гибкого взаимодействия с моделью. Это своего рода узловой интерфейс (node-based GUI), в котором пользователи могут визуально создавать сложные операции по обработке изображений или их генерации с помощью нейронных сетей.
Узловой подход (Node-based UI): Пользователи работают с блоками (или узлами), которые представляют различные функции. Эти узлы можно соединять между собой, создавая сложные графы для обработки изображений. Узлы могут включать:
Настройку параметров генерации.
Применение различных фильтров и эффектов.
Указание моделей и разверток.
Такой подход намного удобнее классических интерфейсов, где приходится вручную прописывать параметры в строках команд.
2. Поддержка Stable Diffusion: ComfyUI разработан специально для взаимодействия с моделями Stable Diffusion, включая генерацию изображений, модификацию и эксплуатацию возможностей обработки.
3. Гибкость и кастомизация: Система создана для опытных пользователей, но в то же время позволяет комфортно новичкам собирать нужный процесс благодаря визуальным элементам. Имеется возможность добавлять свои собственные узлы или использовать сторонние расширения.
4. Интерактивная визуализация: Вы напрямую видите, как данные передаются между узлами и какие изменения на выходе дают те или иные параметры. Это полезно для дебага и улучшения понимания работы с моделью.
5. Поддержка сложных сценариев работы: В ComfyUI можно совмещать множество операций генерации и обработки в рамках одной цепочки:
Инпут (текстовый запрос, изображение).
Работа с различными моделями.
Добавление эффектов (например, инверсии, upscale или фильтрации).
Вывод готового изображения.
6. Интеграции с популярными библиотеками: ComfyUI поддерживает интеграцию с различными моделями и компонентами, используемыми средствами генерации изображений. Она часто обновляется, поддерживая последние версии архива моделей Stable Diffusion.
А пример создания персонажа под ключ в моем новом видео:
А потом приглашаю в комментарии - задавайте вопросы по видео и просто по юнити!
Приятного просмотра!
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Сегодня поговорим о вычислительных шейдерах.
Вычислительные шейдеры (Compute Shaders) — это специальные программы, которые исполняются на графическом процессоре (GPU) и предназначены для выполнения произвольных вычислений, не связанных напрямую с отрисовкой кадров. В отличие от традиционных шейдеров (вершинных, фрагментных, геометрических), вычислительные шейдеры запускаются отдельно от графического конвейера (pipeline) и обеспечивают выполнение мощных параллельных вычислений.
Основное преимущество вычислительных шейдеров связано с тем, что GPU обладает огромным количеством вычислительных ядер, способных выполнять параллельные задачи намного быстрее, чем CPU.
Они применяются в различных задачах, где требуется высокая производительность и возможность распараллеливания. Рассмотрим основные сферы применения:
1. Компьютерная графика:
Генерация текстур: Например, процедурное создание текстур (в реальном времени).
Симуляция частиц и физические эффекты: Просчёт поведения частиц, разрушений, тканевой физики и других эффектов.
Обработка освещения: Такие техники, как глобальное освещение или расчёт шейдинга, могут выполняться с использованием вычислительных шейдеров.
Обработка данных для рендеринга:
Сортировка объектов.
Быстрые фильтрации (например, Gaussian Blur, эффекты пост-обработки).
2. Физические симуляции:
GPU способен рассчитывать реалистичное поведение объектов:
Симуляция жидкостей (например, с помощью решателей уравнений Навье-Стокса).
Сжатия объектов (метод конечных элементов).
Расчёт мягких тел (soft body physics).
3. Машинное обучение и нейросети:
Вычислительные шейдеры могут обрабатывать данные для обучения нейронных сетей и выполнения ускоренных операций (например, свёртки в CNN).
4. Обработка больших массивов данных:
Выполнение сортировки данных (например, алгоритм Radix Sort).
Построение физико-математических симуляций — от сложных систем частиц до устойчивой к деформациям геометрии.
Обработка 2D/3D массивов: Волновые симуляции, обработка многомерных точек данных.
5. Симуляция природных явлений:
Вода, дым, снег — GPU выполняет симуляцию частиц для достижения реалистичного эффекта.
Облачные эффекты (например, расчет шейдерного шума для облаков).
6. Процедурная генерация:
Используются для генерации 3D-объектов, ландшафтов, текстур и анимаций. Например:
Gelände (ландшафт).
Бесшовные шумовые текстуры (Perlin Noise, Simplex Noise).
Ну а я покажу, как вычислительные шейдеры можно использовать в игре
А потом приглашаю в комментарии - задавайте вопросы по видео и просто по юнити!
Приятного просмотра!
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Сегодня мы посмотрим, как выглядит дерево поведения!
Использование дерева поведения требует прикрепления к игровому объекту специального компонента - BehaviourTreeComponent.
В компоненте указывается только конфиг с настройками дерева. Конфиг у нас в виде ScriptableObject и настройки всех нод дерева тоже выполнены в виде ScriptableObject, но уже вложенных.
Двойным кликом по конфигу открываем его редактор. В левой части располагается инспектор, в котором будут отображаться параметры узлов. А в правой части поле для визуального редактирования дерева через graph api.
Есть несколько типов нод - корневая, составная (параллельная, выборочная, последовательная), условная и действие (состояние). Все выделено особым цветом для удобства. При клике на ноду видим ее параметры.
Присутствует режим отладки, когда в рантайме дерево подсвечивает активные узлы для конкретного объекта.
Система получилось достаточно гибкая и легкая. 500 юнитов с деревьями поведения кушают 2-3 мс процессорного времени. У меня в игре не будет замесов между армиями, состоящими из сотен юнитов, плюс будут дальнейшие оптимизации при масштабировании, так что определенный запас производительности я себе обеспечил.
Подробности, как всегда, в полном видео на моем канале
А потом приглашаю в комментарии - задавайте вопросы по видео и просто по юнити!
Приятного просмотра!
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Закончился мой отпуск в Сиродиле, и я нашел время сделать еще один ролик!
На этот раз я покажу фичу, которая помогает мне реализовывать различное поведение у игровых объектов - составную машину состояний!
Для использования стейт машины нужно прикрепить к игровому объекту специальный компонент CompositeStateMachineComponent.
Вы могли заметить, у компонента нет видимых полей. Но они есть. И чтобы до них добраться, нужно нажать кнопку открытия редакторе стейт машины.
Как я уже говорил - стейт машина составная. И в данном случае настроены три вложенных машины состояний:
Нажав на кнопку стейт машины мы открываем окно с её настройками:
Окно использует Graph API, для создания графа состояний с переходами между ними.
В прошлых роликах я рассказывал, что поведение игровых объектов определяется его активными компонентами. И суть состояния в том, что оно включает какие-то компоненты, тем самым активируя новое поведение. В каждом состоянии мы можем настроить список включаемых им компонентов:
А чтобы настроить переходы между состояниями, надо кликнуть на линию, связывающую их, и открыть окно редактирования условий переходов:
В этом окне можно настраивать условия переходов между состояниями и объединять их в группы.
А в игровом режиме редактор позволяет отслеживать текущее состояние объекта в реальном времени:
Подробнее я все разбираю в своем ролике. А если у вас возникнут вопросы по моему проекту или в общем по разработке игр в Unity, смело пишите их в комментарии!
Приятного просмотра!
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Уже пятница, а значит пора выложить "пятничное моё"!
Заканчивайте работу, расслабляйтесь, смотрите, как можно реализовать в игре систему, позволяющую применять различные типы воздействия на юнитов:
С любыми вопросами приглашаю в комментарии!
Здравствуйте, дорогие Пикабушники и Пикабушницы!
Сегодня расскажу Вам, как в моей игре устроена система атаки!
Поведение атаки, так же как и любое другое, реализуется с помощью компонентов.
В компоненте ComboAttackDataComponent настраиваются все цепочки атак юнитов:
В поле impact agents указываются агенты воздействия, которые будут как-то влиять на цели. У каждого такого агента есть своя настройка списка применяемых воздействий:
Так же атака может модифицировать параметры юнита:
А вот как это сейчас выглядит:
Все подробности вместе с кодом можете увидеть в полном видео. Приятного просмотра!
С любыми вопросами приглашаю в комментарии!
Добрый день, многоконфессиональные Пикабушники и Пикабушницы!
Поздравляю Вас с Пасхой – праздником света и возрождения! Пусть в ваших домах царят мир, добро и гармония!
Приглашаю вас отрезать куличик и лицезреть сотворение моего игрового мира:
Если возникнут вопросы, то жду Вас в комментариях!