Modern oyun motorları Blender'ın “yavaş” renderine karşı gerçek zamanlı renderlemeye nasıl ulaşıyor?


90

Hem gamedev'de hem de Blender'da yeniyim ve sallayamayacağım bir şey var:

Blender'da, tek bir render (daha gelişmiş Çevrimler işleyicisini bile kullanıyorsanız) makinemde 45 saniyeye kadar sürebilir. Fakat açıkçası, bir oyunda, şaşırtıcı grafiklere sahip olabilirsiniz ve bu yüzden renderleme, gerçek zamanlı olarak saniyede birkaç kez sürekli olarak gerçekleşiyor.

Bu yüzden oyunun motorlarının gerçek zamanlı (veya gerçek zamanlıya yakın) renderlemeye nasıl ulaştığı karşısında, "yavaş" olanların Blender'ların işleyişinin nasıl göründüğüyle ilgili olarak bağlantı kesilmesinin ne olduğunu merak ediyorum.


3
Gerçek zamanlı görüntü oluşturma başlı başına büyük bir konudur, hakkında yazılmış birçok kitap vardır ("Gerçek Zamanlı İşleme" dahil). Ve Cycles gibi işleyiciler oyun motorlarındaki 3D işleyicilerden tamamen farklı çalışır - onları gerçekten karşılaştıramazsınız
UnholySheep

42
@UnholySheep Tabii ki onları karşılaştırabilirsiniz. Birisi soruyu cevaplamak için farkı başka nasıl açıklar?
user985366

2
@ 10 Yanıtlar Ama bu soru o sitede güncel olmazdı.
GiantCowFilms

3
@ 10Replies: OP Blender'dan bahsetmekle birlikte, soru esasen gerçek zamanlı oyun motorlarının neden 3D-sahneleri yaklaşık foto-gerçekçi 3D oluşturuculardan (Blender gibi, ama diğerleri) daha hızlı hale getirdiğini gösteriyor. Bunun aynı zamanda kabul edilen cevabın cevapladığı soru olduğunu da unutmayın. Bunu akılda tutarak, sorunun genel olarak Blender için değil, genel olarak Blender'a özgü sorular sorulabildiği Oyun Geliştirme ile ilgili soruların daha fazla konuyla ilgili olduğunu kabul ediyorum .
VEYA Eşleştiricisi

3
Sanırım buradaki sır, şaşırtıcı olanın kesin olması gerekmiyor. 3D renderlemede kullanılan matematik için hızlı yaklaşımlar var, InvSqrt
Dmitry Grigoryev

Yanıtlar:


115

Gerçek zamanlı render, hatta modern gerçek zamanlı render, bir püf noktası, kısayollar, kesmek ve yaklaşımlardan ibarettir.

Mesela gölgeleri al.

İsteğe bağlı sayıda ışıktan ve keyfi olarak karmaşık nesnelerden gerçek zamanlı gölgeler oluşturmak için hala tam ve sağlam bir mekanizmaya sahip değiliz. Gölge haritalama teknikleri konusunda çok sayıda değişkenimiz var, ancak hepsi gölge haritalarıyla ilgili iyi bilinen sorunlardan muzdarip ve bunlar için "düzeltmeler" bile gerçekten sadece geçici bir çözüm ve değiş tokuşlar topluluğu. "derinlik önyargısı" veya "poligon ofset" terimlerini her şeyde görürsünüz, o zaman bu sağlam bir teknik değildir).

Gerçek zamanlı oluşturucular tarafından kullanılan bir tekniğin başka bir örneği, önceden hesaplamadır. Bir şey (örneğin aydınlatma) gerçek zamanlı olarak hesaplamak için çok yavaşsa (ve bu, kullandığınız aydınlatma sistemine bağlı olabilir), önceden hesaplayabilir ve kaydedebiliriz, o zaman önceden hesaplanmış verileri gerçek olarak kullanabiliriz. -Bir performans artışı için zaman, ki genellikle dinamik efektler pahasına. Bu, basit bir hafızaya karşılık işlemsel takas karşıtı bir hafızadır: hafıza çoğu zaman ucuz ve bol, hesaplama sık değildir, bu yüzden hesaplamada tasarruf karşılığında fazladan belleği yakarız.

Diğer taraftan, çevrimdışı oluşturucular ve modelleme araçları doğruluk ve kaliteye daha fazla odaklanma eğilimindedir. Ayrıca, dinamik olarak değişen geometrilerle (inşa ettiğiniz model gibi) çalıştıkları için yeniden hesaplamaları gerekir, oysa gerçek zamanlı bir işleyicinin bu gereksinimi olmayan son bir sürümle çalışması gerekir.


14
Bahsedilmesi gereken bir başka nokta, bir oyunun bir alanın hızlı bir şekilde görüntülenmesi için ihtiyaç duyulan tüm verileri üretmek için kullanılan hesaplama miktarının, bir görünümü elde etmek için gerekli olan hesaplama miktarından daha büyük siparişler olabileceğidir. Bir alanın görünümlerinin görüntülenmesi herhangi bir önceden hesaplama yapılmadan bir saniye sürerse, ancak bazı önceden hesaplanan veriler bunu 1/100 saniyeye kadar azaltabilirse, önceden hesaplamalar için 20 dakika harcamak, gerçek zamanlı bir oyunda görüntülere ihtiyaç duyulacaksa yararlı olabilir, ancak biri sadece 10 saniyelik bir 24 fps film istiyor, dört dakika harcamak çok daha hızlı olurdu ...
supercat

