Григорий Дядиченко – Telegram
Григорий Дядиченко
2.83K subscribers
395 photos
160 videos
7 files
1.19K links
Разработчик игр, интерактивных стендов и интерактивной рекламы. Эксперт в области интерактивов и XR.

100+ проектов за 5 лет.

По вопросам сотрудничества писать: @it_bizdev
Реклама в канале: https://vk.cc/cNhGLE
Download Telegram
Код Хаффмана
https://www.youtube.com/watch?v=B3y0RsVCyrw

Классное виде про код Хаффмана. Очень полезно знать идеи кодирования и декодирования информации. Логики алгоритмов сжатия и т.п. Данные знания позволяют делать очень много прикольных оптимизаций. У меня например как-то стояла задача сжать 3д модели с весьма специфичной структурой вертексов. И это получилось сделать разработав свой простенький формат в который перегонялись вертексы и другие параметры модели, и так же оптимизировав данные по идеям кода Хаффмана.

#теория
👍6🆒1
Работа на дядю

Последние годы я вижу какой-то тренд, что «не модно» работать на дядю :) Тут хочется вставить свои пять копеек со стороны человека не работающего «на дядю» уже 5 лет.

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

Когда я только начинал бизнес я зарабатывал больше, чем последующие три года с бизнесом. Сейчас мне предлагают суммы в два раза больше, чем я в среднем зарабатываю в месяц. Так что свобода и деньги весьма условные.

Почему же я ещё нигде не работаю? Бизнес такая штука и предприниматель такой человек, что он просто не может заниматься чем-то другим. Ему скучно, там нет того драйва. Я когда последний раз был в крупной компании уволился до конца испытательного срока, так как мне было тупо скучно.

Спустя 5 лет в бизнесе уже тяжело пойти на работу и не умереть от скуки. А то что это свобода и богатство, я считаю красивой сказкой. Это просто новый вид работы. И вместо одного дяди, ты отвечаешь перед кучей дядь :)

#мысли
👍27👌3
KeenTools AR Geo Tracker
https://80.lv/articles/keentools-geotracker-for-after-effects-officially-released/

Вышла прикольная тулза для афтера, которая позволяет притречиваться к объектам. По рекламному ролику работает прям хорошо :)

#новости
2👍1
Appmetrica и ARCore

Программирование было бы простой работой, если бы всё работало из коробки. Забавное наблюдение. Это конечно не коснётся вас если вы юзаете ARCore XR Plugin 5.0 в Unity (так как это баг аркора до 1.24 версии, которая в 4+ ARCore Unity). Гугл и его депенденси.

Если же вы подключаете что-то, что скажем использует com.android.installreferrer.installreferrer-2.2-runtime.jar то вместе с ARCore у вас вызовет ошибку.

Duplicate class a.a.a found in modules arcore_client-runtime.jar (:arcore_client:) and com.android.installreferrer.installreferrer-2.2-runtime.jar (:com.android.installreferrer.installreferrer-2.2:)

В версиях старше ARCore 1.24 оно пофикшено (ох уж эти одинаковые классы в двух либах от гугла). Но для версии 1.24 (которая ща в Unity основная) — нет. И есть два пути решения проблемы, которые оба очень неочевидные для Unity разработчика.

Первое переезд на ARFoundation 5.0.3. Но чтобы это стало квестом Unity почему-то не дало права выбирать версию в менеджере пакетов. А нужно лезть в манифест и править руками. Инструкция есть тут. И всё соберётся, так как 5.0.3 опирается на ARCore 1.31 и соответственно там уже нет конфликта с installreferrer.

Второе же. Удалить installreferrer. Но не файл, он будет постоянно появляться. А в градле. Для этого вы создаёте кастомный темплейт градла и добавляете в него запись — как на скриншоте. Она исключит эту либу из сборки. Это костыль-костыль. Метрику почему-то он не ломает (мне не совсем ясно почему). Но если вы никак не можете переехать на 5.0.3 — как временное решение может сработать. Мне оно не нравится, но ничего элегантнее я не нашёл.

