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

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

По вопросам сотрудничества писать: @it_bizdev
Реклама в канале: https://vk.cc/cNhGLE
Download Telegram
Сверху рендер из редактора, снизу из билда. На самом деле ощущение, что нужно таргет фреймрейт выставить и в настройках поковыряться, так как артефакты буферизации будто бы из-за того, что слишком много кадров
А ещё в продолжение утренней темы есть крутая статья обозревающая большинство стриминг протоколов :)

https://www.wowza.com/blog/streaming-protocols
👍1
Обожаю такие ролики. Очень вдохновляет на тему того, сколько ещё учить и учить для грамотной работы с графикой :) Сделать в одного такое за 24 дня — это магия :)

https://youtu.be/9n4P4ZjoiLs
🔥4👍2
Интерьерный маппинг — очень крутая техника, чтобы делать окна в играх :) И не только в играх, так как не делая всю геометрию можно сильно сэкономить на времени рендера :)

https://youtu.be/dUjNoIxQXAA
🔥3😱2
Крутой ролик разбирающий многие артефакты и аспекты подготовки графики, полезный не только в VR проектах. Но самый часто встречающийся косяк в тех же VR проектах, который прям бесит. Specular Aliasing :)

Хотя я бы к ролику относился, как к описанию проблем, так как часть решений данных в видео трудно назвать оптимальными и можно решать элегантнее на уровне шейдеров. Хотя dynamic cubemap soft shadows — очень крутая техника, которую я бы рекомендовал в общем взять на вооружение и для 3д мобильных проектов)

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

https://youtu.be/xqgt9W4Zrjg
🔥3
Как работает рендер?

Рендер достаточно забавная тема, особенно рендер в игровых движках. На ютубе почему-то очень часто, когда идёт рассказ про графику люди опускают такие вещи, как вертексный, геометрический и тесселяционный шейдер, говоря только про фрагментную часть шейдера. Хотя в целом тема в разы интереснее и комплекснее. И просто это довольно странно, когда в видео объясняется такое и оно называется "как работает рендер" — не говорить про все части рендера, а только про фрагментную и растеризацию. Собственно я нашёл статью, которая довольно просто, с неплохими рисунками описывает то, как работает рендер :) Не все нюансы и аспекты, но основную базу, которая важна для понимания работы шейдеров. Чтобы узнать нюансы есть книжка, которую я уже рекомендовал :)

https://www.haroldserrano.com/blog/how-to-develop-a-rendering-engine-an-overview

Пост с книжкой: https://news.1rj.ru/str/dyadichenkoga/117
👍9
Повторный заказ

UX — это очень важно. Многие технари страдают страшной болезнью. Я ей тоже когда-то страдал. Решать какую-то проблему какой-нить сложной технологией, а не простым решением или компромиссом :) И сейчас я стараюсь замечать в окружающих услугах мелкие недоработки, которые явно должны влиять на продажи)

Так вот, недавно я заказал визитки, 100 штук) И сходив на одно мероприятие я их все раздал. Завтра я буду в Питере на одном мероприятии, и снова хотел заказать визитки на всякий случай :) И удивительно, но нельзя сделать повторный заказ (я бы это письмом вообще кнопкой отправлял, но хотя бы в личном кабинете на сайте) И это не какая-то неизвестная типография, а крупная франшиза. Причём мне заново нужно загружать макет (то есть заказ я смогу сделать только с компа) Казалось бы очевидно, что визитки такая штука, которая кончается и её нужно пополнять :) Интересно, много ли денег они теряют на этой мелочи :)
Обожаю работу с графикой за периодически прикольно получающиеся картинки :) Компьют шейдер просто разбросом 10к точек по кубу случайно :)
Можно возвращаться в Москву :)
👍7
New Input System

Всем хороших выходных в первую очередь. А во-вторых, поговорим про новый Input System (ну как новый, довольно старый). Который Unity меня заставило по сути попробовать насильно XD

