[Python] LayerShader.AddLayer() -> Defining Shader
-
Hello all,
I tried everything to figure out how to use the newly added Python-Command "LayerShader.AddLayer()" in S24.
As far as I know it only adds the "Type" of Layer. For Example I want to add a certain shader to the Layer I first use AddLayer(c4d.TypeShader) and this will give me an empty "Shader". But how can I define this shader to a specific Shader then?
(https://developers.maxon.net/docs/py/2023_2/modules/c4d/C4DAtom/GeListNode/BaseList2D/BaseShader/LayerShader/index.html?highlight=addlayer#LayerShader.AddLayer)I tried everything but I dont get it... does someone know how to do it?
Thx in advance!
-
NOTE ( @ferdinand ) : The here provided code example contains an error, please refer to How to Create and Populate a Layer Shader? instead.
Hi @PdZ-1 welcome in plugincafe.
The type need to be one of the LayerType.
So to have a regular BaseShader you first need to create aTypeShader
layer and then set the link.
Find a code snippetimport c4d # Main function def main(): # Retrieveh teh Layer Shader mat = doc.GetFirstMaterial() sha_xlayer = mat.GetFirstShader() # Create an HSL layer hsl = sha_xlayer.AddLayer(c4d.TypeHSL) # Create a Shader Layer shader_layer = sha_xlayer.AddLayer(c4d.TypeShader) # Create a Gradient Shader gradient_shader = c4d.BaseShader(c4d.Xgradient) # Insert this gradient to the material (so the material become the owner of this shader too) mat.InsertShader(gradient_shader, sha_xlayer) # Finally set the Shader Layer link to the Gradient Shader shader_layer.SetParameter(c4d.LAYER_S_PARAM_SHADER_LINK, gradient_shader) c4d.EventAdd() # Execute main() if __name__=='__main__': main()
Cheers,
Maxime. -
Hello @PdZ-1,
without further questions or replies, we will consider this topic as solved by Monday, the 30th and flag it accordingly.
Thank you for your understanding,
Ferdinand -
Hi... I'm trying to figure out how to handle nested LayerShaders
mat.InsertShader(gradient_shader, sha_xlayer) inserts gradient_shader as a child of sha_xlayer ?
Would sha_xlayer.InsertShader(gradient_shader) do exactly the same thing ?If yes, does mat.InsertShader(sha_xlayer) have to be done first as well,
or can you set up a shader tree first and then add it to the material?best, index