Phong Gölge
Terimi Phong gölgeleme de ilişkindir Phong aydınlatma modeli ve Phong interpolasyon iki 3D işleme algoritmaları olarak bilgisayar grafiği . Her ikisi de Bui Tuong Phong tarafından geliştirildi ve 1973'te yayınlandı.
Phong aydınlanma modeli
Modelin açıklaması
Phong'un aydınlatması yerel bir modeldir, yani hesaplama her noktada yapılır. Bu ampirik model kesin değildir, ancak incelenen nokta tarafından yansıtılan ışığın güvenilir bir şekilde hesaplanmasını mümkün kılar, bunun için üç unsuru birleştirir: ortam ışığı, dağınık ışık ( Lambert modeli ) ve aynasal ışık (bkz. Optik yansıma ).
Amaç, kesin bir yönde (gözlemcinin yönü) sözde bir nokta kaynağı tarafından aydınlatılan incelenen noktanın yansımasıyla yayılacak ışık yoğunluğunu hesaplamaktır. Bunun için ışık üç bileşene ayrılır:
- Ortam bileşen olarak kaynak, örneğin, diğer nokta tarafından yansıtılan ışık dışında bir gelen parazitleri temsil eder. Ortam ışığının uzaydaki tüm noktalarda eşit olduğu varsayılır;
- Gelen ışık her yöne yansır. Diffüz bileşen tekrar dikkate gelen ışık yüzeye ulaştığı ile eğim alarak ancak yoğunluğu ne olursa olsun, yansıyan ışın tarafından alınan yönünün aynı olduğu varsayılarak başlar şiddetini;
- Her şeye rağmen, geometrik yansıma (ışın bir aynaya geldiğinde bırakacağı) yönünde dönen ışık daha fazladır. Aynasal bileşenin rolü bunu hesaba katmaktır .
Ayarlar
- Her malzeme için karakteristik sabitler tanımlanmıştır:
-
kde∈[0,1]{\ displaystyle k_ {a} \ [0,1]} içinde
: ortam bileşenine bağlı sabit, geri dönen ışığın oranı;
-
kd∈[0,1]{\ displaystyle k_ {d} \ [0,1]} içinde
: dağınık bileşene bağlı sabit;
-
ks∈[0,1]{\ displaystyle k_ {s} \ [0,1]} içinde
: aynasal bileşene bağlı sabit;
-
α≫1{\ görüntü stili \ alfa \ gg 1}
: malzemenin parlaklığına bağlı sabit : ne kadar büyükse yüzey o kadar parlak olur. Bu sabit yüksek değerler alabilir : 10, 100 veya daha fazla.α{\ görüntü stili \ alfa}![\alfa](https://wikimedia.org/api/rest_v1/media/math/render/svg/b79333175c8b3f0840bfb4ec41b8072c83ea88d3)
(Gösterilen değerler sadece bir büyüklük sırasıdır.)
- Biz diyoruz , ve olayın şiddeti ortam, yaygın ve speküler yanar. , , Ve yansıyan yoğunluk, toplamdır.bende{\ görüntü stili i_ {a}}
bend{\ görüntü stili i_ {d}}
bens{\ görüntü stili i_ {s}}
bende{\ görüntü stili I_ {a}}
bend{\ görüntü stili I_ {d}}
bens{\ görüntü stili I_ {s}}
ben{\ görüntü stili I}
ben{\ görüntü stili I}![ben](https://wikimedia.org/api/rest_v1/media/math/render/svg/535ea7fc4134a31cbe2251d9d3511374bc41be9f)
- Aşağıdaki vektörler tanımlanmıştır: ışık için, yüzeyin normali için , gözlemcinin görüş yönü için ve ışığın aynaya yansıyacağı yön için. bağıntıdan çıkarılır .L→{\ görüntü stili {\ vec {L}}}
DEĞİL→{\ görüntü stili {\ vec {N}}}
V→{\ görüntü stili {\ vec {V}}}
$→{\ görüntü stili {\ vec {R}}}![{\ vec R}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f361eec9da18669c0e7e869c57bae6c657f53522)
$→{\ görüntü stili {\ vec {R}}}
$→=2(DEĞİL→⋅L→)DEĞİL→-L→=2çünküθDEĞİL→-L→{\ displaystyle {\ vec {R}} = 2 ({\ vec {N}} \ cdot {\ vec {L}}) {\ vec {N}} - {\ vec {L}} = 2 \ cos \ teta {\ vec {N}} - {\ vec {L}}}![\ vec R = 2 (\ vec N \ cdot \ vec L) \ vec N - \ vec L = 2 \ cos \ teta \ vec N - \ vec L](https://wikimedia.org/api/rest_v1/media/math/render/svg/38ba042315db344267acc09b3f6c3a141a03f64f)
Tüm bu vektörler, nokta çarpımların vektörler arasındaki açının kosinüsünü verecek şekilde normalize edilmelidir.
formüller
Ortam bileşeni basitçe şu şekilde verilir:
bende{\ görüntü stili I_ {a}}![ben_ {a}](https://wikimedia.org/api/rest_v1/media/math/render/svg/83b5cb24870dadbb0efdf2e6d864ef853a0f1f89)
bende=bende.kde{\ displaystyle I_ {a} = i_ {a} .k_ {a}}![I_a = i_a.k_a](https://wikimedia.org/api/rest_v1/media/math/render/svg/dcec5b988d8655110c42a7e356876c0f438ce9de)
Dağınık bileşen şu şekilde verilir:
bend{\ görüntü stili I_ {d}}![İD](https://wikimedia.org/api/rest_v1/media/math/render/svg/f2cb44b76d459d859d2e9957dafbb9b8e2313b8f)
bend=bendkd(L→⋅DEĞİL→)=bendkdçünküθ{\ displaystyle I_ {d} = i_ {d} k_ {d} ({\ vec {L}} \ cdot {\ vec {N}}) = i_ {d} k_ {d} \ cos \ teta}![I_d = i_d k_d (\ vec L \ cdot \ vec N) = i_d k_d \ cos \ teta](https://wikimedia.org/api/rest_v1/media/math/render/svg/3eb63082dfb6458b99eee3a838d269a321df16a5)
Aynı şekilde Güneş'in başucunda daha fazla ısınması , ışık yüzeye normal yönde, yani yüzeye ulaştığında maksimumdur.
bend{\ görüntü stili I_ {d}}
L→=DEĞİL→{\ displaystyle {\ vec {L}} = {\ vec {N}}}
Speküler bileşen şu şekilde verilir:
bens{\ görüntü stili I_ {s}}![Dır-dir](https://wikimedia.org/api/rest_v1/media/math/render/svg/da7c52cd07d12dbec808d9b0c5a17ccd346054f3)
bens=bensks($→⋅V→)α=bensksçünküαΩ{\ displaystyle I_ {s} = i_ {s} k_ {s} ({\ vec {R}} \ cdot {\ vec {V}}) ^ {\ alpha} = i_ {s} k_ {s} \ cos ^ {\ alfa} \ Omega}![I_s = i_s k_s (\ vec R \ cdot \ vec V) ^ \ alpha = i_s k_s \ cos ^ \ alpha \ Omega](https://wikimedia.org/api/rest_v1/media/math/render/svg/f51aea6f75d2b26ccccd76bdd8d7f9763e55ada1)
ise , maksimumdur. Ne kadar büyük olursa, ışık noktaları o kadar küçük olur.
V→=$→{\ displaystyle {\ vec {V}} = {\ vec {R}}}
bens{\ görüntü stili I_ {s}}
α{\ görüntü stili \ alfa}
Toplam yansıyan yoğunluk şu şekildedir:
ben=bende+bend+bens{\ displaystyle I = I_ {a} + I_ {d} + I_ {s}}![ben = I_a + I_d + I_s](https://wikimedia.org/api/rest_v1/media/math/render/svg/229ec08e62ab7db9aca9b3fb2fddc202af77d40c)
Birkaç ışık kaynağı için eksiksiz bir formül elde ederiz:
ben=bendekde+∑değil∈{sÖsenrvses}(bend,değilkd(L→değil⋅DEĞİL→)+bens,değilks($→değil⋅V→)α){\ displaystyle I = i_ {a} k_ {a} + \ toplam _ {n \ in \ {kaynaklar \}} {\ Büyük (} i_ {d, n} k_ {d} ({\ vec {L}}) _ {n} \ cdot {\ vec {N}}) + i_ {s, n} k_ {s} ({\ vec {R}} _ {n} \ cdot {\ vec {V}}) ^ {\ alfa} {\ Büyük)}}![I = i_a k_a + \ sum_ {n \ in \ {sources \}} \ Big (i_ {d, n} k_d (\ vec L_n \ cdot \ vec N) + i_ {s, n} k_s (\ vec R_n \ cdot \ vec V) ^ \ alpha \ Büyük)](https://wikimedia.org/api/rest_v1/media/math/render/svg/fb355a68f960f68d2960897add926f2e6b775b58)
Bilgisayar grafiklerine uygulama
Bu algoritmayı bilgisayar grafiklerinde uygulamak istediğimizde doku renginin kırmızı/yeşil/mavi bileşenlerini ele alınan nokta için ayırıyoruz. Daha sonra ortam ve dağınık bileşenler için formülü uygularız .
bende=bend=bentextsenre{\ displaystyle i_ {a} = i_ {d} = i_ {doku}}![{\ displaystyle i_ {a} = i_ {d} = i_ {doku}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/17cbaac1db2f026b3b8b61b4501c468436cfe4f6)
Phong modelinin kusurları
Yansıtıcı bileşen, gözlemci ve ışık olmak üzere iki yönlü vektöre dayanır ve modelin herhangi bir radyositesini yasaklar . Bu model ampiriktir ve herhangi bir fiziksel teoriye değil, sadece Phong'un gözlemlerine dayanmaktadır. Bu model, ışığın mesafe ile difüzyonunu sağlamaz.
Phong enterpolasyonu
Gouraud enterpolasyonu ile karşılaştırılacak olan bu yöntem, genellikle öncekinden daha gerçekçi olan iyi işleme sonuçları üretir.
Gouraud gölgeleme ile ilgili temel sorun, yalnızca çokgenlerin köşelerini hesaplamasıdır: bir üçgenin ortasına yerleştirilmiş aynasal bir ışık kaynağı görünmeyecektir. Bu sorun, Phong'un enterpolasyonuyla düzeltildi.
Bir üçgende, üç köşenin de üçgenin herhangi bir noktasında olduğu gibi aynı normale sahip olduğuna dikkat edilmelidir. Daha düzgün oluşturma için, bir üçgenin her bir tepe noktasının normali, o tepe noktası kullanılarak tüm yüzeylerin ortalaması alınarak hesaplanabilir. Daha sonra farklı olabilen üç normal ile sonuçlanırız.
Üç farklı köşe düşünün: v 1 , v 2 ve v 3 , normal birim vektörleri n 1 , n 2 ve n 3 . Gouraud enterpolasyonuna gelince, bu üçgenin tüm yüzeyi üzerinde doğrusal olarak yapılır , sadece köşelerin üç normal vektöründen yapılır, yani aslında renkler yerine normal vektörleri enterpolasyon yapıyoruz.
v1v2v3{\ displaystyle v_ {1} v_ {2} v_ {3}}![v_1v_2v_3](https://wikimedia.org/api/rest_v1/media/math/render/svg/ef1548f6ccd970fb483223a2b66da84821575e80)
Ancak Gouraud enterpolasyonunun aksine, hesaplama yüzey başına üç noktada değil, bir yüzeyin tüm noktaları için - veya daha makul olarak, noktaların birkaç alt bölümünde yapılır. Bu çok daha yavaş yöntem bazen doğrudan donanım tarafından, gölgelendiriciler aracılığıyla gerçekleştirilir .
Şuna da bakın:
bibliyografya
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">