Ego*_*r T 6 ios scenekit swift arkit
我用scenekit制作透明对象并与arkit链接.我用闪电材料制作了一个阴影但看不透透过透明物体的阴影.我做了一架飞机并将物体放在上面.并将光线照射到透明物体上.阴影出现在对象后面但无法透过对象看到.
这是制作阴影的代码.
let light = SCNLight()
light.type = .directional
light.castsShadow = true
light.shadowRadius = 200
light.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
light.shadowMode = .deferred
let constraint = SCNLookAtConstraint(target: model)
lightNode = SCNNode()
lightNode!.light = light
lightNode!.position = SCNVector3(model.position.x + 10, model.position.y + 30, model.position.z+30)
lightNode!.eulerAngles = SCNVector3(45.0, 0, 0)
lightNode!.constraints = [constraint]
sceneView.scene.rootNode.addChildNode(lightNode!)
Run Code Online (Sandbox Code Playgroud)
以下代码用于在瓶子下面制作地板.
let floor = SCNFloor()
floor.reflectivity = 0
let material = SCNMaterial()
material.diffuse.contents = UIColor.white
material.colorBufferWriteMask = SCNColorMask(rawValue:0)
floor.materials = [material]
self.floorNode = SCNNode(geometry: floor)
self.floorNode!.position = SCNVector3(x, y, z)
self.sceneView.scene.rootNode.addChildNode(self.floorNode!)
Run Code Online (Sandbox Code Playgroud)
我认为它可以通过简单的属性来解决,但我无法弄清楚.
我该如何解决这个问题?
延迟着色的一个已知问题是它不支持透明度,因此您可能必须删除该行并再次使用默认的前向着色。也就是说,您要查找的 \xe2\x80\x9csimple 属性\xe2\x80\x9d 是 SCNNode 上的 .renderingOrder 属性。例如将其设置为 99。通常渲染顺序并不重要,因为 z 缓冲区用于确定哪个像素在其他像素前面。为了使阴影通过对象的透明部分显示出来,您需要确保对象是最后渲染的。
\n\n\n\n另一方面,假设您使用了我在其他问题上发布的一些材质设置,请尝试将光泽值设置为 0.4 之类的值。
\n\n请注意,这仍然会创建阴影,就好像对象根本不透明一样,因此它不会为标签和盖子创建较暗的阴影。为了获得额外的真实感,您可以选择完全伪造阴影,例如使用阴影纹理并将其放置在根据需要旋转和倾斜的平面上。为了更加真实,您也可以用这种方式伪造焦散。
\n\n您可能还想向材质的反射属性添加反射贴图。与纹理贴图几乎相同,但采用灰度级,其中标签和盖子为深灰色(反光性不太好),玻璃部分为浅灰色(否则看起来标签位于玻璃内部)。最后提示:使用壳修改器(无论如何,\xe2\x80\x99s 在 3Ds max 中称为\xe2\x80\x99s)给玻璃模型一些厚度。
\n| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |