Постобробка рендерить сцену в текстуру, а потім застосовує повноекранні
проходи шейдерів, щоб додати bloom, глибину різкості, віньєтку чи
будь-який інший ефект. Цей урок будує конвеєр з нуля за допомогою
WebGLRenderTarget і повноекранного квада — жодних зовнішніх
бібліотек постобробки не потрібно.
1Рендеримо сцену в текстуру
import * as THREE from
'https://cdn.jsdelivr.net/npm/three@0.160/build/three.module.js';
function makeRT(w, h) { return new THREE.WebGLRenderTarget(w, h, {
minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format:
THREE.RGBAFormat, type: THREE.HalfFloatType, // HDR-діапазон для bloom
}); } let rt = makeRT(innerWidth, innerHeight); // У циклі рендерингу:
renderer.setRenderTarget(rt); // рендеримо В текстуру
renderer.render(scene, camera); renderer.setRenderTarget(null); //
повертаємось до екранного фреймбуфера // rt.texture тепер містить сцену як
семпльоване зображення
Використовуйте рендертаргети HalfFloatType для HDR-bloom —
значення понад 1.0 кодують надто яскраві ділянки. Звичайний
UnsignedByteType обрізає все до [0,1] і втрачає сигнал
bloom.
Прохід bloom виконується у половинній роздільності, щоб заощадити
пропускну здатність. Це просте зменшення 4:1 — для вищої якості
використовуйте розмиття Kawase або dual Kawase, яке дає гаусовий
результат за меншу кількість семплів.
Часті запитання
Чого я навчуся в цьому уроці?
Використовуйте WebGLRenderTarget у Three.js для реалізації bloom, глибини різкості, хроматичної аберації та власних проходів постобробки без бібліотек.
Які теми розглядаються в цьому уроці?
Цей урок охоплює такі теми: Рендеримо сцену в текстуру, Налаштування повноекранного квада, Bloom: поріг + гаусове розмиття, Хроматична аберація, Віньєтка та скан-лінії, Багатопрохідний конвеєр.
Які інструменти й технології використовуються?
Цей урок використовує: Three.js, WebGLRenderTarget, GLSL, Постобробка.