Что такое делимые текстуры

Что такое делимые текстуры

Делимые текстуры (Sparse Textures)

Sparse textures (also known as “tiled textures” or “mega-textures”) are textures that are too large to fit in graphic memory in their entirety. To handle them, Unity breaks the main texture down into smaller rectangular sections known as “tiles”. Individual tiles can then be loaded as necessary. For example, if the camera can only see a small area of a sparse texture, then only the tiles that are currently visible need to be in memory.

Иными словами, делимые текстуры ведут себя так же, как и любая другая текстура в шейдере: у них есть свойства множественного отображения (MIP mapping), на них может применяться любой способ фильтрации и т.д. Если вы попытаетесь прочитать данные плитки, не загруженной в память, вы можете получить неопределенный результат (на многих графических процессорах результатом будет черный цвет, однако это не гарантировано).

Not all hardware and platforms support sparse textures. For example, on DirectX systems they require DX11.2 (Windows 8.1) and a fairly recent GPU. On OpenGL they require ARB_sparse_texture extension support. Sparse textures only support non-compressed texture formats.

See the SparseTexture script reference page for further details about handling sparse textures from scripts.

A minimal example project for sparse textures is available here.

Что такое делимые текстуры. Смотреть фото Что такое делимые текстуры. Смотреть картинку Что такое делимые текстуры. Картинка про Что такое делимые текстуры. Фото Что такое делимые текстурыSparse texture as shown in the example project

The example shows a simple procedural texture pattern and lets you move the camera to view different parts of it. Note that the project requires a recent GPU and a DirectX 11.2 (Windows 8.1) system, or using OpenGL with ARB_sparse_texture support.

Источник

Что такое делимые текстуры

Делимые текстуры (Sparse Textures)

Sparse textures (also known as “tiled textures” or “mega-textures”) are textures that are too large to fit in graphic memory in their entirety. To handle them, Unity breaks the main texture down into smaller rectangular sections known as “tiles”. Individual tiles can then be loaded as necessary. For example, if the camera can only see a small area of a sparse texture, then only the tiles that are currently visible need to be in memory.

Иными словами, делимые текстуры ведут себя так же, как и любая другая текстура в шейдере: у них есть свойства множественного отображения (MIP mapping), на них может применяться любой способ фильтрации и т.д. Если вы попытаетесь прочитать данные плитки, не загруженной в память, вы можете получить неопределенный результат (на многих графических процессорах результатом будет черный цвет, однако это не гарантировано).

Not all hardware and platforms support sparse textures. For example, on DirectX systems they require DX11.2 (Windows 8.1) and a fairly recent GPU. On OpenGL they require ARB_sparse_texture extension support. Sparse textures only support non-compressed texture formats.

See the SparseTexture script reference page for further details about handling sparse textures from scripts.

A minimal example project for sparse textures is available here.

Что такое делимые текстуры. Смотреть фото Что такое делимые текстуры. Смотреть картинку Что такое делимые текстуры. Картинка про Что такое делимые текстуры. Фото Что такое делимые текстурыSparse texture as shown in the example project

The example shows a simple procedural texture pattern and lets you move the camera to view different parts of it. Note that the project requires a recent GPU and a DirectX 11.2 (Windows 8.1) system, or using OpenGL with ARB_sparse_texture support.

Источник

Настройки «глобальных параметров» драйвера для видеокарт NVidia на максимальную производительность

Настройки «глобальных параметров» драйвера для видеокарт NVidia на максимальную производительность, без потери в качестве.

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

«Сглаживание гамма коррекции» сглаживает гамму при переходе от светлого тона к темному или же наоборот. Включение дает возможность сглаживать моменты, например, при «свечении» лица персонажа в лучах света (прямой пример игра Devil May Cry 4 с отличной игрой светлый и темных тонов). На производительность не влияет.

Сглаживание прозрачных поверхностей, означает что объекты, не имеющую структуру будут сглаживаться. Например будет сглаживать «прозрачные» места в текстура лестницы, ведь лестницы, например, рисуют единой текстурой, использую альфа-канал для указания прозрачных и не прозрачных мест. На производительность влияет не очень сильно, но если вам производительность все же важнее, можете поставить «Выкл».
В целом же, особой разницы в качестве картинки между ситуациями, когда эта опция включена или выключена, замечено не было.

Бессмысленный параметры, включение которого дает возможность при случае ошибки драйвера отправлять все данные о ошибке и конфигурацию ПК разработчикам NVidia.
(Один из бессмысленных параметров, выключение которого позволит сделать безлимитный доступ драйверу к коду приложения при обработке графики, естественно все ограничения снимаем значением Off (Выкл))

Фильтрация текстур с использованием негатива с масштабируемым уровнем детализации, выставляем значение Clamp (Привязка), что позволит оптимизировать текстурные процедуры путем привязки. Это позволит получить дополнительные 2-3 ФПС в производительности рендеринга, без потери качества. Увеличивает производительности в 3д приложениях.

