Я хочу вывести сцену в оттенки серого, но это также относится к другим эффектам пост-обработки, которые я хотел бы угаснуть или выпустить.three.js fade in/out post processing shaders
Так для этого примера я использую THREE.ColorifyShader, но при его активации, вся сцена мгновенно получает предназначен цвета
Как можно «применить непрозрачности/альфа» для пост-обработки?
Пример кода:
var effectColorify,
copyPass;
effectColorify = new THREE.ShaderPass(THREE.ColorifyShader);
effectColorify.uniforms['color'].value.setRGB(0.8, 0.8, 0.8); // Grayscale
copyPass = new THREE.ShaderPass(THREE.CopyShader);
copyPass.renderToScreen = true;
this.composerGrayscale = new THREE.EffectComposer(this.engine.renderer);
this.composerGrayscale.addPass(this.renderPass);
this.composerGrayscale.addPass(effectColorify);
this.composerGrayscale.addPass(copyPass);
Я нашел такой пример, тоже, но это не совсем то, что я ищу. Допустим, у меня хорошая сцена и цветная сцена, и теперь я хочу, чтобы эта сцена исчезла в оттенках серого, или красном, или белом или вообще. Используя только один цвет, я могу только перейти от оттенков серого (красный, синий и т. Д.) К черному и обратно, но не от одноцветного до многоцветного. Я думаю, что мне нужно добавить равномерное значение непрозрачности в шейдер и применить рассчитанное значение только к коэффициенту, заданному непрозрачностью, а затем перечеркнуть непрозрачность, как в вашем примере. – Artimus
, то вам, вероятно, придется играть со значениями [HSL] (http://en.wikipedia.org/wiki/HSL_and_HSV) вместо RGB –
HSL - это еще один способ записи RGB, результат тот же. Я действительно пробовал то, что имел в виду (добавление непрозрачности), и он отлично работает. Если вам когда-нибудь понадобится, вы можете взять измененный код шейдера из моего ответа. – Artimus