REAL time destruction

in unity

Published
maart 10, 2021

Met deze post stellen we het afstudeerproject van onze stagiair Quinten voor. Hij onderzocht in zijn derde jaar de mogelijkheden om in Unity dit in real time toe te passen. Hieronder lees je hoe dit in zijn werk ging en welke resultaten Quinten bekwam.

Vernietiging van objecten en de omgeving komt steeds vaker voor in moderne games. Dit soort effecten maken games realistischer en geven een diepgaandere ervaring door meer verschillende tactieken toe te laten. Bijvoorbeeld door een raam of deur binnengaan dat normaal niet geopend kon worden.

De vernietiging van een object gebeurt door het object te versplinteren of fragmenteren in kleinere stukken, dit kan zowel in real time als vooraf.

real time destruction QV

Fragmentatie vooraf

In de meeste games gebeurt deze vernietiging of fragmentatie vooraf, tijdens het productie proces. Voor ieder 3D model dat vernietigd moet kunnen worden, wordt er een vernietigingspatroon gegenereerd dat bewaard wordt als 3D model. Wanneer een model dan vernietigd wordt in het spel,  wordt het model vervangen door het vernietigingspatroon en lijkt het alsof het model zelf vernietigd is. Deze techniek kan heel goede resultaten geven, maar heeft enkele nadelen:

  • Telkens wanneer een nieuw vernietigbaar 3D model gemaakt wordt of aangepast wordt, moet er een nieuw vernietigingspatroon gemaakt worden voor dit model.
  • Elke kopie van hetzelfde model, heeft hetzelfde vernietigingspatroon. Als eenzelfde model dan vaak terugkomt, wordt het snel duidelijk voor de speler dat het model telkens op dezelfde manier vernietigd wordt.
  • Omdat het vernietigingspatroon vooraf al gegeneerd is, gebeurt de vernietiging altijd op dezelfde manier. Daardoor lijnt de vernietiging zelden op met het impact punt en heeft de interactie van de speler geen effect op de vernietiging.
fractured object

Real time fragmentatie

Real time destructie is een techniek die de meeste van deze problemen oplost. Bij deze techniek wordt de vernietiging tijdens het spel zelf uitgevoerd in plaats van tijdens de productie van het spel. De vernietiging gebeurt meestal ook niet over het hele model, maar er wordt een patroon gemaakt van verschillende fragmenten rond het impact punt van de vernietiging. Deze patronen kunnen gemakkelijk andere eigenschappen krijgen en kunnen verschillend zijn per materiaal in plaats van per object. Hierdoor heeft real time destructie enkele voordelen tegenover de vorige techniek:

  • Omdat de vernietiging altijd plaats vindt op de plek waar de speler het object geraakt heeft, voelt de vernietiging realistischer voor de speler.
  • Het object wordt ook nooit op dezelfde plek opnieuw geraakt en de fragment patronen zijn ook steeds verschillend, waardoor de vernietiging van hetzelfde object er steeds anders uitziet.
  • De vernietiging is niet afhankelijk van het object, maar van het materiaal. Daardoor kan elk model zonder extra voorbereiding vernietigd worden. Als het model een ander materiaal toegewezen krijgt, past ook de manier waarop het object breekt zich aan aan het materiaal.

De reden dat real time destructie nog niet vaak gebruikt wordt, is omdat het nog veel rekenkracht inneemt. Maar met enkele optimalisaties, is het mogelijk om de vernietiging snel genoeg te krijgen om het minder berekeningen te laten innemen en op bijna elk systeem in real time te laten werken. Dit zorgt er wel voor dat op dit moment het nog altijd een afweging is van de ontwikkelaar van het spel hoeveel rekenkracht hij ter beschikking heeft voor destructie’s.

In de video hieronder wordt Quintens implemenatie van real time destruction in Unity gedemonstreerd.