Oyun motorları neden dörtlü kullanmak yerine modelleri üçgenlere dönüştürüyor?


47

Maya'yı animasyon ve daha çok film odaklı projeler için kullanmaya çalıştım, ancak aynı zamanda video oyun geliştirme çalışmalarına da odaklanıyorum. Neyse, profesörümden biriyle konuştum ve neden tüm oyun motorlarının (bildiğim) üçgenlere dönüştüğünü bulamadık.

Oyun motorlarının neden modelleri dört taraflı çokgen bırakmaya kıyasla üçgenlere dönüştüğünü bilen var mı? Ayrıca, bunu yapmanın artıları ve eksileri (varsa) nelerdir?


1
Biraz ilişkili, NVidia NV1, üçgenler / çokgenler yerine, dörtlü doku eşlemesi (dörtlü kullanan) kullandı. En azını söylemek büyük bir darbe değildi. Bakınız en.wikipedia.org/wiki/NV1 .
Macke

5
@Macke: "ikinci dereceden" gibi ikinci dereceden değil, ikinci dereceden denklemde olduğu gibi kuadratik. Dörtlü kullanmıyor, 9 noktayla tanımlanan ikinci dereceden bir eğri kullanıyor. stason.org/TULARC/pc/3d-graphics-cards-faq/…

9
Sorunuz için +1, profesörünüze büyük bir -1. Bu, kendi elinin arkasını bildiği kadar bilmesi gereken temel şeyler ve son 15 aydaki gelişmelerle biraz temasa geçtiğinin bir işareti.
Maximus Minimus

1
Profesörlerimin savunmasında, oyun tarafında değil, daha çok animatör / modelci. Bunun tris'e dönüştüğünü biliyordu, ama neden yaratıldığına dair matematik nedenini bilmiyordu. Ama evet, muhtemelen bilmesi gerekirdi.
Grant,

Yanıtlar:


56

Alt satırda Üçgen Rasterleştirme, bilgisayarların ekrana nesneleri oluşturma şeklidir. Diğerleri benden daha sade bir şekilde söylese de:

Bilgisayar ekranında gördüğümüz bütün 3B nesneler aslında ilkel olarak adlandırılan küçük geometrik nesnelerden oluşuyor. Quadrilaterals, üçgenler, n-gonslar vs. ilkel örnekleridir. Çoğunlukla tek bir nedenden dolayı üçgenler üzerinde yoğunlaşacağız: her nesne üçgenlere bölünebilir, ancak üçgen üçgenlerden başka hiçbir şeye bölünemez. Bu nedenle, üçgenleri çizmek, yüksek dereceli çokgenleri çizmekten çok daha kolaydır; başa çıkacak daha az şey var. Bu üçgenlerin bilgisayar grafiklerinde bu kadar yaygın kullanılmasının nedeni budur.

Vurgu madeni. Kaynak: http://www.devmaster.net/articles/software-rendering/part3.php


2
Müthiş! Bunu düşündüğünüz zaman çok mantıklı geliyor. Cevap için teşekkürler!
Grant

1
OpenGL ES'de API'yi basitleştirme çabasının bir parçası olarak, dörtlü ve çokgenler bile desteklenmiyor. Bu yüzden, üçgenleri kullanmanın pratik bir nedeni, başka seçeneğiniz olmamasıdır. Fakat ES gibi düzenli bir API'nin diğer ilkel türlerden kaçınmasının nedeni, bu ve diğer cevaplarda belirtilen sebeplerden kaynaklanmaktadır.
Suboptimus

5
+1 Çünkü bir cevap bana birileri aynı şeyi yer imlerime sorduğunda referans olarak kullanabilirim. Sadece, her zaman, üçgenlerin mümkün olan en küçük ilkel olma nedeni olduğunu düşündüm, çünkü kayan nokta aritmetiğinin kesinleşmemesi nedeniyle, tris, her durumda düzlemsel olmayı garanti edebileceğiniz tek güvenli çokgendir, dörtlü olarak, garanti edeceklerini garanti edemezsiniz. her zaman düzlemsel ol. Modelleme yazılımı muhtemelen nesneleri modelleyiciye kolaylık sağlamak için dörtlü veya n-gons olarak gösterir, ancak bölen çokgenleri iki veya daha fazla üçgen olarak dönüştürür / oluşturur.
Hatoru Hansou

56

Üçgenler onları daha kolay ve dolayısıyla daha hızlı çizmelerini sağlayan birçok özelliğe sahiptir.

Dört puan veya daha fazlası aynı düzlemde olmayabilir, ancak üç puan her zaman (dejenere vakaları görmezden gelir). Bu, skaler değerlerin üçgen yüzeyine göre doğrusal olarak değişmesi ilginç bir özelliğe sahiptir. Üçgen ekrana yansıtıldığında bile, skaler değerler x '/ z ve y' / z'ye göre doğrusal olarak değişmeye devam eder.

Bu, sonuç olarak, gölgelenmeye ihtiyaç duyulan her şeyin, doku haritasının ve derinlik filtresinin, özel donanımda son derece hızlı yapılabilecek doğrusal enterpolasyon kullanılarak hesaplanabileceği anlamına gelir.

tl; dr: üçgenler en basit ilkeldir, bu nedenle üçgenlerle ilgili algoritmalar yoğun şekilde optimize edilebilir.


11
+1. Bir üçgenin her zaman düzlemsel olduğu gerçeğinin temel nedenlerden biri olduğunu düşünüyorum. Düzlemsel olmayan çokgenler işleri çok daha karmaşık hale getirir.
Bummzack

2
+1. Bence düzlemsel olmayı garanti edebileceğiniz tek poligon olan üçgenler, üçgen gerektiren api ve donanım yapmanın temel teknik sebebi. Modelleme yazılımı muhtemelen kafesleri modelleyiciye uygunluk açısından dörtlü olarak göstermektedir.
Hatoru Hansou

1
Kullandığım düzlemsel olmayan güzel bir benzetme ... Üç ayaklı bir tabure yerde durur, ayakları üçgenin köşeleri gibidir. Ancak dört ayaklı bir tabure zeminde iki şekilde durabilir ve eğer bir bacak diğerlerinden daha kısa ise bir konumdan diğerine sallanır.
ChrisC

Meraklıyım; Bir üçgenin her zaman aynı düzlemde göstermesi nasıl mümkün olabilir? O zaman nasıl bir küre çiziyorsun? Noktanın en az birinin farklı bir düzlemde çevrilmesi gerekir, aksi takdirde düz bir yüzey elde edersiniz.
Rapartı

@newbiez Üç köşe her zaman tek bir düzlem tanımlar. Bir küre farklı üçgenlerden oluşur; kürenin yüzeyinin bir yamasını temsil eden iki bitişik üçgen, iki tepe noktasını paylaşır, ancak aynı düzlemde değildir. Bu resim işleri daha net hale getirebilir: cse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett

8

Üç nokta (üçgen) HER ZAMAN düz bir düzlem tanımlar. Başka bir deyişle, herhangi bir üç puan verildiğinde, her zaman üç noktayı da kesebilecek düz bir düzlem oluşturabilirsiniz. Ancak aynı şey dört nokta için de geçerli değildir. Uçakta dört puan olabilir, ancak uçakta olmayan dört puanınız da olabilir.


2
Aslında 4 rastgele puan olması daha olasıdır değil zaten üçgen gerekecek böylece bir uçakta.
Chris

Bu sadece puanların çakışmaması durumunda geçerlidir.
21'de notlesh

1
Noktalar rastlantısal olsa bile, sonsuz sayıda uçakta eşitlikçidirler.
3Dave

düzlem olmak “HER ZAMAN düz bir düzlem tanımlamaz” .
sam hocevar

6

Bunu yapan "oyun motorları" değildir - kullandığınız tüm 3D yazılımlar bunu yapar. Sadece size bundan bahsetmiyor ve eğer bunu bilmiyorsa profesörünüz yeterince yetersiz görünüyor. Yazılım onları sizden saklasa bile, bilgisayarın belleğinde bulunurlar. Tüm 3B programlarda üçgenlerin görünür olmasını sağlayacak bir seçenek vardır. Ayrıca onları düzenlenebilir kenarlara bölen bir seçeneğe sahip olacaklar, böylece onlarla oynayabilirsiniz. Fakat onlar her zaman başlangıçta oradaydılar ve bu konuyu öğretmek ve hala "hangi üçgenlerin" olduğunu merak etmek, profesörünüzün safı değil.

Bir üçgen, çizgileri düzenlemenin ve düz bir yüzeyi garanti etmenin tek yoludur. Bir kuadınız olduğunda, sıraları bükülecek şekilde düzenleyebilirsiniz. Ama bu zaten üçgenlerden oluşuyor ve virajı sağlayan üçgenler.


3

Bir üçgen, izolasyonda tanımlanabilen en basit ilkeldir, çünkü üç noktadan daha az bir yüzeyi 3D olarak tanımlamaz.

Bir üçgen izole edilmiş olarak düşünülebildiğinden, tek bir üçgen oluşturabilecek bir kod veya silikon parçası yapmak mümkündür, bu da tekrarlama gücüyle herhangi bir yüzey oluşturabilir.

Bu nedenle, "herhangi bir yüzeyde" herhangi bir yüzey oluşturmayı başaran ilk bilgisayar sistemi doğal olarak birçok üçgeni bağımsız olarak gerçekleştirdi.

Eğer biri üçgenler ve dörtlüleri "ilkel" olarak düşünüyorsa (yani bağlam içermeyen tamamen izole edilmiş geometri bitleri), üçgen daha ilkeldir ve bu yüzden "kazanma" eğiliminde olacaktır.

Bununla birlikte, eğlence sınıfı bilgisayarlar 1980'lerde belirli bir karmaşıklık seviyesini aştığında, izolasyonda "ilkelleri" göz önünde bulundurmanın basitliği daha az önemli hale geldi. Eğer grafikler seri üretilecekse, ölçek ekonomileri ilgili köşelerin işlem gruplarını tercih eder, aynı anda yüze yakın aynı arabayı aynı anda monte etmeyi tercih eder.

Bu yüzden 1980'lerde filmler bir yanlış isim olan "dörtlüyü" benimsemişlerdir, çünkü bu, üç boyutlu uzayda bir 2D ızgarasını ifade eder, izole bir dörtgen değildir.

Üçgenlerden “dört” lere aynı değişim henüz interaktif eğlence dünyasında gerçekleşmedi, ancak kısa bir süre sonra gerçekleşmesi muhtemel ve sinema sektöründe de aynı sebeplerden kaynaklanıyor.


2

Bir taraflı poligon için 'n - 2' yolundaki üçgeni üçgenlemenin tek bir yolu var. Dolayısıyla, üçgenler sonuçta çokyüzlü bir şekli tanımlamanın en belirsiz yoludur. Ayrıca, diğer posterlerin belirttiği gibi, üçgeni hızlandırmak için birçok yol vardır (dörtlü veya daha yüksek) rasterleştirmeyi (sabit z favorilerimden biridir). Ayrıca, ışın üçgeni kesişme testlerini optimize etmek, ışın rasgele çokgen kesişme testlerinden daha kolaydır. Aslında, n taraflı poligonlar üzerindeki birçok işlem, ele üçgen şeklinde bir sunum yapmaktan yararlanır. Bu, n taraflı poligon temsillerinin 'kötü' olduğunu söylemek değildir - çok faydalıdır, ancak sonuçta birçok örgü işlemi için üçgenlerle çalışmak isteyeceksiniz.


2

Üçgen, eskimiş olmayan üç köşe noktasıyla tanımlandığı sürece (okunur: açıların hiçbiri tam olarak Pi değildir), o zaman köşe noktaları benzersiz bir düzlem tanımlar.

Bir dörtlü, elbette dört köşe tarafından tanımlanır. Bu köşelerin eşliksiz olması mükemmel şekilde mümkün. Bu durumda, kuadınız gerçekten dörtlü bir köşegenle bölünmüş iki üçgen olacaktır. Bu iki uçak, iki grup normal yüzey, vb.

Her modelleme aracı, tekstüre, aydınlatma vb. Her algoritma bir modelin düzlem segmentlerinden oluştuğunu varsayar ve sahip olduğumuz her formülün (normal hesaplama için çapraz ürünler sahip olduğumuz ilk üründür) mutlak minimum girdi veri setini kullanır - üç Köşeler bir düzlemi tanımlar ve düzlem, tüm süslü şeyleri yapmak için ihtiyacımız olan şeydir.

Dörtlüler ile çalışmak için kesinlikle bir motor yazabilirsiniz, ancak hemen hemen her durumda dördüncü tepe noktasını görmezden geldiğinizi fark edeceksiniz, ancak (sık sık) dörtlüyü tanımlayan diğer üç ile eşitlendiğinden emin olmanız gerekmedikçe. Ve, düzlemsel olmadığı durum için en mantıklı çözüm, dörtlüyü iki üçgene bölmek olacaktır. Peki, neden sadece bunu başlamak için yapmıyorsun?

Dünya üzerinde dörtlü çalışma noktası ne olurdu?

Bir dörtlü istiyorsanız, iki üçgeni bir araya getirin.


2

Eşit düzlemsel olmak için 4 puan almanın bir sorun olmadığını varsayarız (diğerlerinin de belirttiği gibi, ama benimle kalsın), o zaman keyfi bir yamuk yaratmanın (dörtgenlerin genellikle ne gibi olacağını) bulursunuz. ekran boşluğuna dönüştürüldüğünde), özellikle bir üçgen oluşturmadan farklı değildir - aslında, fazladan köşeleri verebilecek kadar kırpma yaptığınızda aynı şekilde çalışır. (En azından bir yazılım modelinde - donanım, kırpma işlemini daha basit bir kaba kuvvet yöntemine sahip olabilir.)

Dolayısıyla kalan konu temsili verimliliktir. - Eğer bir üçgen şeridi (1. üçgen için 3, sonra 2. üçgen için ekstra bir verim) kullanırsanız, 2 üçgeni olan ve herhangi bir ekstra köşesi olmayan bir dörtlüyü kolayca temsil edebilirsiniz. Öte yandan, dörtgenli bir üçgeni denemek ve temsil etmek için 4 köşeyi kullanmanız ve diğerine özdeş olan dejenere bir tane elde etmeniz gerekir. Bu verimlilik açısından ideal değildir.

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.