首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SceneKit:提高SCNNode材质纹理的清晰度?

SceneKit:提高SCNNode材质纹理的清晰度?
EN

Stack Overflow用户
提问于 2016-09-17 00:34:51
回答 1查看 1.5K关注 0票数 2

我们的应用程序允许用户上传自定义图像作为SCNNodes的材料,正如您可以从下面的截图和代码中看到的那样。

屏幕截图1显示当材料使用1的刻度时SCNNodes。

屏幕截图2显示相同的节点,刻度为2。

当使用刻度为2时,纹理/材料明显锐化,但由于wrapSwrapT属性,它也会重复图像。对这些属性使用MirrorClamp而不是Repeat没有帮助。

在SceneKit或UIKit中,您可以提供更高分辨率的图像,并将其缩小,以提高不同设备的清晰度。例如,对于50x50按钮,提供一个100x100图像。通过在底部的UIKit组件中呈现相同图像的锐度,可以看到相同图像的SceneKit锐度与UIKit锐度之间的对比。

1)如何将同样的原则应用于SceneKit?

2)更重要的是,如何在避免重复行为的同时,达到截图2的纹理/材质锐度?

代码:

代码语言:javascript
运行
复制
// Create box geometry
let box = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)
box.firstMaterial!.diffuse.contents = style.getContents() // This returns a UIImage
box.firstMaterial!.specular.contents = UIColor.whiteColor()

// Increase resolution for image styles
let scale = Float(2)
if style.type == .Image {
    box.firstMaterial!.diffuse.contentsTransform = SCNMatrix4MakeScale(scale, scale, scale)
    //box.firstMaterial!.locksAmbientWithDiffuse = true
    box.firstMaterial!.diffuse.wrapS = .Repeat
    box.firstMaterial!.diffuse.wrapT = .Repeat
    box.firstMaterial!.diffuse.mipFilter = .Linear
}

纹理:

屏幕截图1:

截图2:

EN

回答 1

Stack Overflow用户

发布于 2016-09-17 18:44:29

您将需要考虑的实际像素,您的图像将在屏幕上,在最接近的位置,并以最大程度的透视失真。

因此,举个例子,一个靠近摄像机的立方体,在场景的左边,可能有一个边缘非常靠近相机的“镜头”,并且占据(例如)屏幕的y轴(高度)的大部分。如果这是一个常见的场景,在你的游戏中,那么目标是猜测这个大小(真实的)像素会给你一个概念,你需要你的纹理多大的锐度。

这就是3D引擎中存在LOD (Level )功能的原因之一,因此,并不是场景中的所有对象都需要拥有最好、最大质量的纹理,也不需要最大数量的多边形来表示它们的形状。

在大多数3D引擎中也有不同类型的纹理处理算法,用于平滑。关闭这些,如果他们存在于SceneKit,将是一个很大的好处,以获得尖锐的(呃)纹理,也。

几何细节水平

(不直接适用于您的请求,但说明了它是如何工作的)

https://developer.apple.com/reference/scenekit/scnlevelofdetail

纹理“缩放”(mip映射)

这更适用。这个“把戏”真的很古老,我记得是从第一张3D卡开始的。它使您的纹理变得更小:

https://developer.apple.com/reference/scenekit/scnmaterialproperty/1395398-mipfilter

我读到这是非常自动的,再看一看:

从上一页:

SceneKit自动为材料属性的图像内容创建几个mipmap级别,每个级别的大小仅为原始图像的一部分。在呈现时,SceneKit会自动从最接近所呈现大小的mipmap级别中提取纹理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39541747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档