Raster tabanlı grafik içeriğinde çözünürlük bağımsızlığına nasıl yaklaşıyorsunuz?


32

Elde taşınır cep telefonları gibi kilitli bir platformda çalışacak kadar şanslı olmayan oyunların çeşitli çözünürlük biçimlerinde ve en boy oranlarında geçmesi gerekir.

Bir 3D oyunda, raster grafiklere dayanan bir HUD veya menü GUI'sine sahip olabilirsiniz ve bir 2D oyunda, sprite'ların damarları olan bir grup dörtlü olabilir.

Öyleyse sorum şu, çeşitli çözünürlüklerde ve en boy oranlarında içerik tasarlamaya ve çalıştırmaya nasıl yaklaşıyorsunuz? 300x400 piksel büyüklüğünde ve çinilerden oluşan bir düzlemle çevrili bir sprite karakteriniz olduğunu varsayalım. Farklı çözünürlüklerde / görünüş oranlarında tamamen farklı bir FOV göreceksiniz. Veya HUD veya GUI menünüz varsa, bazı şeyleri ekrana göre aynı pozisyonlarda ve aynı büyüklükte tutmak istersiniz. Ancak, grafik kaynağı vektör değil, raster bitmap'lerdir.

Açıkçası, sorun defalarca ele alındı. Şu ana kadar sizin için işe yarayan çeşitli yaklaşımları duymak istiyorum. Res ve en boy oranına veya diğer yaklaşımlara dayanan formülü ile sihirli bir şekilde ihtiyaç duyulan boyutlara dönüştürdüğünüz rastgele bir boyut agnostik 'piksel' birimi tutuyor musunuz?

Düzenle:

Dolayısıyla, sonuç, en boy oranlarınızı numaralandırmaktır. En düşük boyut kombinasyonu: Çözünürlük, önemli şeyleri tasarladığınızdır. İsterseniz güvenli bir bölge. Aynı görünüş oranları, ancak daha yüksek çözünürlükler basit ölçeklendirme sorunlarıdır. Sanat içeriği en yüksek çözünürlük için tasarlanmıştır. Daha büyük boyut oranları, sunulan bilgiyle güvenli alandaki kadar kritik olmayan bilgilerin sunulduğu seviyeyi / FOV düzeyini gösterir. Bu resimde yaptığım gibi bir şey . alt metin


1
Bu sorudaki cevaplardan " düzenleme: " den sonra yaptığın sonuca nasıl gittiğini anlamıyorum . IMO, bu cevapları yetersiz ve hiçbirini kabul etmemeliydin. EG: Kabul edilen cevabın tamamı değil, sadece bir soru (sprite ölçeklendirme) hakkında konuşuyor. " Düzenleme: " den sonra söyledikleriniz buradaki cevaplardan daha kullanışlıdır, IMO. Ancak, onu gerçekten uygulamak için yeterince “anlamıyorum”. Ne yazık ki, yeni bir soruda ayrıntılandırılmasını istersem, kopya olarak işaretlenir.
Daniel Kaplan

Yanıtlar:


7

Çözünürlükleriniz birbirine benziyorsa, aynı sanatı hepsinde, belki de küçük ekranlar için çalışma zamanında bir miktar küçültme ile kullanabilirsiniz. 2x faktöründen daha fazla farklılık gösterirlerse, farklı kararlar için ayrı varlıklar yazmanız (veya en azından bir sanatçının ayar yapması) gerekir.

2D ile çözünürlük, görüntüleri nasıl tasarladığınız üzerinde büyük bir etkiye sahip. Yüksek çözünürlükte zengin ayrıntılı ve gerçekçi görünen bir sprite çamurlu ve çözülemez şekilde küçültülebilir. Aynı şekilde, düşük çözünürlüklü bakarak temiz ve keskin bir sprite yüksek çözünürlüklü ucuz ve aşırı basit görünecektir.


En boy oranı olsa beni endişelendiriyor. Örneğin, 1080p'den 720p'ye kadar büyük bir sıçrama değil, çünkü görünüş aynıdır, o zaman basit ölçeklendirme ile uğraşıyoruz. 1080p vs 1680x1050 deyince ne olur? Daha fazla seviyede daha geniş ve daha geniş FOV seviyelerinde bir marj mı gösteriyorum? Gibi, daha dar yönlerde ekrandan kırpılmaması için tüm önemli içeriğin gittiği güvenli bir alana sahip daha geniş boyut için tasarım yapın.
Keyframe

Soruyu bu çözümün görsel sunumuyla güncelleyeceğim. Başka yolu yok gibi görünüyor.
Keyframe,

4

Bir yol, görüntü varlıklarını vektörel bir formatta (SVG, Illustrator, vb.) Yapmak ve bunları oyunun farklı sürümlerinin gerektirdiği şekilde raster görüntülere dönüştürmektir.


Tabii, ama bunun bir seçenek olmadığını söylemeyi unuttum. Raster ve vektör içerik yaratmanın tamamen farklı olması büyük sorun (raster sanatçılar için çok daha iyi). Bir seçenek olsa da birden fazla raster varlık oluşturmak olabilir, ancak daha iyi bir çözüm olması gerektiğine inanıyorum. Örneğin, desteklenen en yüksek res / en boy oranı için varlıklar oluşturmak ve daha düşük çalışma zamanı sürümlerinde anında veya benzeri bir şeyde küçültmek. Konumlandırma yine de sorun olmaya devam ediyor.
Anahtar Kare

Evet, aynı zamanda kalite kaybı ve performans sorunlarına katlanabiliyorsanız, bu bir seçenek.
Matias Valdenegro

8
"Raster sanatçılar için daha iyi" diye doğru olduğundan emin değilim. Grafik sanatçım bu nedenlerden dolayı Illustrator kullanıyor. İPhone 4'ün 2X çözünürlüğüne güncelleme zamanı geldiğinde, her şeyi tekrar dışa aktarması basit bir meseleydi. Raster, kendilerini vektör sanatçısı olarak yeniden eğitmek istemeyen Photoshop sanatçıları için daha iyi olabilir, ancak uzun vadede muhtemelen vektör tabanlı grafiklerde uzman olmaktan daha iyidir. Fiziksel platformlar piksel cinsinden düşünmek için çok hızlı değişiyor.
Chris Garrett

4

Farklı çözünürlüklerde tam ekrana bakarken, piksel kusursuzluğunu istiyorsanız (yani, "Sanatçının ürettiği gibi"), o zaman sorun, sprite'ları yukarı veya aşağı döndürmek (veya onları döndürmek) için tam otomatik bir yol olmamasıdır İnsan onayı gerektirmez. Sonuçta, çünkü piksellerin yerleştirilmesi öznel bir şeydir. Render algoritması bir miktar ölçeklendirme veya rotasyon gerçekleştirir ve bunu yapmak için bazı yaklaştırma tekniklerini kullanmak zorundadır, örn. bilinear süzme. Hala (yani AA veya BF kullanarak değil) o "piksel mükemmellik" sahip olmak için piksellere sert kenarları istiyorsanız, o zaman bazı olmayan güç-of-2 derece ile bu ölçeklendirme kabul etmek zorunda olacak gidiyor için istenmeyen bazı eserler üretmek.

Benzer bir soruna ilginç bir yaklaşım, spriteların "otomatik" rotasyonlarını gerçekleştirmek için tasarlanmış bir uygulama / algoritma olan RotSprite'ta bulunur . Bununla, yoğun işlemden sonra, insan operatörünün alacağı bir dizi muhtemel sonuç sonucunu ürettiğini kastediyorum. Elle toplanan spritelar daha sonra oyuna giriyor, yani bu bir içerik oluşturma adımı, çalışma zamanı değil.

"İsteğe bağlı büyülü boyut agnostik piksel" sorunuzun olası bir cevabı: OpenGL (eğer platformlar arası geçiyorsanız kullanmayı düşünebilirsiniz) bir yazılım raster oluşturucusundan tamamen farklı bir şekilde çalışır. Ekranın genişliğini ve yüksekliğini 0,0 -> 1,0 kayan nokta aralığında dikkate alır ve pikselleri GPU'ya göre eşler. Elbette bu, örneğin olmadığı sürece, kendi kendine yapılanma ile sonuçlanabilir. BF dokular için açıktır (sprite'larınızın OpenGL'deki hali budur).


Bu düz yanlış. Pikselini herhangi bir en / boy oranında mükemmel tutmak için, ölçekleme yerine kompozisyon ve tekrarlanabilir öğeleri (düşünce döşemeleri) kullanabilirsiniz. Elbette eğer elementler daha yüksek çözünürlükte küçükse, gittikçe küçülecektir. bu nedenle 2 kat ölçeklendirmeye veya farklı özünürlük değerlerine ihtiyacınız olacak.
adrix89
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.