You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
4.5 KiB
111 lines
4.5 KiB
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<base href="../../../" />
|
|
<script src="page.js"></script>
|
|
<link type="text/css" rel="stylesheet" href="page.css" />
|
|
</head>
|
|
<body>
|
|
<h1>Utiliser le post-processing ([name])</h1>
|
|
|
|
<p>
|
|
Plusieurs applications three.js effectuent un rendu de leurs objets 3D directement dans la scène. Parfois, vous souhaitez appliquer un ou plusieurs
|
|
effects graphiques comme la profondeur de champ, le flou lumineux, du grain, ou différents types d'Anti-aliasing. Le post-processing est une approche très utilisée
|
|
pour implémenter de tels effets. Premièrement, la scène est rendue dans une cible de rendu qui représente un buffer dans la mémoire de la carte vidéo.
|
|
A la prochaine étape un ou plusieurs effets de post-processing appliquent des filtres au buffer de l'image qui est finalement rendue à
|
|
l'écran.
|
|
</p>
|
|
<p>
|
|
three.js fournit une solution complète de post-processing via [page:EffectComposer] pour implémenter un tel workflow.
|
|
</p>
|
|
|
|
<h2>Workflow</h2>
|
|
|
|
<p>
|
|
La première étape est d'importer tous les fichiers nécessaires du dossier exemple. Le guide part du principe que vous utilisez le
|
|
[link:https://www.npmjs.com/package/three npm package] officiel de three.js. Pour notre démo basique, nous avons besoin des fichiers suivants.
|
|
</p>
|
|
|
|
<code>
|
|
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
|
|
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
|
|
import { GlitchPass } from 'three/addons/postprocessing/GlitchPass.js';
|
|
</code>
|
|
|
|
<p>
|
|
Après avoir importé tous les fichiers correctement, nous pouvons créer notre composer en lui passant une instance de [page:WebGLRenderer].
|
|
</p>
|
|
|
|
<code>
|
|
const composer = new EffectComposer( renderer );
|
|
</code>
|
|
|
|
<p>
|
|
Lors de l'utilisation d'un composer, il est nécessaire de changer la boucle d'animation de l'application. Au lieu d'appeler la méthode de rendu
|
|
[page:WebGLRenderer], nous devons utiliser appeler [page:EffectComposer].
|
|
</p>
|
|
|
|
<code>
|
|
function animate() {
|
|
|
|
requestAnimationFrame( animate );
|
|
|
|
composer.render();
|
|
|
|
}
|
|
</code>
|
|
|
|
<p>
|
|
Notre composer est maintenant prêt, il est donc possible de configurer la chaîne d'effets de post-processing. Ces effets (passes) sont chargés de la création
|
|
de l'apparence visuelle finale de l'application. Ils sont traités dans l'ordre de leur ajout/insertion. Dans notre example, l'instance de `RenderPass`
|
|
est exécutée en première, puis l'instance de `GlitchPass` est exécutée. Le dernier effet activé de la chaîne est automatiquement rendu dans la scène. Le setup
|
|
des effets ressemble à ça:
|
|
</p>
|
|
|
|
<code>
|
|
const renderPass = new RenderPass( scene, camera );
|
|
composer.addPass( renderPass );
|
|
|
|
const glitchPass = new GlitchPass();
|
|
composer.addPass( glitchPass );
|
|
</code>
|
|
|
|
<p>
|
|
`RenderPass` est normalement placé au début de la chaîne pour fournir la scène rendue en tant qu'entrée pour les prochaines étapes de post-processing. Dans notre cas,
|
|
`GlitchPass` va utiliser les données de l'image pour appliquer un effet de glitch. Regardez cet [link:https://threejs.org/examples/webgl_postprocessing_glitch exemple live]
|
|
pour voir cela en action.
|
|
</p>
|
|
|
|
<h2>Effets Intégrés</h2>
|
|
|
|
<p>
|
|
Vous pouvez utiliser une large palette d'effets de post-processing pré-définis fournis par le moteur. Ils se trouvent dans le dossier
|
|
[link:https://github.com/mrdoob/three.js/tree/dev/examples/jsm/postprocessing postprocessing].
|
|
</p>
|
|
|
|
<h2>Effets Customisés</h2>
|
|
|
|
<p>
|
|
Parfois vous voulez écrire un shader de post-processing customisé et l'inclure dans les effets (passes) de post-processing. Dans ce scénario,
|
|
vous pouvez utiliser `ShaderPass`. Après avoir importé le fichier et votre shader customisé, vous pouvez utiliser le code suivant pour mettre en place l'effet (pass).
|
|
</p>
|
|
|
|
<code>
|
|
import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
|
|
import { LuminosityShader } from 'three/addons/shaders/LuminosityShader.js';
|
|
|
|
// later in your init routine
|
|
|
|
const luminosityPass = new ShaderPass( LuminosityShader );
|
|
composer.addPass( luminosityPass );
|
|
</code>
|
|
|
|
<p>
|
|
Ce repository fournit un fichier appelé [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/shaders/CopyShader.js CopyShader] qui est
|
|
une bonne base de code pour créer votre propose shader customisé. `CopyShader` copie simplement le contenu de l'image du buffer de l'[page:EffectComposer]
|
|
à son buffer d'écriture sans y appliquer aucun effet.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|
|
|