Прозрачное стекло с отражениями в SceneKit
Уважаемые эксперты Scenekit!
Я пытаюсь получить материал, напоминающий прозрачное стекло, используя PBR. Он должен быть прозрачным на 99%, а также очень отражающим.
Вот пример, который я использую:
lightingModel = .physicallyBased
metalness.contents = UIColor(white: 1.0, alpha: 1.0)
diffuse.contents = UIColor(white: 0.2, alpha: 1.0)
roughness.contents = UIColor(white: CGFloat(0.03), alpha: 1.0)
transparencyMode = .dualLayer
isDoubleSided = true
transparency = 0.2
Проблема в том, что количество отражений зависит от transparency
:
transparency = 0.01
: отражения карты окружающей среды сцены больше не видны.transparency = 0.2
: Я получаю несколько хороших отражений, но, к сожалению, теперь весь мой объект виден, то есть выглядит как кусок тонированного стекла (в зависимости от того, какой цвет я установил вdiffuse
).
Как я могу сделать это ясным, то есть прозрачным, все еще видя отражения?
0 ответов
Итак, я думаю, что я понял это сам сейчас. Решение состояло в том, чтобы установить все значения альфа-материала на 1.0
(diffuse
, transparency
и т. д.), а затем установите альфа в фрагментном шейдере в зависимости от количества зеркального освещения.
Фрагмент шейдера:
#pragma transparent
#pragma body
uniform sampler2D emissionTexture;
vec3 light = _lightingContribution.specular;
float alpha = 0.5 * min(1.0, 0.33 * light.r + 0.33 * light.g + 0.33 * light.b);
_output.color.rgb *= min(1.0, 1.5 * alpha);
_output.color.a = 0.75 * alpha;
В основном этот шейдер имеет
- низкая альфа, где нет подсветки
- высокая альфа, где есть зеркальная подсветка.