Shovel Knight blijkt 3d-game te zijn

Shovel Knight, de succesvolle retroplatformer uit 2014, is een 3d-game. De makers kozen voor een 3d-engine omdat ze daarbij meer kans hadden op ondersteuning op alle platformen en omdat debuggen in 3d makkelijker kan zijn.

In de nieuwste aflevering van Boundary Break, een YouTube-serie die met een unlocked camera een kijkje neemt achter de coulissen van bekende en populaire 3d-games, is Shovel Knight aan de beurt. Geen 3d-game inderdaad, maar toch ook weer wel. Voor deze aflevering is ook een lid van het ontwikkelteam van de game aanwezig om de vragen van videomaker Shesez te beantwoorden.

De video's van Boundary Break geven inzicht in hoe de engines van de verschillende games werken. Buiten de grenzen van het zicht van de speler komt het al gauw voor dat voorwerpen en omgevingen verdwijnen, vervangen worden door low-poly-varianten, of onvoorspelbare dingen doen. Het is ook de plek waar ontwikkelaars een 'kladje' hebben, en soms restanten overblijven van aantekeningen, foutjes of content die niet in de werkelijke game zit.

Door Mark Hendrikman

Redacteur

29-04-2019 • 10:19

44 Linkedin

Reacties (44)

44
44
28
3
0
16
Wijzig sortering
Echt nieuws is dit niet. Echte pure 2D games zoals in de SNES tijdperk bestaan bijna niet meer. De meeste 2D engines draaien op OpenGL, Vulkan of DirectX en gebruiken dus polygons en is in feite dus 3D. De sprites die je ziet in de game worden op een quad geplaatst of een 2D mesh die ongeveer de vorm van de sprite aannemen. Dit doet men omdat videokaarten gemaakt zijn om vertices te verwerken en geen sprite hardware bevatten. Bijvoorbeeld in GameMaker, een 2D engine, kan je met wat moeite 3D functionaliteit toevoegen. Als het een pure 2D sprite based engine was dan was dat onmogelijk. Enkel pseudo 3D zoals Mode-7
Bij 2D games heb je toch ook een bepaalde render-volgorde die een soort van diepte bepaald?

Toch, er zijn 1000'en 2D games, dit zijn vaak de HTML browser games zoals agar.io, hier teken je daadwerkelijk cirkels op een canvas. In plaats van spheres in een 3D wereld (maar dan met een camera plat van boven).
Dat een 2D game render volgorde heeft betekent niet gelijk dat het spel in 3D space word gerendert. SNES games hebben ook een render volgorde maar de sprites zitten niet in een echte 3d space. In die spellen, op Star Fox na, kan je de camera nooit draaien zoals in de filmpjes van Boundary Break, zelfs niet als je toegang zou hebben tot debug mode of iets dergelijks. Bij veel moderne 2D games is dat theoretisch wel mogelijk. Omdat de sprites eigenlijk textured polygon quads zijn die in 3D space worden gerenderd alleen wordt er dan een orthografische camera gebruikt zodat het plat lijkt.

Ja non-webGL HTML games en flash games zijn hierop een uitzondering. Maar die gebruiken ook geen OpenGL of DirectX zoals de meeste non-web games.
http://www.pixijs.com/ een javascript webgl-enabled sprite engine.

Zou dit dan ook semi-3d zijn, volgens jouw?

Volges mij hoeft dat niet per definitie. Er is een hoop rekenwerk waar een GPU simpelweg beter in is dan een CPU, dat hoeft niet per se een 3D iets te zijn.
Ja. Als het WebGL gebruikt dan worden de sprites nog steeds op polygons geplaatst. Waardoor de GPU er overweg meekan.
OpenGL heeft bijvoorbeeld geen concept van 3D. Eigenlijk is het niks meer dan een API welke data omzet naar pixels. Of die data nu 2D, 3D of 26D is maakt voor OpenGL niet zoveel uit. Ja, je stuurt vertices maar die kunnen ook gewoon een 2D vector zijn, zonder Z component.

Dat dit allemaal in een 3D of 2D space gebeurd is up to the programmer. Voor OpenGL maakt het niks uit, zolang je hier in shaders etc. Goed mee om gaat.

De reden dat men vaak 3D met ortho projectie kiest is omdat dit bepaalde technieken eenvoudiger maakt (layered rendering, lighting, bumpmapping en dergelijke technieken) dit betekend echter niet dat je GPU via OpenGL ook altijd met 3D data werkt.

Source: OpenGL SuperBible 7th ed. & Eigen game engine (2D) waar ik in mijn vrije tijd aan piel :+

Edit: ik weet dat er nog wat zaken tussen zitten die ik nu vereenvoudigd omschrijf. Ik ga alleen geen half boek schrijven in een comment :+

[Reactie gewijzigd door Particlebox op 30 april 2019 08:35]

Daar heb je gelijk in. Maar omdat het OpenGL is, is er altijd de mogelijkheid om er een 3D space van te maken (behalve als je voor alles bit blitting gebruikt). Wat bij een ouderwetse sprite rendering engine niet mogelijk is.
2.5D is meer waar je af en toe over de Z-axis verplaatst wordt. Denk aan Rayman Legends of de nieuwere Donkey Kong-spellen.
Ik heb al meerdere interpretaties gehoord/gelezen:
- Zoals jij zegt: 3D rendering, (voornamelijk) 2D gameplay (Rayman legends, Mortal Kombat 9,X,11)
- Games waarbij de "3D" omgeving eigenlijk in 2D ontworpen werd en een extra, simpele Z-axis bij kreeg (build engine games)
- Ik meen het mij ook te herinneren bij uitleg over Command & Conquer, waarbij voxels gebruikt werden in een 2D environment
Bij die kreet denk ik dan weer aan de isometric games van de oude Infinity Engine, bijvoorbeeld (of modernere games van deels diezelfde ploeg devs, trouwens). Ook geweldig, maar toch weer ander verhaal :+
Nee, gewoon 3D. 2.5D wordt gebruikt wanneer je refereert naar 2D graphics die iets 3D doen lijken. Bijvoorbeeld de eerste Rollercoaster Tycoon is daar een voorbeeld van.
Da's op zich niet zo verwonderlijk (maar wel leuk om uitgelicht te zien). In de 2D-omgeving van Unity gebeurt min of meer hetzelfde bijvoorbeeld: meerdere 2D-"vlakken" achter elkaar, beetje zoals een kijkdoos.
Door het plaatsen van content op verschillende layers achter elkaar creëer je eigenlijk al 3d, al is dat in z'n simpelste vorm nog niet zichtbaar. Maar je hebt wel objecten op een x, y en z positie geplaatst. Dat is de basis voor 3d. Kijk ook bijvoorbeeld naar websites, daar wordt het ook toegepast (hier op Tweakers bijvoorbeeld - topmenu dat voor de content schuift is zijn ook meerdere lagen over elkaar).

[Reactie gewijzigd door Zeror op 29 april 2019 10:31]

Dat is wel zo, maar de afstand tussen alle lagen (z-indexes) op een website, is over het algemeen nul. Er is dus geen diepte of perspectief. Soms wordt er een parallax-effect gecreëerd door verschillende lagen op verschillende snelheden te laten scrollen, maar dat is nep-3d. Dit gebeurt bijvoorbeeld ook bij 2d games die geen 3d-engine gebruiken.

Het is trouwens wel mogelijk om 'echte' 3d lagen te gebruiken op het web, met bijvoorbeeld WebGL. Maar ik ben nog geen website tegengekomen die dit doet (behalve wat demo's en andere enthousiastelingen zoals kunstenaars en artiesten).

Mijn punt was (ik was een beetje op een zijpad geraakt) dat je opmerking over layers en 3d niet helemaal klopt, imho.
Dat is wel zo, maar de afstand tussen alle lagen (z-indexes) op een website, is over het algemeen nul. Er is dus geen diepte of perspectief. Soms wordt er een parallax-effect gecreëerd door verschillende lagen op verschillende snelheden te laten scrollen, maar dat is nep-3d. Dit gebeurt bijvoorbeeld ook bij 2d games die geen 3d-engine gebruiken.
Hier is ook geen perspectief, omdat ze een orthografische projectie gebruiken.
True, dus in Shovel Knight moet de achtergrond ook gescrolld worden om het parallax effect te krijgen. Dus de 3d is zowel echt als nep :)
Maar goed, op het web *kun* je niet eens een perfectief-projectie gebruiken, hoeveel z-index je ook gebruikt. Mijn punt was dat louter de aanwezigheid van lagen, iets nog niet 3d genoemd kan worden. Een photoshop-bestand is ook niet ineens 3d omdat er meerdere lagen gebruikt worden.
Dus een "z-index" telt niet als dimensie, omdat die afstand niet groot genoeg is?

Ik weet het niet, ik zie voor beide wel argumenten.

In theorie zijn "3D games" ook 2D omdat ze op een plat beeldscherm worden weergeven.

Eigenlijk zijn het allemaal non-discussies.
Er zit ook een verschil in of het in 3D gerenderd word, of dat de speler in 3 dimensies kan bewegen.
Dus een "z-index" telt niet als dimensie, omdat die afstand niet groot genoeg is?
Jep, daarom heet het "index", en niet "position" of "offset" oid. Maar inderdaad, het is nogal een non-discussie (leuk toch? :D)
Ik herinner me dat de allereerste Sierra adventures op PC (Mystery House enzo) ook op de box in't groot vermeldden: "3D adventure game". Louter omdat de 2D tekeningen diepte suggereerden.
offtopic:
Voor 3D op het web is er bijv. ook three.js. Zit ook erg mooie dingen bij wat daar mee gemaakt is ;)

[Reactie gewijzigd door Zeror op 29 april 2019 12:04]

Ja die is cool! Vooral cubeslam is erg verslavend. Zelf nog niks mee gedaan (ik kan m'n klanten maar niet overtuigen dat ze coole 3d shit nodig hebben)...
Wanneer kunnen we de eerste Tweakers platformer verwachten? :+
Foei foei, wel iets beter de geschiedenis van Tweakers kennen hoor. ;)
Die game bestaat al! Tweak Battle. (was in principe een 1 april grap, maar het was/is ook een werkende game.)

