Hi, is there any way to show shader effect behind transparent mesh? I am not familiar with vertexShader and fragmentShader.
Here is my sample codepen link:
ripple_shader
Hi!
Instead of having a separated mesh with the ripple effect on transparent material, I would go with modification of material of the blue mesh, adding that effect there (using .onBeforeCompile()
). But it depends on your goal.
Thank you very much for your reply. But i just don’t how to edit
onBeforeCompile: shader => {
shader.vertexShader = ?
shader.fragmentShader = ?
}
I only have a basic understanding of shaders and find very limited resources about this function. If it does not bother you, can you offer me some advice?
Have a look at this SO answer:
There you’ll find an example of how to modify MeshLambertMaterial
to have that moving circle.
The example @prisoner849 is also in the Collection of examples from discourse.threejs.org
Sorry, I tried your method, but the result is the same as the original.
codepen
I think [ transparent ] is the key. After adding [ transparent: true ] into material, ripple effect can show behind mesh.
let m = new THREE.MeshLambertMaterial({
color: 0xffff64,
side: THREE.DoubleSide,
transparent: true,
but the color can’t set transparency anymore, and transparency is always 1.
gl_FragColor = vec4(vColor,0.); // alpha cannot work
Is there any other way to set the background transparency to 0 ?
I don’t know the goal, so using the approach, mentioned be me, is a wrong way.
But if you want to have kind of transparent area with transparent: false
, then use discard
.
And the part of replacing will be something like this:
.replace(
`#include <dithering_fragment>`,
`#include <dithering_fragment>
vec3 vColor = u_tcolor;
float uLength = distance(vPos, vec3(0.))/0.75;
float hWidth = u_length * 0.5;
if ( abs((u_r - hWidth) - uLength) > hWidth ) { discard ;}
gl_FragColor = vec4(vColor,1.);
`
);
In this case edges of the circle will be aliased.
Sorry for not making the goal clear. Your solution is simple and works well. Thank you so much for such a quick reply !
You’re welcome