Modern oyunlar neden aynalar için dokuya yaklaştırmalı bir yaklaşım kullanıyor?


40

Mario64 ya da DukeNukem3D gibi eski oyunlara bakıldığında, oyundaki tüm aynalar, duvarın arkasındaki aynanın önündeki geometrinin yansıtılmış bir kopyasıyla birlikte, sadece duvardaki deliklerdir. DukeNukem3D durumunda, bir klip bile etkin olmayabilir ve o aynalı odaya girebilir.

Buna karşılık, modern oyunlar aynalar için dokuya göre bir yaklaşım kullanıyor. Bu, aynaların onlara yaklaşırken belirgin şekilde pikselleşmesine neden olur. Bu yaklaşımı farkettiğim ilk oyunlardan biri Luigi Konağı idi, ancak neredeyse tüm modern oyunlarda kullanılıyor gibi görünüyor.

Donanım veya motorlardaki hangi değişiklik ikinci yaklaşımı bu güne kadar baskın hale getirdi ve bunun yararları nelerdir? Saf görseller açısından, ilk yaklaşım, pikselleşme sorunlarından muzdarip olmadığından üstün görünmektedir.


14
Ya iki oda arasındaki bir kapıdaki aynayı istiyorsanız?
Superbest,

Yanıtlar:


37
  1. RTT (doku-render) kullanmak, ayarlanabilir performans için işleme kalitesini (çözünürlük, LOD, aydınlatma karmaşıklığı) kolayca ölçeklendirmenize izin verir. RTT, yansımayı tam olarak görmenin zor olduğu belirli bir mesafedeki yüzeyin bir kübik boşlukla değiştirilmesini de kolaylaştırır.
  2. Çıktı bir doku olduğu için, daha sonra ne yapılabileceğine ilişkin daha fazla seçenek vardır (aydınlatma, gölgeleme, karıştırma, bozulma vb.).
  3. Sahneye yansıtılmış bir geometri versiyonu yerleştirilirse, gerçek geometriyle kesiştiğinde ve köşenin arkasında görülebiliyorsa daha karmaşık bir çıkma gerektirir. Eski oyunlarda, seviyeler bundan kaçınmak için tasarlandı. Birisinin asıl yansıtmayı yapması gerektiğinden bahsetmiyorum bile.
  4. Geometri manuel olarak yansıtılmazsa, görüntüleme matrisi ve ayırma modu değiştirilerek (matristeki boşluk inversiyonunu telafi etmek için) ve aynayı kesmek için şablon tamponu kullanılarak işleme yapılmalıdır. Modern motorlar tüm oluşturma durumlarını önceden oluşturmayı tercih eder, bu nedenle her sahnenin kopya oluşturma durumunun ayna oluşturma için gerekli değişiklikleri yapmasıyla ilgili küçük bir sorun olacaktır.

Temel olarak RTT kullanmak herkese daha fazla özgürlük verir.


