Hi, I am trying to create two custom shaders in Babylon. I made the PG below with a function that generates custom shaders, but for some reason, it doesn’t work. For one shader it works, as expected
https://playground.babylonjs.com/#KJ3BVA
Thank you in advance.
You should not add VertexShader / FragmentShader to the names you pass to the ShaderMaterial constructor:
https://playground.babylonjs.com/#KJ3BVA#1
The PG still does not work but that’s because your shaders are invalid (look at the console of the browser, ndl and specComp are undefined in the fragment shader).
1 Like
I removed the errors from the shaders, but it applies the same shader to both spheres:
Don’t understand what you mean by
You should not add VertexShader / FragmentShader to the names you pass to the ShaderMaterial constructor:
Do you care to elaborate. Thank you
https://playground.babylonjs.com/#KJ3BVA#3
It finally works!! the documentation and your help, really helped thanks!
You were doing:
const vertexName = `customVertexShader`;
const fragName = `customFragmentShader`;
const shaderMaterial = new BABYLON.ShaderMaterial("shader", scene,
{ vertex: vertexName, fragment: fragName },
...
);
But the ShaderMaterial constructor is automatically adding VertexShader to the name you pass through vertex and FragmentShader to the name you pass through fragment in the 3rd parameter, so you should simply pass “custom”:
const vertexName = `customVertexShader`;
const fragName = `customFragmentShader`;
const shaderMaterial = new BABYLON.ShaderMaterial("shader", scene,
{ vertex: "custom", fragment: "custom" },
...
);
Regarding your other problem, it’s because you overwrite the same shader. Use another name for the second shader:
1 Like