Pull to refresh
15
0
Дмитрий @DYaz

Программист

Send message

Как LINQ, только быстрый и без аллокаций

Reading time4 min
Views24K

Кому не нравится LINQ в C#? Встроенная и уже достаточно старая фича языка C# и рантайма .NET.

Но можем ли мы сделать более эффективную версию LINQ, чтобы и быстрее, и не кушало памяти? Давайте попробуем!

Читать далее
Total votes 47: ↑47 and ↓0+47
Comments28

Создание шутера с LeoECS. Часть 1

Reading time9 min
Views25K

Друзья, это первая статья по фреймворку LeoECS из предстоящей серии, которая позволит вам быстрее понять, как работать с LeoECS в Unity и решить некоторые виды проблем, возникающих на практике. Все советы, изложенные в них, не представляют собою какой-то свод правил, способы построения подходов, а скорее набор рекомендаций и best practices, которые помогут вам освоиться в работе с фреймворком. Перед чтением убедитесь, что вы понимаете принцип работы архитектурного паттерна Entity Component System (ECS), и ознакомьтесь с документацией LeoECS, так как в процессе изучения фреймворка мы создадим простую игру жанра Top-Down shooter, рассмотрим часто возникающие проблемы и способы решения, и отвлекаться на различные вопросы, связанные с концепцией ECS, не будем.

Читать далее
Total votes 8: ↑7 and ↓1+8
Comments6

Укрощение батчинга за счет оптимизации масок UI

Reading time8 min
Views6.3K

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

В какой-то момент мы в War Robots столкнулись с необходимостью оптимизировать экран акций: обнаружилось, что для отрисовки этого экрана Unity совершала более 300 батчей. Для сравнения: куда более сложный экран ангара, содержащий 3D-сцену, 3D- и 2D-интерфейсы, эффекты и анимации, рисовался примерно за 100 батчей.

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

Читать далее
Total votes 20: ↑19 and ↓1+21
Comments2

Фотореалистичная графика на уровне ААА в Unity

Reading time12 min
Views26K

До сих пор распространено мнение о том, что Unreal Engine превосходит Unity в графическом плане, но так ли это в действительности? (Спойлер: нет.)

Такое мнение сформировалось по ряду причин. Одна из причин отсылает нас к 2015 году, когда в Unity был доступен лишь встроенный конвейер рендеринга с рядом ограничений. На тот момент добиться сопоставимого с Unreal Engine визуала было очень сложно. Другой причиной является порог входа в Unity: он довольно низкий, а начинающим программистам и дизайнерам совсем не очевидна концепция компонентной системы Unity, что порождает довольно много слухов по сей день.

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

Всем под кат! Далее мы расскажем, как добиться фотореалистичной графики в Unity.

Читать далее
Total votes 11: ↑10 and ↓1+12
Comments18

Бесплатные ресурсы для инди-разработчиков

Reading time6 min
Views18K
image

Я изучаю гейм-дизайн и разработку игр. Когда я начала создавать свою первую игрушку (гифка оттуда) по мотивам мультсериала «We Bare Bears», то подолгу зависала, чтобы отрисовать фон, кнопочку, анимацию разрушения блока и пр. Часть артов я, по итогу, не использовала, а время на них тратила много.

За полгода я накопила список ресурсов с бесплатными ассетами, персонажами, музыкой, фонами. Эти ресурсы помогают мне экономить по 10-20 часов на создании учебных игровых проектов. Надеюсь, кому-то этот список сэкономит время и позволит создавать атмосферные прототипы быстро.

Updated: я тут немножко подумала, и создала канал в Telegram: GameDEVils, буду там делиться материалами (про геймдизайн, разработку и историю игр), которые слишком короткие, чтобы положить в статью на Хабре.
Читать дальше →
Total votes 46: ↑45 and ↓1+53
Comments14

Теория графов. Часть третья (Представление графа с помощью матриц смежности, инцидентности и списков смежности)

Reading time4 min
Views84K

Пытаюсь объяснить, как представлять матрицы смежности, инцидентности и списки смежности (инцидентности). И немного говорю о взвешенном графе.

Залетай
Total votes 6: ↑5 and ↓1+6
Comments19

Поговорим о шейдерах, их проектировании и Unity

Reading time7 min
Views7.5K

