Прозрачное стекло с отражениями в SceneKit - PullRequest
0 голосов
/ 25 ноября 2018

Уважаемые эксперты 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  

Проблема в том, что * 1008, похоже, влияет на количество отражений*:

  1. transparency = 0.01: отражения карты окружения сцены уже почти не видны.
  2. transparency = 0.2: я получил несколько хороших отражений, но, к сожалению, теперь весь мой объектвидимый, т. е. он выглядит как кусок тонированного стекла (в зависимости от того, какой цвет я установил в diffuse).

Как я могу сделать его прозрачным, то есть прозрачным, при этом все еще видя отражения?

1 Ответ

0 голосов
/ 28 декабря 2018

Так что, я думаю, я понял это сам сейчас.Решением было установить для всех значений альфа-материала значение 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;

В основном у этого шейдера есть

  • низкая альфа, где нет подсветки
  • высокая альфа, где есть зеркальная подсветка.
...