我有一个描绘人体的几何节点。物体的材质是透明的
let node = newScene.rootNode.childNode(withName: "man_mesh", recursively: true)
let nodeMaterial = node?.geometry?.firstMaterial
nodeMaterial?.emission.contents = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
nodeMaterial?.transparencyMode = .rgbZero
nodeMaterial?.transparent.contents = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)
我试图获得的效果是对象在面向相机的区域完全透明,但当多边形面向侧面时变得更加不透明......这会产生一种闪亮的蓝色边缘。像这样:
知道如何创建这种效果吗?
谢谢
编辑:另一个有趣的点:看起来 SceneKit 确实支持菲涅耳效应。该效果会影响反射贴图 - 然而,一旦将透明度应用于对象,它也会影响反射率(完全透明也会使反射率消失) - 我相信这是 Apple 的一个概念错误 - 一种材料可以是透明的,仍然反射光!
\n我做了一些研究并找到了答案。为了达到这个效果,可以使用下面的代码。
func ghostEffect(scene: SCNScene) {\n\n let sphere = SCNSphere(radius: 3)\n\n let material = SCNMaterial()\n material.diffuse.contents = UIColor.black\n material.reflective.contents = UIColor(red: 0, green: 0.764, blue: 1, alpha: 1)\n material.reflective.intensity = 3\n material.transparent.contents = UIColor.black.withAlphaComponent(0.3)\n material.transparencyMode = .default\n material.fresnelExponent = 4\n\n sphere.materials = [material]\n\n let node = SCNNode(geometry: sphere)\n\n scene.rootNode.addChildNode(node)\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n\n\n\n\n解释来自:SCNMaterial。
\n
菲森塞尔指数-影响材质\xe2\x80\x99s反射率的因素
\n\n这种方法可以应用于任何 3D 对象。
PS 希望它会有用。
\n| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |