Jak podchodzisz do niezależności rozdzielczości w treściach graficznych opartych na rastrze?

32

Te gry, które nie są wystarczająco szczęśliwe, aby działać na zablokowanej platformie, takie jak urządzenia przenośne, muszą działać w różnych formatach rozdzielczości i proporcjach.

W grze 3D możesz mieć interfejs lub graficzny interfejs użytkownika oparty na grafice rastrowej, aw grze 2D możesz mieć wiele quadów, które są naczyniami dla duszków.

Więc moje pytanie brzmi: jak podchodzisz do projektowania i obsługi treści w różnych rozdzielczościach i proporcjach? Załóżmy, że masz postać duszka, która jest duszka 300 x 400 pikseli i jest otoczona poziomem z płytek. Przy różnych rozdzielczościach / proporcjach zobaczysz zupełnie inny FOV. Lub jeśli masz HUD lub menu GUI, chciałbyś zachować niektóre rzeczy w tych samych pozycjach i w tym samym rozmiarze względem ekranu. Jednak źródłem grafiki są mapy bitowe rastrowe, a nie wektorowe.

Oczywiście problem był rozwiązywany wiele razy. Chciałbym usłyszeć o różnych podejściach, które do tej pory działały dla Ciebie. Czy utrzymujesz agnostyczną jednostkę „pikseli” o dowolnym rozmiarze, którą magicznie przekształcasz w potrzebne wymiary za pomocą formuły opartej na rozdzielczości i proporcjach lub innych podejść?

edytować:

Podsumowując, należy wyliczyć swoje proporcje. Najniższa kombinacja aspektu: rozdzielczość to ta, w której projektujesz ważne rzeczy. Bezpieczny obszar, jeśli chcesz. Te same proporcje, ale wyższe rozdzielczości to proste problemy ze skalowaniem. Treści artystyczne zostały zaprojektowane z myślą o najwyższej rozdzielczości. Większe proporcje pokazują po prostu więcej poziomu / FOV z prezentowanymi informacjami, które nie są krytyczne, jak w bezpiecznym obszarze. Coś jak na tym obrazie, który wykonałem . alternatywny tekst

Klatka kluczowa
źródło
1
Nie rozumiem, jak przeszedłeś od odpowiedzi w tym pytaniu do wniosków, które wyciągnąłeś po swojej „ edycji: ”. IMO, te odpowiedzi są nieodpowiednie i nie powinieneś był zaakceptować żadnej z nich. EG: Twoja zaakceptowana odpowiedź dotyczy tylko fragmentu pytania (skalowanie duszka), a nie całego problemu. To, co powiedziałeś po „ edycji: ”, jest bardziej przydatne niż odpowiedzi tutaj, IMO. Ale tak naprawdę nie „dostaję” go wystarczająco dobrze, aby go wdrożyć. Niestety, jeśli poproszę o rozwinięcie nowego pytania, zostanie ono oznaczone jako duplikat.
Daniel Kaplan

Odpowiedzi:

7

Jeśli Twoje rozdzielczości są do siebie podobne, możesz po prostu zastosować tę samą grafikę we wszystkich z nich, może z pewnym zmniejszeniem w czasie wykonywania dla mniejszych ekranów. Jeśli różnią się one więcej niż dwa razy, musisz stworzyć (lub przynajmniej ulepszyć artystę) osobne zasoby dla różnych rozdzielczości.

W 2D rozdzielczość ma ogromny wpływ na sposób projektowania obrazów. Duszek, który wygląda na bogaty w szczegóły i realistyczny w wysokiej rozdzielczości, będzie zabłocony i nieczytelny. Podobnie, duszek, który jest czysty i ostry, patrząc na niską rozdzielczość, będzie wyglądał tanio i zbyt prosto w wysokiej rozdzielczości.

hojny
źródło
Martwi mnie jednak proporcje obrazu. Na przykład, nie jest to ogromny skok z 1080p do 720p, ponieważ aspekt jest taki sam, dlatego ograniczamy się do prostego skalowania. Co się stanie, gdy powiesz 1080p vs 1680x1050. Czy pokazuję więcej poziomu, szersze pole widzenia w większym aspekcie, rodzaj marginesu? Podobnie, projekt dla szerszego aspektu z bezpiecznym obszarem, w którym znajdują się wszystkie ważne treści, aby nie zostać przyciętym z ekranu w przypadku węższych aspektów.
Klatka kluczowa
Zaktualizuję pytanie wizualną prezentacją tego rozwiązania. Wydaje się, że nie ma innego wyjścia.
Klatka kluczowa
4

Jednym ze sposobów jest utworzenie zasobów obrazu w formacie wektorowym (SVG, Illustrator itp.) I przekonwertowanie ich na obrazy rastrowe zgodnie z potrzebami różnych wersji gry.

Matias Valdenegro
źródło
Jasne, ale zapomniałem wspomnieć, że to nie jest opcja. Głównym problemem jest to, że tworzenie treści rastrowych i wektorowych jest zupełnie inne (raster jest znacznie lepszy dla artystów). Jedną z opcji byłoby stworzenie wielu zasobów rastrowych, ale mocno wierzę, że musi być lepsze rozwiązanie. Na przykład tworzenie zasobów dla największego obsługiwanego współczynnika rozdzielczości / proporcji i zmniejszanie w czasie wykonywania wersji o niższej rozdzielczości w locie lub coś w tym stylu. Nadal jednak problemem pozostaje pozycjonowanie.
Klatka kluczowa
Tak, jest to również opcja, jeśli możesz ponieść problemy związane z utratą jakości i wydajnością.
Matias Valdenegro
8
Nie jestem pewien, czy to prawda, że ​​„raster jest lepszy dla artystów”. Mój grafik używa programu Illustrator z tych właśnie powodów. Kiedy nadszedł czas na aktualizację do rozdzielczości 2X iPhone'a 4, łatwo było jej ponownie wyeksportować wszystko. Raster może być lepszy dla artystów Photoshopa, którzy nie chcą przekwalifikować się jako graficy wektorowi, ale na dłuższą metę prawdopodobnie lepiej będą zostać ekspertami w dziedzinie grafiki wektorowej. Platformy fizyczne zmieniają się zbyt szybko, aby myśleć w pikselach.
Chris Garrett,
4

Podczas utrzymywania pełnego ekranu w różnych rozdzielczościach, jeśli chcesz doskonałości pikseli (tj. „Jak ją stworzył artysta”), problem polega na tym, że nie ma w pełni zautomatyzowanego sposobu skalowania duszków w górę LUB w dół (lub obracania ich), który nie „ wymagają ludzkiej aprobaty. Ostatecznie dzieje się tak, ponieważ umieszczenie pikseli jest subiektywne. Algorytm renderowania wykonuje pewne skalowanie lub obracanie i musi do tego celu wykorzystać pewne techniki aproksymacyjne, np. filtrowanie dwuliniowe. Jeśli nadal chcesz twarde krawędzie pikseli w celu uzyskania że „piksel doskonałość” (czyli nie za pomocą AA lub BF), wtedy będą musieli przyjąć, że skalowanie według jakiegoś non-power-of-2 stopnia jest zamiar do produkować niepożądane artefakty.

Interesujące podejście do podobnego problemu znajduje się w RotSprite , aplikacji / algorytmie zaprojektowanym do wykonywania „automatycznych” obrotów duszka. Rozumiem przez to, że po intensywnym przetwarzaniu uzyskuje on szereg możliwych pożądanych rezultatów końcowych, z których może wybrać operator. Wybrane ręcznie duszki ostatecznie trafiają do gry, co oznacza, że ​​jest to etap tworzenia treści, a nie runtime.

Jedna z możliwych odpowiedzi na twoje pytanie „piksel agnostyczny o dowolnym magicznym wymiarze”: OpenGL (którego możesz być pewien, jeśli zamierzasz korzystać z różnych platform) działa zupełnie inaczej niż programowy renderer rastra. Bierze pod uwagę szerokość i wysokość wyświetlacza w zakresie zmiennoprzecinkowym 0,0-> 1,0 i odpowiednio mapuje piksele na GPU. Oczywiście może to samo w sobie powodować artefakty, chyba że np. BF jest włączony dla tekstur (takie są twoje duszki w OpenGL).

Inżynier
źródło
To jest całkowicie złe. Możesz użyć kompozycji i powtarzalnych elementów (myśl kafelki) zamiast skalowania, aby zachować idealną piksel przy dowolnym współczynniku kształtu. Oczywiście, jeśli elementy będą małe przy wyższej rozdzielczości, będą one coraz mniejsze. więc potrzebujesz skalowania 2x lub różnych zasobów rozdzielczości.
adrix89,