如何仅在SceneKit的球体的一部分上应用菲涅耳效果?

时间:2019-04-14 16:13:45

标签: swift shader scenekit

我正在将菲涅耳效果应用于SCNSphere,以实现地球的美丽光芒

但是,因为我正在做地球的模型,所以我希望球体的照明部分具有菲涅耳效应,而暗面没有

enter image description here

如果球体的黑暗面会透明,也许有可能达到这种效果?还是我可以使用Scenekit _surface.fresnel的着色器修改器属性?

1 个答案:

答案 0 :(得分:0)

为此,您需要使用emission实例属性,该属性定义表面上每个点发出的颜色。

  

您可以使用emissive map texture模拟表面自身发光的部分。 SceneKit不会将材料视为光源-而是,发射属性确定与照明无关的材料的颜色。 (要创建看起来发光的对象,您可能希望将几何图形与自发光贴图以及添加到场景中的其他SCNLight对象结合在一起。)

var emission: SCNMaterialProperty { get }

您可以在任何可用的SceneKit着色器emissionConstantLambertBlinnPhong中找到Physically Based属性。

let earth = SCNNode(geometry: SCNSphere(radius: 5))
earth.geometry?.firstMaterial?.emission.contents = UIImage(named: "emissionMap.png")

enter image description here

当然,如果需要创建正方形emissionMap.png纹理(又称为 UV Map ),则应在Autodesk Maya或Autodesk 3dsMax或Maxon Cinema4D等中创建它。这样的地图可以是512x512、1024x1024、2048x2048等。

enter image description here