how-to-use-post-processing.html 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <!DOCTYPE html><html lang="fr"><head>
  2. <meta charset="utf-8">
  3. <title>Comment utiliser le post-traitement</title>
  4. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  5. <meta name="twitter:card" content="summary_large_image">
  6. <meta name="twitter:site" content="@threejs">
  7. <meta name="twitter:title" content="Three.js – Comment utiliser le post-traitement">
  8. <meta property="og:image" content="https://threejs.org/files/share.png">
  9. <link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
  10. <link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
  11. <link rel="stylesheet" href="../resources/lesson.css">
  12. <link rel="stylesheet" href="../resources/lang.css">
  13. <script type="importmap">
  14. {
  15. "imports": {
  16. "three": "../../build/three.module.js"
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <div class="container">
  23. <div class="lesson-title">
  24. <h1>Comment utiliser le post-traitement</h1>
  25. </div>
  26. <div class="lesson">
  27. <div class="lesson-main">
  28. <p>
  29. De nombreuses applications three.js rendent leurs objets 3D directement à l'écran. Parfois, cependant, vous souhaitez appliquer un ou plusieurs effets graphiques
  30. tels que la profondeur de champ, le Bloom, le grain de film ou divers types d'anti-aliasing. Le post-traitement est une approche largement utilisée
  31. pour implémenter de tels effets. D'abord, la scène est rendue sur une cible de rendu qui représente un tampon dans la mémoire de la carte graphique.
  32. À l'étape suivante, une ou plusieurs passes de post-traitement appliquent des filtres et des effets au tampon d'image avant qu'il ne soit finalement rendu à
  33. l'écran.
  34. </p>
  35. <p>
  36. three.js fournit une solution complète de post-traitement via `EffectComposer` pour implémenter un tel flux de travail.
  37. </p>
  38. <h2>Flux de travail</h2>
  39. <p>
  40. La première étape du processus consiste à importer tous les fichiers nécessaires depuis le répertoire d'exemples. Ce guide suppose que vous utilisez le
  41. [link:https://www.npmjs.com/package/three package npm] officiel de three.js. Pour notre démo de base dans ce guide, nous avons besoin des fichiers suivants.
  42. </p>
  43. <pre class="prettyprint notranslate lang-js" translate="no">
  44. import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
  45. import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
  46. import { GlitchPass } from 'three/addons/postprocessing/GlitchPass.js';
  47. import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
  48. </pre>
  49. <p>
  50. Après l'importation réussie de tous les fichiers, nous pouvons créer notre compositeur en lui passant une instance de `WebGLRenderer`.
  51. </p>
  52. <pre class="prettyprint notranslate lang-js" translate="no">
  53. const composer = new EffectComposer( renderer );
  54. </pre>
  55. <p>
  56. Lorsque vous utilisez un compositeur, il est nécessaire de modifier la boucle d'animation de l'application. Au lieu d'appeler la méthode de rendu de
  57. `WebGLRenderer`, nous utilisons maintenant la contrepartie respective de `EffectComposer`.
  58. </p>
  59. <pre class="prettyprint notranslate lang-js" translate="no">
  60. function animate() {
  61. requestAnimationFrame( animate );
  62. composer.render();
  63. }
  64. </pre>
  65. <p>
  66. Notre compositeur est maintenant prêt, il est donc possible de configurer la chaîne de passes de post-traitement. Ces passes sont responsables de la création
  67. du rendu visuel final de l'application. Elles sont traitées dans l'ordre de leur ajout/insertion. Dans notre exemple, l'instance de `RenderPass`
  68. est exécutée en premier, puis l'instance de `GlitchPass` et enfin `OutputPass`. La dernière passe activée dans la chaîne est automatiquement rendue à l'écran.
  69. La configuration des passes ressemble à ceci :
  70. </p>
  71. <pre class="prettyprint notranslate lang-js" translate="no">
  72. const renderPass = new RenderPass( scene, camera );
  73. composer.addPass( renderPass );
  74. const glitchPass = new GlitchPass();
  75. composer.addPass( glitchPass );
  76. const outputPass = new OutputPass();
  77. composer.addPass( outputPass );
  78. </pre>
  79. <p>
  80. `RenderPass` est normalement placée au début de la chaîne afin de fournir la scène rendue comme entrée pour l'étape de post-traitement suivante. Dans notre cas,
  81. `GlitchPass` utilisera ces données d'image pour appliquer un effet de glitch sauvage. `OutputPass` est généralement la dernière passe de la chaîne qui effectue la conversion de l'espace colorimétrique sRGB et le mappage tonal.
  82. Découvrez cet [link:https://threejs.org/examples/webgl_postprocessing_glitch exemple live] pour le voir en action.
  83. </p>
  84. <h2>Passes intégrées</h2>
  85. <p>
  86. Vous pouvez utiliser une large gamme de passes de post-traitement prédéfinies fournies par le moteur. Elles se trouvent dans le
  87. répertoire [link:https://github.com/mrdoob/three.js/tree/dev/examples/jsm/postprocessing postprocessing].
  88. </p>
  89. <h2>Passes personnalisées</h2>
  90. <p>
  91. Parfois, vous souhaitez écrire un shader de post-traitement personnalisé et l'inclure dans la chaîne de passes de post-traitement. Pour ce scénario,
  92. vous pouvez utiliser `ShaderPass`. Après avoir importé le fichier et votre shader personnalisé, vous pouvez utiliser le code suivant pour configurer la passe.
  93. </p>
  94. <pre class="prettyprint notranslate lang-js" translate="no">
  95. import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
  96. import { LuminosityShader } from 'three/addons/shaders/LuminosityShader.js';
  97. // plus tard dans votre routine d'initialisation
  98. const luminosityPass = new ShaderPass( LuminosityShader );
  99. composer.addPass( luminosityPass );
  100. </pre>
  101. <p>
  102. Le dépôt fournit un fichier appelé [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/shaders/CopyShader.js CopyShader] qui constitue un
  103. bon point de départ pour votre propre shader personnalisé. `CopyShader` copie simplement le contenu de l'image du tampon de lecture (`read buffer`) de l'`EffectComposer`
  104. vers son tampon d'écriture (`write buffer`) sans appliquer aucun effet.
  105. </p>
  106. </div>
  107. </div>
  108. </div>
  109. <script src="../resources/prettify.js"></script>
  110. <script src="../resources/lesson.js"></script>
  111. </body></html>
粤ICP备19079148号