RenderPass — один из ключевых компонентов системы постобработки (post-processing) в Three.js. Он представляет собой базовый рендер-пасс, который отвечает за отрисовку сцены на экран или на промежуточный render target, с возможностью дальнейшей обработки другими эффектами.
В Three.js постобработка строится на концепции пассингов (passes). Каждый пасс получает на вход сцену и камеру, производит рендеринг, а затем передаёт результат следующему пассу. RenderPass является самым простым и фундаментальным пассом, на котором основаны все сложные эффекты, такие как Bloom, SSAO или Motion Blur.
Ключевые моменты RenderPass:
WebGLRenderTarget вместо
основного канваса.clear,
clearColor, clearAlpha).EffectComposer для цепочек
постобработки.RenderPass создаётся с передачей сцены и камеры:
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
const renderPass = new RenderPass(scene, camera);
Параметры конструктора:
scene — объект типа THREE.Scene. Сцена,
которую необходимо отрисовать.camera — объект типа THREE.Camera. Камера,
через которую будет происходить рендеринг.overrideMaterial (опционально) — материал, который
заменит все материалы сцены.clearColor и clearAlpha (опционально) —
настройки очистки буфера цвета.Пример с переопределением материала:
const overrideMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff });
const renderPass = new RenderPass(scene, camera, overrideMaterial);
В этом случае все объекты сцены будут отрисованы с использованием
MeshBasicMaterial, что полезно для создания масок или
глубинных карт.
RenderPass позволяет контролировать очистку буфера цвета и глубины:
renderPass.clear = true; // очистка перед рендером
renderPass.clearColor = new THREE.Color(0x000000);
renderPass.clearAlpha = 0.0; // прозрачный фон
clear — включает или отключает автоматическую
очистку.clearColor — задаёт цвет фона при очистке.clearAlpha — задаёт прозрачность фонового цвета.Эти параметры полезны при смешении нескольких пассов и при использовании прозрачности в эффект-композере.
EffectComposer управляет цепочкой пассов. RenderPass
обычно располагается первым в цепочке, чтобы отрисовать базовую
сцену:
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';
const composer = new EffectComposer(renderer);
composer.addPass(renderPass);
const bloomPass = new UnrealBloomPass();
composer.addPass(bloomPass);
function animate() {
requestAnimationFrame(animate);
composer.render();
}
Особенности работы с EffectComposer:
ShaderPass и другие эффекты могут модифицировать
результат.RenderPass часто применяют для генерации масок или карт глубины. Например, создание карты теней или выделение объектов:
const depthMaterial = new THREE.MeshDepthMaterial();
const depthPass = new RenderPass(scene, camera, depthMaterial);
depthPass.clearColor = new THREE.Color(0xffffff);
depthPass.clearAlpha = 1.0;
Такой подход позволяет использовать одно изображение сцены в разных эффектах, не затрагивая основной рендеринг.
RenderPass корректно обрабатывает прозрачные материалы, если установлены параметры:
renderPass.clearAlpha = 0;
renderPass.clearColor = new THREE.Color(0x000000);
При необходимости можно использовать alpha: true в
WebGLRenderer для поддержки прозрачного канваса.
renderToScreen — если true, выводится
напрямую на экран, иначе передаётся следующему пассу.maskActive — используется в комбинации с MaskPass для
ограничения рендеринга области.Эти свойства редко изменяются вручную, но понимание их важно при построении сложных цепочек постобработки.
const composer = new EffectComposer(renderer);
const renderPass = new RenderPass(scene, camera);
composer.addPass(renderPass);
const bloomPass = new UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 1.5, 0.4, 0.85);
composer.addPass(bloomPass);
const finalPass = new ShaderPass(CopyShader);
finalPass.renderToScreen = true;
composer.addPass(finalPass);
function animate() {
requestAnimationFrame(animate);
composer.render();
}
В этой цепочке RenderPass создаёт исходный рендер сцены, после чего BloomPass добавляет свечение, а финальный ShaderPass выводит результат на экран.
RenderPass является фундаментом системы постобработки в Three.js, предоставляя гибкий и универсальный инструмент для управления базовым рендером сцены и её интеграции с другими визуальными эффектами. Его корректное использование позволяет создавать сложные графические пайплайны с минимальной нагрузкой на код и GPU.