Шейдеры Френеля используют разницу между нормалью поверхности и вектором обзора, чтобы определить, какие пиксели обращены к зрителю, а какие - нет. Самолет пользовательского интерфейса всегда будет сталкиваться с пользователем, поэтому не повезло.
Решение этого с помощью шейдеров может быть выполнено двумя способами: либо вы запекаете карту нормалей воображаемой «кривизны» внешнего края ( пример ), либо вы создаете поле расстояния со знаком (* 1005) * пример ), или некоторый подобный метод, который отображает расстояние до края. Карта нормалей, вероятно, учитывает самые сложные эффекты, и я уверен, что некоторые шейдеры Френеля тоже могут с этим работать. Тем не менее, он требует, чтобы вы сделали модель фигуры и выпекали нормаль.
С другой стороны, поле расстояния со знаком может быть создано с помощью сценария из изображения, поэтому, если у вас много изображений, это может быть самый быстрый подход. Получение расстояния до края внутри шейдера в реальном времени не будет работать, так как вам придется выбирать очень большое количество соседних пикселей, что может сделать шейдер в 10-20 раз медленнее, в зависимости от того, насколько толстым должен быть край.
Если вам не нужно, чтобы изображение было таким динамичным, то, возможно, вам лучше всего создать внутреннюю черно-белую текстуру в Photoshop и наложить ее с помощью аддитивного шейдера. Если вы не знаете, как писать шейдеры, то, возможно, два вышеупомянутых подхода немного сложны.