Görünür Yüzey Algılama

Saydam olmayan nesneler ve yüzeyler içeren bir resmi gördüğümüzde, göze yakın nesnelerin arkasında bulunan nesneleri görüşten göremeyiz. Gerçekçi bir ekran görüntüsü elde etmek için bu gizli yüzeyleri kaldırmalıyız. Bu yüzeylerin tespiti ve kaldırılmasına denirHidden-surface problem.

Gizli yüzey sorunlarını kaldırmak için iki yaklaşım vardır - Object-Space method ve Image-space method. Nesne-uzay yöntemi fiziksel koordinat sisteminde, görüntü-uzay yöntemi ise ekran koordinat sisteminde uygulanmaktadır.

Bir 2B ekranda 3B bir nesneyi görüntülemek istediğimizde, ekranın seçilen bir görüntüleme konumundan görülebilen kısımlarını belirlememiz gerekir.

Derinlik Tamponu (Z-Tampon) Yöntemi

Bu yöntem Cutmull tarafından geliştirilmiştir. Bu bir görüntü-uzay yaklaşımıdır. Temel fikir, en yakın (görünür) yüzeyi belirlemek için her yüzeyin Z derinliğini test etmektir.

Bu yöntemde her yüzey, yüzey boyunca bir seferde bir piksel konumunda ayrı ayrı işlenir. Bir piksel için derinlik değerleri karşılaştırılır ve en yakın (en küçük z) yüzey, çerçeve arabelleğinde görüntülenecek rengi belirler.

Poligon yüzeylerine çok verimli bir şekilde uygulanır. Yüzeyler herhangi bir sırayla işlenebilir. Uzaklardan daha yakın olan çokgenleri geçersiz kılmak için iki tampon adıframe buffer ve depth buffer, kullanılmış.

Depth buffer yüzeyler işlenirken (0 ≤ derinlik ≤ 1) (x, y) konumu için derinlik değerlerini depolamak için kullanılır.

frame buffer her konumdaki (x, y) renk değerinin yoğunluk değerini saklamak için kullanılır.

Z koordinatları genellikle [0, 1] aralığına normalleştirilir. Z koordinatı için 0 değeri geri kırpma bölmesini belirtir ve z koordinatları için 1 değer ön kırpma bölmesini belirtir.

Algoritma

Step-1 - Tampon değerlerini ayarlayın -

Depthbuffer (x, y) = 0

Framebuffer (x, y) = arka plan rengi

Step-2 - Her poligonu işleyin (Bir seferde bir tane)

Bir çokgenin öngörülen her (x, y) piksel konumu için derinliği z hesaplayın.

Z> deepbuffer (x, y) ise

Yüzey rengini hesaplayın,

derinlik tamponunu (x, y) = z olarak ayarla,

framebuffer (x, y) = yüzey rengi (x, y)

Avantajlar

  • Uygulaması kolaydır.
  • Donanıma uygulanırsa hız problemini azaltır.
  • Her seferinde bir nesneyi işler.

Dezavantajları

  • Büyük hafıza gerektirir.
  • Zaman alan bir süreçtir.

Tarama Satırı Yöntemi

Görünür yüzeyi tanımlamak için bir görüntü alanı yöntemidir. Bu yöntem, yalnızca tek bir tarama satırı için derinlik bilgisine sahiptir. Tek bir tarama satırı derinlik değerleri gerektirmek için, bir sonraki tarama hattını işlemeden önce belirli bir tarama çizgisini aynı anda kesen tüm çokgenleri gruplamalı ve işlemeliyiz. İki önemli tablo,edge table ve polygon table, bunun için muhafaza edilmektedir.

The Edge Table - Sahnedeki her çizginin koordinat uç noktalarını, her çizginin ters eğimini ve kenarları yüzeylere bağlamak için poligon tablosundaki işaretçileri içerir.

The Polygon Table - Düzlem katsayılarını, yüzey malzemesi özelliklerini, diğer yüzey verilerini içerir ve kenar tablosuna işaret edebilir.

Belirli bir tarama çizgisini geçen yüzeylerin aranmasını kolaylaştırmak için, aktif bir kenar listesi oluşturulur. Aktif liste, yalnızca artan x sırasına göre tarama çizgisini geçen kenarları saklar. Ayrıca, tarama çizgisi boyunca bir konumun yüzeyin içinde mi yoksa dışında mı olduğunu belirtmek için her yüzey için bir bayrak yerleştirilir.

Her tarama çizgisindeki piksel konumları soldan sağa doğru işlenir. Yüzeyle sol kesişme noktasında yüzey bayrağı açılır ve sağda bayrak kapatılır. Yalnızca belirli bir tarama hattı konumunda birden fazla yüzey bayrakları açıldığında derinlik hesaplamaları yapmanız gerekir.

Alan-Alt Bölüm Yöntemi

Alan-altbölüm yöntemi, tek bir yüzeyin parçasını temsil eden bu görünüm alanlarını konumlandırarak avantaj sağlar. Toplam görüntüleme alanını, her küçük alan tek bir görünür yüzeyin bir kısmının izdüşümü haline gelene veya hiç yüzey olmayana kadar daha küçük dikdörtgenlere bölün.

Alt bölümler tek bir yüzeye ait olarak kolayca analiz edilene kadar veya tek bir piksel boyutuna küçültülene kadar bu işleme devam edin. Bunu yapmanın kolay bir yolu, alanı her adımda art arda dört eşit parçaya bölmektir. Bir yüzeyin belirli bir alan sınırıyla sahip olabileceği dört olası ilişki vardır.

  • Surrounding surface - Alanı tamamen çevreleyen bir tane.

  • Overlapping surface - Kısmen alanın içinde ve kısmen dışında olan.

  • Inside surface - Tamamen bölgenin içinde olan bir tane.

  • Outside surface - Alanın tamamen dışında olan bir tane.

Bir alan içinde yüzey görünürlüğünü belirlemeye yönelik testler bu dört sınıflandırma açısından ifade edilebilir. Aşağıdaki koşullardan biri doğruysa, belirli bir alanın başka alt bölümlerine gerek yoktur -

  • Tüm yüzeyler alana göre dış yüzeylerdir.
  • Bölgede yalnızca bir iç, üst üste binen veya çevreleyen yüzey vardır.
  • Çevreleyen bir yüzey, alan sınırları içindeki diğer tüm yüzeyleri gizler.

Arka Yüz Algılama

Bir çokyüzlünün arka yüzlerini tanımlamaya yönelik hızlı ve basit bir nesne-uzay yöntemi, "iç-dış" testlere dayanır. Bir nokta (x, y, z), eğer A, B, C ve D düzlem parametrelerine sahip bir poligon yüzeyinin "içinde" dir Bir iç nokta yüzeyin görüş hattı boyunca olduğunda, poligonun bir arka yüz olması gerekir ( o yüzün içindeyiz ve önünü bizim bakış açımızdan göremiyoruz).

Normal vektörü dikkate alarak bu testi basitleştirebiliriz N Kartezyen bileşenlere (A, B, C) sahip çokgen bir yüzeye.

Genel olarak, V, göz (veya "kamera") konumundan görüntüleme yönünde bir vektörse, bu çokgen bir arka yüzdür.

V.N > 0

Ayrıca, nesne açıklamaları projeksiyon koordinatlarına dönüştürülürse ve görüntüleme yönünüz görüntüleme z eksenine paralelse, o zaman -

V = (0, 0, V z ) ve V.N = V Z C

Böylece sadece C'nin işaretini normal vektörün bileşeni olarak düşünmemiz gerekir. N.

Yönü negatif $ Z_ {V} $ ekseni boyunca olan sağ elini kullanan bir görüntüleme sisteminde, çokgen, C <0 ise bir arka yüzdür. görüş yönü bu çokgene doğrudur. Bu nedenle, genel olarak herhangi bir poligonu, normal vektörü az bileşen değerine sahipse arka yüz olarak etiketleyebiliriz -

C <= 0

Solak görüntüleme sistemi kullanan paketlerde de benzer yöntemler kullanılabilir. Bu paketlerde, A, B, C ve D düzlem parametreleri, saat yönünde belirtilen çokgen köşe koordinatlarından hesaplanabilir (sağ elini kullanan bir sistemde kullanılan saatin tersi yönünün aksine).

Ayrıca, arka yüzler, görüntüleme konumundan uzaklaşan normal vektörlere sahiptir ve görüntüleme yönü pozitif $ Z_ {v} $ ekseni boyunca olduğunda C> = 0 ile tanımlanır. Bir nesneyi tanımlayan farklı düzlemler için C parametresini inceleyerek, tüm arka yüzleri anında belirleyebiliriz.

A-Buffer Yöntemi

A-arabellek yöntemi, derinlik-arabellek yönteminin bir uzantısıdır. A-arabellek yöntemi, Lucas Film Stüdyolarında, Gördüğünüz Her Şeyi Renders You Ever (REYES) işleme sistemi için geliştirilmiş bir görünürlük algılama yöntemidir.

A-arabelleği, asetatlara izin vermek için derinlik arabelleği yöntemini genişletir. A-tamponundaki anahtar veri yapısı biriktirme tamponudur.

A-tamponundaki her pozisyonun iki alanı vardır -

  • Depth field - Pozitif veya negatif bir gerçek sayı depolar

  • Intensity field - Yüzey yoğunluğu bilgilerini veya bir işaretçi değerini depolar

Derinlik> = 0 ise, bu konumda depolanan sayı, karşılık gelen piksel alanıyla örtüşen tek bir yüzeyin derinliğidir. Yoğunluk alanı daha sonra bu noktada yüzey renginin RGB bileşenlerini ve piksel kapsama yüzdesini depolar.

Derinlik <0 ise, piksel yoğunluğuna çoklu yüzey katkılarını gösterir. Yoğunluk alanı daha sonra bağlantılı bir yüzey verileri listesine bir işaretçi depolar. A tamponundaki yüzey tamponu şunları içerir:

  • RGB yoğunluğu bileşenleri
  • Opaklık Parametresi
  • Depth
  • Alan kapsama yüzdesi
  • Yüzey tanımlayıcı

Algoritma, derinlik tampon algoritması gibi ilerler. Derinlik ve opaklık değerleri, bir pikselin son rengini belirlemek için kullanılır.

Derinlik Sıralama Yöntemi

Derinlik sıralama yöntemi, hem görüntü alanı hem de nesne alanı işlemlerini kullanır. Derinlemesine sıralama yöntemi iki temel işlevi yerine getirir -

  • Önce yüzeyler azalan derinliğe göre sıralanır.

  • İkincisi, yüzeyler, en büyük derinlikteki yüzeyden başlayarak sırayla taranır.

Çokgen yüzeylerin tarama dönüşümü, görüntü uzayında gerçekleştirilir. Gizli yüzey problemini çözmek için kullanılan bu yöntem genelliklepainter's algorithm. Aşağıdaki şekil, derinlik sınıflandırmasının etkisini göstermektedir -

Algoritma, derinliğe göre sıralayarak başlar. Örneğin, bir çokgenin ilk "derinlik" tahmini, çokgenin herhangi bir tepe noktasına en yakın z değeri olarak alınabilir.

Listenin sonundaki P poligonunu alalım. Z kapsamları P'lerle örtüşen tüm Q çokgenlerini düşünün. P'yi çizmeden önce aşağıdaki testleri yapıyoruz. Aşağıdaki testlerden herhangi biri pozitifse, P'nin Q'dan önce çizilebileceğini varsayabiliriz.

  • X uzantıları çakışmıyor mu?
  • Y uzantıları çakışmıyor mu?
  • P, bakış açısından Q'nun düzleminin tamamen zıt tarafında mı?
  • Q, bakış açısı ile tamamen P'nin düzleminin aynı tarafında mı?
  • Çokgenlerin izdüşümleri çakışmıyor mu?

Tüm testler başarısız olursa, diğerinin düzlemini kullanarak P veya Q'yu böleriz. Yeni kesilmiş çokgenler derinlik sırasına giriyor ve işlem devam ediyor. Teorik olarak, bu bölümleme O (n 2 ) ayrı çokgen oluşturabilir, ancak pratikte çokgen sayısı çok daha azdır.

İkili Uzay Bölme (BSP) Ağaçları

Görünürlüğü hesaplamak için ikili alan bölümleme kullanılır. BSP ağaçlarını oluşturmak için çokgenlerle başlamalı ve tüm kenarları etiketlemelisiniz. Bir seferde yalnızca bir kenarla uğraşarak, her kenarı, uçağı ikiye bölecek şekilde uzatın. İlk kenarı ağaca kök olarak yerleştirin. İçeride veya dışarıda olmalarına göre sonraki kenarları ekleyin. Zaten ağaçta bulunan bir kenarın uzantısına yayılan kenarlar ikiye bölünür ve her ikisi de ağaca eklenir.

  • Yukarıdaki şekilden önce alın A bir kök olarak.

  • Şekil (a) 'daki tüm düğümlerin bir listesini yapın.

  • Kökün önüne gelen tüm düğümleri koyun A düğümün sol tarafına A ve kökün arkasındaki tüm bu düğümleri A Şekil (b) 'de gösterildiği gibi sağ tarafa.

  • Önce tüm ön düğümleri, ardından arkadaki düğümleri işleyin.

  • Şekil (c) 'de gösterildiği gibi, önce düğümü işleyeceğiz B. Düğümün önünde hiçbir şey olmadığı içinBNIL koyduk. Ancak, düğümümüz varC düğümün arkasında Byani düğüm C düğümün sağ tarafına gidecek B.

  • Düğüm için aynı işlemi tekrarlayın D.