Clipmaps Макаров Евгений. NVIDIA Confidential Текстурирование рельефа Тайлинг с использованием тайлсетов Использование альфа-смешивания Текстурирование.

Презентация:



Advertisements
Похожие презентации
Программирование графических процессоров Безгодов Алексей Алексеевич НИИ НКТ, СПбГУ ИТМО.
Advertisements

Растровая графика. Понятие «Растровая графика» Понятие «пиксел» От англ. Picture Element Разновидности пикселов: Точка экрана (видео пиксел) Точка при.
Введение в сжатие видео Дмитрий Ватолин Московский Государственный Университет CS MSU Graphics&Media Lab Version 2.4.
Анализ встраивания информации в DC компонент формата JPEG. Цицаров Николай.
ГРАФИКА ВЕКТОРНАЯ РАСТРОВАЯ ВЕКТОРНАЯ РАСТРОВАЯ При использовании растровой графики изображение описывается как совокупность точек различного цвета-
Фрактальное сжатие.. Введение Изображения и иллюстрации используются повсеместно. Проблема, связанная с большим объемом для их обработки и хранения, появилась.
Форматы представления графических документов (векторная и растровая графика) Автор: Бердов В.А. ФИТ, НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ.
Лекция 1 Алгоритмы сжатия изображений Медведева Елена Викторовна дисц. Цифровая обработка изображений.
Кодирование информации Двоичное кодирование графической информации.
1 Массивы 2 Опр. Массивом называется совокупность однотипных данных, связанных общим именем. Основные характеристики массива: 1. Имя массива 2. Тип компонентов.
Видео в МСС Иванов Сергей, гр Содержание Аналоговые системы Цифровые системы Видео - приложения в МСС.
Сжатие информации - проблема, имеющая достаточно давнюю историю, гораздо более давнюю, нежели история развития вычислительной техники, которая обычно.
Двоичное кодирование графической информации в компьютере.
Вычисление производных (численное дифференцирование)
Графические редакторы. РАСТРОВЫЕ ВЕКТОРНЫЕ Компьютерные изображения.
Применение MPEG-7 для классификации и поиска визуальных данных Вихровский Кирилл Graphics & Media Lab.
КОМПЬЮТЕРНАЯ ГРАФИКА. РАСТРОВЫЕ ВЕКТОРНЫЕ Компьютерные изображения.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Тема: Кодирование и обработка графической информации.
Выбор форматов для хранения архивных и пользовательских дигитальных копий в Латвийской академической библиотеке. Айварс Лиепа, Латвийская Академическая.
Транксрипт:

Clipmaps Макаров Евгений

NVIDIA Confidential Текстурирование рельефа Тайлинг с использованием тайлсетов Использование альфа-смешивания Текстурирование с использованием оригинальных изображений высокого разрешения

NVIDIA Confidential Тайлинг Игры основанные на тайлах Warcraft Civilization Heroes of Might and Magic и т.д. Возможность использования процедурных текстур Маленьких размер используемых данных Необходимость создания tile setов Ограниченные возможности при визуализации Сложность использования и внесения изменений

NVIDIA Confidential Альфа-смешивание Использует предварительно подобранные наборы текстур для смешивания

NVIDIA Confidential Альфа-смешивание - результаты Возможность создавать сложные текстуры Ограниченный набор исходных текстур

NVIDIA Confidential Использование больших текстур Неограниченная сложность What you see is what you get Это просто

NVIDIA Confidential Авиасимуляторы уменьшение детализации Ландшафт используемая информация

NVIDIA Confidential Случай FPS Используемая информация зависит только от позиции наблюдателя В каждом кадре используется небольшая часть информации из мир-уровней Ландшафт уменьшение детализации

NVIDIA Confidential Структура клип мара

NVIDIA Confidential C Тороидальное обновление ABCD E F G ABCD E F G D E F G ABCD E CD E E F G ABCD центр стека первоначальный уровень с новыми данными используем wrap(repeat) адресацию новый центр не обновляемые данные не затрагиваются

NVIDIA Confidential I M I Тороидальное обновление (шаг 2) ABCD E F G E F BC D E F BCD уровень с новыми данными используем wrap(repeat) адресацию E F G ABCD HIJK L M N HIJK L M N HIJK L JK L M JK L M N HI JK L M N используем новую позицию центра для определения данных для загрузки

NVIDIA Confidential Хранение исходных данных Высокая степень сжатия необходимость хранения больших объемов данных большее сжатие позволяет использовать более детальные карты Доступность возможность произвольного доступа в реальном времени Простота редактирования формат должен позволять легко вносить изменения

NVIDIA Confidential Использование JPEG компрессии Преимущества Высокий уровень сжатия исходного изображения Возможность контроля качества и размера итогового изображения Ускорение декомпрессии с использованием GPU Широкая распространенность формата

NVIDIA Confidential Использование JPEG компрессии Недостатки Необходимость предварительной обработки на стороне CPU Передача большого количества данных на GPU (возможны оптимизации)

NVIDIA Confidential Clipmap в DX10 Для пирамиды используем 2D текстуру с мир- уровнями Для стека используем массив текстур Текстура с мир-уровнями Массив текстур(Texture array) Пирамида Стек

NVIDIA Confidential Texture array в DX10 Структура, содержащая в себе набор обычных текстур одинакового размера и формата Создание ID3D10Texture2D *pTexture; D3D10_TEXTURE2D_DESC texDesc;... texDesc.ArraySize = levelsNum;... pd3dDevice->CreateTexture2D( &texDesc, NULL, &pTexture ); Адресация _Texture.Sample( _Sampler, float3( texCoord.xy, level ) );

NVIDIA Confidential Порядок обновления данных Подготовка исходных данных Определение новых областей для загрузки Выполнение DCT преобразований для JPEG декомпрессии Нахождение областей требующих обновления Копирование данных на стороне GPU Кэширование данных

NVIDIA Confidential Адресация к стеку Вычисление требуемого мир-уровня используя инструкции ddx и ddy float2 dx = ddx(input.texCoord * textureSize.x); float2 dy = ddy(input.texCoord * textureSize.y); float d = max( sqrt( dx.x * dx.x + dx.y * dx.y ) ), sqrt( dy.x * dy.x + dy.y * dy.y ) ) ); float mipLevel = log2( d ); Вычисление текстурных координат float2 clipTexCoord = input.texCoord / pow( 2, iMipLevel ); clipTexCoord.x *= scaleFactor.x; clipTexCoord.y *= scaleFactor.y; clipTexCoord += 0.5f Чтение из текстуры float4color = StackTexture.Sample( stackSampler, float3( clipTexCoord, iMipLevel ) );

NVIDIA Confidential Выбор размера стека Используемое разрешение Относительное положение наблюдателя и способы его перемещения Требуемая производительность

NVIDIA Confidential Не хватает данных ? Данные всегда есть в менее детальных уровнях Требуемые данные всегда можно найти в менее детализированных уровнях Данные есть в стеке Данные есть в пирамиде

NVIDIA Confidential Недостаточный размер стека

NVIDIA Confidential Определение корректного уровня Находим мир-уровень, размер которого достаточен для чтения с использованием вычисленных текстурных координат float GetMinimumStackLevel( float2 coordinates ) { float2 distance; distance.x = abs( coordinates.x - g_StackCenter.x ); distance.x = min( distance.x, distance.x ); distance.y = abs( coordinates.y - g_StackCenter.y ); distance.y = min( distance.y, distance.y ); return max( log2( distance.x * texSize.x * 4.0 / stackSize ), log2( distance.y * texSize.y * 4.0 / stackSize) ); } центр стека текстурные координаты расстояние

NVIDIA Confidential Недостаточный размер стека

NVIDIA Confidential Используем данные из стека

NVIDIA Confidential Эффективность хранения* Размеры текстур Полная текстура clipmap13.3(16%)17.3(5%)25.3(

NVIDIA Confidential JPEG компрессия RGB -> YCbCr R = Y * (Cr ); G = Y * (Cb ) * (Cr ); B = Y * (Cb );

NVIDIA Confidential JPEG компрессия RGB -> YCbCr Уменьшение разрешения цветовых составляющих Глаз менее чувствителен к цвету, более чувствителен к яркости Уменьшаем разрешение для цветовых каналов Каналы обрабатываются независимо

NVIDIA Confidential JPEG компрессия RGB -> YCbCr Уменьшение разрешения цветовых составляющих Разбиение на блоки 8x8

NVIDIA Confidential JPEG компрессия Уменьшение разрешения цветовых составляющих Разбиение на блоки 8x8 DCT RGB -> YCbCr Кодируемые блоки представляются в виде линейной комбинации представленных квадратов

NVIDIA Confidential JPEG компрессия Уменьшение разрешения цветовых составляющих Разбиение на блоки 8x8 DCT Квантование RGB -> YCbCr

NVIDIA Confidential JPEG компрессия RGB -> YCbCr Уменьшение разрешения цветовых составляющих Разбиение на блоки 8x8 DCT Квантование Зигзагообразная перестановка Перестановка используется для группировки компонент по частотам 26, 3, 0, 3, 2, 6, 2, 4, 1, 4, 1, 1, 5, 1, 2, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

NVIDIA Confidential JPEG компрессия RGB -> YCbCr Уменьшение разрешения цветовых составляющих Разбиение на блоки 8x8 DCT Квантование Зигзагообразная перестановка Кодирование нулей Кодирование Хаффмана Вычисляем на GPU Вычисляем на CPU

NVIDIA Confidential Преимущества использования Возможность использования текстур больших размеров Легкость интеграции в существующие проекты Возможность настройки баланса между качеством и быстродействием Предлагает определенный уровень абстракции от используемой геометрии Не требует сложной предварительной подготовки

NVIDIA Confidential Ограничения Требование локальности использования данных Наибольшая эффективность достигается при последовательном использовании исходных данных

NVIDIA Confidential Почему Array, a не 3D текстура? Возможность анизотропной фильтрации Билинейная фильтрация 3D текстур Обновление 3D текстуры ??? Нет !!!

NVIDIA Confidential Cсылки [1] Christopher C. Tanner, Christopher J. Migdal, and Michael T. Jones The Clipmap: A Virtual Mipmap, Silicon Graphics Computer Systems [2] NVIDIA DirectX SDK 10 Clipmaps demo

NVIDIA Confidential Вопросы