Variaties door middel van genetica

STEVEN ENGELS

Published
april 24, 2020

In een vorige blogpost werd parametrisch modelleren uitgelegd. Deze manier van 3D creatie kan afhankelijk van de hoeveelheid parameters van een parametrisch opgebouwd model veel werk zijn om deze voor elke variatie manueel in te stellen. Daarnaast is het vaak geen optie om elke parameter een random waarde te geven. Men komt dan afhankelijk van de opbouw van het model niet altijd tot interessante resultaten.

Een oplossing hiervoor kan een tool zijn die toelaat om de parameters op een intuïtieve manier te gidsen naar interessante resultaten door toch gebruik te maken van initieel random waarden. Hiermee introduceren we het concept genetica binnen het procedureel modelleren.

Genetica

Om zo een tool te maken is het een optie om het basis concept van genetica toe te passen op parametrische modellen. Dit bestaat uit enkele stappen:

1. Men start met het random genereren van x aantal variaties, met al dan niet volledig random parameterwaarden. Dit levert de eerste generatie op. 

2. Daarna kan men de meest veelbelovende verkregen variaties selecteren

3. Met deze veelbelovende variaties wordt dan het principe van standaard genetica toegepast. Namelijk elke parameter krijgt ofwel de waarde van ouder a of ouder b, waarbij de ouders dus de geselecteerde random variaties van de eerste generatie zijn. Dit process noemt crossover

4. Daarna kan elke parameter al dan niet een mutatie ondergaan. Hierbij wordt de waarde van de parameter via een in te stellen standaardafwijking aangepast. Hieruit volgt dan opnieuw een reeks variaties die we dan de tweede generatie noemen. 

Op dit moment kan men opnieuw een selectie maken van de meest veelbelovende variaties en hiermee op dezelfde manier een nieuwe generatie genereren. Dit kan zoveel keer herhaald worden als nodig tot men tevreden is van de resultaten. Het is uiteraard ook een optie (in tegenstelling tot de echte wereld) om de generatie opnieuw te genereren. Door dit dus een variabel aantal keer te doen kan een artiest met minimale moeite een procedureel model gidsen naar bruikbare random variaties.

concept genetica

Implementatie (WIP)

Er bestaan reeds implementaties van dit concept toegepast op procedurele 3D modellen. Zo bestaat er een 3D zwaard generator tool gemaakt voor Blender. Daarnaast hebben we als voorbeeld en startpunt ook de mutagen tool van Adrian Meyer gebruikt.

Concreet hebben we zelf dit principe toegepast als een python tool voor Houdini. Met het oog op de toekomst hebben we dit toegepast op het genereren van creature of character blockouts. Maar deze implementatie kan in principe op elk parametrisch model worden toegepast.

Creature blockouts

Een creature blockout is een aanpak die binnen de entertainment industrie bij 3D modelleren standaard gebruikt wordt om een snelle eerste versie van een personage of creature te maken. Hierbij maakt het niet uit of de vormen een mooi geheel vormen en men maakt dit dus ook door verschillende simpele vormen in elkaar te schuiven en te verschalen.

Daarna kan men dan de blockout volledig uitwerken om een afgewerkt model van te sculpten in bijvoorbeeld Zbrush. 

voorbeel creature blockout

Opbouw parametrisch model

De procedurele blockout bestaat uit een simpel skelet opgebouwd uit lijnen voor de voornaamste beenderen. Via parameters kan de lengte van de beenderen aangepast worden, binnen een bepaald bereik. Op elk gewricht en bijvoorbeeld ook het hoofd staat een bol waarvan de radius aangepast kan worden, opnieuw binnen een bepaald bereik. Elke bol is dan verbonden met een cilinder. De cilinder kan in het midden ook een variabele verdikking of verdunning hebben.

Voorbeeld resultaten

Hieronder enkele resultaten met een beperkt aantal generaties en variaties. De eerste afbeelding toont de variaties waarbij de tool volledig random alle parameter waardes heeft gekozen. De blauwe variaties zijn de gekozen variaties die de tool als ouders neemt bij het genereren van de tweede generatie (tweede afbeelding). Hierna wordt een derde generatie gegenereerd op basis van de selectie (blauw) in de tweede generatie. Wanneer je tevreden bent met het resultaat kan een variant worden gekozen om op verder te werken.

Mogelijke verbeteringen

Er zijn een aantal zaken die de tool interessanter kunnen maken. Zo zou het interessant kunnen zijn om dependencies of verhoudingen tussen de parameters in te stellen bij het genereren van variaties. Een voorbeeld hiervan kan zijn dat als het character brede schouders heeft het waarschijnlijk ook redelijk brede armen zal hebben.

Wat ook interessant zou kunnen zijn is om de sterkte van de mutatiekans per parameter in te stellen. Of bepaalde parameters al dan niet tijdelijk uitsluiten. Zodat bijvoorbeeld als men tevreden is van een aspect van een variatie, bijvoorbeeld de benen, deze bij de volgende generatie niet meer kunnen veranderen.

Nog een interessante toevoeging is de functionaliteit om te starten van templates. Men kan dan bijvoorbeeld met parameters een aantal standaard versies manueel maken en daarvan starten bij de evolutie in plaats van telkens te starten van compleet random variaties. In het geval van de creatures zou men zo ook kruisingen kunnen maken tussen vooraf ingestelde creatures.