Webben som vi vet det, förändras och utvecklas ständigt. Det vi fortfarande kan komma ihåg som ett enkelt och enkelt medium fick en annan dimension för några år sedan, och det ser inte ut som det kommer att stanna där heller. För en Website Builder , Det som en gång var en del av science-fiction-filmens visuella effekter är nu möjligt på en tablett som ligger på din soffa, och det finns byggnader som är täckta i storskaliga interaktiva installationer som faktiskt bara är fullskärmade Google Chrome-fönster.
Följ stegen nedan för att ta reda på hur du skapar en realistisk smältande effekt med tre.js.
Gå vidare och ta tag i tre.js-biblioteket och inkludera det på din webbplats. Du måste omedelbar den webglrenderer, scenen och perspektivet. Efter dessa är instantierade, måste du göra scenen på RequestanimationFrame .
Därefter måste lamporna läggas till 3D-scenen. I det här exemplet kommer två lampor att användas: ett omgivande ljus och ett punktljus. Det omgivande ljuset tjänar som en övergripande global färg för scenen, medan punktljuset kommer att avge ljus som minskar med avstånd. Detta kommer att ge scenen någon kontrast.
VAR Ambientlight = Ny tre.ambientlight (0xccccccc);
scene.add (omgivligskraft);
Var Pointlight = Ny tre.PointLight (0xFFFFFF, 1);
Pointlight.Position.Set (10, 5, 0);
Nu när scenen har upprättats, måste 3D-modellen laddas in. Modellen kan laddas med hjälp av något stödd format (JSON, OBJ, DAE, etc.). Nedan är ett exempel på att ladda en DAE-modell. I det här exemplet är det mycket viktigt att modellen har tillräckligt med polygoner för att utföra vertex-modifieringar.
Den hjortskalle som används i detta exempel har 3 500 polys. Om polyantalet är för låg, kommer vertex-animationerna att vara för tydliga och förvrängda.
Loader = Ny tre.Colladaloader ();
loader.load ('dae / deer_skull / deer_skull.dae', onoadcompletehandler);
Bump Maps är perfekta för att lägga till djup till dina texturer till låg kostnad. När du har skapat din Bump Map-bild kan du genomföra den genom att helt enkelt applicera den på materialet som nedan. Du måste också justera skalans skala för att passa på din modell.
material.bumpmap = 'img / deer_skull / deer-bump.jpg';
material.Bumpscale = .008;
Under hela sin webbplats använder Johnny en spelförlängning av Jerome Etienne för Three.Js som gör det lättare att göra Vertex-animationer. Denna förlängning möjliggör enkel åtkomst till varje vertex av en modell i bildhastigheten, vilket gör det enkelt att manipulera vertikaler med hjälp av vågformer.
De Vertex Animation Extension är tillgänglig via Etienne GitHub. Vi går vidare till hur det används i nästa steg.
Att smälta en bit geometri innebär några övergripande steg. För det första trycks varje punkt kontinuerligt nedåt. När en punkt når marken, skjuts den utåt med vad vi ringer en "push vektor".
Därefter ger vi de punkter som samlas längs botten en tjocklek så den smälta geometrin är inte helt platt. För att uppnå detta har Johnny portat kod från Skeel Lee's VFX Shader i Houdini och modifierade den.
Nedan är ett exempelanvändning av att använda Vertex-animatorn för att kontinuerligt driva en modells geometri mot marken.
var vertexanimation = ny trex.Vertexanimation (geometri, funktion (ursprung, position, delta, nu) {position.y - = Meltamount * Modelheight;}
Detta kommer att pussa på punkterna med den hastighet som definieras av meltaamount . Kom ihåg att också ringa "Uppdatera" på din Vertex-animering i Render-cykeln.
När en punkt har nått marken måste den skjutas utåt för att uppnå en smälteffekt. Koden nedan bestämmer vilken riktning i X- och Z-axlarna för att trycka på vertexen så att du får en jämn förskjutning. Det villkorliga säkerställer att endast punkter som har nått de lägsta gränserna för modellen (marken) skjuts utåt.
om (position.y & lt; bbox.min.y) {
var centroid = bbox.max.clone (). Lägg till (bbox.min.clone ()). Dividescalar (2,0);
PushVector = position.klone (). Sub (centroid);
pushvector.y = 0; }
Koden nedan använder ljud för att skapa slumpmässighet i rörelsen så att smältet känns organiskt. Bullervariablerna kan tweaked för att få den önskade effekten. Bullret appliceras sedan på tryckvektorn tillsammans med meltaamount och spreadamount för att styra hastigheten och storleken på den smälta poolen. Denna utåtriktad vektor beräknas slutligen och appliceras sedan på vertexen själv.
Var n = Noiseamplitude * Generator.getVal ((position.x) * Noisefrequency + noiseoffset);
VAR OUTWARDVector = PushVector.MultiplysScalar (((Meltamount * Spreadamount) + N) * Utåtpeed);
position.add (utåtvektor);
Koden förklaras hittills kommer att uppnå smälteffekten, men två saker är fel med det. Först kommer poolen att känna sig ganska platt, eftersom alla punkter har smält till samma y-position. För det andra, eftersom de alla delar samma y, kommer för många punkter att staplas i samma höjd, vilket kan orsaka flimrande. För att undvika detta appliceras en tjocklek vid smältfrekvensen:
position.Y + = Meltamount * poolthickness;
Med koden ovan kan någon modell med tillräckligt med polygoner smälta. Ladda ner en ZIP-fil ut i koden här och byt ut modellen med allt du vill. Ha så kul!
Denna artikel uppträdde ursprungligen i Webbdesigner Utgåva 265. Köp det här .
Relaterade artiklar:
Välkommen till vår guide om hur man drar ett lejon. Jungorns kung, Lejonet är en, om inte de största, starkaste och mest kraftfulla bränslen i världe..
Att lära sig att dra perspektivet korrekt kan ändra hela ritningsprocessen. Oavsett om du drar traditionellt med penna och papper, eller digitalt med en grafiktablett, konstruerar jag fortf..
Få utomhus för att skapa stor konst (Bildkredit: Mike Mc Cain) Det finns så många bra sätt att lära..
När du har till uppgift att skapa en karaktär design Från början, tänk på den här personens personlighet. S..
Att lägga till effekter på text kan lägga till en helt ny nivå av engagemang och intresse. Effekter som Kinetisk typo..
Det finns många intressanta effekter som kan läggas till en sida för att öka engagemanget, men det är viktigt att välja eff..
Cinema 4D Det är bra på många saker, men det kan sakta ner när det har många föremål i scenen, vilket är ett ..