Hiç anlamadığım bir şey var. GTA IV gibi büyük bir büyük PC oyunu CPU'mun% 50'sini nasıl kullanabilir ve 60fps'de çalışabilirken, dönen bir Demlik @ 60fps'in DX demosu okkalı% 30 kullanıyor?
Hiç anlamadığım bir şey var. GTA IV gibi büyük bir büyük PC oyunu CPU'mun% 50'sini nasıl kullanabilir ve 60fps'de çalışabilirken, dönen bir Demlik @ 60fps'in DX demosu okkalı% 30 kullanıyor?
Yanıtlar:
Genel olarak, çünkü
Örneğin, yapabileceğiniz kolay bir optimizasyon, gerçekte görülemeyen şeyleri çizmeye çalışmaz. Grand Theft Auto IV'ten bir şehir manzarası gibi karmaşık bir sahneyi düşünün . Oluşturucu aslında tüm binaları ve yapıları oluşturmuyor. Bunun yerine, yalnızca kameranın görebileceği şekilde oluşturuyor. Aynı binaların arkasına, orijinal kameraya bakacak şekilde uçabilseydiniz, yarı inşa edilmiş oyulmuş bir kabuk yapısı görürdünüz. Kameranın göremediği her nokta oluşturulmaz - göremediğiniz için size göstermeye gerek yoktur.
Ayrıca, daha da iyi hızlanma sağlamak için belirli bir donanıma karşı geliştirdiğinizde optimize edilmiş talimatlar ve özel teknikler mevcuttur.
Sorunuzun diğer kısmı, bir demonun neden bu kadar çok CPU kullandığından kaynaklanıyor:
... dönen bir Demlik @ 60fps bir DX demo% 30 bir boğucu kullanırken?
Grafik API'lerinin (benzeri dxdemo
) demolarının donanımınız güzel bir örnek göstermek için gereken tüm özellikleri desteklemediğinde yazılım oluşturucu olarak adlandırılan programa geri dönmesi yaygındır . Bu özellikler arasında gölgeler, yansıma, ışın izleme, fizik, vb.
Bu, API'nın tüm özelliklerini göstermek için mevcut olmayan, tam özellikli bir donanım aygıtının işlevini taklit eder. Ancak donanım gerçekten mevcut olmadığından, bunun yerine CPU'nuzda çalışır. Bu, bir grafik kartına yetki vermekten çok daha verimsiz - dolayısıyla yüksek CPU kullanımınız.
Sabır, teknik beceri ve dayanıklılık.
İlk nokta, bir DX Demosu'nun öncelikle bir öğretim yardımcısı olmasıdır, bu nedenle uygulama hızı değil netlik için yapılır.
Yoğunlaşmak oldukça büyük bir konudur, ancak oyun geliştirme öncelikle verilerinizi ve yürütme yollarınızı neredeyse patolojik bir dereceye kadar anlamakla ilgilidir.
3D oyunlar gözlerinizi kandırmak için harika. Örneğin, bir sahnenin yüzey süreksizliklerine yakın olan kısımlarını gölgeleyerek daha gerçekçi bir his veren ekran alanı ortam tıkanıklığı (SSAO) adı verilen bir teknik vardır. Duvarınızın köşelerine bakarsanız, çoğu durumda merkezlerden biraz daha koyu göründüklerini göreceksiniz.
Aynı etki, oldukça doğru simülasyona dayanan radyoloji kullanılarak elde edilebilir. Radiosity ayrıca sıçrayan ışıkların vb. Daha fazla etkisini dikkate alacaktır, ancak hesaplama açısından pahalıdır - bir ışın izleme tekniğidir.
Bu sadece bir örnek. Gerçek zamanlı bilgisayar grafikleri için yüzlerce algoritma vardır ve bunlar esas olarak iyi yaklaşımlara dayanır ve genellikle çok fazla varsayım yapar. Örneğin, mekansal sıralama, kameranın hızına, tipik konumuna ve sahne geometrisindeki değişiklik miktarına bağlı olarak çok dikkatli bir şekilde seçilmelidir.
Bu 'optimizasyonlar' çok büyüktür - bir algoritmayı verimli bir şekilde uygulayabilir ve 10 kat daha hızlı çalıştırabilirsiniz, ancak benzer bir sonuç ("hile") üreten akıllı bir algoritma seçtiğinizde O (N ^ 4) 'den O ( log (N)).
Gerçek uygulamayı optimize etmek oyunları daha da verimli kılan şeydir, ancak bu sadece doğrusal bir optimizasyondur.
Eeeeek!
Bu sorunun eski olduğunu biliyorum, ama hiç kimse VSync'den bahsetmediği heyecan verici !!! ???
Oyunun 60fps'de CPU kullanımını, 60fps'de çaydanlık demosunun CPU kullanımı ile karşılaştırdınız.
Her ikisinin de tam olarak 60 fps'de çalıştığı belli değil mi? Bu da cevaba yol açıyor ...
Her iki uygulama da vsync etkinken çalışır! Bu, oluşturma kare hızının monitörünüzün "dikey boş aralığına" kilitlendiği anlamına gelir. Grafik donanımı (ve / veya sürücü) yalnızca maks. 60fps. 60fps = 60Hz (Hz = saniyede) yenileme hızı. Yani muhtemelen oldukça eski, titreyen bir CRT veya ortak bir LCD ekran kullanıyorsunuz. 100Hz'de çalışan bir CRT'de muhtemelen 100Hz'e kadar olan çerçeveler göreceksiniz. VSync ayrıca LCD ekranlara benzer şekilde uygulanır (genellikle 60Hz yenileme hızına sahiptir).
Yani, demlik demosu aslında çok daha verimli çalışabilir! CPU zamanının% 30'unu kullanıyorsa (GTA IV için% 50 CPU zamanı ile karşılaştırıldığında), muhtemelen her kare için daha az işlemci zamanı kullanır ve bir sonraki dikey boş aralık için daha uzun süre bekler. Her iki uygulamayı karşılaştırmak için vsync'yi devre dışı bırakmalı ve tekrar ölçmelisiniz (her iki uygulama için çok daha yüksek fps ölçeceksiniz).
Bazen vsync'i devre dışı bırakmak uygundur (çoğu oyunun ayarlarında bir seçenek vardır). Bazen vsync devre dışı bırakıldığında "yırtılma artıkları" görürsünüz.
Ayrıntılarını ve neden kullanıldığını wikipedia'da bulabilirsiniz: http://en.wikipedia.org/wiki/Vsync
Birçok cevaplar burada mükemmel göstergelerini sağlar iken nasıl yerine daha basit soruya cevap verecektir neden
Belki de en iyi örnek (kesinlikle en iyi bilinenlerden biri) Id yazılımıdır. Çok erken fark ettiler, Komutan Keen ( 3D'den çok önce) günlerinde , grafiksel olarak üstün olan modern donanıma (bu durumda bir EGA grafik kartı!) Dayansa bile 1 bir şey elde etmenin akıllıca bir yolunu buldular. bunun oyununuzu ön plana çıkaracağı rekabet. Bu doğruydu, ancak daha sonra, yeni oyunlar ve içerik bulmak yerine teknolojiyi lisanslayabilmeleri yerine yeni nesil motoru geliştirirken diğerlerinden gelir elde edebileceklerini ve böylece rekabeti tekrar atlayabileceklerini fark ettiler. .
Bu programcıların yetenekleri (iş anlayışı ile birleştiğinde) onları zengin yapan şeydir.
Bu, bu tür insanları motive etmenin mutlaka para olmadığını söyledi. Büyük olasılıkla başarmak, başarmak arzusu. İlk günlerde kazandıkları para, artık zevk aldıkları şeylere ayırmak için zamanları olduğu anlamına geliyor. Birçoğunun dış çıkarları olsa da neredeyse hepsi hala programlanıyor ve son yinelemeden daha iyisini yapmanın yollarını bulmaya çalışıyor.
Basitçe söylemek gerekirse çaydanlık demosunu yazan kişi muhtemelen aşağıdaki sorunlardan bir veya daha fazlasına sahipti:
Sonuncusu sert 2 gelebilir, ancak açıkça diğerlerinden daha iyi olan bazıları vardır, çan eğrileri bazen aşırı uçlara sahiptir ve bu beceriyle yapılanın ilgili uç uçlarına çekilme eğilimindedir.
Küçük hedeflerin asıl nedeni bu olabilir. Çaydanlık demosunun hedefi sadece bir demiydi. Ama programcılar beceri bir demo 3 . Bu, (büyük) bir işletim sisteminin küçük bir yüzünün, bu durumda DX oluşturmanın bir demosu olacaktır.
Görüntüleme olanlar için o şekilde daha CPU kullanılan bu Mater olmaz demo gerekli kadar uzun iyi yeterince bakarken. Yararlanıcı olmadığında atığı ortadan kaldırmak için herhangi bir teşvik olmazdı. Buna karşılık bir oyun daha iyi yapay zeka, daha iyi ses, daha çok çokgen, daha fazla efekt için yedek döngülere sahip olmak ister.
Birkaç nedenden dolayı
DÜZENLEME: Birkaç sayı vermek için
NV-6800 GPU ile 2.8 Ghz Athlon-64. Sonuçlar:
Bazen bir sahnede göründüğünden daha fazla şey olabilir. Örneğin, binlerce köşesi, çevre eşlemesi, yumru eşlemesi ve diğer karmaşık piksel gölgelendiricilerinin eşzamanlı olarak oluşturulduğu dönen bir demlik, çok fazla işlem gerektirir. Çoğu zaman bu çaydanlık demoları sadece bir tür özel etki göstermek içindir. Ayrıca, mutlak performans hedef olmadığında GPU'dan en iyi şekilde yararlanamayabilirler.
Bir oyunda benzer efektler görebilirsiniz, ancak genellikle kare hızını en üst düzeye çıkarmak için tehlikeye atılmış bir şekilde yapılır. Bu optimizasyonlar oyunda gördüğünüz her şeye uzanıyor. Sorun, "En az işlem gücüne sahip en muhteşem ve gerçekçi sahneyi nasıl oluşturabiliriz?" Oyun programcılarını en iyi optimize ediciler yapan şey budur.
Verilen tüm nitelikli ve iyi cevaplarla, hala eksik olan: Windows'un CPU kullanım sayacı çok güvenilir değil. Sanırım bu basit çaydanlık demosu sadece boş döngüde işleme işlevini çağırıyor, arabellek değişiminde engelliyor.
Şimdi Windows CPU kullanım sayacı, her işlemde ne kadar CPU zamanı harcandığına bakar, ancak bu CPU zamanının nasıl kullanıldığına bakar. Bir eklemeyi deneyin
Sleep(0);
oluşturma işlevinden döndükten hemen sonra karşılaştırın.
Buna ek olarak, hesaplama gücünü korumak için sanatsal açıdan birçok püf noktası vardır. Birçok oyunda, özellikle de eski oyunda, gölgeler önceden hesaplanır ve haritanın dokularında "pişirilir". Çoğu zaman, sanatçılar çoğunlukla aynı görüneceği zaman ağaçlar ve özel efektler gibi şeyleri temsil etmek için uçakları (iki üçgen) kullanmaya çalıştılar. Oyunlardaki sis, uzaktaki nesneleri işlemekten kaçınmanın kolay bir yoludur ve çoğu zaman oyunların uzak, orta ve yakın görünümler için her nesnenin birden çok çözünürlüğü vardır.
Herhangi bir cevabın çekirdeği şu olmalıdır - 3D motorların gerçekleştirdiği dönüşümler çoğunlukla toplama ve çarpmalarda (doğrusal cebir) (dallar veya atlamalar yok) belirtilir, bir çizimin işlemleri genellikle tek bir karenin bu tür eklenti işleri paralel olarak yapılabilir. GPU çekirdekleri çok iyi add-mul'lardır ve düzinelerce veya yüzlerce add-mull çekirdeği vardır.
CPU, AI ve diğer oyun mantığı gibi basit şeyler yapmaya bırakıldı.
GTA IV gibi büyük bir büyük PC oyunu CPU'mun% 50'sini nasıl kullanabilir ve 60fps'de çalışabilirken, dönen bir Demlik @ 60fps'in DX demosu okkalı% 30 kullanıyor?
GTA'nın DX demodan daha verimli olması muhtemel olsa da, CPU verimliliğini bu şekilde ölçmek esasen kırılmıştır. Verimlilik, örneğin verilen zaman başına ne kadar iş yaptığınızla tanımlanabilir. Basit bir karşı örnek: mantıksal CPU başına bir iş parçacığı oluşturur ve üzerinde basit bir sonsuz döngü çalışmasına izin verir. % 100 CPU kullanımı elde edersiniz, ancak yararlı bir iş yapılmadığı için verimli değildir.
Bu da bir cevaba yol açar: Bir oyun nasıl verimli olabilir? "Büyük büyük oyunları" programlarken, oyunu her yönüyle optimize etmek için büyük bir çaba harcanmaktadır (günümüzde genellikle çok çekirdekli optimizasyonları da içermektedir). DX demosuna gelince, amacı hızlı koşmak değil, kavramları göstermek.
CPU yerine GPU kullanımına bir göz atmanız gerektiğini düşünüyorum ... Grafik kartının GTA IV'te Çaydanlık örneğinden çok daha yoğun olduğuna eminim (pratik olarak boş olmalıdır).
Belki aşağıdakileri kontrol etmek için bu monitör gibi bir şey kullanabilirsiniz:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
Ayrıca, kare hızı dikkate alınması gereken bir şeydir, belki çaydanlık örneği tam hızda çalışıyor olabilir (belki 1000 fps) ve çoğu oyun monitörün yenileme frekansıyla (yaklaşık 60 fps) sınırlıdır.
Vsync cevabına bakın; bu yüzden aynı kare hızında çalışıyorlar.
İkincisi, CPU bir oyunda liderlik özlüyor. Basitleştirilmiş bir açıklama, ana oyun döngüsünün sadece sonsuz bir döngü olduğudur:
while(1) {
update();
render();
}
Oyununuz (veya bu durumda çaydanlık) fazla bir şey yapmasa bile, hala döngünüzde CPU yiyorsunuz.
GTA'daki% 50 işlemci, demodaki% 30'dan sonra "daha üretken", çünkü muhtemelen fazla bir şey yapmıyor; ancak GTA tonlarca ayrıntıyı güncelliyor. Demoya bir "Uyku (10)" eklemek bile CPU'yu bir ton düşürecektir.
Son olarak GPU kullanımına bakın. Demo, modern bir video kartında muhtemelen <% 1 alıyor, GTA muhtemelen oyun sırasında çoğunluk alacak.
Kısacası, karşılaştırma ölçütleriniz ve ölçümleriniz doğru değil.
DX çaydanlık demosu, CPU'nun% 30'unu yararlı işler yapmıyor. Meşgul bekliyor çünkü yapacak başka bir şeyi yok.
Unreal serisinden bildiğim kadarıyla bazı sözleşmeler kapsülleme gibi kırılıyor. Kod, oyuna bağlı olarak bayt koduna veya doğrudan makine koduna derlenir. Ayrıca, nesneler bir kafes biçiminde oluşturulur ve paketlenir ve dokular, aydınlatma ve gölgeler gibi şeyler önceden hesaplanırken, saf bir 3d animasyon bu gerçek zamanı gerektirir. Oyun gerçekten çalışırken, sadece bir nesnenin sadece görünür kısımlarını oluşturmak ve doku detayını sadece yakınken göstermek gibi bazı optimizasyonlar da vardır. Son olarak, video oyunlarının belirli bir zamanda bir platformdan en iyi şekilde yararlanacak şekilde tasarlanması muhtemeldir (ör: Intelx86 MMX / SSE, DirectX, ...).
Bence cevabın burada önemli bir kısmı eksik. Cevapların çoğu size "Verilerinizi tanıyın" demektedir. Gerçek şu ki, aynı şekilde ve aynı derecede önemle, aşağıdakileri de bilmelisiniz:
Ancak , mevcut modern bilgisayarlarla, >> 30ftp'de gerçek bir 1080p video oynatamazsınız (64 bitlik tek bir 1080p görüntü 15.000 Ko / 14.9 MB alacaktır). Bunun nedeni örnekleme / hassasiyettir. Bir video oyunu pikseller, görüntüler, veriler vb.İçin asla çift duyarlık (64 bit) kullanmaz, daha doğrusu daha düşük özel hassasiyet (~ 4-8 bit) kullanır ve bazen makul hesaplamaya izin vermek için enterpolasyon teknikleriyle yeniden ölçeklendirilir. zaman.
Verilerin kırpılması (hem OpenGL standardında hem de yazılım uygulamasında), Veri sıkıştırması vb. Gibi başka teknikler de vardır. Ayrıca, mevcut GPU'ların donanım yeteneği açısından mevcut CPU'lardan 300 kat daha hızlı olabileceğini unutmayın. Ancak, sorununuz tamamen optimize edilmemiş ve tamamen paralelleştirilemezse (özellikle görev paralelleştirilebilir) iyi bir programcı 10-20x faktörü alabilir.
Deneyimle, optimizasyonun üstel bir eğri gibi olduğunu söyleyebilirim. En iyi performansa ulaşmak için gereken süre inanılmaz derecede önemli olabilir.
Çaydanlığa geri dönmek için geometrinin nasıl temsil edildiğini, örneklendiğini ve GTA 5'te geometri / dokular ve en önemlisi ayrıntıların (hassasiyet, örnekleme vb.