[Reactie gewijzigd door WEBGAMING op 29 april 2019 11:22]

Nee inderdaad ik heb zelf wel eens een 2D navigeerbare kaart van een chip realtime moeten renderen. Ook daar gekozen voor 3D hardware acceleratie. Alle polygonen (dikke lijnen) als 3D data in 1 vlak aanleveren. Een camera zonder perspectief correctie aanmaken en renderen maar. Gaat als een speer!


Edit: Note, dit was in C++ direct met DirectX dus niet eens een game-engine nodig

[Reactie gewijzigd door Pep7777 op 29 april 2019 11:07]

In Unity 3D doe je niet anders. Het zou me niet verbazen als ze Unity hebben gekozen voor de ontwikkeling van hun game.
In het filmpje vertelt een van de devs dat ze de engine zelf gemaakt hebben. Ze waren al aan de engine begonnen voordat ze precies wisten wat voor game ze wilden gaan maken, en hebben toen de afweging gemaakt om een 3D engine te bouwen, 'to cover all bases'.
Ow, shit, dat is heel indrukwekkend. Ik heb het filmpje zonder geluid bekeken xD
Edit: typo.

[Reactie gewijzigd door Kusanagi op 30 april 2019 09:41]

Op zich niet verbazend. Het is een afweging die veel makers van games maken. Zo is bijvoorbeeld factorio wel echt een 2D game, maar hebben de makers ook gezegd dat ze, achteraf, misschien liever een 3D engine hadden genomen.

Niet alleen voor portability, maar ook het makkelijker werken met schaduw, opslag en memory management. Als nadeel noemen ze dan wel dat de stap om mods te schrijven voor de game een stuk groter wordt als er echte 3d models gebruikt moeten worden. Ook de workflow moet dan anders (prototyping etc).
(...) Niet alleen voor portability, maar ook het makkelijker werken met schaduw, opslag en memory management. (...)
Portability, opslag en memory hebben niets, maar ook helemaal niets met view te maken.
Ze hebben grote 2D "atlas"-en en cashes. Een nadeel wat ze hiermee ervaren is dat een hele atlas in het geheugen geladen moet worden, ook al heb je slechts 1 gebouw nodig. Ze kunnen ook geen texture re-use toepassen, omdat elke texture geheel gevormd moet zijn (dus grotere textures). Ook kun je moeilijk berekenen wat er uiteindelijk niet getekend moet worden.

Uiteindelijk moet je dus vaak teveel geheugen gebruiken en/of vaak swaps uitvoeren
Zo is bijvoorbeeld factorio wel echt een 2D game
Dan moet je even definieren wat een "echte 2D game" dan precies inhoudt. Ook Factorio gebruikt gewoon de GPU om de sprites te renderen, met een orthografische projectie. Dat is niet veel anders dan deze game.

[Reactie gewijzigd door .oisyn op 29 april 2019 17:32]

Sterker: Het is exact hetzelfde.
Dit wordt de laatste paar jaar best veel gedaan, vaak is het een stuk makkelijker om een bestaande 3D- engine te pakken en daarvan dan de camera vastzetten op een bepaalde positie zodat het 2D lijkt.
Zo wordt het heel makkelijk om de illusie van diepte te creëren, een beetje zoals de multiplane camera die Disney in hun klassieke tekenfilms heeft gebruikt.
Volgens mij heeft FEZ zo'n soortgelijk systeem, maar dan ook waarbij de camera kan draaien.
Ik vind dit soort video's super tof. Een side scroller wat eigenlijk een 3D game is, of juist andersom; Doom wat eigenlijk een top down shooter is. De techniek, de redenen, altijd leuk om te zien. :)
Doom is een 3d game met 2d levels met een hoogte-component en auto-aim ;)
Inderdaad zoals veel mensen zeggen werkt het in Unity bijvoorbeeld gewoon zo. Cuphead bijvoorbeeld is ook een 3D game in dat opzicht.

Je kunt zelfs heel makkelijk een 2D game maken met puur 3d objecten door alles op de zelfde horizontale as te bewegen en een isometrische camera te gebruiken.
Dit doet me denken aan hoe Hollow Knight gemaakt is met de Unity engine.
Zie deze GIF of het Made With Unity artikel.
Voor deze aflevering is ook een lid van het ontwikkelteam van de game aanwezig om de vragen van videomaker Shesez te beantwoorden.
Sterker nog, zoals Shesez ook in de video zegt is Yacht Club zelfs de partij die hem van de camera controls heeft voorzien zodat hij deze video kon maken.

Een van de voordelen van de 3D layout die ook in de video wordt benoemd is dat ze de camera konden gebruiken om bepaalde problemen op te sporen in andere lagen die ze anders veel moeilijker konden debuggen.

Behoorlijke interessante videos in de Boundary Break series, en goed om te zien dat ontwikkelaars zelf er ook nog eens positief op inspelen!

Op dit item kan niet meer gereageerd worden.

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee