使用高分辨率纹理优化SceneKit性能

我是一个相当有经验的iOS开发人员,但总共是一个SceneKit新手,试图在一个基本的应用程序中模拟一些行星。

为此,我使用火星,金星等高分辨率的正常和散射图,应用于基本领域。 他们工作! 他们看起来真棒,正是我想要的。

在这里输入图像说明 在这里输入图像说明

问题是,我正因为质量/记忆的折衷而死亡

我可以缩小纹理的尺寸以减less内存占用,但低于一定的分辨率时,结果(特别是法线贴图)开始变得非常糟糕和可怕。 该应用程序需要能够至less放大到行星是屏幕宽度的地方,但要保持山区和山谷的任何脆度,我需要使用一个约6000×3000的PNG法线贴图(上图)。我可以缩放漫reflection地图的方式下降到1000 x 500左右,但即使如此, 我从一个单一的球体周期性的记忆崩溃轻轻旋转,一个单一的光线,没有背景,没有物理,没有其他几何。

现在, 我知道这是一个超高分辨率的法线贴图。 我知道了。 但与此同时,这只是一个领域,什么都不做。 这甚至没有接近其他应用程序完美执行的一些复杂性,即使有一些非常细腻的纹理也是如此。 似乎必须有一些方法可以获得单个对象的高细节表面纹理,而不会崩溃应用程序。

所以,作为一个SceneKit的新手,我想知道: 在没有使用全部内存的情况下,获得好的SceneKit纹理质量有什么技巧吗? 也许是一种处理图像纹理,重新编码文件,改变场景/节点设置等的方式? 任何方式都可以用较小的图像获得清晰的质量,或者使用相同的图像来降低内存使用率?

我很高兴地引用一些代码,但是现在没有太多可以显示的东西。 我将这些纹理以标准的方式应用到SceneKit节点,并且工作正常。 我只是因为缺乏记忆力或缺乏图像质量而死亡。

谁能帮我吗?

我认为这个想法是明智地分割球体纹理,所以在任何时候它只显示大概60度的纹理,类似于在缩放时以高分辨率显示图像。 我不知道该怎么做,但这是我的猜测。

Interesting Posts