Birisi ikili şekillendirmeyi açıklayabilir mi?


9

Ben voksel render anlamaya çalışıyorum ve çift konturlama (DC) bakıyorum.

Şimdiye kadar bunu çok anlıyorum:

  1. Bir dizi ızgara noktası için yoğunluk fonksiyonu çalıştırın (yani gürültü fonksiyonu)
  2. Kuşaktaki hangi kenarların uç noktalar arasında değişiklikler içerdiğini bulun
  3. Bu kenarlardan kesişme noktaları (örn. Vektörler) oluşturun

Şimdi burada sıkışıp kaldım, sıradaki normalleri üretmek olacak, ama nasıl? Bu konuya bakıldığında bu görüntü normalde kırpılır.

                                                   Hermite verileriyle etiketlenmiş kenarları olan imzalı bir ızgara

Araştırma yapmak, normallerin bir izos yüzeyden üretileceğini gösterir. Gürültüden izosurface'ye normallere gittiğimi düşünmek doğru mu? Öyleyse her adımı nasıl başarabilirim?

Anladığım kadarıyla, bir sonraki adım DC gazetesinden aşağıdaki olacaktır ;

İşaret değişikliği gösteren her kenar için, kenarı içeren dört küpün en aza indirgenmiş köşelerini bağlayan bir dörtlü oluşturun.

Bu alıntı yukarıdaki görüntü ile temsil ediliyor mu?

Son olarak, bir sonraki adım QEF'i kesişen noktalar ve normallerle çalıştırmak olacak ve bu da tepe verilerimi oluşturacaktır. Bu doğru mu?


Bu süreci anladığım gibi ... gürültü> nokta bulutu> iso yüzey> normaller ... ama ben bu işlemi düzgün bir şekilde açıklayabileceğimizi iddia etmek için yeterince akıllı değilim, bu yüzden bir cevap girişiminde bulunmayacağım.
Savaş

Yanıtlar:


3

Normaller, kenarlar ve yüzey arasındaki kesişim noktalarını elde ettiğinizde yoğunluk fonksiyonunun gradyanına göre üretilir. Bir küre gibi basit ve kapalı bir şeyse, normalleri analitik olarak hesaplayabilirsiniz, ancak gürültü ile örnek almanız gerekir.

Sonraki adımlarınız yanlış sırada. İlk olarak, işaret değişikliği gösteren her hücre için bir tepe noktası oluşturursunuz . En aza indirdiğiniz QEF, o hücre için kesişim noktası / normal çiftler tarafından tanımlanan düzlemlerin her birine olan toplam mesafedir. Ardından, işaret değişiklikleri gösteren kenarlarda yürüyün ve dört bitişik köşeyi (son adımda oluşturulduğu garanti edilen) kullanarak bir dörtlü oluşturun.

Şimdi, bunu uygulamaktaki en büyük engelim QEF'i çözmekti. Aslında (örneğin) bir GPU'ya paralel olarak çalışacak basit bir yinelemeli çözüm buldum. Temel olarak, tepe noktasını hücrenin ortasından başlatırsınız. Sonra, tepe noktasından alınan her vektörü her bir düzlemde ortalamalandırır ve tepe noktasını bu sonuç boyunca hareket ettirirsiniz ve bu adımı sabit sayıda tekrarlayın. Sonuçta ~% 70 hareket ettirmenin en az yineleme miktarında stabilize olacağını buldum.


Diyelim ki bir işaret değişikliği (yani MC gibi bir durum) sergilediğini bildiğim bir hücre / vokselim var, yoğunluğunu bulmak için hücrenin her 8 köşesi için bir gürültü fonksiyonu çalıştırdım. Anlamakta zorlandığım şey, bundan QEF'in x , n ve p değişkenlerini nasıl bulabilirim ?
Sabunlu

x , tepe konumudur. Her kesişme noktası için bahsettiğim düzlemleri oluşturan p (konum) ve n (normal) var.
jmegaffin

p , kenar boyunca iki yoğunluğun ağırlıklı ortalamasının sıfır olduğu bulunur. Sonra hesaplamak n adresinden yoğunluk fonksiyonunun eğimi alarak p .
jmegaffin

Yani temelde her küp için ben hesaplamak p ve n her 12 kenarları boyunca ve ardından her hücre için QEF kenarları çalıştırmak p ve n içine x sizin örnekte hangi Başlamak için bir voksel / hücrenin merkezinde yer alıyor? Sonra dört hücre aynı kenarı paylaşırsa, her dört hücre x ? Ve sonuçta elde edilen poligon verilerim dörtlü mü?
Soapy

Her kenarın bir kesişme noktası olmayacaktır, bu nedenle 12 uçak için QEF'i mutlaka çözmeniz gerekmez. Bunun dışında sende var!
jmegaffin

