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

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

По вопросам сотрудничества писать: @it_bizdev
Реклама в канале: https://vk.cc/cNhGLE
Download Telegram
Как пример последней техники. Я периодически так делаю в шейдерах. Допустим у меня есть 3 анимации, я просто разношу их фазы математикой (пример функции одного канала на картинке), делаю через градиенты в фотошопе разное движение и паттерны. Просто беру цвета разных каналов r, g и b и рисую градиенты по маске. Получается по такой картинке правый нижний вариант:
Компьют шейдеры

Compute Shader — это очень мощный инструмент. Они позволяют делать cущюю магию. В основном с симуляциями и отображением миллионов объектов

Сейчас конечно чаще, если задачу решает VFX граф, то используют VFX граф, который основан на компьют шейдерах (поэтому он работает не на всех платформах) Но в целом, тут как всегда. Зная низкий уровень, можно делать в разы больше. Хотя и медленнее писать :) В целом вот прикольное видео с рассказом общим про комьют шейдеры https://www.youtube.com/watch?v=BrZ4pWwkpto

Допустим одна из типовых задач решаемая компьют шейдерами — это отрисовка форматов типа ply (облако точек) Реализация пасс трейсинга. Которое разбирается в этой статье http://three-eyed-games.com/2018/05/03/gpu-ray-tracing-in-unity-part-1/ и многое другое :) Причём, так как отрисовка миллионов точек на хорошей гпу стоит не дорого, то получается делать очень красивые динамические эффекты с огромным числом точек :) В общем очень полезная штука)
🔥5👍2
Unity Render Streaming

Что-то на неделе я задался идеей сделать свой AR стриминг. Идея его довольно проста в своей сути:

1) Отправляем с устройства позицию камеры в сцене (+ записываем в память кадр видео с таймштампом, и позицию отправляем с ним же)
2) Рендерим Unity сцену исходя из полученной позиции камеры
3) Возвращаем фрейм из Unity с альфа каналом + таймштамп
4) Склеиваем 2 кадра (из юнити и видео)
5) Отправляем результат в очередь на вывод

Дальше регулируя задержку вывода в зависимости от сети и широты канала можно получить неплохой эффект. Но так как, я люблю стандарты, то писать свой протокол стриминга мне не особо хочется. Поэтому я решил поискать "а что есть готового?" И наткнулся на очень интересный пакет. Из коробки конечно он не совсем нужный функционал покрывает, но делает скажем так 80% работы. Это https://docs.unity3d.com/Packages/com.unity.renderstreaming@3.1/manual/

Сделано там всё на основе WebRTC, у него есть ряд довольно странных багов (скину скрины ниже) Но в целом для прототипа идеи попрёт. И главное вывод можно делать хоть в браузер. Хоть куда хочется

Почему важно, что он основан на WebRTC? Протоколов стриминга на самом деле много, но более менее стандартными являются RSTP, HLS, LL HLS, RTMP, RTMP Tuned, DASH, SRT и так далее. И все они в отличии от WebRTC имеют в среднем задержку более секунды. А мы же хотим "почти реалтайм")

У WebRTC же с другой стороны так же есть проблема. Он поддерживает 24 битные цвета без альфа канала. Но в целом, если мы на цветовую информацию отдадим по 6 бит на цвет, то альфу как-нить запихнём. Стандартные плееры будут конечно выводить чушь, но вот кастомный — скушает и не подавится. Что можно сделать шейдером, даже не меняя сам энкодинг-декодинг. Просто интерпретировать по-другому информацию о цвете на гпу при выводе

В общем если дойду до чего-то вменяемого, залью реализацию этого дела на гитхаб) А пакет в целом рекомендую поковырять, он любопытный :) Для моей же идеи мне кажется нужно ковырять https://docs.unity3d.com/Packages/com.unity.webrtc@2.4
👍1
Сверху рендер из редактора, снизу из билда. На самом деле ощущение, что нужно таргет фреймрейт выставить и в настройках поковыряться, так как артефакты буферизации будто бы из-за того, что слишком много кадров
А ещё в продолжение утренней темы есть крутая статья обозревающая большинство стриминг протоколов :)

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