SceneKit - 在 SCNView 中提高分辨率

SceneKit – Make higher resolution in SCNView

我正在使用 SceneKit,但我讨厌几何体的分辨率。我阅读开发人员文档和其他网站。我在开发者文档中找到了 article。它给了我这张图片:

但是找不到任何关于如何做到这一点的信息,开发者文档中只有另一个愚蠢 article。我真的需要更高的分辨率——它应该被平滑。

有没有人可以帮我解决这个问题?

所有 built-in 形状几何图形都具有 xxxSegmentCount 属性。您可以增加它们以使它们更平滑。这是摘要 table:

Shape segmentCount properties
SCNPlane widthSegmentCount, heightSegmentCount, cornerSegmentCount
SCNBox widthSegmentCount, heightSegmentCount, lengthSegmentCount, chamferSegmentCount
SCNSphere segmentCount
SCNPyramid widthSegmentCount, heightSegmentCount, lengthSegmentCount
SCNCone radialSegmentCount, heightSegmentCount
SCNCylinder radialSegmentCount, heightSegmentCount
SCNCapsule radialSegmentCount, heightSegmentCount, capSegmentCount
SCNTube radialSegmentCount, heightSegmentCount
SCNTorus pipeSegmentCount, ringSegmentCount

但是,您无法控制 SCNTextSCNShape 的段数。它们的多边形数量由 SceneKit 控制,但无论您放大多少倍,它都应该始终足够高。你应该不需要担心这个。

附加说明:您发现的 levelOfDetail 用于设置不同的几何形状以在相机与物体的距离不同时使用(可能具有不同的分段数),以提高性能。

如果您已经加载了 low-poly .dae.obj 模型,例如 Utah teapot,您应该使用 antialiasing mode 实例 属性平滑多面表面。您可以在每个屏幕像素 4 个样本2 个样本none 之间进行选择。这将帮助您加载更多模型,同时进行平滑处理,并且不超过 100K 多边形限制。

var antialiasingMode: SCNAntialiasingMode { get set }

SceneKit can provide antialiasing, which smooths edges in a rendered scene, using a technique called multisampling. Multisampling renders each pixel multiple times and combines the results, creating a higher quality image at a performance cost proportional to the number of samples it uses.

真实代码如下所示:

let sceneView = SCNView(frame: .zero)

sceneView.antialiasingMode = .multisampling4X

根据您拥有的几何结构,您可以sub-divide即时进行。

i.Ex:

node.geometry?.subdivisionlevel = 2

如果您的初始几何图形质量“好”,那么结果可能会令人惊叹。试一试。

注意:随着 sudivision 整数的每次递增,它会将您的顶点增加四倍。值为 2 将提供比原始几何包含的顶点多 16 倍的顶点。这也会影响内存!