COMMAND ENCODER (Barkar Ivan)
163 subscribers
168 photos
72 videos
17 files
108 links
Cool shading, nice ball moment
Download Telegram
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
This media is not supported in your browser
VIEW IN TELEGRAM
Новости генерации кастомных мип-мап.

слева Юнити, справа - мое

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

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

Оставлю так, и пущу в дело, там посмотрим.
Вывод в том, что было бы здорово иметь пару (да даже одну) настроек кайзера, чтобы регулировать резкость текстуры.
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
А чего вы без таких полярных координат для сабстанс дизайнера сидите? Делал себе для трещин.


(файлы в первом комментарии)
Домашнее задание: сделать color версию
🔥72
Forwarded from OWLD (Olga Fedotova)
Полезный доклад с GDC от Ани Булавиной из CD PR об устройстве игровых городов с практически готовыми советами по тому, как игровой город делать.

Основные тезисы с моими комментариями:

🔸 Пространство в игре не должно быть реалистичным, оно должно быть достоверным.
Это та самая тема, по которой я хочу пройтись в своей части 2 тома Архитектуры виртуальных миров.

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

🔸 Улица, площадь и задний двор - основные элементы города.
Если про улицу и площадь мы помним (хотя многие начинающие дизайнеры помнят только улицу), то вот про задний двор мы зачастую забываем, в результате чего наши игровые города становятся излишне коридорными.

🔸 Основные параметры вашего города - размеры, пропорции и степень детализации - зависят от скорости перемещения и геймплея.
Dog Town в Phantom Liberty потому такой шумный на мой взгляд, что разработчики полагали, что он будет преодолеваться игроком не только на машине, но и пешком, и потому увеличили детализацию. Типа а давайте запушим игроков играть иначе. Получили то, что получили.

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

По Аниному докладу можно набросать примерно вот такой пайплайн работы с игровым городом:

1. Определяем размеры города, исходя из геймплея
2. Определяем количество районов и их опознавательные лендмарки
3. Собираем референсы, обращаем внимание на структурные рефы
4. Продумываем элевацию (мне кажется, что наиболее корректно начать думать об этом где-то на этом этапе)
5. Прокладываем главные улицы через весь город
6. Помним про чередование пространств улица-площадь
7. Закладываем навигацию через размер улиц и лендмарки

❗️ Ну а самый главный вывод, как по мне, - вашего В2 уровня английского вполне достаточно, чтобы выступать с докладом на GDC. Так что перестаньте тормозить себя знанием языка.

#video #gamecities #Cyberpunk2077
🔥7