我目前正在开发一个iPadOS应用程序,该应用程序使用SceneKit渲染一些3D模型,没有什么花哨的东西,但是在为这些模型着色时,我遇到了很多麻烦...
基本上,我要做的就是设置一个SceneKit场景(几乎使用所有默认设置,我什至没有相机),并从我拥有的某些.obj文件中实例化3D对象,就像这样。
let url = <URL of my .obj file>
let asset = MDLAsset(url: url)
let object = asset.object(at: 0)
let node = SCNNode(mdlObject: object)
let texture = UIImage(data: try Data(contentsOf: <URL of the texture>))
let material = SCNMaterial()
material.diffuse.contents = texture
node.geometry!.materials = [material]
self.sceneView.scene!.rootNode.addChildNode(node)
手动加载纹理,因为不幸的是,这是客户端设置文件供我使用的方式。代码工作正常,我可以看到网格及其纹理,但是看起来也像这样
如您所见,阴影根本不平滑...而且我不知道如何修复。
客户一直在困扰我实施Phong着色,根据Apple的文档,这就是您的操作方式。
material.lightingModel = .phong
不幸的是,启用Phong仍然是这样。在3D渲染方面,我是绝对的初学者,因此这可能很容易笑,但我发誓我无法弄清楚如何在此模型上获得更平滑的阴影。
我尝试左右移动,唯一产生任何明显结果的事情是使用subdivisionLevel来增加几何中的实际面,但这不能很好地缩放,因为实际的应用程序需要加载大量的这些网格物体,即使细分设置仅为1
,它也会快速耗尽内存肯定有一种方法可以在不改善实际几何形状的情况下平滑这些阴影吗?
谢谢!
答案 0 :(得分:1)
着色需要具有正确的几何法线。您是否尝试过使用Model IO生成它们?
https://developer.apple.com/documentation/modelio/mdlmesh/1391284-addnormals