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

2023-12-27

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

为此,我使用火星、金星等的高分辨率法线和漫反射贴图,应用于基本球体。他们工作了!它们看起来棒极了,正是我想要的。

问题是,我得到了killed通过质量/内存权衡。

我可以缩小纹理的尺寸以减少内存占用,但低于一定的分辨率,结果(尤其是法线贴图)开始看起来非常糊状和糟糕。该应用程序需要能够至少缩放到地球屏幕宽度的位置,但为了保持山脉和山谷的清晰度,我需要使用大约 6000 x 3000 的 PNG 法线贴图(上图)。我可以缩放漫反射贴图降至约 1000 x 500,但即便如此,我从一个轻轻旋转的球体中得到周期性的内存崩溃,只有一个灯光,没有背景,没有物理,也没有其他几何形状。

Now, I know这是一张超高分辨率的法线贴图。我得到它。但与此同时,它只是一个领域,什么也不做。这甚至与我所见过的其他应用程序完美执行的复杂性相去甚远,即使它们自己有一些非常详细的纹理。似乎必须有某种方法来获取单个对象的高细节表面纹理,而不会使应用程序崩溃。

所以,作为一个 SceneKit 新手,我想知道:有没有什么技巧可以在不使用世界上所有内存的情况下获得良好的 SceneKit 纹理质量?也许是一种处理图像纹理、重新编码文件、更改场景/节点设置等的方法?有什么办法可以用较小的图像获得清晰的质量,或者用相同的图像降低内存使用量?

我很乐意引用一些代码,但现在没有太多可展示的。我以标准方式将纹理应用到 SceneKit 节点,并且它有效。我只是因为缺乏记忆或缺乏图像质量而死去。

谁能帮我吗?


我认为这个想法是明智地分割球体纹理,这样它在任何时候都只显示大约 60 度的纹理,类似于缩放时以高分辨率显示图片的方式。我不知道如何去做,但这是我的猜测。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用高分辨率纹理优化 SceneKit 性能 的相关文章