Всем привет. Меня зовут Дядиченко Григорий, я CTO Foxsys, а ещё я люблю рендер. Хочется поговорить сегодня о том, как проектируются шейдеры, как идёт процесс их разработки и на что обращается внимание. В первую очередь я буду рассказывать про свой опыт и техники, которые я использую при проектировке и/или постановке задач на написание шейдеров. Если вам интересна данная тема - добро пожаловать под кат!

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments9

Материалы в Unity: Акрил

Reading time5 min
Views4.4K

Всем привет! Меня зовут Григорий Дядиченко, я СТО Foxsys, и я всё ещё люблю графику. В прошлый раз я рассказывал, что неплохим упражнением является сборка различных базовых материалов для тренировки в создании интересных эффектов. Давайте сегодня проведём такое упражнение вместе и разберём, каким образом можно получить в Unity такой материал, как акрил, который будет работать в AR и на мобильных платформах. Кому интересно - добро пожаловать под кат!

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments0

Метод проб и ошибок: как мы создавали кастомный импортер в Unity3D для текстурных массивов

Reading time10 min
Views4.9K

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

Раньше на проекте  War Robots у нас был устоявшийся и вполне рабочий пайплайн по импорту текстурных массивов, на выходе которого мы получали массивы в конечном формате (ASTC, ETC2), отлично удовлетворяющие нашим требованиям для мобильных платформ. С этим все у нас было хорошо — до поры. Проблемы начались тогда, когда возникла необходимость релиза на ПК. 

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

Читать далее
Total votes 22: ↑21 and ↓1+22
Comments2

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

Reading time8 min
Views28K

Реально ли построить хорошую карьеру в ИТ без английского языка? Не так важно, реально или нет, но важно то, что с уверенным владением английским - у вас намного больше возможностей!

В статье собраны самые полезные ссылки для изучения английского языка с удовольствием!

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

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

Итак, для начала, важно усвоить главный принцип: пусть английский язык будет встроен в Вашу обычную жизнь.

Читать далее
Total votes 6: ↑5 and ↓1+5
Comments9

Особенности строк в .NET

Reading time10 min
Views106K
Строковый тип данных является одним из самых важных в любом языке программировании. Вряд ли можно написать полезную программу не задействовав этот тип данных. При этом многие разработчики не знают некоторых нюансов связанных с этим типом. Поэтому давайте рассмотрим кое-какие особенности этого типа в .NET.

Итак, начнем с представления строк в памяти


В.NET строки располагаются согласно правилу BSTR (Basic string or binary string). Данный способ представления строковых данных используется в COM (слово basic от языка программирования VisualBasic, в котором он первоначально использовался). Как известно в C/C++ для представления строк используется PWSZ, что расшифровывается как Pointer to Wide-character String, Zero-terminated. При таком расположении в памяти в конце строки находится null-терминированный символ, по которому мы можем определить конец строки. Длина строки в PWSZ ограничена лишь объемом свободной памяти.
Читать дальше →
Total votes 83: ↑78 and ↓5+73
Comments34

Оптимизация игр на Unity: проверенный в деле план

Reading time10 min
Views34K

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

Читать далее
Total votes 32: ↑31 and ↓1+31
Comments2

Шейдеры растворения и исследования мира

Reading time9 min
Views25K

Часть 1: шейдер растворения


Шейдер растворения возвращает красивый эффект, к тому же его легко создать и понять; сегодня мы сделаем его в Unity Shader Graph, а также напишем на HLSL.

Вот пример того, что мы будем создавать:



Как это работает


Чтобы создать шейдер растворения (dissolve shader), нам придётся работать со значением AlphaClipThreshold в шейдере «Shader Graph» или воспользоваться функцией HLSL под названием clip.

По сути, мы прикажем шейдеру не рендерить пиксель на основании текстуры и переданного значения. Нам нужно знать следующее: белые части растворяются быстрее.
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments3

Пулинг объектов в Unity 2021+

Reading time13 min
Views19K

Сегодня вы узнаете, как использовать новый Pooling API, представленный в 2021 году.

Начиная с Unity 2021, у вас есть доступ к широкому набору фич для работы с пулами, которые помогут вам разрабатывать высокопроизводительные проекты на Unity.

Готовы узнать о них побольше?

Узнать больше
Total votes 5: ↑4 and ↓1+3
Comments3

