Оптимизация производительности SceneKit с текстурами высокого разрешения

Я довольно опытный разработчик iOS, но я новичок в SceneKit, пытаюсь смоделировать некоторые планеты в базовом приложении.

Для этого я использую нормальные и диффузные карты Марса, Венеры и т. Д. С высоким разрешением, которые применяются к основным сферам. И они работают! Они выглядят потрясающе, именно для этого я и собирался.

Проблема в том, что меня убивает компромисс между качеством и памятью.

Я могу уменьшить размеры текстур, чтобы уменьшить объем памяти, но ниже определенного разрешения результаты (особенно карта нормалей) начинают выглядеть очень мягкими и ужасными. Приложение должно иметь возможность масштабирования, по крайней мере, до того места, где планета имеет ширину экрана, но для поддержания четкости в горах и долинах мне нужно использовать карту нормалей PNG (см. Выше) примерно 6000 x 3000. Я могу масштабировать диффузная карта примерно до 1000 x 500, но, несмотря на это, я получаю периодические сбои памяти от одной вращающейся сферы, с одним источником света, без фона, без физики и без другой геометрии.

Теперь я знаю, что это нормальная карта со сверхвысоким разрешением. Я понял Но в то же время это всего лишь одна сфера, ничего не делающая. Это даже не близко к той сложности, которую я видел в других приложениях, выполняемых безупречно, даже с некоторыми довольно подробными собственными текстурами. Похоже, должен быть какой-то способ получения высокодетализированных текстур поверхности для одного объекта, без сбоев приложения.

Итак, будучи новичком в SceneKit, я задаюсь вопросом: есть ли уловки для получения хорошего качества текстур SceneKit без использования ВСЕХ памяти в мире? Может быть, способ обработки текстур изображений, перекодирование файлов, изменение настроек сцены / узла и т. Д.? Можно ли вообще получить четкое качество с меньшими изображениями или уменьшить использование памяти с теми же изображениями?

Я бы с радостью процитировал какой-то код, но сейчас особо нечего показать. Я применяю текстуры к узлу SceneKit стандартным способом, и он работает. Я просто умираю от недостатка памяти или от качества изображения.

Может кто-нибудь мне помочь?

1 ответ

Я думаю, что идея состоит в том, чтобы сегментировать сферу по текстуре, чтобы она отображала только 60 градусов текстуры в любое время, подобно тому, как вы отображаете изображения с высоким разрешением при масштабировании. Я не уверен, как это сделать, но это мое предположение.

Другие вопросы по тегам