High Level Shader Language (HLSL) (HLSL)

Transkript

High Level Shader Language (HLSL) (HLSL)
High Level Shader Language
(HLSL)
Uluslararası Bilgisayar Enstitüsü
Ege Üniversitesi
GPU İş hattı
Programlanabilir
GPU İş Hattı
HLSL
HLSL, Ekran kartında çalışan programlanabilir
ünitelerin programlanmasında kullanılan
programlama dillerinden biridir.
HLSL veri tipleri
Skalar veri tipleri
bool:
int:
half:
float:
double:
doğru / yanlış
32 bit tam sayı
16 bit ondalıklı sayı
32 bit ondalıklı sayı
64 bit ondalıklı sayı
Vektörel veri tipleri
bool2, bool3, bool4
int2, int3, int4
half2, half3, half4
float2, float3, float4
double2, double3, double4
HLSL intrinsics
abs(x): Her bileşen için mutlak değer hesaplar.
acos(x): Her bileşen için arkkosinüs hesaplar.
all(x): Tüm bileşenlerin 0’dan farklı olup olmadığını kontrol eder
any(x): Herhangi bir bileşenin o’dan farklı olup olmadığını kontrol eder
asin(x): Her bileşen için Arksinüs hesaplar.
atan(x): Her bileşen için arktanjant’ı [-pi/2, pi/2] aralığında hesaplar.
atan2(y, x): y / x’in her bileşeni için arktanjantı [–pi,pi] aralığında döndürür
ceil(x): x ten büyük eşit en küçük tam sayıyı döndürür (her bileşen için)
clamp(x, min, max): x değerini [min, max] aralığına sınırlar.
clip(x): x’in herhangi bir değeri 0’dan küçükse o pikseli işlemeyi bırakır.
cos(x): her bileşen için kosinüs hesaplar.
cosh(x): her bileşen için hiperbolik kosinüs hesaplar.
ddx(x): x’in her bileşeni için ekran uzayında x koordinatına göre türevi verir.
ddy(x): x’in her bileşeni için ekran uzayında y koordinatına göre türevi verir.
degrees(x): x’in her bileşenini radyan’dan dereceye çevirir.
determinant(x): X matrisinin determinantını verir.
HLSL intrinsics
distance(a, b): a ve b noktaları arasındaki uzaklığı verir.
dot(a, b): a ve b vektörlerinin dot product’ını verir.
exp(x): her bileşen için ex değerini hesaplar.
exp2(x): her bileşen için 2x değerini hesaplar.
floor(x): x ten küçük eşit en büyük tam sayıyı döndürür (her bileşen için)
frac(x): x’in her bileşeninin virgülden sonraki [0, 1) aralığındaki değerlerini döndürür.
length(x): x vektörünün uzunluğunu döndürür.
lerp(a,b, s): a ve b arasında s parametresiyle lineer interpolasyon yap [a + s(b-a)]
log(x): x’in her bileşeninin e tabanında logaritmasını döndürür.
log2(x): x’in her bileşeninin 2 tabanında logaritmasını döndürür.
max(a, b): a ve b skalar değerlerinden büyük olanını döndürür.
min(a, b): a ve b skalar değerlerinden küçük olanını döndürür.
mul(a, b): a ile b nin matris çarpımını döndürür.
normalize(v): v ile aynı yönde birim vektör döndürür.
pow(x, y): xy değerini döndürür.
sqrt(x): x’in tüm bileşenlerinin karekökünü döndürür.
transpose(m): m matrisinin transpozesini döndürür.
……
Vertex Shader Girdileri
POSITIONn
BLENDWEIGHTn
BLENDINDICESn
NORMALn
PSIZEn
COLORn
TEXCOORDn
TANGENTn
BINORMALn
TESSFACTORn
Konum
Animasyon ağırlıkları
Animasyon index’leri
Köşe Normali
Nokta büyüklüğü
Renk
Doku koordinatları
Tanjant vektörü
Binormal vektörü
Tesselation Faktörü
Vertex Shader Çıktıları
POSITION
PSIZE
FOG
COLORn
TEXCOORDn
Konum
Nokta büyüklüğü
Sis değeri
Renk değerleri
Doku koordinatları
Pixel Shader Girdileri
VFACE
VPOS
COLORn
TEXCOORDn
ön yüzey / arka yüzey
pixelin x,y koordinatları
Renk Değerleri
Doku koordinatları
Pixel Shader Çıktıları
COLORn
DEPTH
n. RenderTarget için renk değeri
Derinlik değeri
float4x4 matWorldViewProjection;
float4x4 matWorldView;
float4 fLightDir;
float4 LightColor;
Per Vertex
Işıklandırma
// Modelden gelen vertex bilgileri
struct VS_INPUT
{
float4 Position : POSITION;
// Pozisyon
float3 Normal : NORMAL;
// Normal
};
// Vertex Shader'ın döndüreceği değerler
struct VS_OUTPUT
{
float4 Position : POSITION;
// Pozisyon
float4 LightColor : COLOR;
// Renk
};
// Vertex Shader
VS_OUTPUT vs_main(VS_INPUT Input)
{
// Döndürülecek sonuçları saklayan yapı
VS_OUTPUT Output;
// Model koordinatlarındaki konumu projeksiyon uzayına taşı
Output.Position = mul( matWorldViewProjection, Input.Position );
// köşe normalini görüntü uzayına taşı
float3 vNormal = mul( matWorldView, Input.Normal );
// görüntü uzayındaki normal ile görüntü uzayındaki ışık
// yönünü kullanarak ışık şiddeti ve rengini hesapla
Output.LightColor = LightColor * max(0, dot(vNormal, fLightDir.xyz));
// Sonuçları döndür
return Output;
}
// Vertex Shader çıktıları
// (Pixel Shader Girdileri)
struct PS_INPUT
{
float4 LightColor : COLOR;
};
// Pixel Shader
float4 ps_main(PS_INPUT In) : COLOR0
{
// Vertex Shader'dan gelen Işık
// rengini döndür.
return In.LightColor;
}
float4x4 matWorldViewProjection;
float4x4 matWorldView;
//Modelden gelen vertex bilgileri
struct VS_INPUT
{
float4 Position : POSITION;
// Pozisyon
float3 Normal : NORMAL;
// Normal
};
//Vertex Shader'ın döndüreceği değerler
struct VS_OUTPUT
{
float4 Position : POSITION;
// Pozisyon
float3 vNormal : TEXCOORD1;
// Normal
};
//Vertex Shader
VS_OUTPUT vs_main( VS_INPUT Input )
{
// Döndürülecek sonuçları saklayan yapı
VS_OUTPUT Output;
// Model koordinatlarındaki konumu
// projeksiyon uzayına taşı
Output.Position =
mul( matWorldViewProjection, Input.Position );
// Model koordinatlarındaki normali
// görüntü uzayına taşı
Output.vNormal =
mul(matWorldView, Input.Normal);
return( Output );
}
Per Pixel
Işıklandırma
float4 fLightDir;
float4 LightColor;
// Vertex Shader çıktıları
// (Pixel Shader Girdileri)
struct PS_INPUT
{
float3 vNormal : TEXCOORD1;
};
//Pixel Shader
float4 ps_main(PS_INPUT In) : COLOR0
{
// Vertex Shaderdan gelen normalin tekrar
// normalize edilmesi gerekir
float3 vNormal = normalize(In.vNormal);
//Işık şiddeti ve rengi hesaplanması
return LightColor *
max(0, dot(vNormal, fLightDir.xyz));
}
Köşelerdeki birim vektörlerin lineer interpolasyonu ara noktalarda
birim vektörden kısa vektörlere neden olmaktadır
Per Vertex vs. Per Pixel
Per Vertex
Per Pixel
Efektlerin
hiyerarşik
yapısı
Shader Editor
Sonuç
Sanatçılar için
parametre
Editörü
Hata Ekranı
Efekt Grubu
Matris ve Dokular
Modelden hangi bilgilerin
okunacağını gösteren tablo
Model
OpenGL Efekti
OpenGL ES Efekti
DirectX Efekti
Pass’ler
Model Referansı
Vertex ve Pixel Shaderlar
Dokulardan okumaya
yarayan Sampler’lar
Stream Mapping Referansı
Parametreler
Teşekkürler

Benzer belgeler