Instructables Universe in Three.js (12 / 13 stap)

Stap 12: Three.js: post-processing & effecten: dimmen, vervagen

Check this out! (en de tutorial die gaat mee)

Gekke effecten zijn mogelijk met postprocessing in ThreeJS, maar ik nodig iets simpels: dimmen alles behalve het sterrenbeeld ik wilde laten zien. Heldere witte lijnen en punten bovenop een anderszins grijs scène.

Turns out, de 3D-wereld is niet zoals KineticJS. Ik kan niet toevoegen van een laag bovenop en rekenen op de browser het alfakanaal van die laag verduisteren van de spullen achter het renderen. Of liever gezegd ik kon, maar ik zou moeten een hele aparte scène, doek en context, en het is niet helemaal duidelijk wat er gebeurt als je twee webgl vensters boven elkaar. Ik geloof niet dat het is triviaal om een semi-transparante webgl rendering context.

Dus was de volgende beste ding postprocesses toevoegen aan mijn bestaande renderer. Dit is hoe, toen ik sprak over Particle systemen in beweging,

 Galaxy.ComposeScene = function(options){ var composers = []; var mainComposer = new THREE.EffectComposer( renderer, renderTarget ); var renderPass = new THREE.RenderPass( scene, camera ); mainComposer.addPass( renderPass ); if (_.isObject(options) && options.blur === true) { var bluriness = 0.9; // Prepare the blur shader passes var hblur = new THREE.ShaderPass( THREE.HorizontalBlurShader ); hblur.uniforms[ "h" ].value = bluriness / Galaxy.Settings.width; mainComposer.addPass(hblur); var vblur = new THREE.ShaderPass( THREE.VerticalBlurShader ); vblur.uniforms[ "v" ].value = bluriness / Galaxy.Settings.height; mainComposer.addPass( vblur ); var brightnessContrastPass = new THREE.ShaderPass( THREE.BrightnessContrastShader ); brightnessContrastPass.uniforms[ "brightness" ].value = -0.3; brightnessContrastPass.uniforms[ "contrast" ].value = -0.2; mainComposer.addPass(brightnessContrastPass); } else { mainComposer.addPass( new THREE.ShaderPass( THREE.CopyShader ) ); } var topComposer = new THREE.EffectComposer(renderer, renderTarget2); var topRenderPass = new THREE.RenderPass(topScene,camera); topComposer.addPass(topRenderPass); topComposer.addPass( new THREE.ShaderPass( THREE.CopyShader ) ); //////////////////////////////////////////////////////////////////////// // final composer will blend composer2.render() results with the scene //////////////////////////////////////////////////////////////////////// var blendPass = new THREE.ShaderPass( THREE.AdditiveBlendShader ); blendPass.uniforms[ 'tBase' ].value = mainComposer.renderTarget1; blendPass.uniforms[ 'tAdd' ].value = topComposer.renderTarget1; var blendComposer = new THREE.EffectComposer( renderer ); blendComposer.addPass( blendPass ); blendPass.renderToScreen = true; composers.push(mainComposer,topComposer,blendComposer); return composers; }; 

werd

 var mainComposer = new THREE.EffectComposer( renderer, renderTarget ); var renderPass = new THREE.RenderPass( scene, camera ); mainComposer.addPass( renderPass ); // add a shader var shaderpass = new THREE.ShaderPass( THREE.SomeShader ); ... (do some settings for the shader here) mainComposer.addPass(shaderpass); // add a copy, so webgl knows what to render: var copypass = new THREE.ShaderPass( THREE.CopyShader ); copypass.renderToScreen = true; mainComposer.addPass(copypass); // render mainComposer.render(); 

Bereiden:

1. in de threejs repo, neem een kijkje op voorbeelden/js/shaders en voorbeelden/js/postprocessing
2. Kies aantal shaders. Deze zijn gewoon WebGL code opgeslagen in JS-bestanden, maar ze zijn in principe hetzelfde als de shaders ging ik door bij het beschrijven van een andere helderheid voor elke ster.
3. de postprocessing directory heeft een bos van nutsbedrijven, in wezen, waarmee u laag effecten op elkaar

Monteren (de scripts op uw pagina plaatsen):

-DRIE. EffectComposer
-DRIE. RenderPass (u moet een renderpass zodat uw invloed van toepassing op iets)
-DRIE. ShaderPass (of twee of drie--deze wrap uw effecten)
-DRIE. CopyShader (in geval die u wilt weergeven zonder effecten soms)
-DRIE. AdditiveBlendShader (om te mengen andere shaders)
-sommige arceringen u graag

De Code:

 var blendPass = new THREE.ShaderPass( THREE.AdditiveBlendShader ); blendPass.uniforms[ 'tBase' ].value = mainComposer.renderTarget1; blendPass.uniforms[ 'tAdd' ].value = topComposer.renderTarget1; var blendComposer = new THREE.EffectComposer( renderer ); blendComposer.addPass( blendPass ); blendPass.renderToScreen = true; 

Kortom u zult worden belt .render() op een componist nu, in plaats van direct op een renderer. U kunt vrijwel elk willekeurig bereik van effecten die u door eerst doet een render-pass wilt, toe te voegen aan de componist, dan latere shaderpasses toe te voegen aan de dezelfde componist samenstellen. Uiteindelijk, zou u wilt toevoegen van een copyshader om alles bij elkaar komen, stel deze in op renderToScreen en renderen. Neer, het als volgt uitzien:

 // in the composeScene function return composers.push(mainComposer,topComposer,blendComposer); ... // results of ComposeScene are stored each time the user enters/exits a constellation Galaxy.Composers = Galaxy.ComposeScene(); ... // In the render loop, each composer is rendered _.each(Galaxy.Composers,function(composer){ composer.render(); }); 

Maar in het geval van wat ik heb gedaan hier, er zijn eigenlijk twee aparte componisten waarmee twee verschillende sets van objecten in de scene. Wanneer een constellatie actief is, worden de sterren en de verbindingslijnen weergegeven zonder vervagen, en bij volledige helderheid. De sterren van de achtergrond, echter, zijn verduisterd en wazig. Dus als u de effecten toegepast op een verzameling van dingen en de andere niet, moet je een hele aparte scène met gekloonde objecten (topScene), en een hele aparte componist stapel.

Dit zorgt ervoor dat de lichte complicatie die de twee moeten samen als een laatste stap worden gemengd: ik kon maken van de topscene, maar het zou de onderste scène bedekken. Zo is het laatste ding dat wordt weergegeven in mijn geval een additieve mix van de twee composers resultaten:

De definitieve bits: je moet alle drie componisten elk frame renderen, of de inhoud van die componist niet bijgewerkt:

in de functie composeScene retourneert composers.push(mainComposer,topComposer,blendComposer); ... / / resultaten van ComposeScene worden opgeslagen telkens wanneer de gebruiker opent/sluit een sterrenbeeld Galaxy.Composers = Galaxy.ComposeScene(); ... / / De render lus, elke componist wordt gerenderd

Dat is allen daar is aan het!

Gerelateerde Artikelen

The Instructables University Game

The Instructables University Game

Ik had niet gepland op het invoeren van de "How to play wedstrijd" want ik niet echt een gameconsole ben. Na het nadenken, kwam ik met The Instructables Universiteit Game. Ik heb geprobeerd om mijn volwassen zoon aan bij de pret hier, maar zijn
Verleden projecten/Pre Instructables...

Verleden projecten/Pre Instructables...

I wish I would have found Instructables two or three years ago. Ik kon een deurklink van een veel meer hebben bijgedragen. Met mijn recente verplaatsen onvermijdelijk dat heb ik besloten om enkele foto's van eerdere projecten in mijn huidige huis ver
Jus te gaan met een gebraden

Jus te gaan met een gebraden

hoewel dit dom eenvoudig is, ik ben voortdurend verbaasd over het aantal mensen die geïntimideerd, zijn wanneer het gaat om het maken van een simpele jus te gaan met een gebraden. Deze jus werkt ruim aardappelen, besprenkeld over het vlees of de volg
Gedetailleerde geweven Duct Tape portefeuilles Instructable

Gedetailleerde geweven Duct Tape portefeuilles Instructable

Ja, ja, het is een ander Duct Tape wallet instructable.Hoe saai, juiste?De reden dat ik dit doe is dat ik proberen zal te doen samenballen van kennis over het bouwen van allerlei soorten Duct Tape portefeuilles en ingaan op veel aspecten zodat u zal
Steven Universe jurk

Steven Universe jurk

Een goede vriend van mij houdt Steven Universe, dus ik haar deze jurk als een gift van de verjaardag maakte. Ik denk dat dit is een echt mooie jurk, en zou een geweldig cosplay of Halloween kostuum!Ik maakte haar ook een volledige set van kat vinger
TestrBot: De $300 Universal testmachine

TestrBot: De $300 Universal testmachine

UPDATE 9-2-15: ik vrijgegeven een batch van testresultaten die aantonen dat mijn beweegredenen voor terwijl "infill"-ontwerp is de beste!* Wat is TestrBot?TestrBot is een $300 Universal Test Machine (UTM) en kan worden gebruikt voor het uitvoere
Steven Universe lumi inkodye ondergoed met crystal gem Garnet

Steven Universe lumi inkodye ondergoed met crystal gem Garnet

Een van de dingen die mijn geld kan niet kopen is prima super held/favoriet karakter ondergoed (of elke merch echt) voor dames. Elke vorm van boksers schijnt beschikbaar te zijn, en soms heb ik geprobeerd kopen sommige "jongens" grootte ondergoe
SUMO :  Slimme /* * Smart Pulse Monitor * Author : Geeve George * Instructables : */ #include const int analo

SUMO&nbsp;:&nbsp;<youtube&nbsp;id="lDKM7UKUL5A"></youtube>&nbsp;Slimme&nbsp;/*&nbsp;*&nbsp;Smart&nbsp;Pulse&nbsp;Monitor&nbsp;*&nbsp;Author&nbsp;:&nbsp;Geeve&nbsp;George&nbsp;*&nbsp;Instructables&nbsp;:&nbsp;*/&nbsp;#include&nbsp;const&nbsp;int&nbsp;analo

src = "HalloIedereen,Ik benGeeveGeorgeeen15jaaroudeMaker/elektronicaHobbyist.IliefdeComputerVisie,AndroïdeOntwikkelingenAlgoritmeDesign.Iamop dit momentin11eRangComputerWetenschapStudentbijWeinigRockIndischeSchool.:)Zoekenmeerovermebij:href = "h
DIY zelf geactiveerd PRIVATE UNIVERSE

DIY zelf geactiveerd PRIVATE UNIVERSE

dit is mijn allereerste ooit Instructables uploaden dus, wees voorzichtig met mij.Ik maakte dit voor een kleine galerie ruimte in een ARI genoemd Constance in Hobart, Tasmanië, Australië, en is speciaal ontworpen om te worden geactiveerd wanneer mens
Knex verstek zagen instructies

Knex verstek zagen instructies

het is teruggekeerd! Ja, na 3 jaar, heb ik eindelijk besloten om te posten van instructies van mijn verstek zaag. Deze zaag is net als de oude is, behalve een paar kleine kleurwijzigingen te geven een meer consistent kleurenschema. Voor degenen onder
Pimp mijn PSP hoofdstuk 1 uw one-stop Instructable voor al uw PSP behoeften!

Pimp mijn PSP hoofdstuk 1 uw one-stop Instructable voor al uw PSP behoeften!

Dit instructable leert u sommige unieke dingen die uw PSP in een Multi-Media beest transformeren zal.Dit instructable zal u tonen hoe te:1. update uw PSP (officiële Firmware, niet Custom Firmware)2. video's toevoegen aan uw PSP (hoofdstuk 2)3. foto's
Met de Switch()-instructie als Sequencing Control

Met de Switch()-instructie als Sequencing Control

In dit Instructable, zal wij gaan over de "switch()"-instructie en het gebruik in de programmering. De instructie switch is een krachtig hulpmiddel voor het organiseren van uw programma, gemakkelijk kunt u complexe stroomdiagrammen doorlopen.In
Overleven in het wild-het meest unieke instructable tot nu toe

Overleven in het wild-het meest unieke instructable tot nu toe

u hebben net wakker om jezelf te vinden op de grond in het wild.  Vóór het opstaan vanuit je liggende positie realiseert je je dat, naast het feit dat niet in uw eigen warme comfortabele bed, u hebben gewekt in het kreupelhout onder het bladerdak van
Stalen Python Knex achtbaan - instructies

Stalen Python Knex achtbaan - instructies

is terug iedereen-staal Python!Dit model is de recreatie van mijn oudere ontwerp, met een paar kleine wijzigingen, aangezien ik nooit had specifieke foto's van het origineel. Dit ontwerp heeft natuurlijk zijn gebreken, zodat u wellicht om te knoeien