Jika Anda melakukan gambar perspektif dan model Anda memiliki persimpangan implisit maka, jika Anda menggunakan "linear Z", persimpangan tersebut akan muncul di tempat yang salah.
Sebagai contoh, pertimbangkan pesawat darat sederhana dengan garis kutub telepon, mundur ke kejauhan, yang menembus tanah (dan terus di bawah). Persimpangan implisit akan ditentukan oleh nilai kedalaman interpolasi. Jika itu tidak diinterpolasi dengan 1/Z
, maka ketika simpul yang diproyeksikan telah dihitung dengan perspektif, gambar akan terlihat salah.
Saya minta maaf untuk kualitas non-estetika dari ilustrasi berikut tetapi saya melakukannya pada tahun '97.
Gambar pertama menunjukkan efek rendering yang diperlukan. (Perhatikan bahwa "tiang" biru pergi cukup jauh di bawah bidang tanah sehingga terpotong di bagian bawah gambar)
Gambar kedua ini menunjukkan hasil menggunakan buffer kedalaman non-resiprokal: (Permintaan maaf untuk perubahan skala - ini disalin dari dokumen MS Word lama dan saya tidak tahu apa yang terjadi dengan penskalaan.)
Seperti yang Anda lihat, hasilnya salah.
Pada catatan lain, apakah Anda benar - benar menginginkan representasi Z linier? Jika Anda memberikan perspektif, tentu seseorang ingin lebih presisi lebih dekat ke kamera daripada di kejauhan?
Re komentar Anda nanti:
"Jika itu tidak diinterpolasi dengan 1 / Z" itu saya tidak mengerti. Interpolasi apa itu?
Hal pertama yang perlu diperhatikan adalah bahwa, dengan proyeksi perspektif standar, garis lurus di ruang dunia tetap garis lurus di ruang perspektif. Jarak / panjang, bagaimanapun, tidak dipertahankan.
Untuk kesederhanaan, mari kita asumsikan transformasi perspektif sepele digunakan untuk memproyeksikan simpul, yaitu
XSc r e e n=XWo r l dZWo r l d
YSc r e e n=YWo r l dZWo r l d
Kita juga harus menghitung kedalaman ruang-layar timbal balik, misalnyaZSc r e e n=1ZWo r l d
tetapi linear Z di buffer kedalaman akan, bagi saya, memerlukan sesuatu seperti: ZSc re e n= s c a l e ∗ZWo r l d
(Kita dapat mengasumsikan di sini bahwa skala = 1)
Mari kita asumsikan kita memiliki garis dengan titik akhir ruang angkasa dunia⎡⎣⎢001⎤⎦⎥a n d⎡⎣⎢200010⎤⎦⎥
Dengan perspektif memetakan peta ini untuk menyaring koordinat ruang
⎡⎣⎢001⎤⎦⎥a n d⎡⎣⎢2000,1⎤⎦⎥
Sistem render / perangkat keras akan menginterpolasi ruang layar z secara linier, jadi pada titik 1/2 arah garis, seperti yang muncul di layar, yaitu pada piksel (10, 0), kita akan mendapatkan proyeksi (terbalik) Z nilai 0,55, yang sesuai dengan nilai ruang dunia Z nilai ~ 1,818. Mengingat nilai Z awal dan akhir, ini adalah sekitar 20% sepanjang garis.
Jika sebaliknya, kami mencoba interpolasi menggunakan nilai Z asli, kami akan berakhir dengan Z yang sesuai dengan nilai ruang dunia 5.5. Selama tidak ada yang berpotongan, Anda mungkin baik-baik saja (saya belum memikirkannya dengan saksama) tetapi apa pun dengan persimpangan implisit akan salah.
Apa yang saya tidak sebutkan adalah bahwa sekali Anda memperkenalkan perspektif benar texturing (atau bahkan perspektif benar shading), Anda harus melakukan interpolasi pixel per 1 / w dan, selain itu, juga menghitung, per pixel, kebalikan dari nilai interpolasi tersebut.
far / z
, yang merupakan standar, tidak masuk akal. Ini menghasilkan buffer kedalaman yang menjadi lebih linier semakin dekat dua pesawat klip satu sama lain. Tampaknya seperti penggabungan dua konsep: layar ruang-linier Z, dan pemetaan buffer kedalaman yang tidak konstan untuk peretasan kinerja.