Açık 3 .: Çoğu (eski) FPS oyun motorları, görünürlük ayıklama için (muhtemelen dörtlü) çokgenleri çoktan kesip alan biseksiyon algoritmalarını (ünlü "portal motoru" DOOM'un kullandığı gibi) kullandı. Bu tür motorlar, ayna dışına yansıtılmış geometriden endişe duymadan, aynanın arkasındaki bir odaya görme kapısı olarak dörtlü bir "ayna" yı kolaylıkla basabilirler.
dronus

@ dronus Ne? Öyleyse neden ilk etapta "ayna" yapmayı rahatsız ettin? Sadece duvarda bir delik aç.
S. Tarık Çetin

Çünkü gerçek geometri ayna duvarının arkasında boşluk bırakmayabilir, gerçek bir ayna gibi çalışmak için bir odaya ihtiyaç duymaz.
dronus

29

Hayır, yanılıyorsun - Duke Nukem 3D'nin aynaları hiç de böyle çalışmadı.

DN3D, bir portal motoru kullandı . Herhangi bir iki sektör arasındaki birleşme bir ölçüde keyfi idi ve renderleme motoru bir portala geldiğinde, bu konuda başka bir sektör oluşturmaya başlaması gerektiğini biliyordu. Aynanın arkasındaki sektör temelde motordaki bir tuhaflıkla başa çıkacak bir yer tutucuydu - sektörün tek noktası, ihtiyaç duyduğunuz her şeyden "yansımaları" ndan daha büyük olmaktı. Gerçek bir geometri içermiyordu. Aslında, Portal'da “portallar” çalışmasıyla aynı şekilde çalıştı - Portalın (kendisi bir portal motoruna dayanıyordu) çalışma zamanında portallar yaratması ve portalların kaç kez tekrarlanabileceği konusunda bir sınırı var. -> B -> A -> B -> A ...), Build (DN3D) başka bir aynada bir aynaya işaret ettiyseniz, yığın taşması nedeniyle çökecektir.

Bununla aynayı yapmanın ne kadar basit olduğu açıktır - odaya geri dönecek bir portal yapın . Bu, aynayı yansıtmanın, odanın kendisini yaratması kadar yüksek maliyet ve tutarlılık sağlaması anlamına geliyordu. Bir aynayı aynaya doğrultmadığın sürece, budur. Build engine kaynak koduna bakarsanız, kod işleme aynaları olmadığını göreceksiniz - bunlardan biri olması gerekmez, çünkü portallar böyle çalışır NOT: aslında, oluşturulan pikselleri çevirmek için kod vardır - bu sadece geometriyi ve çeşitli sprite ve efektleri çevirmiyor. Editör bu “sahte” portalları yapabiliyordu - buna rağmen kendi kendine baktı. Oldukça akıllı Build motoru hakkında daha fazla bilgi edinmek istiyorsanız, Fabien Sanglard tarafından Build engine internals'da harika bir analiz var . Motorun tamamı açık kaynaklı ve modern platformlara da taşınmış, eski motor hala Windows 10'da kusursuz çalışıyor (sizin için test edildi: P). Build tabanlı oyunların çoğu da açık kaynaklı ve / veya yeniden yapıldı.

Bu neden artık kullanılmıyor? Bazı motorlar artık portalları tercih etmiyor. Çok sayıda grafik kesmesi ve optimizasyonu uygulamak çok zordur - Sizi belirli bir şeye işaret edemem, ancak işlem sonrası işlemlerin çoğu gerçek bir portal motorunda çalışmayan kesmelere dayanır (çok sayıda varsayımda bulunurlar. artık beklemeyin). Bu, temelde, bu oyunların stereoskopik görüntülerde olduğu gibi aynı sorun.

En önemlisi, aynalar daha da karmaşıklaştı. Karmaşık şekillere, dokulara sahip olabilirler, zeminde ("su" olarak da bilinir) vb. Olabilirler. Bütün bu problemler bir portal motorda çözülebilirken, RTT bir noktada daha basit bir seçim haline gelir ve GPU'lar yeterince hızlıdır. ele almak için.

Ancak, tüm bunlara rağmen, donanımsal 3D hızlandırmaya sahip, "gerçek" şeyler yapan birçok oyun var. Eski oyunlardan Quake 3 veya Alien vs. Predator gibi. Bildiğim kadarıyla Source motor oyunları hala "gerçek" ayna kullanıyor. İnsanların aynaya yaklaşmalarını beklerseniz ve aynı anda çok fazla yansıtıcı yüzey olmadığından emin olabilirsiniz (örn. Seviye tasarımıyla), portal aynalar hala çok çekicidir.


Görünüşe göre Duke Nukem 3D'nin bu şekilde çalıştığına dair ortak inancın sebebi, gerçek seviye tasarımlarında, aynanın arkasındaki alanın, render motoru gerçekten gerektirmese de, yansıttığı oda kadar büyük olmasıdır.
Random832

Ayrıca, ayna olmayan portallar şeyleri yansıtmaz, şeyleri yansıtmaz , bu yüzden "kod işleme aynaları yok" un nasıl mümkün olduğunu bilmiyorum.
Random832

5
@ Random832 Bu bir tür gerekliydi - aynalı odanın olması gereken yerde bazı sektör ortaya çıkmışsa bazı görsel eserler vardı. Bu, çoğunlukla zararsız varsayımların performans için çok önemli olduğu parçalardan biridir. Build ile oynadıysanız, iki sektör aynı yükseklikte geçtiğinde, iyi sonuç vermeyeceklerini fark etmiş olabilirsiniz. Yansıtma gelince, gerçek yaşam aynaları çalışma aynı şekilde çalışır. Aynaların neden sadece y ekseninde "döndüğünü" hiç merak ettiniz mi? Sizi aynı odaya bağlayan bir portalı çevirmenizin gerekmemesinin aynı nedeni.
Luaan

Mesele şu ki, ters yöne bakan bir odaya açılan normal bir portal, onları yansıtmak yerine 180 derece döndürmek zorunda kalacak . Bu yüzden bunu yapma yeteneğine sahip olmak aynalar için özel işlem sayılır. (Bunu yapma yeteneğine sahip olmamak, portalların portallar olarak çalışmadığı ve yalnızca aynalar için uygun olduğu anlamına gelir; bu durumda tüm sistem aynalar için özel işlemdir). Ve evet, neden aynaların "sadece y ekseni üzerinde" "döndüğünü" biliyorum. Aslında, z ekseni üzerinde dönerler. Ancak çok sayıda ekseni çevirdikleri gerçeği, onları portallardan ayırır.
Random832

@ Random832 Tabii ki y ekseni dediğinize bağlıdır :) Ve evet, haklısınız, özel işlem var. Ama bu çok ilginç - geometriyi değil, render veriyi çeviriyor (ve sprite ve her şey ... aslında biraz iş). Portal çerçevesi ters çevrilir, portal her zamanki gibi yapılır ve sonra her şey satır satır geriye doğru işlenir.
Luaan

