Графични операции в игрите. Какво ще представим?. Показване на сцена, Стъпка по стъпка Текстуриране. Основни принципи Прости модели за осветление Прости светлини Normal Maps. DirectX. EmptyProject в dxsdk samples Използва DXUT – няколко класа, които помагат настройката на устройствата
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Какво ще представим? • Показване на сцена, Стъпка по стъпка • Текстуриране. Основни принципи • Прости модели за осветление • Прости светлини • Normal Maps
DirectX • Текстуриране • Текстурите имитират геометрия • Изображение от R3 в R2
DirectX • Видове проекции • Сферична • Цилиндрична • Равнинна • Всички проекции по моделите се правят от артисти • Една от най-гадните работи за тях • Трябва да се направи проекцията така, че да може да се рисува върху нея.
DirectX 1.0 Малките триъгълници в синьо 0.0 0.0 1.0
DirectX Четене от текстуритев пикселните shader-и: float4 result = tex2D( g_samScene, Tex.xy ); Ако триъгълникът е много голям и трябва да се увеличи текстурата се прави линейно филтриране
DirectX Когато триъгълникът е с много малки размери:
DirectX Когато триъгълникът е с много малки размери: Представлява разстоянието между две mip нива
DirectX • Когато се построяват mip нивата трябва да се има предвид • Ако е за цветови текстури да се внимава с Gamma Space. Иначе по-долните mip нива стават по-тъмни. • Добре е да не се прилага Nearest Neighbour, а Gaussian примерно • Ако пък се правят mip нива за Normal Maps, тогава всяко ниво се генерира отново от геометрията Когато хардуерът чете от текстура с mip нива, построява (u,v,d), Намира d между кои mip нива е, чете билинейно от всяко и после линейно интерполира прочетените стойности с d
DirectX • Хардуерни компресии • DXT1/3 – блокова текстура (DDS) за фото реалистични изображения • 3Dc – Разработка на ATI за Normal Maps (текстури, в които вместо цветове има вектори) • DXT5_NM Tangent Space Object Space
DirectX • DXT1 • Изображението се разделя на блокове от 4x4 пиксела • За всеки блок се записват 2 цвята, минимум и максимум от цветовете в блокчето във формат (5:6:5) • След това от правата между двата цвята се избират други два цвята, които са на равно разстояние по правата • Това дава избор от 4 цвята за всеки един от 16-те пиксела • Всеки пиксел се кодира с 2 бита: • 16*2=32 бита общо + 2 * 16 бита = 64 бита за 16 пиксела.или 4 бита за пиксел • DXT1 – прави компресия типично 6:1, защото пикселите са 24 бита иначе • С DXT1 се текстурира по-бързо, защото е по-малка текстура и попадат повече пиксели в текстурните кешове на GPU
DirectX • DXT 5 компресия. За изображения с гладък алфа канал • Използва се за текстури с алфа канал • Цветния канал се компресира като при DXT1, а алфа канала • се разделя на блокове от 4x4 пиксела и се компресира отделно • Избират се две точки от 16-те (може крайните), • Генерират се между тях 6 точки на равни разстояния • И всяка една от другите точки получава 3 битов индекс, коя от 8-те точки приближава • Така за алфа канала се получава : • 2*8 = 16 бита (крайните точки) • 16 * 3 = 48 бита (средните точки)
DirectX • DXT 5 компресия за Normal maps. • Пример за компресия на сигнал в текстура • Normal map съдържа тройки нормализирани вектори • (x,y,z), (x^2+y^2+z^2=1) • Z може да се изчисли от X,Y • Y се компресира като цветови компонент • X се компресира като алфа компонент. • С малко загуба на качеството се постига добра компресия от 4:1 Tangent Space
DirectX • 3DC компресия за Normal maps.(Вече в DirectX 10) • Постига 4:1 компресия като DXT5_NM, но с по-добро качество • Абсолютно аналогична на DXT5, компресира обаче и X и Y все едно са алфа канали на DXT5, в DXT5 Y компонентата е с 6 бита, а тук е с 8 бита
DirectX • Основни принципи за използване на текстури • Да се слагат линейни сигнали или сигнали, които се апроксимират с линейни функции • Ако ще се използва DXТ5 компресия, различните компоненти, трябва да са независими.
DirectX • Нормали Вектор перпендикулярен на равнината определена от трите вертекса с дължина 1.
DirectX • Всяка нормала е зададена в object space MeshNormals { 0.000;-0.793;0.609;, -0.000;0.994;-0.112;, } • И се задава за всеки вертекс. Обикновено автоматично се прави от 3DS Max, XSI, Maya .....
DirectX • Дифузна повърхност и светлина само с посока (слънцето) • Intensity=saturate( dot(L,N) ); • DiffuseColor=DiffuseTexture*Intensity; • L и N, могат да са зададени в различни координатни системи. • Тогава чрез World, се минава от едната в другата.
DirectX • В DirectX, нормалите се изчисляват с: • D3DXComputeNormals; • тангентите и бинормалите се изчисляват с • D3DXComputeTangentFrameEx • Може да се задава, само тангенти или само бинормали