Three.js предоставляет мощный инструментарий для создания постобработки сцены через EffectComposer и специализированные Pass. Одним из таких инструментов является FilmPass, имитирующий эффекты старой киноплёнки, включая зернистость и сканирующие строки. Этот эффект широко используется для стилизации визуала под ретро или киношный стиль.
FilmPass не является встроенным объектом в ядро Three.js и подключается из модуля постобработки:
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';
Для корректной работы требуется рендерер WebGLRenderer и сцена с камерой. Стандартная схема подключения:
const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
const filmPass = new FilmPass(
0.35, // noise intensity – интенсивность зернистости
0.025, // scanline intensity – интенсивность линий сканирования
648, // scanline count – количество строк развёртки
false // grayscale – режим ч/б, true для черно-белого
);
composer.addPass(filmPass);
0 до 1.FilmPass позволяет изменять параметры в реальном времени:
filmPass.uniforms['nIntensity'].value = 0.5;
filmPass.uniforms['sIntensity'].value = 0.05;
filmPass.uniforms['sCount'].value = 800;
filmPass.uniforms['grayscale'].value = true;
nIntensity — интенсивность шума.sIntensity — интенсивность строк.sCount — количество строк.grayscale — включение/выключение монохромного
режима.Динамическое управление позволяет создавать анимации эффекта или подстраивать его под разные сцены. Например, можно постепенно увеличивать зернистость при приближении камеры к объекту, создавая эффект старого киноплёночного приближения.
FilmPass интегрируется с любыми другими PostProcessing Pass в Three.js. Порядок добавления в EffectComposer критичен: FilmPass желательно располагать после всех основных цветовых и световых эффектов. Это обеспечивает корректное наложение зернистости на финальный рендер.
Пример комбинирования с BloomPass:
import { BloomPass } from 'three/examples/jsm/postprocessing/BloomPass.js';
const bloomPass = new BloomPass(1.5, 25, 4.0, 256);
composer.addPass(bloomPass);
composer.addPass(filmPass);
scanline count). Они создают ощущение старой киноплёнки
или старого телевизора.nIntensity создаёт эффект живой плёнки, где шум постоянно
меняется.WebGLRenderer с включённым antialias: true,
что уменьшает визуальные артефакты на границах объектов.FilmPass активно применяется в видеоиграх, интерактивных визуализациях и VR-сценах для создания атмосферы. Его параметры можно связывать с игровыми событиями или аудиопотоками, чтобы динамически менять интенсивность эффекта:
filmPass.uniforms['nIntensity'].value = Math.sin(clock.getElapsedTime()) * 0.2 + 0.2;
Такой подход создаёт естественные колебания зернистости, усиливая ощущение старой киноплёнки или ретро-стиля.
FilmPass — мощный инструмент для стилизации сцены под кинематографический или ретро-визуал. Комбинируя параметры зернистости, строк развёртки и градации, можно добиться уникального визуального эффекта без сложной постобработки вне Three.js.