tr-demoscene

the scene => coding => pc => Konuyu başlatan: chenmy1 - 05.07.2007 22:11:27

Başlık: GLSL ve post ve image processing
Gönderen: chenmy1 - 05.07.2007 22:11:27
Selam ,
GLSL ile Post production yapimi arastirmaktayim.Bunu Nightshiftteki Nothing de HLSL shader GLOW da ile kullanildigini gordum.Bunu nasil yapildigini anlaticak olan var mi?
 
doku kordinatlari nasil aliyorlar ?
 
elimizde Quad imiz var 5-6 tane doku kordinant aliniyor ve bunlari ile pixelin nerde cizilecegini v.s. buluyorlar elimde ornek var ama ne yaptigini anlamadim.
 
O cizdigim Pixelim nerde oldugunu nasil anliyabilirim?
Normal bildigimiz dokular
for(int y=0;yfor(int x=0;xpixelpozisyonu(x,y)
 
per pixel islem yapabiliyorsun buna benzer bi hale mi getiriliyor?
 
GLSL Türkçe bir tutorial görmek güzel olurdu..
Başlık: GLSL ve Post Production
Gönderen: poison - 05.07.2007 23:36:28
nothing'i ben yazdığıma göre sanırım bu görev bana düşüyor :)

glow işlemi için en başta usage'i render target olan 256x256 surface yaratman gerekiyor. bunlar smooth yaparken swap edilecek geçici yüzeyler.

kullanacağın shader versiyonuna göre değişmekle beraber (ben 1.1 versiyon kullanmak istediğimden 5 adımda yaptım ama yeni kartlarda daha az adımda yapabilirsin) shader içerisinde bunları smooth edecek stage'leri yazman gerekli.

stage'lere örnek olması için

struct GLOW_INPUT
{
    float4 pos : POSITION;
    float2 texCoord : TEXCOORD;
};

struct GLOW_OUTPUT
{
    float4 pos : POSITION;
    float2 texCoord0 : TEXCOORD0;
    float2 texCoord1 : TEXCOORD1;
    float2 texCoord2 : TEXCOORD2;
    float2 texCoord3 : TEXCOORD3;
};

GLOW_OUTPUT glowVSHorizontal1(GLOW_INPUT IN)
{
    GLOW_OUTPUT OUT;
   
    OUT.pos =  mul( IN.pos, texTrans );
    OUT.texCoord0 = IN.texCoord + float2(-pSize*3, 0);
    OUT.texCoord1 = IN.texCoord + float2(-pSize*2, 0);
    OUT.texCoord2 = IN.texCoord + float2(-pSize*1, 0);
    OUT.texCoord3 = IN.texCoord + float2(0, 0 );
   
    return OUT;
}

pixel glowPS(GLOW_OUTPUT IN)
{
    pixel OUT;  
   
    float4 color = tex2D( GlowSampler, IN.texCoord0 ) * 0.1;
    color += tex2D( GlowSampler, IN.texCoord1 ) * 0.3;
    color += tex2D( GlowSampler, IN.texCoord2 ) * 0.4;
    color += tex2D( GlowSampler, IN.texCoord3 ) * 0.25;
   
    OUT.color = color;
    OUT.color.a = 1.0f;
   
    return OUT;
}

şeklinde shader limitleri yüzünden vertex shader'da hangi pixellerin ortalaması alınacağını hesaplaman gerekli. pixel shader'da bu pixellerin ortalamasını alıyorsun.

glowVSHorizontal1 benzeri aynı pixel shader'ı kullanan 3 stage daha yazman gerekli, bunlar float2(-pSize*3, 0) formülünü +x,-x,+y,-y şeklinde değiştirerek 4 yönde ortalamalar alacak.

Her stage geçisinde render target'i diğeri ile değiştirip öncekini texture olarak kullanman gerekli. 4 stage'de geçtiğinde elinde ekrana çizilecek şeyin baya bir smooth edilmiş hali olacak. bu arada pSize denilen şey 0 ile 1 arasında bir rakam ki smooth oranını belirliyor. GlowSampler shader'a geçtiğin texture.

bu smooth edilmiş halini en son 5. stage'de alpha blend ile scene'in üzerine çiziyorsun. böylece objenin etrafında hafif bir glow gözüküyor.

glow için önce glow olmasını istediğin objeyi render target'lerden ilkine çiz. daha sonra 4 stage'i işletip smooth halini elde et. daha sonra render target'i framebuffer'a alıp orjinal çizimi yap ve üstüne 5. stage'de smooth edilmiş görüntüyü üzerine bindir.

(14 saattir program yazıyorum, biraz anlatamamış olabilirim, işin içinden çıkamazsan kodları gönderirim ordan bakabilirsin)
Başlık: GLSL ve Post Production
Gönderen: chenmy1 - 06.07.2007 20:07:26
Selam,
 
Bu yazi guzel oldu Glow konusunu anlamis bulunmaktayim sagolasin.
 
Diger bir konu Edge Detect v.s. gibi shaderlar yazmak istiyorum. Render target ile ekranin dokusunu aliyorum bunu Pixel Shader a gonderiyorum.
 
Simdi bir sorun var o an isledigim Pixelin hangi pixel oldugunu nerden bilebilirim?S.A. Quad im var Pixel shader ile isleme basladigimda o an isledigim pixelin veya islem yaptigim pixelin konumu bilsem istedigim seyi yapabilecegim mesala :
 
Normal C/c++ ile dokumuz olsun:
 
yxPixelKonumu(x,y);
..
 
konumunu biliyorum boylece Yana dogru , Asagi dogru istedigim gibi islemler yapabiliyorum fakat Pixel shaderda o an islem yaptigim pixel X ve Y sini nerde oldugunu bilmiyorum?
 
Yoksa boyle bir sey mumkun degil mi?Sadece Ortalama alarak mi islem yapiyoruz?
Başlık: GLSL ve Post Production
Gönderen: nightlord - 06.07.2007 21:15:12
o an isledigin pixelin konumunu vertex shaderdan kendine bir texture koordinati olarak gecirebilirsin. yani bir pass te ekran boyunda bir texture'i fulll ekrana tek quad olarak gecirip quadin koselerine de kose koordinatlarini texcoord olarak gecirirsen pixel shaderda her pixeline o anki texcoordlar interpole olarak gelir.
Başlık: GLSL ve Post Production
Gönderen: scg_ - 06.07.2007 22:59:57
Günümüz shader dilleri texellere doğrudan integer adresli erişimi desteklemiyor. Bunun
nedeni hardware in texture mapping için özelleşmiş olması. Yani sample lara [0.0 1.0]
aralığındaki real sayılarla erişilir. Bu sayede doku çözünürlüğünden bağımsız olarak
sampling yapılıyor. Senin yazdığın o kod sampled imajlar (discrete) için. Hardware texture u
continuous farz ediyor seçtiğin filtreleme yöntemine (POINT , BILINEAR vs..) göre sampling
yapıyor.
 
Senin yapman gereken şey :
dx = 1.0 / texture_genisligi
dy = 1.0 / texture_yuksekligi
 
falan gibi şeyler tanımlayıp mesela bir (x,y) konumundaki texel in sağ üstündeki texel :
sag_ust_texel = xy + delta;
Burada delta yukardaki tanımlardan da faydalanarak
delta.x = dx;
delta.y = dy;
gibi bişeyler olur.
Ayrıca bilinear interpolasyona da gerek yok. Yani texture filtresi GL_NEAREST (point
sampling) olacak.
 
Ayrıca post production la post processing demek istedin galiba...
 
HLSL e giriş kıvamında bir yazı yazmıştım sanırım. Plazma 1 de fade in / out yazısının
içinde vardı. Orda fade in / out un post processing olarak pixel shader da nasıl
yapılabileceğinden bahsetmiştim.
 
scg / forlorn.
Başlık: GLSL ve Post Production
Gönderen: chenmy1 - 12.07.2007 12:35:02
Selam,
Evet sanirim yanlis yazmisim duzelttim basligi ingilizce ile aram iyi degil bu yuzden ozur dilerim : "post processing" ,"image processing" farketmez bu iki islemide artik GLSL ile yapmak istiyorum yani doku olusturma , doku isleme ve ekranda genel tüm efektlerde kullanmak icin.
 
Yani sadece Post processing degil image processing ile bildiklerinizde varsa burda paylasirsaniz sevinirim..
 
Mesala eski scenerlarin Yuzde 90 ihtimalle bir doku generate etmisligi vardir.
 
Bildikleri formulleri bizle paylasirlarsa sevinirim bunlarin illa GLSL olmasi gerekmez normal bildigimiz image formatindada olabilir bizde onlari GLSL ye cevirebiliriz?
 
mesala ornek vericek olursak
void PixelBoya(int x,int y,int red,int green,int blue);
 
y++;
x++;
deger = sin(x+y)*63 + 128;
PixelBoya(x,y,deger,deger,deger);
 
v.s. :)
 
Su an bunlar ustunde ugrasiyorum bunlari GLSL ile yapmak istiyorum.Fakat formuller konusunda cok eksigim var.Bilindik formulleri buruya yazarsaniz tekrar bulmak zorunda kalmayiz diye dusunuyorum.
 
(Not: unutmadan 64kb ve 4kb icin tabiki)
Başlık: GLSL ve Post Production
Gönderen: skate - 12.07.2007 13:44:01
en tipik texture XOR texturedır. bu konuda pek anlatacak birşey yok, zaten sonuç da çok güzel ya da orjinal olmaz. eğer bulutumsu, dumanımsı, alevimsi texturelar oluşturmak istiyorsan;
 
http://local.wasp.uwa.edu.au/~pbourke/texture_colour/perlin/
http://dunnbypaul.net/perlin/
 
perlin noise orjinal bir texture üretme yöntemidir.
Başlık: GLSL ve Post Production
Gönderen: chenmy1 - 12.07.2007 22:38:01
guzel siteymis bunun gibi siteler bilenler lutfen buraya linkler verebilirler mi?
Başlık: GLSL ve Post Production
Gönderen: skate - 13.07.2007 09:23:09
http://www.cescg.org/CESCG-2000/PBorovsky/index.html
http://www.cprogramming.com/discussionarticles/texture_generation.html
 
Eğer iyice olayın dibine vurmak istiyorsan bu tür birşey tavsiye ederim sana
http://www.amazon.co.uk/gp/product/1558608486/202-7060837-3518206?v=glance&n=266239&v=glance
 
Edit: Aklıma gelmişken bunlar bookmarklarımda olan siteler değil. Basit bir şekilde aşağıdaki linki kullanabilirsin daha fazlasına ulaşmak için ;)
http://www.google.com/search?hl=en&safe=off&q=texture+generation+algorithms
Başlık: GLSL ve Post Production
Gönderen: spritus - 15.07.2007 10:46:41
perlin noise'un skydome ve bulutlarla uygulaması için şu url bi hayli faydalı:
http://freespace.virgin.net/hugo.elias/models/m_clouds.htm
 
ana sayfayı da ihmal etmeyin bence:
http://freespace.virgin.net/hugo.elias/