1

Kağıdın okunmasından sayfa 2'ye kadar, normal ağırlık küpleri stil algoritmalarının tercih ettiği gibi küpün ağırlığı olmak yerine, hacmin ağırlıkları ızgaranın köşelerinde saklandığı görülmektedir. Bu köşe ağırlıkları, köşeden köşeye bir işaret değişikliğinin olduğu 2 köşe arasındaki kenar boyunca bir nokta tanımlar. İşaret değişikliklerine sahip kenarlar, OP'deki 2D sunumunuzdaki açılı çizgi olan kenar için de normal bir saklar. Bu normal bilgi birimin oluşturulması sırasında (hangi düzenleme aracı veya prosedürel hacim oluşturma yöntemi kullanılırsa kullanılsın) tanımlanır, izosurface bir Yürüyen Küpler stil algoritması tarafından beklendiği gibi üretildikten sonra değil. Bu normal veriler noktadan geçen çizginin / yüzeyin önceden tanımlanmış normal değere sahip olması gerektiğini "belirtir". Yürüyen Küplerin bu noktada çizgiyi bitişik bir kenardaki başka bir nokta ile eşleşecekleri durumlarda, Genişletilmiş Yürüyen Küpler ve İkili Şekillendirme, çizgiyi / yüzeyi, üzerindeki noktadan geçen yüzeyle kesişene kadar uzatır. farklı bir normal değere sahip bitişik kenar. Bu, temel Marching Cubes algoritmalarının yüzeyi biraz yuvarlayacağı hacim verilerinden keskin köşeler oluşturulmasına izin verir. QEF'lerin (kuadratik hata fonksiyonları) nasıl oynandığını tam olarak anlamıyorum, ancak bir köşenin bulunduğu bir küp içindeki uzatılmış noktayı hesaplamayı kolaylaştırıyor gibi görünüyor. Genişletilmiş Yürüyüş Küpleri ve İkili Kontur, çizgi / yüzeyi, normal bir değere sahip bitişik kenardaki noktadan geçen çizgi / yüzeyle kesişene kadar uzatır. Bu, temel Marching Cubes algoritmalarının yüzeyi biraz yuvarlayacağı hacim verilerinden keskin köşeler oluşturulmasına izin verir. QEF'lerin (kuadratik hata fonksiyonları) nasıl oynandığını tam olarak anlamıyorum, ancak bir köşenin bulunduğu bir küp içindeki uzatılmış noktayı hesaplamayı kolaylaştırıyor gibi görünüyor. Genişletilmiş Yürüyüş Küpleri ve İkili Kontur, çizgi / yüzeyi, normal bir değere sahip bitişik kenardaki noktadan geçen çizgi / yüzeyle kesişene kadar uzatır. Bu, temel Marching Cubes algoritmalarının yüzeyi biraz yuvarlayacağı hacim verilerinden keskin köşeler oluşturulmasına izin verir. QEF'lerin (kuadratik hata fonksiyonları) nasıl oynandığını tam olarak anlamıyorum, ancak bir köşenin bulunduğu bir küp içindeki uzatılmış noktayı hesaplamayı kolaylaştırıyor gibi görünüyor.

Ben burada OP temsiliyle tasvir gibi 2D anlamda çizgiler ve kenarlar hakkında konuştuğum unutmayın. Ben hacimsel örgü üretimi için bunu 3D genişletmek için biraz daha okuma ve düşünme yapmak gerekir.

Normallerin nasıl oluşturulacağı ve gürültüye dayalı prosedürel bir bakış açısıyla düşünme hakkındaki sorunuzun 2. yarısını ele almak için, ses düzeyinizi gürültü verileriyle doldurup ardından işaret değişiklikleriyle kenarları arayacaksınız, 4 küpü inceleyeceğiniz anlaşılıyor. hangi üçgenlerin nerede üretileceğini bulmak için kenarı paylaşır ve tepe noktasını paylaşan her üçgen için normallerin ortalamasını alarak, çoklu üçgenlerin herhangi bir diğer kesişiminde olduğu gibi tepe noktasını normal olarak hesaplar. Bu benim açımdan çok spekülatiftir, çünkü kağıt çoğunlukla CSG operasyonları ve her ikisi de yüzeylerde iyi tanımlanmış normallere sahip olan tarama dönüştürülmüş kafeslerden üretilen hacimlerle ilgilidir.

Umarım bu cevabın en azından 1. kısmı, ağırlık verilerinin temel Yürüyüş Küplerinden oldukça farklı bir şekilde nasıl temsil edildiği ve kullanıldığına ve normal verilerin neden hacim oluşturma sürecinde oldukça erken oluşturulması gerektiğine, burada temel yürüyen küplerle, normalde ağ oluşturma işleminde son aşama olarak normaller oluşturulur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.