2

我观察到,当拍摄一个相对清晰的 SKSpriteNode 并使用 SKView 的 textureFromNode 拍摄快照时,结果图像是模糊的。这甚至考虑了纹理过滤(默认设置为线性)。我想知道这是否按预期工作,或者 SKView 是否还有更多功能?

4

5 回答 5

3

尝试这个 :

texture.filteringMode = SKTextureFilteringNearest;

使用此模式,您可以获得更少的模糊,更多的像素化。如参考中所述SKTexture

SKTextureFilteringNearest

每个像素都是使用纹理中最近的点绘制的。这种模式速度更快,但结果通常是像素化的。

我将它与一些用于绘制线条的代码一起使用SKShapeNode。在这样设置filteringMode属性之前,我的线条随着时间的推移变得越来越模糊。使用此设置,即使将SKShapeNode antialiased属性设置为YES,它仍然保持清晰而不模糊。

不确定您当前的实现,但也许这会对您有所帮助。

于 2014-07-03T23:40:39.830 回答
2

If you want a "snapshot" image of the current SKView and SKScene contents, you might be better off looking at the new method drawViewHierarchyInRect:afterScreenUpdates:. This works well in my testing, albeit a little slower than expected. I think the problem you're seeing is that the size of the resulting SKTexture returned from textureFromNode: is based off of the node's calculateAccumulatedFrame which may or may not be the size you want/expect. It could also just be rendering the texture correctly, and you're just seeing the re-rendered form of the already rendered sprite (basically, getting more lossy every time it's rendered again, which logically makes sense).

于 2013-10-10T12:19:10.927 回答
0
texture.filteringMode = SKTextureFilteringNearest;

这对我来说没有帮助。我不得不在我的 SKShapeNode 上关闭抗锯齿功能。然后 textureFromNode(grid -> SKShapeNode) 产生清晰的纹理/SKSpriteNode。

grid.antialiased = false
于 2015-01-04T09:14:50.093 回答
0

我发现了另一种提高从 ShapeNodes 创建的纹理保真度的方法。

以 x2 的大小和宽度创建您的形状。以相同的超大比例创建所有字体和其他形状。确保您的定位是相对于这个整体大小的,(例如,不要使用绝对大小,使用容器的相对大小。)

当您将纹理创建为精灵时,它会很大 - 但随后应用

sprite.scale = 0.5; // if you were using 2x

(注意,如果您有子元素,缩放可能不是最好的解决方案 - 设置大小会更好)。

我发现这使它看起来分辨率更高,没有颗粒感,字体没有模糊感,锐角。

我也用过tex.filteringMode = SKTextureFilteringLinear;

[编辑-我以前将其命名为 SKTextureFilteringNearest-但这会在直线上产生伪影-线性现在会产生良好的直线]。

于 2015-06-03T11:49:21.817 回答
0
texture.filteringMode = .nearest

这可能会导致像素化,您也可以尝试

texture.filteringMode = .linear
于 2018-04-02T16:38:18.533 回答