Фильтрация текстур, позволяет улучшить качество картинки, четкость изображения без понижения производительности в рендеринге, соответственно ставим значение Hight quality (Высокое качество). На производительность практически не влияет.

Тройная буферизация экрана, буферизирует несколько кадров при вертикальной синхронизации, что позволяет более плавно сгладить переход кадров, тем самым снижает производительность в 3д приложениях. Ставим значение Off (Выкл), тем самым отключая ненужную буферизацию. На производительность влияет негативно.

Вертикальная синхронизация кадров, через вертикальный синхроимпульс синхронизируется количество кадров в секунду с частотой обновления вашего монитора, тем самым убирая некий эффект «разрыва картинки» (на экране это будет выглядеть, например, при резком повороте камеры, будто верхняя часть экрана чуть уехала в сторону, по отношению к нижней), при быстрой смене кадров. При этом, за частую сильно падает FPS (кол-во кадров в секунду), оно не столь значительно падает, только если у вас монитор обновляется с частотой выше 100-120 Гц в секунду, но даже при такой частоте все равно FPS снижается на 10-15%. Ставим значение Off (Выкл), тем самым отключая ненужную вертикальную синхронизацию. На производительность влияет негативно.

Ambient occlusion модель затенения, используемая в трёхмерной графике и позволяющая добавить реалистичности изображению за счёт вычисления интенсивности света, доходящего до точки поверхности.
Ambient occlusion чаще всего вычисляется путём построения лучей, исходящих из точки поверхности во всех направлениях, с последующей их проверкой на пересечение с другими объектами.
Этот процесс очень прилично нагружает видеокарту, так что смотрите сами, если видеокарта мощная, можете включить. А если нет, то лучше выключить.
В целом же, на мой взгляд, не стоит этот эффект того, что поедает =) Особой разницы вы все равно не увидите, она есть, но минимальна и заметна только, если внимательно присматриваться и знать, что искать =)

Источник

Что такое делимые текстуры

Делимые текстуры (Sparse Textures)

Sparse textures (also known as “tiled textures” or “mega-textures”) are textures that are too large to fit in graphic memory in their entirety. To handle them, Unity breaks the main texture down into smaller rectangular sections known as “tiles”. Individual tiles can then be loaded as necessary. For example, if the camera can only see a small area of a sparse texture, then only the tiles that are currently visible need to be in memory.

Иными словами, делимые текстуры ведут себя так же, как и любая другая текстура в шейдере: у них есть свойства множественного отображения (MIP mapping), на них может применяться любой способ фильтрации и т.д. Если вы попытаетесь прочитать данные плитки, не загруженной в память, вы можете получить неопределенный результат (на многих графических процессорах результатом будет черный цвет, однако это не гарантировано).

Стоит отметить, что не всякое аппаратное обеспечение и не все платформы поддерживают делимые текстуры. Например, на системах под DirectX для их работы требуется DX11.2 (Windows 8.1) и достаточно новый графический процессор, а под OpenGL для них требуется поддержка расширения ARB_sparse_texture. Также для работы с делимыми текстурами необходима лицензия Unity Pro.

See the SparseTexture script reference page for further details about handling sparse textures from scripts.

A minimal example project for sparse textures is available here.

Что такое делимые текстуры. Смотреть фото Что такое делимые текстуры. Смотреть картинку Что такое делимые текстуры. Картинка про Что такое делимые текстуры. Фото Что такое делимые текстурыSparse texture as shown in the example project

Источник

Потребность в потоковых ресурсах

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

Потоковые ресурсы или делимые текстуры

Потоковые ресурсы (называемые ресурсы плиток в Direct3D 11) — это крупные логические ресурсы, которые используют небольшое количество физической памяти.

Другое название потоковых ресурсов — делимые текстуры. «Делимые» означает одновременно мозаичный характер ресурсов, а также, возможно, основную причину разбиения их на плитки — не все из них должны сопоставляться одновременно. На самом деле приложение вполне может создать потоковый ресурс, в котором намеренно не созданы данные для всех регионов и MIP. Таким образом само содержимое может быть разреженным, и сопоставление содержимого в памяти графического процессора (GPU) в определенный момент будет представлять собой подмножество (еще более разреженное).

Без размещения на плитках управление выделение памяти осуществляется на уровне вложенных ресурсов

В графической системе (представляющей собой операционную систему, видеодрайвер и графическое оборудование), которая не поддерживает потоковые ресурсы, сама система управляет выделением памяти Direct3D на уровне вложенных ресурсов.

Для буфера весь буфер является вложенным ресурсом.

Для текстуры, (например, Texture2D), каждый уровень MIP является вложенным ресурсом; для массива текстур (например, Texture2DArray) каждый уровень MIP определенного фрагмента массива является вложенным ресурсом. Графическая система лишь предоставляет возможность управлять сопоставлениями выделения памяти на этом уровне вложенных ресурсов. В контексте потоковых ресурсов под «сопоставлением» понимается обеспечение доступности данных для графического процессора.

Без размещения на плитках невозможен отдельный доступ к небольшой части цепочки MIP-карт.

Предположим, что приложение знает, что определенной операции отрисовки необходим доступ лишь к небольшой части цепочки MIP-карт (возможно, даже не к полной области определенной MIP-карты). В идеале приложение должно сообщить графической системе об этой потребности. Тогда графическая система обеспечит сопоставление лишь необходимого количества памяти графического процессора, не задействуя лишнюю память.

На самом деле без поддержки потоковых ресурсов графической системе можно сообщить лишь о памяти, которую графическому процессору необходимо сопоставить на уровне вложенных ресурсов (например, диапазона полных уровней MIP-карт, к которым может осуществляться доступ). В графической системе также невозможен отказ от требования выделения памяти, поэтому возможно использование излишне большого количества памяти графического процессора для полного сопоставления всех вложенных ресурсов перед выполнением команды отрисовки, ссылающейся на какую-либо часть памяти. Это только одна проблема, которая усложняет использование большого количества выделенной памяти в Direct3D без поддержки потоковых ресурсов.

Подкачка программного обеспечения для разбиения поверхности на мелкие плитки

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

Direct3D поддерживает поверхности Texture2D размером до 16 384 пикселей по заданной стороне. Изображение, размером 16 384 пкс в ширину, 16 384 в высоту и 4 байтами на пиксель потребляет 1 ГБ видеопамяти (и добавление MIP-карт удваивает это значение). На практике редко возникает необходимость использовать в одной операции отрисовки весь 1 ГБ памяти.

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

Существенный недостаток этого подхода заключается в том, что оборудованию ничего не известно о происходящей подкачке: когда на экране необходимо отобразить часть изображения, состоящего из плиток, оборудование не знает, как произвести фильтрацию плиток с фиксированной функцией (т. е. эффективно). Это означает, что приложение, управляющее собственным программным разбиением на плитки, вынуждено использовать ручную фильтрацию текстур в коде шейдера (что требует очень большого количества ресурсов, если требуется высококачественная анизотропная фильтрация) и (или) тратить память на создание вокруг плиток полей, которые содержат данные из соседних плиток, чтобы аппаратная фильтрация с фиксированной функцией могла продолжать оказывать некоторую помощь.

Плиточное представление выделения памяти для поверхностей как первоклассная возможность

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

Однако для того, чтобы решение было полнофункциональным, необходимо каким-то образом решить проблему того, что вне зависимости от наличия поддержки разбиения поверхности на плитки максимальные размеры поверхности в данный момент составляют 16 384 пикселей, что значительно меньше 128 тысяч, которые уже требуются приложениям. Одним из подходов может быть просто требование поддержки текстур большего размера оборудованием, однако такой подход связан с значительными расходами и компромиссами.

Пути фильтрации текстур и отрисовки Direct3D уже насыщены в плане точности ввиду поддержки текстур размером 16 тысяч пикселей и других требований, таких как поддержка размеров окна просмотра, выходящих за пределы поверхности в время отрисовки, или поддержка обтекания текстурой края поверхности во время фильтрации. Существует возможность найти компромисс так, чтобы по мере увеличения размера текстуры за пределы 16 тысяч пикселей определенным образом снижались функциональные возможности или точность. Однако даже при этой уступке могут потребоваться дополнительные затраты на оборудование в плане способности всей аппаратной системы к переходу к текстурам увеличенного размера.

Проблемы с крупными текстурами: точность расположения на поверхности

Со значительным увеличением размера текстур возникает проблема, состоящая в том, что координаты текстуры одинарной точности с плавающей запятой (и связанные интерполяторы для поддержки растеризации) не располагают достаточной точностью, чтобы безошибочно указывать расположение на поверхности. Это приводит к дрожанию при фильтрации текстур. Затратным решением является требование поддержки интерполятора двойной точности, но при наличии разумной альтернативы оно представляется избыточным.

Включение совместного использования памяти несколькими ресурсами различных размеров

Другим сценарием, который может использоваться благодаря потоковой передаче ресурсов, является включение совместного использования памяти несколькими ресурсами различных размеров или форматов. Иногда приложения имеют особые наборы ресурсов, которые не должны использоваться одновременно, или ресурсы, которые создаются только для очень краткого использования и затем удаляются, после чего создаются другие ресурсы. Общим местом «потоковых ресурсов» является возможность указывать на одну и ту же (перекрывающуюся) память нескольким различным ресурсам. Другими словами, создание и уничтожение «ресурсов» (которые определяют размер, формат и т. д.) может быть отделено от управления памятью, выделяемой для этих ресурсов, с точки зрения приложения.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *