Yazılım oluşturma nasıl yapılır?


15

Gerçek zamanlı yazılım tabanlı rasterleştirmeyi keşfetmek istiyorum. Bugünlerde her şeyin GPU'ya gittiğini biliyorum, ancak bir yazılım oluşturucu kullanmanın hala mantıklı olduğu birkaç oyun var.

Örneğin: Voxeltron

Voxatron, voksellerden oluşan bir dünyada (küçük küpler, bir çeşit) gerçekleşen bir arena nişancı oyunudur. Oyundaki her şey, menüler ve oyuncu envanteri dahil olmak üzere sanal bir 128x128x64 voksel ekranında görüntülenir. Yakından bakarsanız, bazen yerdeki bazı nesnelerin üzerine gölge düşüren envanterin (skor / yaşam / cephane) görebilirsiniz.

Büyük bir keşif macera oyunu yapmak için uzun zamandır voksel oluşturma ve modelleme araçları üzerinde çalışıyorum. Yaklaşık yarım yıl önce Conflux için arena atıcıları üzerinde yaptığım işle kaynaştı ve sonuç bu oldu.

Bu oldukça basit bir oyundur - çoğunlukla sadece Robotron, aptal yaratıklar ile 3d yıkılabilir bir dünyada ayarlanır. Yıkılabilirliğin etkilerinin oyun için ne kadar büyük olacağından emin değilim, ancak duvar parçalarını patlatmak eğlenceli. Korkunç canavarlardan saklanmak için bariyerler inşa etmek için kullanabileceğiniz deneysel bir duvar inşa pikapı da ekledim.

Oyun küçük bir arenada gerçekleşir. Bazılarında Knightlore ve Smash TV arasında bir yerlerde, set aksiyon parçalarına sahip odalar bulunmaktadır. Bu, gizlice gizlenen orijinal macera tabanlı tasarımlardan bazıları ve tematik ortamlar oluşturmak için bir bahane.

Özellikleri:

  • Yumuşak gölgeler ile özel yazılım oluşturma.
  • Dahili ses ve müzik synthesizer (ayrıca römork müziği yapmak için kullanılır).
  • Oynatma ve oyun sonrası kayıt.

1
Bir oyunun düzgün bağlantısı. GPU'da yumuşak gölgeler elde etmek için bir yazılım oluşturucu kullanmanın gerekli olmadığını unutmayın . Mevcut donanımdan yararlanırsa gerçekten yapabildiği zaman, render döngüsü tarafından bazı performans sınırlamalarına girecek, 1,6 GHz dizüstü bilgisayarlar veya el cihazları gibi daha temel makinelerde çalışamayacak.
bobobobo

Yanıtlar:


11

Zaten bazı temel doğrusal cebirleri bildiğinizi varsayacağım: 3d projeksiyonlar, kamera kurulumu, köşeleri dünya konumuna dönüştürme vb. İşte sevdiğim iki:

Oyun Motoru Mimarisi

  • Temel lineer cebirin kısa kapsamı, ancak bilmeniz gereken her şeyi kapsar. Kitap başka birçok nedenden dolayı sahip olmaya değer.

Gerçek Zamanlı İşleme

  • Biraz daha ayrıntılı bir kapsama alanı, ancak yine sadece bilmeniz gerekenler ile bağlantılıdır. Yine, diğer bölümlerde ele alınan konular için bunu tavsiye ederim.

3D nesnelerin nasıl temsil edileceğini ve işleneceğini öğrendikten sonra, bunları ekrana nasıl çizeceğinize bakmaya hazırsınız. Tipik olarak bu bir tarama çizgisi üçgen rasterleştirme tekniği ile yapılır. Aslında oldukça basit bir kavram. Renk ve uv doku koordinatlarını enterpolasyon yaparken her seferinde bir üçgenin bir satırını çizersiniz. Bu işlem ekrandaki tüm üçgenler için devam eder. Hatta sıra dışı işleme için bir derinlik tamponu uygulayabilirsiniz.

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin

Bu, bu makalelerde daha ayrıntılı olarak ele alınmaktadır:

Öğretici - Yazılım Tabanlı Oluşturmaya Giriş: Üçgen Rasterleştirmesi

Yazılım İşleme Okulu: Bölüm I


Ve sadece eğlenmek için aşağıdaki makaleye göz atın:

Quake 2 Kaynak Kodu İncelemesi 3/4 (Yazılım İşleyici)


Hoş geldiniz:] (ayrıca sürece daha ayrıntılı bir genel bakış için buraya göz atabilirsiniz: en.wikipedia.org/wiki/Rasterisation )
zfedoran

Orada bazı iyi bağlantılar!
Jonathan Connell

5

Bu oldukça geniş bir konu. Bununla birlikte, bunun iki temel kısmı vardır: grafik dönüşümü ve rasterleştirme boru hattının gerçek teorisi ve seçtiğiniz ekranda ekrana pikselleri patlatmanıza izin veren gerçek uygulama bitleri. Bunun da ötesinde, optimizasyon da var (özellikle ikinci bit için).

Birinci bölüm, neyse ki, modern donanım ve API'ların maruz kaldığı grafik boru hattı için kullanılan teori ile aynıdır. Bunu zaten biliyorsan, hazırsın. Eğer yapmazsan iyi bir kitap öneririm. Bu oldukça iyi.

İkinci bölüm için birçok seçenek var. Bunlar büyük ölçüde işletim sisteminize ve araç zinciri seçeneklerinize bağlıdır. Windows'ta C veya C ++ kullanıyorsanız, pikselleri doğrudan bir GDI bitmap'e çizebilirsiniz ( SetPixelbasit, ancak acı verici, işe yaramaz yavaş - CreateDIBSectionsize çok daha hızlı bir şekilde işleyebileceğiniz bir ham bayt yığını verir).

Ayrıca bir DirectDraw yüzeyi edinebilir ve buna yazabilir veya Direct3D veya OpenGL dokusuna yazabilirsiniz. Bu son durumlarda hala donanım kullanacaksınız, ancak CPU'daki son görüntünün tüm kompozisyonunu kendiniz yaptığınız ve sonuçları ekrana kopyalamak için sadece donanım API'lerini kullandığınız sürece, hala sayılır. Modern bilgisayarlarda ham VRAM'a veya doğrudan herhangi bir şeye erişemezsiniz.

Daha fazla bilgi edinmek istiyorsanız, muhtemelen daha spesifik sorular oluşturmanız gerekir. Ben ya da diğerleri onlara cevap vermekten mutluluk duyarız.


Kitap için: "Oldukça iyi" ne kadar iyi? 84 $ adil bir miktar nakit :)
Jonathan Connell

En çok tavsiye ederim. En ucuz seçenek için, dönüşüm hattı üzerindeki Direct3D belgelerine bakabilirsiniz. D3D'ye özgü olmasına rağmen,% 95'i genel teori için oldukça geçerlidir. Ayrıca OpenGL Red Book'un çevrimiçi kopyalarına da bakabilirsiniz. Onlar modası geçmiş, ancak teori yine de geçerlidir.

0

Tamam, bu soruya çok temelden yaklaşacağım; bunun ötesinde herhangi bir şey basit bir KG için genişlemenin bir yoludur; konuyla ilgili bir kitap satın almanız gerekiyor.

Yazılımda oluşturma ve GPU kullanma arasındaki en temel fark pikselleri çizmektir. Yani, yazılım oluşturma işlemi yaparken her lanet pikseli çizmekten nihayetinde siz sorumlusunuz, oysa GPU ile piksellerin çizilmesi büyük ölçüde donanım tarafından otomatikleştirilir ve yalnızca gölgelendiricileri kullanarak piksel boru hattına "masaj yaparsınız".

Örneğin, bir programcı olarak ekranda bir 3D üçgen görüntülemek için ne yapmanız gerektiğini düşünün. GPU ile, donanıma köşelerin X, Y, Z koordinatlarının ne olduğunu hemen hemen söyler ve sonra video kartı, ekranda bir üçgenin görüntüsünü oluşturan tüm pikselleri doldurur. GPU'ya her pikselin rengini bir dokuya veya başka bir şeye göre değiştirmesini söylemek için bir gölgelendirici kullanabilirsiniz, ancak sonuçta yine de sizin için tüm pikselleri otomatik olarak dolduran GPU'ya gelir.

Yazılım oluşturma işlemi yaparken, ekranda hangi piksellerin doldurulacağını hesaplamanız ve ardından bu pikselleri gerçekten doldurmak için blitting'i yapmanız gerekir. Yani, 3B sahnenin koordinat alanından görünüm alanına dönüştürmek için matris matematiğini, ardından görünüm alanından ekrana vb.

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.