Попытка использовать прозрачный фон с некоторыми постэффектами, такими как Unreal Bloom, SMAA и Tonemapping, представленными в примерах, но кажется, что это нарушает прозрачность моего рендера.
renderer = new THREE.WebGLRenderer({ canvas, alpha: true });
renderer.setClearColor(0xFF0000, 0);
composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
// Bloom pass
canvasSize = new THREE.Vector2(canvas.width, canvas.height);
pass = new UnrealBloomPass(canvasSize, strength, radius, threshhold);
composer.addPass(pass);
// SMAA pass
size = canvasSize.multiplyScalar(this.renderer.getPixelRatio());
pass = new SMAAPass(size.x, size.y);
pass.renderToScreen = true
composer.addPass(pass);
// Tonemapping
renderer.toneMappingExposure = exposure;
renderer.toneMappingWhitePoint = whitePoint;
renderer.toneMapping = type;
composer.render();
Если я деактивирую цветpass Я получаю правильный прозрачный фон, но при активации я получаю черный фон.Я посмотрел на источники, и кажется, что он должен правильно обрабатывать канал альфа-текстуры, так как формат правильно установлен на THREE.RGBAFormat
.
Редактировать : После некоторых исследований я нашел, где этопроисходит от.Он берется из getSeperableBlurMaterial
в js \ postprocessing \ UnrealBloomPass.js .
Альфа-канал фрагмента всегда имеет значение 1,0, что приводит к полному удалению предыдущих альфа-значений при выполненииаддитивное смешивание в конце.
Круто было бы найти правильный способ применения альфы внутри размытия по Гауссу.Есть идеи как?