透明玻璃与SceneKit中的反射

时间:2018-11-25 12:39:43

标签: rendering scenekit material pbr

亲爱的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的影响:

  1. transparency = 0.01:场景环境贴图的反射几乎不再可见。
  2. transparency = 0.2:我得到了一些不错的反射,但是不幸的是,现在我的整个对象都可见了,也就是说,它看起来像一块有色玻璃(取决于我在diffuse中设置的颜色)。
  3. li>

我如何弄清楚,即在透视的同时仍然看到反射?

1 个答案:

答案 0 :(得分:2)

所以,我想我现在已经明白了。 解决方案是将所有alpha材质值设置为1.0diffusetransparency等),然后根据镜面光照量在片段着色器中设置alpha。

片段着色器:

#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;

基本上此着色器具有

  • 没有高亮显示的低字母
  • 高Alpha处有镜面反射高光。