Как человек старой закалки с миллиардом своих решений для юнити бородатых версий, мне часто бывает просто лень переходить на какие-то новые системы. Это как с дизайном "зачем вы передвинули кнопку, раньше было лучше" (кряхтит) Но так как я работаю с VR и с Unity 2021 мне просто не оставили выбора, так как включая OpenXR сдк оно просит (довольно настойчиво) "Включи новую инпут систему"

Первое время всё было непонятно и неудобно, так как я полез в код. И пытался там создавать XR устройства, обработчики клавиатуры и т.п. (короче по стариночке всё) Пожрав немного кактус, я всё же пошёл искать тутор. Посмотрел https://www.youtube.com/watch?v=Yjee_e4fICc и тут я как всё понял :) Супер удобная система) В целом управление под всё что хочешь делается супер тривиально, и через гуй) Кайф. Особенно для того же VR, так как мне удобно иметь управление и на клаве для перемещения, и на стиках, смотря что я тестирую :)

Единственное из удобных пакетов Unity на который я пока вряд ли пересяду это Addresables, так как на Webgl я с ними очень много всякого интересного повстречал и мой менеджер ресурсов просто удобнее в ряде аспектов) Но инпут система первое время непонятно и очень непривычно, но потом становится супер удобно, когда вкурил концепт. Особенно если проект под несколько устройств и схем управления :)
👍8
Кастомизация профайлинга

Профайлинг — это самая важная часть оптимизации. Перед тем, как что-то исправлять лучше сначала получить проблему и найти в чём она заключается. И инструменты профайлинга в Unity во многом классные. Frame Debugger, да и просто профайлер дают очень много подсказок и информации. И тут недавно у Unity вышла статья про кастомизацию профайлера всякими кастомными счётчиками https://blog.unity.com/technology/customizing-performance-metrics-in-the-unity-profiler

И я даже сталкивался с забавным примером, где это супер полезно. Один из классов задач, которыми я занимаюсь — это визуализации огромных массивов данных. Графы на сотни тысяч вершин, сложные санлейн диаграммы и т.п. И основной прикол и проблема профайлинга этого дела — многопоточность и огромное количество данных. Когда в памяти лежит 100к вершин, то дип профайл особенно в многопоточном случае начинает сходить с ума. Поэтому я писал себе кастомные счётчики, которые выгружались в "отчёты" для понимания, что где надо подрезать) А теперь в Unity, есть такая удобная штука :) Надо будет поковырять)
👍5
Интересный репозиторий про VFX

Как можно заметить я обожаю VFX и компьютерную графику. Особенно интересной темой являются компьют шейдеры. Так как я всё же в первую очередь не игровик, а занимаюсь визуализациями данных для компаний, выставочными решениями и чем-то подобным (для игр я под заказ иногда делаю какой-нить VFX, но это скорее исключение) Поэтому мне больше интересен условный VFX в вакууме. Когда нужно сделать один шикарный эффект без размышлений об общей производительности) Частицы реагирующие на движение рук на киннекте или типа того, когда гарантировано можно рассчитывать на какую-нить 3060 и выше. И собственно поэтому очень часто работа идёт с платформами поддерживающими эти самые compute шейдеры)

И гуляя по просторам интернетов я нашёл клёвый репозиторий по этой теме со всякими примерами https://github.com/Kodrin/VFX-Essentials от парня из Unity Montreal, где много прикольных примеров :) Ну и в целом у него много прикольных репозиториев, которые можно поковырять, а это всегда дело полезное :)
4
Несколько инструментов которые пригодятся для VFX

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

Metamesh

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

Metatex

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

Desmos

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

Вот такой коротенький дайджест, может кому тоже пригодится :)
👍3
Немного кул стори

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