iOS in-app purchases, часть 3: серверная валидация покупок

Reading time13 min
Views9.6K

Серверная валидация (server-side receipt validation) — это способ проверить подлинность покупки. В отличие от проверки покупки на устройстве, серверная валидация происходит, внимание, на сервере. Валидация означает, что устройство или сервер обращаются к серверам Apple и спрашивают, действительно ли была покупка и валидная ли она.

Познакомьтесь с остальными статьями по ссылке:
1. iOS in-app purchases часть 1: конфигурация и добавление в проект.

2. iOS in-app purchases часть 2: инициализация и обработка покупок.

3. iOS in-app purchases часть 3: серверная валидация покупок. - Вы тут.

4. iOS in-app purchases часть 4: локальное тестирование покупок в XCode.

5. iOS in-app purchases часть 5: обработка ошибок SKErrors.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments0

Как писать на C# аккуратно: память и производительность

Reading time11 min
Views26K

К старту курса о разработке на C# делимся переводом статьи о типичных ошибках программирования на C# от Кристофа Насарре — технического рецензента книг Microsoft Press в целом и, конечно, книги CLR via C# в частности. Кроме того, Кристоф Насарре — один из авторов книги Windows via C++.

Читать далее
Total votes 17: ↑14 and ↓3+12
Comments6

Музыка для игр: где брать треки инди-разработчикам

Reading time3 min
Views15K

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

Сегодня мы расскажем о трех ресурсах, где можно найти royalty free треки для своих игровых экспериментов — IndieGameMusic, Unminus Music и cchound.

Читать далее
Total votes 6: ↑5 and ↓1+7
Comments3

Как за день потерять 30% онлайна и за два месяца сделать батлрояль

Reading time18 min
Views27K

Однажды в своем PvP-шутере мы за один день потеряли 30% от 60 тысяч одновременного онлайна. Это был 2018-й, в тот день на iOS вышел Fortnite. И хотя хайп был уже около года, а PUBG регулярно бил рекорды, без королевской битвы нам жилось вполне спокойно. Но тут стало очевидно, что батлрояль нельзя игнорировать, игрокам он нравится и нужно разрабатывать свой.

За два месяца мы проделали много интересной и сложной работы. Например, сделали свой редактор террейна, чтобы отрисовывать ландшафт не в 500 тысяч треугольников, как это делал Unity Terrain, а всего в 30 тысяч. Или написали мешбейкер, сократив количество запросов на отрисовку с 800 до 100, а освещение научились запекать за 5 минут вместо 30 часов. 

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

Читать далее
Total votes 66: ↑66 and ↓0+66
Comments20

Как обновить все сцены в Unity за один клик? Автоматизируем рутину

Reading time20 min
Views6.6K

Надоело тратить часы за обновлением уровней в Unity? Давайте автоматизируем это!

В этой статье мы напишем простой и понятный инструмент, благодаря которому вы сможете делать всё, что вам угодно, за считанные клики: сериализовать поля, менять иерархию на сценах, настраивать Fuse/IClone/DAZ и других персонажей, добавлять новые префабы, менять интерфейс и многое другое!

Погнали!
Total votes 3: ↑2 and ↓1+1
Comments13

Улучшаем ваш Unity проект. Гайд по ECS для MonoBehavior разработчиков

Reading time9 min
Views32K

Привет, Хабр!

На обложке демо-игра Megacity. Она содержит 4,5 млн элементов Mesh Renderer, 5000 динамических транспортных средств, 200 000 уникальных строительных объектов и 100 000 уникальных аудиоисточников. Но самое удивительное, что вся эта мощь запустилась на Iphone X при 60 кадрах в секунду . Как все это возможно?

Пару лет назад компания Unity представила свой стек  DOTS, на котором и построен проект Megacity. Это некий список технологий, которые в совокупности позволяют колдовать и ускорять ваш проект в десятки раз. В корне всей магии лежат 2 простых заклинания:

- Если правильно управлять данными, процессору будет легче их обрабатывать, а если их легче будет обрабатывать, то игрокам будет легче жить.

- Количество ядер процессора растет, но код среднестатистического программиста не использует все ядра процессора. А значит игрокам все же живется туго. Фреймрейт ведет себя как Джокер - непредсказуемо.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments4

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity