Forwarded from Иван Валерьевич
Media is too big
VIEW IN TELEGRAM
Анимечники диковинную технику придумали, рисовать сдфку для затенения и не мучится.
🔥6👻1🆒1
Стало интересно сделать LI-SSAO для Юнити
Сделал репозиторию для изучения его устройства, в репозитории так же гудини-файл, в котором я готовил данные точек для семплирования и генератор 4х4 текстуры поворотов.
Дальше нужно побороть ореолы и добавить размытие. Но уже можно изучать-твикать.
Заметите ошибки - не держите в себе, но прежде чем указать - похвалите.
Сделал репозиторию для изучения его устройства, в репозитории так же гудини-файл, в котором я готовил данные точек для семплирования и генератор 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🤗
К сожалению, не более чем переход на половинную точность.
На скриншоте представлен эксперимент по максимальному сжатию позиций вплоть до 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
Forwarded from Denis Ershov
GPU_Zen_3_Advanced_Rendering_Techniques_Wolfgang_Friedrich_Engel.pdf
154.8 MB
#book
GPU Zen 3: Advanced Rendering Techniques
GPU Zen 3: Advanced Rendering Techniques
❤4
Forwarded from Иван Валерьевич
This media is not supported in your browser
VIEW IN TELEGRAM
нормали и тангент в octahedral в SNorm8x4
а на знак тангента я помножил скейл позиции))) (слева)
вот это я умненький, класс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Отправляется в закреп
https://interplayoflight.wordpress.com/2025/01/19/the-hidden-cost-of-shader-instructions/
https://interplayoflight.wordpress.com/2025/01/19/the-hidden-cost-of-shader-instructions/
Interplay of Light
The hidden cost of shader instructions
I posted a few days ago a screenshot of the long shader ISA code produced by the RGA compiler for a single atan2() instruction. The post got quite a large engagement and it felt like a lot of peopl…
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
туман из старой репы гугла
https://gist.github.com/BarkarIvan/4ecf3a63115a3154a4bd7eff6ec5dd2e
https://gist.github.com/BarkarIvan/4ecf3a63115a3154a4bd7eff6ec5dd2e
👍1🆒1
Forwarded from stinger | блог Романа Ильина о геймдизайне и не только
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 и красным если ниже. Очень наглядно.
Помимо этого бывают ещё разные виды контраста, например, хроматический. Но о них как-нибудь отдельно поговорим.
Сегодня будет статья про 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
This media is not supported in your browser
VIEW IN TELEGRAM
Чем-то привлек этот пост-процесс из The Long dark. Немного так обогащает стилизованную картинку. Думал, что-то сложное, но, кажется, все очень просто: из обесцвеченного кадра вычитаем размытый обесцвеченный кадр, прибавляем аккуратно к оригиналу.
(в комменте граф сабстанса)
Подумываю применить у себя с размытием от скорости.
UPD: обесцвечивать, в принципе, ни к чему
(в комменте граф сабстанса)
Подумываю применить у себя с размытием от скорости.
UPD: обесцвечивать, в принципе, ни к чему
🆒4
This media is not supported in your browser
VIEW IN TELEGRAM
Очередной раз захотел радиального размытия в Substance Designer для тестов всяких пост-процесс гипотез. Психанул, наговнякал на Pixel processor.
Может кому-то тоже нужен иногда или хотите изучить Pixel processor, и while loop в нем (та еще веселуха)
sbs - буквально исходник
sbar - кидаете в граф и пользуетесь
файлы в первом комментарии
Может кому-то тоже нужен иногда или хотите изучить 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 (обязательно вступайте, если еще не)
Файлы опубликовал в unity_cg (обязательно вступайте, если еще не)
🔥13
Forwarded from Иван Валерьевич
Я опять бесполезной фигни принес
Плагин VkQuality для движка Unity предоставляет рекомендации по запуску графического API — Vulkan или OpenGL ES — для использования в вашей игре на определенных устройствах.
https://developer.android.com/games/engines/unity/unity-vkquality?hl=ru
Плагин VkQuality для движка Unity предоставляет рекомендации по запуску графического API — Vulkan или OpenGL ES — для использования в вашей игре на определенных устройствах.
https://developer.android.com/games/engines/unity/unity-vkquality?hl=ru
Android Developers
Плагин движка VkQuality Unity | Android game development | Android Developers
В этом документе описывается плагин VkQuality для Unity, который предоставляет рекомендации по использованию графических API Vulkan или OpenGL ES на устройствах Android во время запуска, позволяя разработчикам оптимизировать производительность и управлять…
🔥1
COMMAND ENCODER (Barkar Ivan)
Проблема сжатия вершин оказывается достаточно актуальной, и даже в индустрии AAA-разработки к её решению подходят самыми разными способами. Unity, в свою очередь, предлагает собственные инструменты для этой задачи – подробнее о них можно узнать в официальной…
Как всегда, пока это очень глубокое R'n'D и тест, и совсем не продакшен реди. Это пример квантайза мешей. Скорее всего, наиболее любопытным будет упаковка нормалей и тангента в кватернион, что может пригодится и в деферред. Будут мысли - пишите. Найдете ошибку, или как можно сделать лучше - так же в себе не держите.
Позиции сломаются на объектах размером меньше 1, копит заметную ошибку на мешах размерах больше 50 - меш становится немного больше. Пока не решил.
(файлики в комментах)
Позиции сломаются на объектах размером меньше 1, копит заметную ошибку на мешах размерах больше 50 - меш становится немного больше. Пока не решил.
(файлики в комментах)
🔥2
Media is too big
VIEW IN TELEGRAM
К предыдущему посту.
Другой подход к квантованию с масштабированием. Мелкие мешки работают прекрасно, под большие подбираем множитель. С благодарностью @alexmtq (https://t.me/madcsharp)
https://github.com/BarkarIvan/Unity_mesh_quantization_example
на гифке оптимизировання мешка размером в 50 единиц сравнивается с оригиналом.
Другой подход к квантованию с масштабированием. Мелкие мешки работают прекрасно, под большие подбираем множитель. С благодарностью @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: если реализовать кайзер с регулируемыми настройками (хотя бы бета), то можно добиться результатов не хуже
Применение NICE-фильтра (на основе имплементации от Valve) при генерации мип-мап даёт ощутимый прирост качества по сравнению с окном Кайзера в Unity.
На реальном проекте (зависит, конечно, от него) разница в качестве текстур очень заметна.
Минусы?
- реализация в лоб очень долгая ) текстуры 1024 обрабатывает минуты. Но это решаемо.
https://developer.valvesoftware.com/wiki/NICE_filtering
UPD: если реализовать кайзер с регулируемыми настройками (хотя бы бета), то можно добиться результатов не хуже
❤4
Forwarded from Иван Валерьевич
Нейтральный тон маппинг от кронос
https://github.com/KhronosGroup/ToneMapping/blob/main/PBR_Neutral/pbrNeutral.glsl
https://www.khronos.org/news/press/khronos-pbr-neutral-tone-mapper-released-for-true-to-life-color-rendering-of-3d-products
https://github.khronos.org/glTF-Sample-Viewer-Release/
https://tone-mapping.glitch.me
https://github.com/KhronosGroup/ToneMapping/blob/main/PBR_Neutral/pbrNeutral.glsl
https://www.khronos.org/news/press/khronos-pbr-neutral-tone-mapper-released-for-true-to-life-color-rendering-of-3d-products
https://github.khronos.org/glTF-Sample-Viewer-Release/
https://tone-mapping.glitch.me
GitHub
ToneMapping/PBR_Neutral/pbrNeutral.glsl at main · KhronosGroup/ToneMapping
A collection of tone mappers for the display of 3D graphics - KhronosGroup/ToneMapping
👍2
Forwarded from Constantine Galkin
К слову, тут пару месяцев назад пробегал диалог про сжатие вершин, в том числе нормалей, там я упомянул презу из дума, вот готовый рабочий код в 3 байта + битмаска ужаты нормаль, тангент и TBN знак.
https://gist.github.com/wiseConst/fdedf4bf9461f2c6a4dc003aadb331d3
https://gist.github.com/wiseConst/fdedf4bf9461f2c6a4dc003aadb331d3
This media is not supported in your browser
VIEW IN TELEGRAM
Новости генерации кастомных мип-мап.
слева Юнити, справа - мое
Пришел все же к Kaiser с разными настройками и пытаюсь сохранить покрытие, если нужен альфа-клип. Честно говоря, не совсем понимаю, как решается эта задача в Unity — у них, похоже, мелкие козявки не исчезают так быстро и как-то бустят альфу на мелких мипах чтол-ли (хотя мне сложно представить подобную текстуру, или же ей стоит подбирать порог). Но в целом, мне нравится как все работает.
К тому же, для альфа-клиппинга, мне кажется, удобнее сразу заложить SDF на этапе рисования текстуры, чтобы не заморачиваться. Генерация SDF в мип-мапе — дело слишком долгое и замороченное (но, если надо, можно подключить бесплатный плагин от Катлайка).
Оставлю так, и пущу в дело, там посмотрим.
Вывод в том, что было бы здорово иметь пару (да даже одну) настроек кайзера, чтобы регулировать резкость текстуры.
слева Юнити, справа - мое
Пришел все же к Kaiser с разными настройками и пытаюсь сохранить покрытие, если нужен альфа-клип. Честно говоря, не совсем понимаю, как решается эта задача в Unity — у них, похоже, мелкие козявки не исчезают так быстро и как-то бустят альфу на мелких мипах чтол-ли (хотя мне сложно представить подобную текстуру, или же ей стоит подбирать порог). Но в целом, мне нравится как все работает.
К тому же, для альфа-клиппинга, мне кажется, удобнее сразу заложить SDF на этапе рисования текстуры, чтобы не заморачиваться. Генерация SDF в мип-мапе — дело слишком долгое и замороченное (но, если надо, можно подключить бесплатный плагин от Катлайка).
Оставлю так, и пущу в дело, там посмотрим.
Вывод в том, что было бы здорово иметь пару (да даже одну) настроек кайзера, чтобы регулировать резкость текстуры.
🔥4