3

Mümkün olsaydı, RTT kullanılmış olurdu, ancak donanım oluşturma boru hattı bir yoluydu.

Eski donanımın doku oluşumunu engelleyen kısıtlamaları da vardı. RAM'e yazmak, aynı anda okunamayacağı anlamına gelir. Oluşturma performansını iyileştirmek için, hedef arabellek yalnızca yazmak üzere kilitlendi, yalnızca görüntü donanımı ondan okuyabilirdi. Okuma talebinde bulunabilirsiniz, ancak bu RAM'i kilitledi ve render bir sonraki kareye başlamadan önce kilidin temizlenmesini beklemek zorunda kaldı. RTT boru hattında büyük bir tıkanıklığa neden olur ve bu nedenle başka çözümler kullanılır.

Donanım oluşturma boru hatları için, işleme yükünü azaltmanın bir yolunu sağladığı için RTT'nin kullanıldığı norm olduğunu göreceksiniz. Sözde 3B içerik sağlamak için 3B'lere dönüştürülür. Doku oluşturma, genel tüketici pazarının dışındaki özel makineler dışında, o zamanlar kullanılamayacak kadar pahalıydı (CPU).


1

Dük Nukem, aynanın arkasındaki geometriyi tekrar oluşturarak diğer cevapların kısmen doğru olduğunu ele alıyor. Aynaların ardında gerçekte geometri içermeyen alanlar var (oyun veri dosyalarında), geometri çalışma zamanı sırasında yeniden oluşturulur, bu alanların var olmasının nedeni, seviyeyi düzenlerken orada yanlışlıkla bir seviye parçası yerleştirmekten kaçınmaktır. :

Bu nedenle, işaretlenmiş bir alan, yanlışlıkla herhangi bir geometriye yer vermeyecektir.

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.