Розроблення шейдерів прозорості для стекол AR шолемів в іграх
HoloLens 2 та Magic Leap 2 – адитивні дисплеї. Вони не малюють чорний фон: голограми накладаються прямо на те, що користувач бачить крізь стекло. Це фундаментально змінює логіку шейдерів. "Прозорість" тут – не альфа-блендинг поверх віртуального фону, а буквальна прозорість для реального світу, що проходить через лінзи.
Розробляти шейдери для таких дисплеїв без розуміння їх фізичної природи – означає отримати графіку, яка або невідрізна у яскравих кімнатах, або виглядає як мутне пятно на темних об'єктах.
Фізика адитивного дисплею та її наслідки для шейдерів
На адитивному дисплеї піксель з кольором (0, 0, 0) – абсолютно прозорий. Чорний колір буквально не випромінює світло. Це означає, що темні частини голограми не маскують реальний світ – крізь них все видно. Для створення ілюзії непрозорого об'єкта об'єкт має бути досить яскравим щодо навколишнього освітлення.
Перший наслідок: стандартні шейдери Unity з Rendering Mode = Opaque виглядають не непрозорими, а напіввідкритими, тому що їх "темні" частини – тіні, AO, затемнені грані – пропускають реальний світ наскрізь. Шейдер для HoloLens повинен мінімізувати темні площі. Ambient lighting необхідно піднімати значно вище фізично коректних значень – практика: Environment Lighting Intensity Multiplier від 1.5 до 2.5 залежно від сцени.
Другий наслідок: альфа на адитивному дисплеї працює інакше. Alpha = 0 дає повну прозорість (ні реальний світ, ні голограма не видна – піксель просто не світиться). Але проміжні значення альфа використовуються для плавного появ/зникнення голограми, а не для змішення з фоном. Немає ніякого "фону" крім реального світу.
Шейдер для керованої прозорості стекла
Основна завдача в іграх для AR шолемів – створити ефект прозорого стекла з контрольованим ступенем помутніння. Наприклад, захисний щит, який частково блокує обзор, або іллюмінатор космічного корабля.
У ShaderGraph (URP) це будується так: базовий колір об'єкта змішується з Fresnel Effect для акценту на краях (стекло сильніше відбиває під кутом). Зона чистої прозорості у центрі – Alpha близько до нуля, краї – Alpha вище через Smoothstep. На темному об'єкті за стеклом ефект буде помітний, на світлому – майже ні, тому що адитивний дисплей не затемняє реальний світ.
Для ефекту "запотілого стекла" використовується Procedural Noise як маска – вона порушує однорідність прозорості та створює органічний вид. Але не можна використовувати темні значення у noise-маске для "помутніння": темні площи просто стають прозорими. Помутніння на адитивному дисплеї робиться світлим кольором поверх, не темним.
Окремий шейдер – окантовка об'єкта. Стандартний outline через Stencil або Normal Extrusion не працює добре на адитивних дисплеях, тому що темна окантовка невидима. Потрібен світиться outline: Emission на контурних пікселях з інтенсивністю 2–4, колір – теплий або насичений (синій, зелений працюють краще червоного через спектр адитивного дисплею).
Робота з MRTK та Mixed Reality Toolkit
Для HoloLens розроблення ведеться через MRTK (Mixed Reality Toolkit). У MRTK є готовий MRTKStandardShader, оптимізований під адитивні дисплеї – він враховує обмеження платформи та працює значно краще за стандартний URP Lit шейдер. Але його можливості обмежені, та для кастомних ефектів потрібно писати кастомні шейдери з врахуванням тих же принципів.
Magic Leap 2 використовує інший SDK – Magic Leap Unity SDK – але фізика дисплею та ж: адитивний, тільки яскравіший. Шейдери, написані для HoloLens, у основному переносяться напряму, але потрібно пересматривати пороги ambient intensity через різну яскравість дисплею.
Кейс: інтерфейс кабіни з прозорими екранами
В AR-симуляторі кабіни літака потрібно було реалізувати приборні панелі, які видні поверх реального кресла пілота. Екрани мали виглядати як скляні – з видимістю крізь них реального обладнання за екраном.
Проблема: еміссивні елементи інтерфейсу (шкали, числа) були яскравими та читаємими. Але "підложка" екрану – темно-сірий прямокутник – була практично невидима (адитивний дисплей не показує темні кольори). Інтерфейс висів "у повітрі" без рамки, яка давала б ощущення фізичного екрану.
Рішення: заміна темної підложки на слабко світиться (Emission 0.15, теплий сірий колір). Це добавило достатньо світіння, щоб границя екрану була видна, але не настільки яскраво, щоб перекривати реальний світ. Додатково – Fresnel на краях корпусу з інтенсивністю 0.3 для акценту форми.
| Тип шейдера | Складність | Орієнтовні терміни |
|---|---|---|
Кастомізація MRTKStandardShader |
Середня | 2–5 днів |
| Шейдер прозорого стекла (ShaderGraph) | Середня | 3–7 днів |
| Складний ефект (запотівання, динамічне помутніння) | Висока | 1–3 тижні |
| Портирування шейдерів між платформами | Залежить від набору | 1–2 тижні |
Вартість розраховується після аналізу вимог та цільової платформи (HoloLens 2, Magic Leap 2, або кастомне AR-пристрій).