В общем разработка это просто говорили они. Там всё легко. Поэтому я не люблю делать что-то на сторы XD

#советы
👍6
Наса рассматривает возможность использования AR в костюмах космонавтов
https://80.lv/articles/nasa-is-exploring-the-idea-of-using-ar-in-spacesuits/

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

#новости
🐳2
Баланс в играх
https://habr.com/ru/post/709012/

Прикольная обзорная статейка про баланс в играх. Это конечно задача геймдизайнеров балансом заниматься, но в общих чертах всё равно полезно понимать. А уж в инди там ты и сам себе программист, и сам себе геймдизайнер. Помню когда ещё работал геймдизом читал Fundamentials of Gamedesign. Классная книжка.

#новости
👍3
Appmetrica и IOS

Настоящий кроссплатформенный разработчик — это не тот, кто знает кроссплатформенный фреймворк. А тот кто ещё понимает нюансы самих платформ. Итак, андроид мы победили (обновив ARFoundation до 5.0.3) Теперь поговорим про айос.

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

'YandexMobileMetrica/YandexMobileMetrica.h' file not found

При этом не будет файла xcworkspace, только xcproject. Дело в том, что обычно такие плагины и зависимости подключаются через cocoapods. Чинится это довольно просто. На макбуке.

1. Установить cocoapods
2. Установить гит (если он не стоит для терминала)
3. Сделать cd в папку с собранным xcode проектом
4. Сделать команду pod install в ней
5. Зайти в появишийся xcworkspace файл
6. (Возможно) потребуется ещё а проекте Pods-Unity-Iphone поставить Enable Bitcode в Build Options

И вуаля. Всё соберётся. Под макосью такая проблема тоже может возникнуть, если кокоаподс не стоит или стоит как-то криво. Чисто по той причине, что юнити не вернёт вам ошибку, а просто не соберёт xcworkspace.

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

#советы
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Рисуем график
#задачка

Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper.

Решение: https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_2/Scripts/GraphRenderer.cs

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

Плюс добавлю опрос. Интересен ли такой формат задач или слишком сложно?
👍13
Григорий Дядиченко
Рисуем график #задачка Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper. Решение: https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task…
Комментарий к решению задачке "Рисуем график"

Дальше под спойлером нюансы решения. Просто разбора такого примера недостаточно для "статьи на хабр". А знание довольно полезное и может пригодиться.

В Unity есть замечательная возможность через меш генерацию делать свои кастомные UI элементы. По сути для этого нужно унаследовать класс от MaskableGraphic. Переопределить метод OnPopulateMesh(VertexHelper vh) и сделать свою реализацию этого метода. Но тут есть несколько нюансов, которые стоит знать, чтобы "чудо произошло".

Чтобы график в целом нарисовался, помимо самого скрипта на объекте должен находится CanvasRenderer. Иначе ничего не будет рендерится и не будет вызываться метод OnPopulateMesh

Помимо этого можно затереть базовую реализацию этого метода, так как она делает лишние вещи.

Дальше нужно немного понимать в меш генерацию. И сделать генератор нужного нам меша с VertexHelper.

Дальше нужно разобраться с системой координат. Там много способов сделать самые разные варианты.

Моё решение выше, оно как бы общее. Можно было бы элегантно сгенерить меш под график y = x ^ 2, но по сути данное решение позволяет легко нарисовать любой график.

Важно понимать, что суть задачи не в конкретной реализации (как и всех задач в будущем, так как у всех реализация будет разная). А в сути на что это упражнение и какие нюансы нужно знать, чтобы его в целом сделать. Тут нужно в первую очередь знать про CanvasRenderer и про то, как делаются кастомные UI элементы. Причём проще всего наследоваться от MaskableGraphic, чтобы просто не прокидывать логику реализации масок и т.п.
🔥6👍2
Пишу материал по оптимизации веса билда. Думаю может получиться любопытно и надеюсь завтра я добью. Хотя я в одной только оптимизации текстур уже закопался на три пункта. Но хочется собрать некий чеклист.
🔥25👍4
Как сделать билд минимального размера в Unity?
https://habr.com/ru/post/709126/

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

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

А так ответ на вопрос конечно получился длинноват :) Напоминаю, что вопросы можно задавать тут.

#статья
🔥19👍7
Григорий Дядиченко pinned «Как сделать билд минимального размера в Unity? https://habr.com/ru/post/709126/ А вот и статья про то где и что можно поджать внутренними инструментами Unity и рядом дополнительных техник. Без узких глубоких оптимизаций конечно, так как есть ещё техники подходящие…»
Как достигнута комиксная стилистика в игре Rollerdrome
https://www.youtube.com/watch?v=G1NY0LKDqJo

Классное видео про то, как можно достичь визуала комикса в Unity. Так сказать как красиво нарисовать аутлайны на 3д моделях.

#новости
👍5
Unity Deque
https://github.com/Nox7atra/Unity-Deque

Для разминки написал коллекцию Deque (Double-ended Queue) и вынес в пакет. Она бывает полезной для операций где нужно быстро добавление удаление из начала или из конца и важен порядок. В отличии от классической реализации таких очередей она опирается не на массив, а на LinkedList, который позволяет делать по сути всё тоже самое. Только Deque с чуть более привычной сигнатурой класса для очереди и ограничениями доступа. Dequeue, Peek и так далее. Ну в общем требование добавление и удаление из начала и из конца в О(1) соблюдено. Как и отсутствие доступа к ненужным операциям (доступ к вершинам связанного списка). Так как коллекция возвращает везде только значения.

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

#репозитории
👍12
Media is too big
VIEW IN TELEGRAM
"Бесконечный" скролл
#задачка

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

Решение:
https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_3/Scripts/FastDialogScreen.cs
https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_3/Scripts/DialogBubble.cs

В репозитории я убрал мок генерацию 721 000 строк, так как не у всех сцена с таким числом запустится. Это просто дорого по оперативной памяти. Это задачка возможно даже посложнее, чем прошлая.
👍7
Григорий Дядиченко
"Бесконечный" скролл #задачка Сделать скролл который будет вмещать в себя 500 000 элементов случайного размера по высоте и не будет тормозить. Например игровой чат или система диалога, где размер текста непредсказуем. Решение: https://github.com/Nox7atra/Unity…
Обоснование задачки "Бесконечный" скролл

Скриншот так сказать для пруфов. На видео листается 720 896 элементов. Просто тормозит оно не из-за скролла, а из-за отрисовки инспектора. Если цеплять это окно. Так вот, а теперь по деталям решения задачи.

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

Окна адаптирующиеся под текст делаются очень просто. Для этого надо знать про существование метода. GetPreferredValues в TextMeshPro. И уметь работать с размерами RectTransform.

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

А вот часть с бесконечным скроллом уже сложнее. Так как нужно понимать, как работать с пулом, со скролл вью и с тем, как делаются в целом нетормозящие скроллы.

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

Тут просто показано решение одним скриптом, как с помощью методов расчитать размер контента и вместо 720к+ элементов мы будем переставлять 8 элементов. И в этом весь трюк. Плюс ряд оптимизаций. Остальное можно понять разобрав код.
👍10
Интересная подборка туториалов от Unity
https://blog.unity.com/games/7-tutorials-to-help-uplevel-your-unity-skills-in-2023

Прикольный набор курсов для новичков. Даже AR охватывает. Правда фейсмаски меня сначала заинтриговали, а потом это оказывается про айос. Так что ничё особо нового :) Но всё равно неплохие обзорные курсы и бесплатные в плюс к тому.

#новости
👍31
Про JPEG
https://www.youtube.com/watch?v=0me3guauqOU

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

#интересное
👍8