COMMAND ENCODER (Barkar Ivan)
163 subscribers
168 photos
72 videos
17 files
108 links
Cool shading, nice ball moment
Download Telegram
Media is too big
VIEW IN TELEGRAM
Анимечники диковинную технику придумали, рисовать сдфку для затенения и не мучится.
🔥6👻1🆒1
Стало интересно сделать LI-SSAO для Юнити
Сделал репозиторию для изучения его устройства, в репозитории так же гудини-файл, в котором я готовил данные точек для семплирования и генератор 4х4 текстуры поворотов.
Дальше нужно побороть ореолы и добавить размытие. Но уже можно изучать-твикать.
Заметите ошибки - не держите в себе, но прежде чем указать - похвалите.
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Проблема сжатия вершин оказывается достаточно актуальной, и даже в индустрии AAA-разработки к её решению подходят самыми разными способами. Unity, в свою очередь, предлагает собственные инструменты для этой задачи – подробнее о них можно узнать в официальной документации.
К сожалению, не более чем переход на половинную точность.

На скриншоте представлен эксперимент по максимальному сжатию позиций вплоть до SNorm (xyz в относительных координатах по максимальной оси баунда, w отвечает за масштаб). В моем случае, точность не страдает до определенного размера моделей (где-то больше 50 единиц). И само искажение исключительно по масштабу (модель становится совсем немного больше)
Позиции вынесены в отдельный стрим.
Канал нормалей представлен в форме qTangent — это кватернион, выдуманный в Crytek, содержащий как нормали, так и тангент. UV-координаты, в свою очередь, просто хранятся в формате half (я не предполагаю текстур больше 1024)

Хотя сжатие UV и нормалей в целом не мешает работе в редакторе, Unity ожидает позиции во float3 для множества систем, включая физику, запекание и другие важные процессы. Из-за этого подобная компрессия не позволит полноценно работать с этими механизмами в редакторе. Поэтому наилучший вариант – выполнять сжатие на этапе сборки (build time), учитывая, что в шейдере нужна логика распаковки, конечно (конвертацию из snorm16 в half/float выполнит vertex fetch)

в комментах будут ссылки по теме, что как и зачем
Спасибо @alexmtq 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8👍5
This media is not supported in your browser
VIEW IN TELEGRAM
GDC SIGGRAPH жди меня! 😎
нормали и тангент в octahedral в SNorm8x4
а на знак тангента я помножил скейл позиции))) (слева)

вот это я умненький, класс
Please open Telegram to view this post
VIEW IN TELEGRAM
6
This media is not supported in your browser
VIEW IN TELEGRAM
#gamedev #техарт #unity

Сегодня будет статья про Contrast Ratio и читаемость элементов (чтобы не было белого на черном и серого на сером)

WCAG 2.1 requires a contrast ratio of at least 3:1 for graphics and user interface components (such as form input borders). WCAG Level AAA requires a contrast ratio of at least 7:1 for normal text and 4.5:1 for large text.

👉 https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html

Что это вообще такое?
CR это такой показатель, который позволяет взять цвет фона и цвет текста или иконки, сравнить их и понять достаточный ли контраст? Есть куча калькуляторов Contrast Ratio, которые легко гуглятся:
👉 https://www.siegemedia.com/contrast-ratio
👉 https://webaim.org/resources/contrastchecker/
👉 https://coolors.co/contrast-checker/112a46-acc8e5
👉 https://contrast-ratio.org/

Минимальный контраст при котором нормально читается мелкий текст, крупный текст и иконки определён стандартом. Сильно задирать его вверх тоже не стоит — глаза устанут. Поэтому в IDE например используют тему Solarized, а не белое на черном/черное на белом.

⚠️ Контрастная обводка при этом в большинстве случаев читаемость ухудшает, а люди с дислексией скорее всего не смогут читать текст с обводкой вообще. Не используйте её.

Как это использовать в юнити?
Мы для тестирования написали постпроцессинг шейдер, в котором задаём два цвета фона (пипеткой) и считаем минимальный контраст остальных элементов относительно этих двух цветов. Видео прилагаю, чтоб было понятнее. Скрин рандомный из инета был взят для тестов.
Два порога: всё что с контрастом меньше BGT считается фоном и красится черным. Остальное красится синим если контраст выше требуемого CR и красным если ниже. Очень наглядно.

Помимо этого бывают ещё разные виды контраста, например, хроматический. Но о них как-нибудь отдельно поговорим.
3👍2
3450623.3464662.pdf
2.7 MB
Техарт киберпространств в Cyberpunk.
5
This media is not supported in your browser
VIEW IN TELEGRAM
Чем-то привлек этот пост-процесс из The Long dark. Немного так обогащает стилизованную картинку. Думал, что-то сложное, но, кажется, все очень просто: из обесцвеченного кадра вычитаем размытый обесцвеченный кадр, прибавляем аккуратно к оригиналу.
(в комменте граф сабстанса)
Подумываю применить у себя с размытием от скорости.

UPD: обесцвечивать, в принципе, ни к чему
🆒4
This media is not supported in your browser
VIEW IN TELEGRAM
Очередной раз захотел радиального размытия в Substance Designer для тестов всяких пост-процесс гипотез. Психанул, наговнякал на Pixel processor.
Может кому-то тоже нужен иногда или хотите изучить Pixel processor, и while loop в нем (та еще веселуха)
sbs - буквально исходник
sbar - кидаете в граф и пользуетесь

файлы в первом комментарии
🔥10
This media is not supported in your browser
VIEW IN TELEGRAM
в презентации по Портал 2 увидел некую технику Surface-embedded sprite, основанную на том, что мы поворачиваем uv в сторону камеры. А у меня про это незакрытый гештатль уже 4 года. В общем вот.

Файлы опубликовал в unity_cg (обязательно вступайте, если еще не)
🔥13
COMMAND ENCODER (Barkar Ivan)
Проблема сжатия вершин оказывается достаточно актуальной, и даже в индустрии AAA-разработки к её решению подходят самыми разными способами. Unity, в свою очередь, предлагает собственные инструменты для этой задачи – подробнее о них можно узнать в официальной…
Как всегда, пока это очень глубокое R'n'D и тест, и совсем не продакшен реди. Это пример квантайза мешей. Скорее всего, наиболее любопытным будет упаковка нормалей и тангента в кватернион, что может пригодится и в деферред. Будут мысли - пишите. Найдете ошибку, или как можно сделать лучше - так же в себе не держите.

Позиции сломаются на объектах размером меньше 1, копит заметную ошибку на мешах размерах больше 50 - меш становится немного больше. Пока не решил.

(файлики в комментах)
🔥2
Media is too big
VIEW IN TELEGRAM
К предыдущему посту.
Другой подход к квантованию с масштабированием. Мелкие мешки работают прекрасно, под большие подбираем множитель. С благодарностью @alexmtq (https://t.me/madcsharp)

https://github.com/BarkarIvan/Unity_mesh_quantization_example

на гифке оптимизировання мешка размером в 50 единиц сравнивается с оригиналом.
2🔥1🤯1
Я уже говорил, но.
Применение NICE-фильтра (на основе имплементации от Valve) при генерации мип-мап даёт ощутимый прирост качества по сравнению с окном Кайзера в Unity.

На реальном проекте (зависит, конечно, от него) разница в качестве текстур очень заметна.

Минусы?
- реализация в лоб очень долгая ) текстуры 1024 обрабатывает минуты. Но это решаемо.

https://developer.valvesoftware.com/wiki/NICE_filtering

UPD: если реализовать кайзер с регулируемыми настройками (хотя бы бета), то можно добиться результатов не хуже
4
Forwarded from Constantine Galkin
К слову, тут пару месяцев назад пробегал диалог про сжатие вершин, в том числе нормалей, там я упомянул презу из дума, вот готовый рабочий код в 3 байта + битмаска ужаты нормаль, тангент и TBN знак.
https://gist.github.com/wiseConst/fdedf4bf9461f2c6a4dc003aadb331d3