Григорий Дядиченко
الذهاب إلى القناة على Telegram
Разработчик игр, интерактивных стендов и интерактивной рекламы. Эксперт в области интерактивов и XR. 100+ проектов за 5 лет. https://whitelabelgames.ru По вопросам сотрудничества писать: @it_bizdev
إظهار المزيد2 725
المشتركون
-224 ساعات
-297 أيام
-5730 أيام
أرشيف المشاركات
2 725
О, новые покемоны + тамагочи в AR :) https://www.playperidot.com/en
Зачем в механике тамагочи AR мне не совсем понятно, но будем посмотреть) Вдруг Niantic придумали что-то интересное :)
2 725
Сайт с экспериментами https://noxatra.ru
Чтож, пора уже где-то собрать инфу кто я и чем занимаюсь :) Так что я решил тут себе сайт завести. Тем более в честь дня рождения, пора запустить что-то новое :) Пока простенький, который в общем описывает кто я, что я и чем занимаюсь :)
Туда я буду публиковать всякие вещи, которые можно показать веб билдами. VFX, графику, упражнения и многое другое :) Плюс есть пару идей сделать несколько прикольных интерактивов на тот же ИИ
Кроме того хочется делать больше мелкого опенсорса, каких-то туториалов и продуктов. На этот год у меня много планов :)
Ну и как подарок на др поделитесь каналом со знакомыми. Больше подписчиков богам подписчиков)
2 725
Асинхронная загрузка и инстанцирование префабов
Вообще это довольно глубокая тема, так как что такое префаб? По сути это ямлевый конфиг и основной вес там занимают ассеты, на которые он ссылается. Эти ассеты можно грузить асинхронно сделав кастомные парсеры ресурсов, которые работают хоть в отдельном потоке. Я когда-то писал такой для 3д моделей, чтобы асинхронно и прогрессивно грузить модели по несколько gb. Работает правда только с Obj, но надо будет тоже оформить и выложить в опенсорс :)
Что-то там работает через Addressables, но на трёх проектах адресаблы так зарекомендовали себя, что к ним я ближайший год не подойду. Так как там очень много неочевидного поведения или же просто неудобного, на мой взгляд. Может я просто не умею их готовить :)
Но допустим у вас задача ставить 10000 юнитов в кадр (зачем-то, хотя допустим пример вокселизации более понятен и прогрузки воксельной модели) или просто много однотипных объектов, а фризить игру не хочется. Я написал довольно общий пример, как это можно делать :) https://github.com/Nox7atra/AsyncPrefabLoader Может кому-то будет полезно :) На дженериках, чин по чину :)
В целом тут стоит вспомнить паттерн Команда (https://t.me/dyadichenkoga/76) потому что принцип примерно такой же, и он показывает насколько удобно с помощью команды делать асинхронные или отложенные операции вообще на любую тему, какая вам только вздумается :)
2 725
Это было вчера и я как-то пропустил) Тени в URP и визуальное программирование конечно выглядят весьма любопытно) Надо их поковырять :)
https://www.youtube.com/watch?v=7NkpMU47-b8
2 725
Камера на гироскопе
Я потихоньку разрабатываю свой продукт (пока WIP, запуск на следующей неделе) И довольно забавное открытие, как в Unity сделать гироскопическую камеру на WebGL для этой штуки https://whitelabelgames.ru/game/ar-bow
Оставлю тут #сниппет вдруг кому пригодится
Для работы нужно 4 шага:
1. Сайт обязательно должен быть на HTTPS
2. На айос нужно запросить разрешение, причём обязательно через клик по кнопке
3. Нужно в Unity сделать Input.gyro.enabled = true;
4. Сам сниппет https://gist.github.com/Nox7atra/e9f61e7ac4f37e8cd1190ac63875cfc7
Ещё кстати забавный факт про Mi телефоны. Редми считает, что он не Android, а Linux, поэтому считается десктопом в юнити проверке Application.isMobilePlatform. Более полная проверка правильно определяющая телефоны Mi выглядит так (потом прокину себе через jslib в Unity) https://gist.github.com/Nox7atra/9706c77b94d870502c8f01870fe516a0 То есть в андроид в проверку юзерагента надо добавить
navigator.userAgent.match(/Miui/i) :)
Мало ли вдруг кому пригодится, чтобы время не тратить :)2 725
Продолжаем ковырять разные технологии WebAR — MindAR https://hiukim.github.io/mind-ar-js-doc
Фейсмаски в паре с айфреймом работают прям кул :) Работает весьма достойно и красиво) https://hiukim.github.io/mind-ar-js-doc/face-tracking-samples/minimal.html
Image Tracking — как и на всём бесплатном работает отвратительно. Автор проделал большую работу, но на мой взгляд просто перемудрил с фильтрами. Если что-то, что прям ну совсем "около летает" сделать можно, то сравнивая с самым простым AR трекингом на мобилках — фигня. Как и AR.js. У меня уже руки чешутся самому сесть и написать свой велосипед)
Но в целом всегда любопытно ковырять чьё-то опенсорс сдк :)
2 725
Меняйте иногда парадигму
В целом разноплановыми задачами полезно заниматься любым специалистам, так как из другой, но смежной сферы можно почерпнуть новые идеи и знания. Вообще я считаю, что любое сложное знание или же интересный результат, это ничто иное, как правильная комбинация простых результатов :)
Но теперь история. Я учился в МИЭМ ВШЭ и там один из преподавателей на курсе программирования решил показать ассемблер. Из идеи как раз того, что мы будем писать ассемблерные вставки. С этим он конечно не угадал, в коммерции я буду первым, кто за такие приколы людям руки отрывать будет, но это было круто с другой точки зрения. У меня просто ломался мозг после С++, и я ничего не понимал. Так как всё работает по-другому. Когда я разобрался в ассемблере, тогда конечно всё стало просто, да и он в разы проще, чем те же плюсы на самом деле, если писать на нём, а не вкуривать скомпилированную программу, ну и писать что-то небольшое)
Так же я решил в прошлом году, что для полной кроссплатформенности мне не хватает веб экспертизы, и тут я решил изучить react.js и реактивную парадигму) И это прошло примерно так же. Это интересно тем, что изучая разноплановые вещи ты начинаешь вообще мыслить в другом ключе, понимать почему скажем кто-то так любит функциональный подход, а кто-то объектно-ориентированный. И когда ты знаешь что-то одно, ты замкнут рамками своего инструмента) И иногда решаешь задачи сложнее, чем скажем просто кусок программы написать чистой функцией (а не всю), чтобы она вообще не имела состояния)
Почему это не только про программирование? Я обожаю графику и VFX, и после этого видео https://www.youtube.com/watch?v=NH1TLyiJVHU я в целом стал по-другому смотреть на заклинания, и на то, как рисуется правильное свечение чего-либо, что мне очень понравилось. А так же на то, как лучше крутить пост процессинг) И когда это понимаешь, то ты уже знаешь "куда смотреть", когда делаешь какой-то визуал или эффект :)
2 725
Астрологи объявили неделю дебаг инструментов. Число инструментов для дебага выросло на 100%
Иногда хочется просто протестировать запрос, но лезть в Postman или в Swagger лень, или писать кастомную кнопку в инспекторе :) Есть такой репозиторий https://github.com/ErnSur/Unity-Http-Debugger
Постман на минималках, но зато в Unity :)
2 725
Прикольная тулза для визуального дебага, очень прикольно нарисованы сферкасты и т.п. :) https://github.com/vertxxyz/Vertx.Debugging
2 725
Дагестан
Недавно по работе я ездил в Дагестан. Многие почему-то боятся туда ездить) Ну хотя в Москве иногда бывает понятно почему. Что я могу сказать проведя там неделю :) Там шикарно с поправкой на горы)
1. Люди
Добрые, отзывчивые, часто могут что-то подсказать :) ГАИ в целом когда мы повернули куда-то не туда, показало нам куда ехать, чтобы мы не заблудились)
2. Еда
Очень много всякого вкусного и очень недорого :)
3. Красота
Много красивых мест, в горах в целом красиво, и на море. Салтинский водопад, Гамсутль, Эргонай, ну и в целом можно просто ехать и залипать на горы :)
Но могу сказать одно. Без машины там делать нечего) Конечно машину я бы брал в аренду прям там, это в целом недорого :) А так, классно, красиво :) Хотя из-за гор, как я понял от местных, летом днём там будет супер жарко :) Ну и несколько фотографий :)
2 725
А то вдруг у вас нет устройства на последней версии IOS и вы и не в курсе, что игра у пользователей лежит :)
2 725
Важное сообщение, народ работающий с вебом на мобилках в Unity) Если кто работает с unity и вебgl, то на 15.4 айос сборки из последней юньки крашат из-за бага в VM IOS Safari :)
Но без паники, уже есть воркэраунд :)
Найти в файлах редактора:
il2cpp/libil2cpp/metadata/GenericMetadata.cpp
Найти там строчку с:
const Il2CppType* GenericMetadata::InflateIfNeeded
Добавить:
#pragma clang optimize off
Перед вызовом функции чтобы отключить оптимизации компилятора
Добавить
#pragma clang optimize on
В конце этой функции, чтобы включить их обратно
Я проверил — работает. Источник: https://forum.unity.com/threads/fatal-error-with-webgl-running-on-15-4.1244374/
2 725
Будни AR разработчика. В целом по работе постоянно надо тестировать кучу технологий, чтобы всегда иметь ответ на вопрос, а что сейчас есть прикольного. Так как я только начал серьёзно погружаться в WebAR то поэтому только наткнулся на такую замечательную штуку, как https://aframe.io/examples/
2 725
Заодно будет сниппет для того, как менять ключи реестра через бат файлы. Тем кто всякими выставками занимается часто бывает полезно, что-нить настроить в реестре)
2 725
В 11 винде довольно неудобная правая кнопка мыши. Если вдруг кому пригодится, я написал пару мелких скриптов, которые меняют ключи в реестре и возвращают старую правую кнопку мыши. Вдруг кому пригодится) ОСТОРОЖНО: Оно перезагрузит ваш комп. Так что лучше предварительно всё сохранить :) https://drive.google.com/drive/folders/1zFFULcrl57e2y9IkaZ5zGwTTUMPUs7ro?fbclid=IwAR3p3UHpXT6HtZrz8XFtCMlhcLyx2wD4D9zulDT4lA4Wv-hh4YXO8Fm89JA
2 725
Прикольный роадмап по обучению в рендер программисты https://github.com/Hitomilras/unity-graphics-programmer-roadmap Много полезных ссылок и материалов :)
2 725
Если вы не знаете, кто такой Keijiro Takahashi, то советую узнать и подписаться на его гитхаб. Он часто выкладывает что-то крутое и за ним очень интересно следить. Вот и свежий репозиторий с процедурными градиентами)
https://github.com/keijiro/CosineGradient
2 725
Паттерн Прокси https://metanit.com/sharp/patterns/4.5.php
Ну для полноты картины нужно разобрать все паттерны, так что возьмём и прокси. Прокси — тот паттерн, который довольно редко используется в игровой разработке. И тут можно поговорить о том, чем геймдев и юнити отличается от энтерпрайса. Геймдев похож на энтерпрайс в очень крупных проектах, у которых есть бекенд) Потому что на клиентском коде сложно представить задачу, которую разумно решать проксёй) Потому что прокся по своей сути требует определённого подхода к проектированию
Сама прокся по похожа на декоратор, по выполняют они совершенно разные цели. Прокси бывают нескольких видов, но в целом в большинстве случаев используются для расширения функционала (или доступа) к реальному объекту. Главное отличие между прокси и декоратором, что декоратор нужен для динамического расширения функциональности.
В обычном случае прокся может расширять функциональность объекта, добавив скажем кеширование:
Например представим, что вы в проекте используете sqlite и храните там игровые предметы. Обращение в БД это всегда дорого и за это должен отвечать класс SQLiteConnector или типа того, а выше мы можем сделать SQLProxy, которая уже когда-либо запрошенные из бд объекты будет сохранять в словарь Dictionary<long, GameItemBase> где у нас ключов выступает id предмета, а значением базовый предмет. И когда запросы летят в проксю, мы сначала спросим наш словарь, чтобы не лезть в базу
Но ещё есть 4 специальных случая, о которых также стоит сказать:
Удалённый прокси (remote proxy) — везде описан очень плохо. По сути как раз то самое кеширование, так как какую проблему он решает. У нас есть сервер, запрашивать у него данные долго и дорого, поэтому лучше это делать один раз на инициализации объекта. По сути прокси позволяет архитектурно не создавать объекты и делать чеки, а обращаться к прокси объекту, а он у же сам дальше будет не на сервер ходить, а брать копию объекта в памяти
Виртуальный прокси (virtual proxies) — описания много где тоже довольно странные. Частый кейс использования это ленивая инициализация реального объекта. Представим немного виртуальный пример. Фильтр мата для игрового чата. Есть высокочастотные слова, которые мы просто хардкодим. Кешировать все матные корни и слова ни к чему и дорого, поэтому если у нас в список "быстрого набора" скажем слово "бля", то он не идёт в базу, а берёт сразу из памяти. В остальных случаях делает чек по БД. По сути "умной проксёй" называется то, что делает какую-то полезную работу и достаточно сложную. Многопоточность и подсчёт ссылок на метаните — это тоже частный кейс
Защищающий прокси (protection proxies) — самый простой пример, используется для разграничения доступа пользователей. В клиентской разработке применимо, в играх меньше, так как там редко бывают "роли" в смысле доступа к функциям. Но как пример — премиум аккаунты и их чеки. В базовом случае прокси объект ссылается на один реальный объект, но в целом нет никакой проблемы расширить его на пару объектов, и смотря в прокси роль пользователя вызывать уже внутри прокси либо создание "премиум" интерфейса, либо обычного. По сути позволяет в коде избавиться от кучи "if(user.role == "premium")" — довольно удобная штука, позволяющая программу в целом делать простой, если в игре есть какая-нить премиум подписка. Так как разделение зашито в проксю, а поведение в реальные объекты
Важно понимать! Это разделение не является строгим и все его трактуют по своему, так как оно условно "народное, а не формальное". Но в целом зато позволяет привести несколько интересных примеров использования прокси
Прошлые разборы паттернов:
1. Команда — https://t.me/dyadichenkoga/76
2. Декоратор — https://t.me/dyadichenkoga/82
3. Наблюдатель — https://t.me/dyadichenkoga/105
2 725
А в целом к сегодняшней книге есть замечательный "список литературы на лето" чтобы знать прям очень много про графику) Не скажу что там маст хэв знания для Unity разработчиков, но в целом на досуге фоном можно почитывать :) Так как когда понимаешь на какие технологии и математику опираешься, проще оценивать что возможно, а что нет :) https://github.com/Gforcex/GPU-Book
2 725
Сложность программирования
На мой взгляд многие переоценивают сложность программирования. Особенно «обычного программирования». В обычном программировании нет вообще ничего сложного, там нет супер математики или чего-то ещё. Большая часть энтерпрайс работы называется «возьми библиотеку и встрой» :) Такова реальность, и я ничего не имею против) В свои-то 28 чего мне кряхтеть: «Вот раньше мы писали ассемблерные вставки, пирамидальную сортировку руками. Да вы вообще Кнута хоть нюхали, юнцы. Ты хоть квиксорт без гугла то написать сможешь?» Нет, инструменты совершенствуются и это прекрасно. Но я именно что важно отметил «в обычной разработке»
Когда же ты работаешь в инновациях, высокотехнологичных проектах и т.п. Ты в аду) И такое бывает и в играх) Я уже не знаю, сколько я прочитал подобных работ (эта кстати довольно любопытная) https://liris.cnrs.fr/Documents/Liris-2422.pdf Но вот там зубодробительная математика, нужно уметь читать научные тексты, исследования, понимать низкий уровень и т.п. Подобные задачи неплохо прокачивают, но их конечно в разработке процентов 2-3 :) Так что не стоит переживать и думать, что программировать сложно. На 98% это относительно простая дициплина и скилл :) Не элементарный конечно, но всё познаётся в сравнении :)
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
