2014-09-24 5 views
1

У меня есть бесконечная игра-головоломка 3D, встроенная в Unity3D, работающая на iOS, Android и Windows Phone.Unity3d Огромные текстуры использования памяти

Он отлично работает на Windows-телефонах с памятью 1014 МБ и выше, но при этом он сработает, как только он запустится (см. Сообщение об ошибке в Visual Studio внизу этого сообщения).

Глядя на профилировщик, я вижу, что использование памяти для текстур чрезвычайно велико, зная, что я могу получить максимум 180 МБ ОЗУ на Lumia 520, например, из профилировщика видно, что текстуры занимают только 359 МБ , и даже на восьмой res (снимок экрана ниже) они все равно занимают 232 МБ! Я прошел через каждую текстуру, сделав ее такой маленькой и сжатой, как я могу, я делаю что-то действительно не так? Как я могу узнать больше о том, какие текстуры являются проблемами?

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

Любые нажатия в нужном направлении действительно помогут, спасибо!

memory usage

Визуальный журнал аварии консоль дамп Студия:

'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: DefaultDomain): Loaded 'C:\windows\system32\mscorlib.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Windows.RuntimeHost.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Windows.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Net.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Xml.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\EndlessRunner.DLL'. Symbols loaded. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\Microsoft.Phone.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\Microsoft.Phone.Interop.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\WinRTBridge.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\BridgeInterface.winmd'. Module was built without symbols. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\UnityPlayer.winmd'. Module was built without symbols. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\WinMetadata\Windows.winmd'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Core.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Runtime.ni.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
Build from 'release/4.5/release' branch, version is '4.5.0f6 (fd4616464986)' (Release build). 

Physical memory: 395 MB, commited memory limit: 180 MB. 

PlayerConnection initialized from C:/Data/Programs/{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}/Install/Data (debug = 0) 

PlayerConnection initialized network socket : 0.0.0.0 55444 

Multi-casting "[IP] 192.168.0.19 [Port] 55444 [Flags] 2 [Guid] 93005236 [EditorId] 1016877170 [Version] 1048832 [Id] WP8Player(192.168.0.19) [Debug] 0" to [225.0.0.222:54997]... 

Direct3D: 

    Version: Direct3D 11.0 [level 9.3] 

    Renderer: Qualcomm Adreno 305 (WDDM v1.2) (ID=0x30303330) 

    Vendor: Qualcomm 

    VRAM:  96 MB 

Initialize engine version: 4.5.0f6 (fd4616464986) 

'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\UnityEngine.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\Assembly-CSharp-firstpass.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\Assembly-CSharp.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\BFSWP8Goodies.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\GPGSUtils.DLL'. Cannot find or open the PDB file. 
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{DFE540D3-80C1-4CFF-BFCA-CE252BC4EECE}\Install\WinRTLegacy.DLL'. Module was built without symbols. 
Could not allocate memory: System out of memory! 
Trying to allocate: 1398128B with 32 alignment. MemoryLabel: Texture 
Allocation happend at: Line:411 in C:/BuildAgent/work/aeedb04a1292f85a/Runtime/Graphics/Texture2D.cpp 
Memory overview 


[ ALLOC_DEFAULT ] used: 5715133B | peak: 5715181B | reserved: 6570457B 

[ ALLOC_GAMEOBJECT ] used: 43508B | peak: 43508B | reserved: 52731B 

[ ALLOC_GFX ] used: 155628390B | peak: 155628390B | reserved: 155631656B 

[ ALLOC_PROFILER ] used: 5028B | peak: 5028B | reserved: 12158B 

Could not allocate memory: System out of memory! 
Trying to allocate: 1398128B with 32 alignment. MemoryLabel: Texture 
Allocation happend at: Line:411 in C:/BuildAgent/work/aeedb04a1292f85a/Runtime/Graphics/Texture2D.cpp 
Memory overview 


[ ALLOC_DEFAULT ] used: 5715133B | peak: 5715181B | reserved: 6570457B 

[ ALLOC_GAMEOBJECT ] used: 43508B | peak: 43508B | reserved: 52731B 

[ ALLOC_GFX ] used: 155628390B | peak: 155628390B | reserved: 155631656B 

[ ALLOC_PROFILER ] used: 5028B | peak: 5028B | reserved: 12158B 


(Filename: C:/BuildAgent/work/aeedb04a1292f85a/Runtime/Allocator/MemoryManager.cpp Line: 909) 


The program '[2540] TaskHost.exe' has exited with code -2147483645 (0x80000003). 
+0

Хорошо, так что реальный вопрос: сколько текстур у вас есть, каковы их размеры, они сжаты и вы подсчитали, соответствует ли использование текстурной памяти сообщением путем профилирования расчетам? Подсказка: для несжатых текстур размер в байтах: ширина * высота * (глубина цвета бит/8) = байты. Например, несжатая текстура 1024x1024x32 занимает 4 МБ памяти. Это будет вдвое меньше, если вы уменьшите его до 16 цветов bpp. – LearnCocos2D

ответ

0

Я прошел через все текстуры, что делает его, как малые и прессуют, как я могу, я делаю что-то действительно неправильно здесь? Как я могу узнать больше о том, какие текстуры являются проблемами?

Hum .. Я не думаю, что вы делаете что-то не так. Ограничения памяти на аппаратном уровне - проблемы с оборудованием, а не проблемы с художниками. Тем не менее, художник должен справиться с ограничениями, для того, чтобы быть в состоянии справиться с аппаратными ограничениями, то:

  1. Если вы 3D вы можете: убедиться, что ваши модели имеют как меньше материалов, как это возможно. Чем больше материалов у вас есть на модели, тем более вероятно, что для такой модели потребуется больше отдельных текстур. Если вам все еще нужно, убедитесь, что другие модели могут поделить одни и те же материалы, если это возможно, или поделиться некоторыми сетчатыми группами, чтобы вы могли оптимизировать обратные вызовы tad.

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

  3. Как и в случае с LearnCocos2D, бит в цвете является огромным *, если даже текстуры «маленькие» не используют 32-битные текстуры, например.

  4. Разрешение текстуры или текселя являются ключевыми. Если вы используете персонажа, а ваш персонаж невелик на мобильном экране, тогда вы должны быть хороши с действительно маленькими текстурами. Например, в некоторых играх персонаж имеет высоту 6 дюймов, а 8-футовая стена переводится в текстуру размером 512x512 пикселей с точки зрения покрытия, например, патча кирпича в секции стены, который может выглядеть довольно хорошо, в отличие от персонажа. Так, например, рост выше в такой 8-футовой эквивалентной высоте стены, в отличие от такого характера, уже начнет тратить ресурсы, и визуальное воздействие будет минимальным или вообще не заметным. Важно определить разрешение текселя для 3D-игры для мобильных устройств, чтобы иметь возможность лучше планировать ваши текстурирующие ресурсы.

    Я рекомендую вам этот учебник, если вы можете, его действительно информативный об этом вопросах: http://www.digitaltutors.com/tutorial/1772-Creating-Professional-Studio-Game-Assets-for-Production-in-3ds-Max-and-Unity

  5. Тогда, наконец, в вашем случае, поскольку его бесконечные вам действительно нужно использовать включить/отключить вместо уничтожения, а также убедитесь, расстояние от камеры - это именно то, что вам нужно было, иначе вы будете загружать много игроков невидимыми объектами без необходимости, это тоже может быть бумером ... просто говорю.

Смежные вопросы