随机推荐

  • Google Calendar Api 不要求 Oauth Screen

    我最近用过Google Calendar API 我已经创建了项目并生成了凭据 对于本地主机 我使用了以下凭据 installed client id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx apps google
  • 如何将LogCat内容保存到文件?

    我添加了调试字符串 使用 Log d 并希望在 logCat 内容的上下文中查看它们 LogCat 的 保存 图标有一个 保存所选项目 提示 但必须有一种快速方法来保存整个内容 或选择整个内容 但我不知道该怎么做 要将 Log cat 内容
  • 如何在预测后保留 xts 时间序列数据中的日期

    请考虑这个小数据集 library xts library ggplot2 library forecast data lt data frame idDate c 12 12 2012 13 12 2012 14 12 2012 16 1
  • 如何使用 Google Sheets 脚本查找列中第一个匹配项的索引?

    我正在尝试使用 Google Sheets 脚本查找列中第一个匹配项的索引 function getRowIndex var lookupValue car var ss SpreadsheetApp getActiveSpreadshee
  • bean实例化失败;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/log4j/Logger

    我试图让公共日志记录适用于 log4j 配置 但在启动服务器时不断出现异常 当尝试使用 StringUtils 时 我也遇到了类似的异常 该异常可通过另一个公共库获得 org springframework beans factory Be
  • 具有自定义接收器的 Spark 结构化流中的输入行数

    我在结构化流 spark 2 2 0 中使用自定义接收器 并注意到 Spark 为输入行数生成了错误的指标 它始终为零 我的流构建 StreamingQuery writeStream session readStream schema R
  • 如何根据嵌套键值删除JSONB列中的数组元素?

    如何根据对象键之一的值从数组中删除对象 该数组嵌套在父对象内 这是一个示例结构 foo1 bar1 123 bar2 456 bar1 789 bar2 42 foo2 some other stuff 我可以根据以下值删除数组元素吗bar
  • 在 Android/Jetpack Compose 中手动预填充导航后台

    是否可以在 Android Jetpack Compose 中预填充导航后台 我有一个深层链接 可以深入导航层次结构 但是 按后退时 它会导航到根路线 Example Route Main gt Route List gt Route De
  • 请求相机权限 Flutter Web

    我需要在我的网络应用程序中使用相机 所以我想如果用户拒绝在他 她的浏览器上使用相机 我会再次请求它允许相机许可 这是我的代码 import package universal html html dart as html RaisedBut
  • 何时在 Blazor 中使用 ValueChanged 和 ValueExpression?

    我在一些库 MatBlazor Telerik 中看到了这种常见模式ValueChanged and ValueExpression属性 这真的让我很困惑 两者有什么区别 以及什么时候使用它 我想添加一些用例ValueChanged and
  • 我们如何对使用 cy.get() 获取的元素进行切片,然后仅对这些特定元素运行测试?

    cy get li slice 0 5 上面的代码行不起作用 因为它显示错误消息 类型 Chainable 上不存在属性 slice 有没有办法对我们获取的元素进行切片cy get 还有其他几种方法可以做到这一点 添加伪选择器 lt 5 取
  • 流行博客文章排名算法

    我正在建立一个博客聚合器 例如Techmeme http techmeme com它可以从多个博客中查找最受欢迎的帖子 与 Techmeme 不同 我首先从各种 RSS 源聚合博客文章 然后将标题和相关 URL 保存在数据库中 之后 我必须
  • 单击工具提示内容 vuetify

    大家 我有一个问题 可以点击工具提示内容来调用任何函数吗 当我的工具提示打开时 我想单击调用测试功能的范围
  • 光滑的轮播从右到左

    我已经设置了光滑的轮播来连续滚动 但是我需要向相反的方向滚动 添加 RTL 选项似乎不起作用 在这里小提琴 目前从左到右 http jsfiddle net mth2ghod http jsfiddle net mth2ghod funct
  • 要解密的数据超出了该模数的最大值 128 字节。 RSA解密c#

    我不知道如何在使用 X509 证书中的私钥解密文件时解决此异常 要解密的数据超出了该模数 128 字节的最大值 byte data File ReadAllBytes F enc test file1 txt X509Certificate
  • 本机库未在设备上运行

    我已将armeabi armeabi v7a 文件夹放入libs 文件夹中 而不是放入maven 存储库中 但我在使用 libgdx 时遇到以下错误 库 gdx backend jogl natives jar 包含不会在设备上运行的本机库
  • 获取特定 div 的 span 类内的文本

    我正在 T Mobile 网站上查找有关三星 Galaxy S9 的评论 我能够为 HTML 代码创建一个 Beautiful Soup 对象 但我无法获取 span 类中存在的评论文本 还需要遍历评论页面以收集所有评论 我尝试了 2 个代
  • jquery 调用 highcharts 生成错误 17

    我试图从 highcharts com 获取一个仪表 在我已经完成示例的页面上工作 但我看不出我做错了什么 如果有人能指出正确的方向 这是我的小提琴 高图仪表不工作 http jsfiddle net F6XUT 这是我的代码
  • Oracle:结合使用 ROWNUM 和 ORDER BY 子句更新表列

    我想用连续的整数填充表列 所以我考虑使用 ROWNUM 但是 我需要根据其他列的顺序填充它 例如ORDER BY column1 column2 不幸的是 这是不可能的 因为 Oracle 不接受以下声明 UPDATE table a SE
  • 使用高分辨率纹理优化 SceneKit 性能

    我是一位相当有经验的 iOS 开发人员 但完全是 SceneKit 新手 试图在基本应用程序中模拟一些行星 为此 我使用火星 金星等的高分辨率法线和漫反射贴图 应用于基本球体 他们工作了 它们看起来棒极了 正是我想要的 问题是 我得到了ki