Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Рейтинг: 51% · 4 голосов
Создание игр на Unity, Unreal Engine, Godot: 3D-графика, шейдеры, физика, геймдизайн, оптимизация и инди-проекты.
Ответить
Аватара пользователя
yaroslav_hex13
Сообщения: 20
Зарегистрирован: Пн май 11, 2026 8:32 am

Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение yaroslav_hex13 »

Делаю dissolve-эффект через Shader Graph в Unity 6 URP. Логика стандартная: сэмплирую noise текстуру, сравниваю с threshold, делаю clip(). Добавил emission на краях через step() от разницы между шумом и порогом. Всё работает в сцене, но на краях объекта появляются белые артефакты — как будто emission «вылезает» за пределы меша, особенно заметно на тонких деталях (пальцы персонажа, края листьев). Версия Unity 6.0.35, URP 17. Что за хрень и как починить?
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — sasha_py52
Полное решение которое у меня работает в продакшне: использую smoothstep вместо step для edge emission — это убирает резкий край. Код примерно такой: float dissolve = tex2D(_NoiseTex, i.uv).r; clip(dissolve - _Threshold); float edge = smoothstep(_Threshold, _Threshold + _EdgeWidth, dissolve); emission += edge * _EdgeColor * _EdgeIntensity; Параметр _EdgeWidth около 0.05-0.1 даёт мягкий светящийся…
Перейти к ответу →
Аватара пользователя
elena_go8
Сообщения: 4
Зарегистрирован: Пт май 15, 2026 5:41 am

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение elena_go8 »

@senior_burnout, Классическая проблема — emission вычисляется до clip(), поэтому на полупрозрачных пикселях которые потом обрезаются эффект всё равно записывается в буфер. Попробуй поменять порядок: сначала вычисли dissolveValue = noise - threshold, потом clip(dissolveValue), и только потом считай emission на оставшихся пикселях. В Shader Graph это значит что нода Clip должна быть ДО ноды Add в emission-ветке.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
natalia_tech
Сообщения: 2
Зарегистрирован: Вс май 17, 2026 5:04 pm

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение natalia_tech »

Ещё вариант: у тебя включён Depth Priming? В URP 17 при Depth Priming включённом бывают артефакты именно на тонкой геометрии с клиппингом. Попробуй в настройках URP Asset -> Rendering -> Depth Priming Mode поставить Disabled и посмотри изменится ли картина.
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
flowgo4491
Сообщения: 12
Зарегистрирован: Вс май 10, 2026 8:32 pm

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение flowgo4491 »

Я натыкался на похожее — оказалось что noise текстура не имеет правильных настроек сэмплинга. Если Wrap Mode стоит Repeat а не Clamp, на UV-швах меша шум резко прыгает и даёт полоску где emission считается некорректно. Проверь импорт настройки текстуры шума.
👍1 ❤️ 🔥 😄 🤔1
Аватара пользователя
sasha_py52
Сообщения: 10
Зарегистрирован: Пн май 11, 2026 6:50 pm

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение sasha_py52 »

✔ Лучший ответ — сформирован автоматически
Полное решение которое у меня работает в продакшне: использую smoothstep вместо step для edge emission — это убирает резкий край. Код примерно такой: float dissolve = tex2D(_NoiseTex, i.uv).r; clip(dissolve - _Threshold); float edge = smoothstep(_Threshold, _Threshold + _EdgeWidth, dissolve); emission += edge * _EdgeColor * _EdgeIntensity; Параметр _EdgeWidth около 0.05-0.1 даёт мягкий светящийся край без артефактов. Плюс убедись что у материала Render Face стоит Both если объект тонкий — backface culling тоже даёт похожие артефакты.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
valera_nova83
Сообщения: 6
Зарегистрирован: Ср май 13, 2026 5:48 am

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение valera_nova83 »

Дополню: в URP 17 появился Decal Projector который можно использовать для dissolve на сложных мешах вместо vertex shader — иногда это проще чем бороться с артефактами на сложной геометрии. Но для персонажей классический подход с clip() правильный, просто следи за порядком операций.
👍1 ❤️ 🔥2 😄1 🤔
Аватара пользователя
tanya_pixel80
Сообщения: 5
Зарегистрирован: Вс май 10, 2026 9:57 pm

Re: Шейдер растворения объекта в Unity URP — почему артефакты на краях?

Сообщение tanya_pixel80 »

@kirill_backend, У меня была та же проблема специфично на mobile (Mali GPU). Оказалось что clip() на некоторых мобильных драйверах работает не строго детерминировано на краевых пикселях. Решение — добавить небольшой bias: clip(dissolveValue - 0.001). Выглядит странно но на практике убирает мерцание на краях на проблемных устройствах.
👍1 ❤️ 🔥1 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Геймдев и разработка игр»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость