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
但是,您无法控制 SCNText
和 SCNShape
的段数。它们的多边形数量由 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 倍的顶点。这也会影响内存!
我正在使用 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 |
但是,您无法控制 SCNText
和 SCNShape
的段数。它们的多边形数量由 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 倍的顶点。这也会影响内存!