В университете у меня было очень много довольно странных идей, но я хорошо помню одну из них, которую мне немного жаль, что я не сделал (в основном так как я тогда ничё не понимал в бизнесе и прочем) :) То ли на третьем, то ли на четвёртом курсе я подумал, что прикольно было бы сделать приложение на тренировку дикции. Я тогда что-то увлёкся ораторским искусством и всей этой тематикой. И идея была относительно проста. Многие уже себе представили ML, распознавание голоса, сравнение и т.п. Спокойно — в те времена оно только начиналось, и максимум там был Speech To Text гугла, который я сразу отбросил, так как он слишком много "исправлял". А так как я тогда ещё не шарил за компьютерную лингвистику, что такое фонемы, как в целом разбирается и распознаётся голос — я сразу решил, что этот орешек не по мне) Тем более, что про стартапы я тогда вообще не знал, да и если бы и знал, ну это прям совсем не моя тема) Я не люблю отчитываться перед инвесторами, и если и брал когда-либо инвест или типа того, то скорее по принципам займов. Потому что я по своей натуре скептик и никогда не даю пустых обещаний "космических кораблей")

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

К чему это я? Полезно что-то делать, особенно являясь студентом. У профессионала уже немного другое мышление и альтернативы, а вот в студ. годы, я тогда ещё не знал, что попаду в геймдев, но всё могло сложиться довольно интересно. И мне до сих пор интересно, чтобы изменилось доделай я тогда ту идею)
👍3
Почему важно делиться опытом

Я стараюсь часто рассказывать о том, что нахожу, что придумывал или открывал (в пределах того, что мне позволяют контракты) Но зачем вообще этим заниматься? Писать публичные репозитории и бесплатные инструменты. Ведь скажем этот репозиторий можно было бы легко превратить в платный пакет на ассет сторе. Или тот же акрил, там нет рокетсаенса, но много кто не умеет в такие техники. Некоторые на ассет сторе вообще продают то, что пишется в 5 строк кода. Часто это встречается в кроссплатформенных плагинах, так как мало кто знает нюансы всех платформ, и условно какая-нить функция типа "открой мне настройки", особенно когда юнити разрабы в среднем были слабее, могли продаваться за пару баксов)

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

Так зачем же делиться? И тут стоит разделить на личные цели и общие. Начнём пожалуй с общих)

Программисты — это братство

Ну либо мафия, кому как больше нравится. Звучит немного высокопарно, но честно говоря, когда я пришёл в программирование и сравнивал его с теми же юристами и другими профессиями, замечаешь одну особенность. Все с удовольствием абсолютно бесплатно делятся информацией и знаниями, и это помогает в целом индустрии расти. Причин у этого множество, но я не встречал аналогичной сплочённости комьюнити в других профессиях. Огромные чаты с помощью (иногда с унижением, но тем не менее, кто говорил что будет совсем легко) Но один программист другому программисту очень часто в деталях и спокойно расскажет, что и как делается (особенно если не скован какими-нибудь контрактами) Хотя информация часто несущая вполне конкретную коммерческую ценность. И этим мне нравится разработка :)

Сложные знания базируются на множестве простых знаний

Можно это представить, как некоторые кирпичики. Почти любое сложное решение или знание, это комбинация множество простых. Но правильнее сказать даже не "простых", а известных. Если у вас есть готовая реализация по отрисовке того же облака точек, вы можете смешать это с эквалайзером и получить красивую визуализацию с динамическим облаком точек зависящим от музыки. И потратить на это не кучу времени реализуя каждую часть задачи, а взяв библиотеку по спектральному анализу звука и библиотеку по отрисовке поинтклауда, и правильно их смешав. И поэтому важно делиться знаниями, чтобы другие люди могли превращать то, что вы сделали во что-то новое)

Это не исчерпывающий список конечно, но тем не менее на мой взгляд, это самое важное) Но поговорим про личные

Карьера

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

Я хотел написать что-то ещё, типа "личного бренда" или другой фигни, хотя на самом деле это всё про карьеру) Ещё конечно "самореализация", и то что иногда (у меня такое даже было) можно продать кастомизацию своих же решений, если бизнес хочет какую-то финтифлюшку :)

Меня просто как-то всегда вдохновляли общие причины. И на самом деле радует, что в сравнении с тем же 2017 годом, уже видно что Unity комьюнити на самом деле сильно выросло и появилось много крутых ребят, что в целом растит общий уровень разработчиков) В целом средний Unity программист — это уже человек знающий очень много, что значит будем делать больше всяких крутых и прикольных штук :)
9🔥1
MediaPipe

Ах да, моя одна из основных экспертиз — это трекинг. Я всё же им уже 6 лет занимаюсь) И тут я нашёл неплохой курс, хоть и на питоне, по медиапайпу) Конечно удобнее было бы разбить его на множество уроков, а не на один на 6 часов. Но тем не менее он неплохо разбирает то, как работать с медиа пайпом https://www.youtube.com/watch?v=01sAkU_NvOY

А что есть медиапайп? По сути — это крутая технология от гугла с готовыми моделями для различных видов трекинга Hand, Face Landmark, Facemesh, Holistic и так далее. И у трекинга + Unity прикол такой же, как и у шейдеров. Большая часть материалов по трекингу, по компьютерному зрению написаны на питоне. И в целом всяких технологий больше всего именно на питоне) И тут есть три пути :)

1. Уметь читать код и портировать или как правильно юзать порты библиотек

Особенно часто я это делаю с OpenCV. Конечно в отличии от питона у шарпа нормальная многопоточность, и много других фишек. Но если брать этот порт OpenCV для Unity и искать примеры на юнити, и на шарпе — забейте. Родные примеры там отвратительные, а инфы в контексте юнити очень мало. Но так как это именно прямой порт, то очень легко использовать подходы, которые люди делали с помощью Python или Java. Или даже C++. По сути самый кроссплатформенный путь, который подходит много кому. И с медиапайпом та же история, есть плагины порты, но понастоящему получится ими пользоваться, читая решения на Python и портируя в Unity)

2. Писать серверы

Привет выставочники — http ваш лучший друг. Очень часто на выставках можно договориться поставить сервачок, что не подходит скажем для всяких приложений в стор. И там развернуть Python Flask + нужную технологию. И всё гонять посредством рест апи. Ну либо сокетами, что ещё меньшие задержки даёт. Но в рамках локальной сети я это проверял очень много раз, и это вполне валидное решение) На хабре в комментах был спор на тему моего Web Gamepad, но я то в выставках такое часто делал и знаю на 100%, что это работает) Всё зависит от требований к системе :) Просто так как десктоп позволяет в разы больше планшетов и телефонов, то благодаря подобным схемам можно делать много очень крутого в рамках выставок. Да либо же даже корпоративных решений. Для одной крупной корпорации мы делали анализатор документов, и часть решения с распознаванием текстов решал Google Tesseract развёрнутый на шарпе в их облаке. Запросом отправлялась картинка, ответом текст документа)

3. Интегрировать другие языки в Unity

Вот тут уже надо понимать, что такое CLR, что такое C++/CLI как между собой линкуются разные языки и т.п. Нельзя не упомянуть, но это тот подход, которым надо пользоваться редко, с чётким пониманием, что и зачем вы делаете. CLR позволяет нам очень много, но это будет работать не везде. Так же как и всякие другие механизмы операционных систем. Что ваш код в некотором смысле может быть мультиязычным безо всяких интерпретаторов. А просто в правильно скомпилированных библиотеках. Но это сложно, имеет в себе кучу проблем и трудно поддерживаемо. Так делается с очень чётким ответом на вопрос — зачем)

В общем курс интересный, трекинг — это супер интересно, кто интересуется темой, пусть он и на питоне, я выше написал, как можно скрестить и поиграться) С пайпом при набитой руке можно делать довольно много прикольных штук. Я всё хочу как-нить через паттерн матчинг сделать распознавалку чего-то вроде гифки ниже :)
👍3