Aracılığıyla paylaş


Derinlik Arabellekleri (Direct3D 9)

Genellikle z-buffer veya w-buffer olarak adlandırılan derinlik arabelleği, Direct3D tarafından kullanılacak derinlik bilgilerini depolayan bir cihaz özelliğidir. Direct3D bir sahneyi hedef yüzeye işlerken, rasterleştirilmiş çokgen piksellerinin birbiriyle nasıl tıkandığını belirlemek için ilişkili derinlik arabelleği yüzeyindeki belleği çalışma alanı olarak kullanabilir. Direct3D, son renk değerlerinin yazıldığı hedef olarak ekran dışı bir Direct3D yüzeyi kullanır. İşleme hedef yüzeyiyle ilişkili derinlik arabellek yüzeyi, Direct3D'ye görünür her pikselin sahnede ne kadar derin olduğunu bildiren derinlik bilgilerini depolamak için kullanılır.

Derinlik arabelleği etkinken bir sahne rasterleştirildiğinde, işleme yüzeyindeki her nokta test edilir. Derinlik arabelleğindeki değerler, bir noktanın z koordinatı veya projeksiyon alanında noktanın (x,y,z,w) konumundan homojen w-koordinatı olabilir. Z değerleri kullanan derinlik arabelleğine genellikle z-arabellek, w değerleri kullanan arabelleğe ise w-buffer adı verilir. Her derinlik arabelleği türünün avantajları ve dezavantajları vardır ve bunlar daha sonra ele alınmıştır.

Testin başında, derinlik arabelleğindeki derinlik değeri sahne için mümkün olan en büyük değere ayarlanır. İşleme yüzeyindeki renk değeri, o noktada arka plan rengi değerine veya arka plan dokusunun renk değerine ayarlanır. Sahnedeki her çokgen, işleme yüzeyindeki geçerli koordinatla (x,y) kesişip kesişmediğini görmek için test edilir. Varsa, geçerli noktada, bir z arabellekteki z koordinatı ve w-buffer'daki w koordinatı olacak derinlik değeri, derinlik arabelleğinde depolanan derinlik değerinden daha küçük olup olmadığını görmek için test edilir. Çokgen değerinin derinliği daha küçükse derinlik arabelleğinde depolanır ve çokgendeki renk değeri işleme yüzeyindeki geçerli noktaya yazılır. Bu noktada çokgenin derinlik değeri daha büyükse, listedeki bir sonraki çokgen test edilir. Bu işlem aşağıdaki diyagramda gösterilmiştir.

diyagramı

Not

Çoğu uygulama bu özelliği kullanmasa da Direct3D'nin hangi değerlerin derinlik arabelleğine ve ardından işleme hedef yüzeyine yerleştirildiğini belirlemek için kullandığı karşılaştırmayı değiştirebilirsiniz. Bunu yapmak için D3DRS_ZFUNC işleme durumunun değerini değiştirin. Bazı donanımlarda compare işlevini değiştirmek hiyerarşik z testini devre dışı bırakabilir.

 

Piyasadaki neredeyse tüm hızlandırıcılar z arabelleğe almayı destekleyerek z-buffer'ları günümüzde en yaygın derinlik arabelleği türü haline getirir. Ancak yaygın olarak, z arabelleklerinin dezavantajları vardır. İlgili matematik nedeniyle, bir z arabelleğinde oluşturulan z değerleri z arabellek aralığı boyunca eşit olarak dağıtılmama eğilimindedir (genellikle 0,0 ile 1,0 arasında (dahil). Özellikle, uzak ve yakın kırpma düzlemleri arasındaki oran, z değerlerinin eşit olmayan şekilde dağıtılma şeklini güçlü bir şekilde etkiler. Derinlik arabelleği aralığının yüzde 90'ı, sahne derinliği aralığının ilk yüzde 10'unu, yakın düzlem uzaklık oranı olan 100'e yakın düzlem uzaklığı kullanılarak harcanıyor. Dış sahnelerle eğlence veya görsel simülasyonlar için tipik uygulamalar genellikle 1.000 ile 10.000 arasında herhangi bir yerde uzak düzlem/yakın düzlem oranları gerektirir. 1.000 oranında, aralığın yüzde 98'i derinlik aralığının ilk yüzde 2'sine harcanıyor ve dağılım daha yüksek oranlarla kötüleşiyor. Bu, özellikle en yaygın olarak desteklenen bit derinliği olan 16 bit derinlik arabellekleri kullanılırken uzak nesnelerdeki gizli yüzey yapıtlarına neden olabilir.

Öte yandan w tabanlı derinlik arabelleği genellikle yakın ve uzak klip düzlemleri arasında z arabelleğine göre daha eşit bir şekilde dağıtılır. En önemli avantajı, uzak ve yakın kırpma düzlemleri için mesafe oranının artık sorun olmamasıdır. Bu, uygulamaların büyük maksimum aralıkları desteklemesine olanak tanırken, göz noktasına yakın bir noktada nispeten doğru derinlik arabelleği almaya devam eder. W tabanlı derinlik arabelleği mükemmel değildir ve bazen yakın nesneler için gizli yüzey yapıtları sergileyebilir. W arabelleğe alınan yaklaşımın bir diğer dezavantajı da donanım desteğiyle ilgilidir: w-buffering, donanımda z arabelleği oluşturma kadar yaygın olarak desteklenmez.

Z arabellek kullanmak için işleme sırasında ek yük gerekir. Z arabellekleri kullanılırken işlemeyi iyileştirmek için çeşitli teknikler kullanılabilir. Ayrıntılar için bkz. Z-Buffer Performance.

Not

Derinlik değerinin gerçek yorumu işleyiciye özgüdür.

 

Bu bölümde, gizli çizgi ve gizli yüzey kaldırma için derinlik arabelleklerini kullanma hakkında bilgi sunun.

Direct3D İşleme