Hvordan man laver en Mandelbulb

En Mandelbulb er en tredimensionel fraktal, der bliver mere og mere populær i 3D-kunst og VFX. I denne artikel gennemgår jeg, hvordan man hurtigt fremstiller en Mandelbulb Houdini , ved hjælp af en SDF (signeret afstandsfeltvolumen).

I hver voxel gemmer en SDF afstanden til det nærmeste punkt på overfladen. Houdini kan fortolke disse afstande og visualisere den afledte overflade som 3D-geometri. Dette er meget praktisk, da de fleste fraktale formler har form af en 'afstandsestimeringsfunktion' - givet et punkt i rummet, returnerer funktionen afstanden til det nærmeste punkt på den implicitte fraktale overflade. Dette betyder, at du kan placere resultaterne af fraktalfunktionen direkte i hver voxel, og det fungerer bare!

01. Opret en tom lydstyrke

Opret en tom værktøjslinje til lydstyrke



Klik på ikonet øverst til højre for at forstørre billedet

Opret først et tomt volumen (Volume SOP) for at udfylde afstandsværdier - giv det navnet 'overflade'. En god fraktal at teste med er Mandelbulb, og som standard er den omkring 2,5 enheder bred, så indstil lydstyrken til 2,5, 2,5, 2,5. Du kan ændre opløsningen af ​​lydstyrken for at bytte hastighed mod kvalitet; et godt udgangspunkt kunne være at indstille den ensartede prøveudtagning til efter størrelse med en divisionsstørrelse på 0,01. Standardtilstanden til visualisering af en lydstyrke i Houdini er en tågevolumen, men du kan ændre den til at blive vist som en hård grænseoverflade ved at ændre skærmtilstanden til Isosurface (i fanen Egenskaber).

02. Tilføj kode

Tilføj en kode værktøjslinje

Klik på ikonet øverst til højre for at forstørre billedet

Så er det et spørgsmål om at fylde voxels med afstandsværdier. Brug denne VEX-kode i en Volume Wrangle SOP til at køre Mandelbulb-formlen per voxel:

vector p = v@P; float dr = 1; float r = 0.0; float power = chf(“power”); for (int i = 0; i 1.5) break; // convert to polar coordinates float theta = acos(p.z/r); float phi = atan(p.y, p.x); dr = pow( r, power-1.0)*power*dr + 1.0; // scale and rotate the point float zr = pow(r, power); theta *= power; phi *= power; // convert back to cartesian coordinates p = zr*set(sin(theta)*cos(phi), sin(phi)*sin(theta), cos(theta)); p += v@P; } f@surface = 0.5*log(r)*r/dr;

03. Indfør parameterhenvisninger

3D fraktal

Klik på ikonet øverst til højre for at forstørre billedet

Houdini giver dig mulighed for at tilføje dine egne tilpassede reserveparametre til en enkelt nodes brugergrænseflade. Vores VEX-kode indeholder parameterhenvisninger ( chf () funktioner) for at lade os kontrollere aspekter af formlen med parametre i brugergrænsefladen. Disse parametre findes ikke som standard, men du kan oprette dem ved at trykke på knappen Opret reserveparametre til højre for kodevinduet.

I dette tilfælde vil parameteren Iterationer styre detaljeringsniveauet for Mandelbulb - start med 5 eller 6. Strømmen styrer formen på Mandelbulb - den typiske form dukker op omkring Power 8.0.

04. Konverter til polygoner

konvertere til polygoner

Klik på ikonet øverst til højre for at forstørre billedet

Hvis du vil konvertere overfladen til polygoner, skal du følge volumenknappen med en konverter volumen-SOP. Brug inverter-tilstand, fordi den fortolkes som et underskrevet afstandsfelt, og du får den detaljerede fraktale form indlejret i polygonform. Effektivt vender Invert-tilstand de normale overflader og polygonernes viklingsretning.

05. Gør din Mandelbulb

mandelpære gengives

Klik på ikonet øverst til højre for at forstørre billedet

Du kan derefter gengive det på samme måde som med ethvert andet net, men fordi det er så detaljeret, vil du ikke være i stand til at UV udpakke det let - overvej at bruge proceduremæssige teknikker til at overflade det, for eksempel skygge baseret på dets krumning.

Denne artikel blev oprindeligt offentliggjort i 3D verden , verdens bedst sælgende magasin for CG-kunstnere. Købe Opgave 237 eller abonnere .

Læs mere: