Clipmaps презентация

Содержание

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

Слайд 1Clipmaps
Макаров Евгений


Слайд 2Текстурирование рельефа
Тайлинг с использованием тайлсетов

Использование альфа-смешивания

Текстурирование с использованием оригинальных изображений высокого

разрешения

Слайд 3Тайлинг
Игры основанные на тайлах
Warcraft
Civilization
Heroes of Might and Magic и т.д.

Возможность использования

процедурных текстур
Маленьких размер используемых данных

Необходимость создания “tile set’ов”
Ограниченные возможности при визуализации
Сложность использования и внесения изменений




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


Слайд 5Альфа-смешивание - результаты
Возможность создавать сложные текстуры









Ограниченный набор исходных текстур


Слайд 6Использование больших текстур
Неограниченная сложность

What you see is what you get ☺

Это

просто

Слайд 7



Авиасимуляторы
0
1
2
3





0
1
2
3
уменьшение детализации
Ландшафт
используемая информация


Слайд 8
Случай FPS
Используемая информация зависит только от позиции наблюдателя








В каждом кадре используется

небольшая часть информации из мип-уровней









Ландшафт

уменьшение детализации


Слайд 9Структура клипмапа


Слайд 10C

Тороидальное обновление
A
B
C
D
E
F
G




A
B
C
D
E
F
G




D
E
F
G



A
B
C
D
E



C
D
E


E
F
G
A
B
C
D

центр стека
первоначальный
уровень с новыми
данными
используем wrap(repeat)
адресацию
новый центр
необновляемые
данные
не затрагиваются


Слайд 11I
M
I
Тороидальное обновление (шаг 2)
A
B
C
D
E
F
G






E
F
B
C

D


E
F
B
C
D

уровень с новыми
данными
используем wrap(repeat)
адресацию
E
F
G
A
B
C
D
H

I
J
K
L
M
N


H
I
J
K
L
M
N
H
I
J
K
L
J
K
L
M
J
K
L
M
N
H
I
J
K
L
M
N
используем новую
позицию центра

для
определения данных
для загрузки

Слайд 12Хранение исходных данных
Высокая степень сжатия
необходимость хранения больших объемов данных
большее сжатие позволяет

использовать более детальные карты

Доступность
возможность произвольного доступа в реальном времени

Простота редактирования
формат должен позволять легко вносить изменения

Слайд 13Использование JPEG компрессии
Преимущества

Высокий уровень сжатия исходного изображения
Возможность контроля качества и размера

итогового изображения
Ускорение декомпрессии с использованием GPU
Широкая распространенность формата




Слайд 14Использование JPEG компрессии
Недостатки

Необходимость предварительной обработки на стороне CPU
Передача большого количества данных

на GPU (возможны оптимизации)


Слайд 15Clipmap в DX10
Для пирамиды используем 2D текстуру с мип-уровнями
Для стека используем

массив текстур









Текстура с мип-уровнями

Массив текстур(Texture array)

Пирамида

Стек


Слайд 16Texture array в DX10
Структура, содержащая в себе набор обычных текстур одинакового

размера и формата

Создание
ID3D10Texture2D *pTexture;
D3D10_TEXTURE2D_DESC texDesc;
...
texDesc.ArraySize = levelsNum;
...
pd3dDevice->CreateTexture2D( &texDesc, NULL, &pTexture );

Адресация
_Texture.Sample( _Sampler, float3( texCoord.xy, level ) );




Слайд 17Порядок обновления данных
Подготовка исходных данных

Определение новых областей для загрузки

Выполнение DCT преобразований

для JPEG декомпрессии

Нахождение областей требующих обновления

Копирование данных на стороне GPU


Кэширование данных

Слайд 18Адресация к стеку
Вычисление требуемого мип-уровня используя инструкции 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
Чтение из текстуры
float4 color = StackTexture.Sample( stackSampler, float3( clipTexCoord, iMipLevel ) );


Слайд 19Выбор размера стека
Используемое разрешение

Относительное положение наблюдателя и способы его перемещения

Требуемая производительность



Слайд 20Не хватает данных ?
Данные всегда есть в менее детальных уровнях

Требуемые данные

всегда можно найти в менее детализированных уровнях

Данные есть в стеке

Данные есть в пирамиде


Слайд 21Недостаточный размер стека


Слайд 22Определение корректного уровня
Находим мип-уровень, размер которого достаточен для чтения с использованием

вычисленных текстурных координат

float GetMinimumStackLevel( float2 coordinates )
{
float2 distance;

distance.x = abs( coordinates.x - g_StackCenter.x );
distance.x = min( distance.x, 1.0 - distance.x );

distance.y = abs( coordinates.y - g_StackCenter.y );
distance.y = min( distance.y, 1.0 - distance.y );

return max( log2( distance.x * texSize.x * 4.0 / stackSize ),
log2( distance.y * texSize.y * 4.0 / stackSize) );
}




центр стека

текстурные
координаты

расстояние



Слайд 23Недостаточный размер стека


Слайд 24Используем данные из стека


Слайд 25Эффективность хранения*
* Данные приводятся в мегабайтах для 32 битных текселей


Слайд 26JPEG компрессия
RGB -> YCbCr

R = Y + 1.402 * (Cr -

128.0);
G = Y - 0.34414 * (Cb - 128.0) - 0.71414 * (Cr - 128.0);
B = Y + 1.772 * (Cb - 128.0);

Слайд 27JPEG компрессия
RGB -> YCbCr
Уменьшение разрешения цветовых составляющих

Глаз менее чувствителен к цвету,
более

чувствителен к яркости

Уменьшаем разрешение для цветовых каналов

Каналы обрабатываются независимо


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


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

представляются в виде линейной комбинации представленных квадратов

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


Слайд 31JPEG компрессия
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


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

нулей

Кодирование Хаффмана



Вычисляем на GPU

Вычисляем на CPU


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

баланса между качеством и быстродействием
Предлагает определенный уровень абстракции от используемой геометрии
Не требует сложной предварительной подготовки

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


Слайд 35Почему Array, a не 3D текстура?
Возможность анизотропной фильтрации

Билинейная фильтрация 3D текстур

Обновление

3D текстуры ??? Нет !!!


Слайд 36Cсылки
[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

Слайд 37Вопросы


Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика