Gönderen Konu: DOT3 bump ve isiklandirma  (Okunma sayısı 3448 defa)

DOT3 bump ve isiklandirma

« : 05.07.2007 21:57:03 »
Hızlı düğmeleri aç

chenmy1

İleti: 184

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://www.mosengine.inativa.com
Selam herkese,
 1-2 haftadir DOT3 ile bump map ve isiklandirma yapmak uzere ugrasmaya basladim.Bunu ilk once oyunlarimda denedim fakat 100 fpslerde olan oyunun 20-30 fps lere dustugunu gorunce verimli bir yontem aramaya karar verdim.
 
 DOT3 icin 2 dokudan birini kullaniyorlar ya height map yada Normal map ,ben 3d modelimin bump ve isiklandirmasini en kolay yolla yapmak istiyorum.Bunun shader ile yapildigini gordum fakat nasil yapildigini bilmiyorum.
 
//-Bulduklarim:
 
1. Bir tutorial de 1 mesh icin 2 doku uniti kullanilarak 1.Normal map 2. si dokumuz ve mesh i 3-4 kez Blend kullanarak mutli pass gecildigini gordum ve intromda denedim:
 
siralamasi yanlis olabilir cafeden yaziyorum:
 
1.Pass Dot3 normal map ve normal doku
2.Pass Ambinent Light icin
3.Pass Specular light icin bunuda kendi icinde 2-3 kez tekrarlamis
 
 
Bunun sonucu ekrana cikan goruntu cok guzel fakat sonuc feci cunku FPS 5 kat yavasliyor.
 
Bunun benzerini GLSL shader ile mesh i bir kez cizerek yapildigini gordum ama nasil yapildigini anlamadim.

2.bi teknik ise CUBEMAP kullanmak NEHE de gordugum bir ornek bunun nasil yapildigini anlayabilmis degilim :)
 
http://nehe.gamedev.net/data/articles/article.asp?article=20
 
3.Yontem humus da gormustum diger NV ve ATI combiners kullaniliyordu ve gercekten cok hizliydi.Fakat Ati ve nvidia disindakiler calismiyor sanirsam.
 
v.b. bir cok yontem var.
 
En hizli bicimde kullanabilecegim bir yontem ariyorum. Dot3 ile cok hizli bir bicimde yapildigini biliyorum ama nasil yapildigini bilmiyorum.Bu konuda yardim edebilecek olan var mi acaba?
Algoritmik Geometri^S!P and MEE!ditor 64/4 kb intro tool.

DOT3 bump ve isiklandirma

« Yanıtla #1 : 06.07.2007 10:12:17 »
Hızlı düğmeleri aç

oxzy

İleti: 47

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
    • http://www.3bprogramlama.com
Öncelikle kolay gelsin.

Normal map kullanarak bump map yapmak ilk başta biraz garip gelebiliyor. Tangent space işleri biraz karıştırıyor. Bu nereen çıktı diyosun. Bende anlamakta zorluk çekmiştim ama Paul's Projects te bulduğum tutorial çok işime yaradı. Yanlız bu tutorialı sadece tangent spacesi anlamak için kullan. Kartın  GLSL destekliyosa kesinlikle Texture combiners falan kullanma. Akşam evden cubemapın neden kullanıldığınıda açıklıcam. Ayrıca örnek RenderMonkey projeside yollarım.

DOT3 bump ve isiklandirma

« Yanıtla #2 : 06.07.2007 21:11:44 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Ben de oxzy ile ayni seyleri soyleyecegim. Artik tamamen shader kullanmak en hayirlisi. yoksa insanin ogrenmesi gereken abuk GL extension apilerinin sonu gelmiyor. GL veya DX ile yapilacak tek sey, model vertexleri, matrisler ve texturelari gecirmek. Diger her sey shaderlarda yapilmali.
 
Cubemap'i aciklamayi oxzy'ye birakiyorum
 
Bumpmap veya normalmap olayinin kisaca mantigina degineyim. diger bir topicte gecen isiklandirma formullerine bakarsaniz normal'in oynadigi rolu gorursunuz. Normaller genelde model ilk hazirlanirken belirlenir. ve her vertexten bir normal cikar.
 
Normal map dedigimiz alet bir texture. Bu texture daki her pixelin r,g,b degerlerinin icine bir vektor yaziliyor. bu vektor eger texture'i yere yatirsaydik o noktadan yukari dogru cikan normal vektoru olurdu. yani bu normaller sayesinde sanki texture da kabartilar olsa normallerinin nereye gidecegini ifade etmis oluyoruz
 
bu tekture'i modelimize giydirirsek o zaman butun normaller modelimizin uzerine yerlesirken yon degistirecek. iste bu donusum (yerdeki texturedan modele sarilmis texture'a) tangent space donusumu ile ifade ediliyor.
 
Bunun yapilabilmesi icin yine model hazirlanirken normallere ilave olarak, binormal ve tanjant vektorlerini de vertex basina hesaplatmak gerekiyor. Aslinda bu 3 vektorden (normal, tanjant, binormal) ikisi bilinirse ucuncusu cross_product ile hesaplanabilir.
 
 
Dolayisiyla shaderlarda
 
vertex:
- normal_map texture'a bak
- normal, tanjant ve binormal'i kullanarak matris olustur
- butun matrisleri carp (model_world, model_view artik nasil kurduysan duzeni)
- bu normali kulan