9
... saniyede bir oranında 240 gerekli görüntünün oluşturulması.
supercat,

@supercat ve bu nedenle renderleriniz acele etmekte serbesttir ve süreç üzerinde daha fazla kontrol sahibi olursunuz. Bir oyun motorunu kullanarak ... özelliklerden fedakarlık etmeye hazır olursanız kullanabilirsiniz. Ama dediğin gibi, buna değmez.
joojaa

Bunun hatırlayabildiğim çarpıcı bir örnek, son derece zaman alıcı ön hesaplama tekniklerinin kombinasyonlarını kullanarak çok sınırlı makinelerde nispeten akıllara durgunluk veren gerçek zamanlı 3D grafikler elde edebilen orijinal Quake motorudur (~ 1996) . BSP ağaçları ve önceden oluşturulmuş aydınlatma efektleri önceden üretildi; Bu motor için bir seviye tasarlamak, harita derleme araçlarının bitmesini bekleyen saatlerce (genellikle bir gecede) oluşuyordu. Takas, esasen, geliştirme süresi pahasına işleme sürelerinde azalma oldu.
Jason C

(Orijinal Doom motoru [1993] benzer ön hesaplamalara sahipti. Marathon da olabilir , ama hatırlamıyorum, Marathon seviyelerini geliştirdiğimi hatırlıyorum ama ne olduğunu hatırlayamıyorum.)
Jason C

109

Mevcut cevap, ilgili genel sorunları açıklamak için çok iyi bir iş çıkardı, ancak önemli bir teknik detayı kaçırdığını düşünüyorum: Blender'ın "Döngüleri" render motoru, çoğu oyunun kullandığı motorun farklı bir motor olduğunu gösteriyor.

Tipik olarak oyunlar, bir sahnedeki tüm çokgenleri tekrar ederek ve bunları tek tek çizerek yapılır. Bu, düz bir görüntü oluşturmak için çokgen koordinatlarını sanal bir kamera aracılığıyla 'yansıtmak' yoluyla yapılır. Bu tekniğin oyunlar için kullanılmasının nedeni, modern donanımın bu tekniğin etrafında tasarlanması ve göreceli olarak yüksek detaylarda gerçek zamanlı olarak yapılabilmesidir. İlgilenilmeyen, bu aynı zamanda Blender'ın önceki motorunun, Blender Vakfı eski motoru Cycles motorunun lehine düşürmeden önce kullandığı tekniktir.

Poligon Renderleme

Öte yandan çevrimler, ışın çekme motoru olarak bilinen şeydir. Poligonlara bakmak ve onları ayrı ayrı göstermek yerine, sahneye sanal ışık ışınları gönderir (son görüntüdeki her piksel için bir tane), bu ışık birkaç yüzeyden yayılır ve daha sonra pikselin hangi renge karar vereceğine karar vermek için bu verileri kullanır olmalı. Raytracing, gerçek zamanlı görüntü oluşturma için pratik olmayan pratik bir işlemdir, ancak görüntü ve video görüntülemede kullanılır çünkü ekstra ayrıntı ve gerçekçilik sağlar.

Raytracing Rendering


Unutmayın ki ışınlanma ve çokgen oluşturmaya ilişkin kısa açıklamalarım, kısalık adına oldukça elimden alındı. Eğer teknikler hakkında daha fazla bilgi edinmek istiyorsanız, derinlemesine bir öğretici ya da kitap aramanızı tavsiye ediyorum, zannettiğimden daha iyi açıklamalar yazan birçok insan var.

Ayrıca 3B görüntülemeye dahil çeşitli tekniklerin bulunduğunu ve bazı oyunların aslında belirli amaçlar için ışın izleme çeşitlerini kullandığını unutmayın.


3
Çok iyi bir nokta için + 1; Kasıtlı olarak rasterleşmeye karşı ışınlanma tavşanının deliğinden geçmedim, bu yüzden bunu tamamlayıcı olarak kullanmak harika.
Maximus Minimus

16
Bu cevap farkın kalbine daha da yaklaştı. Oyun motorları rasterleştirmeyi (ileri veya ertelenmiş) gerçekleştirirken, çevrimdışı oluşturucular (Blender, Renderman, vb.) Işın izleme gerçekleştirir. Resim çizmeye tamamen farklı iki yaklaşım.
ssell

4
@ LeComteduMerde-fou Gamedev'in oyun geliştiricileri hedeflediği için, teknik olarak daha fazla teknik bilgi sahibi olan okuyucunun ek bir teknik açıklamasının fayda sağlayacağını hissettim.
Pharap

1
@ssell True, ancak sadece ışın izleme ile ilgili değil - ışın izleme olmadan bile, GPU görüntülemede bile, Blender'ın oluşturma işlemi genellikle çok daha ayrıntılı ve daha yavaş. Bunun çoğunlukla doğruluk odaklı olması gerekir - daha iyi doku filtreleme ve çözünürlük, kenar yumuşatma, ışıklandırma, gölge haritalama, Z-doğruluk, dörtlü, iki yönlü yüzeyler, büyük çokgen sayımı, daha yüksek çözünürlük çıkışı, doğru çarpma eşlemesi , önceden hesaplanmış haritaların yokluğu, geçiş, doğru kinematik ... oyun motorlarının yolunda gitmediği ya da taklit ettiği özelliklerin listesi.
Luaan

1
@Chii Ben yanlış hatırladım. ART VPS'yi düşünüyordum, gerçek zamanlı değil sadece ivme idi.
Jason C
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.