remove old shader



  • On 25/05/2017 at 22:34, xxxxxxxx wrote:

    For the material, I create a shader.

    mat = doc.GetActiveMaterial()
    shd1 = c4d.BaseShader(c4d.Xbitmap)
    shd1[c4d.BITMAPSHADER_FILENAME]= FILE_NAME1
    mat.InsertShader(shd1)
    mat[c4d.MATERIAL_DIFFUSION_SHADER] = shd1

    shd1 after I overwrite shd2.

    shd2 = c4d.BaseShader(c4d.Xbitmap)
    shd2[c4d.BITMAPSHADER_FILENAME]= FILE_NAME2
    mat.InsertShader(shd1)
    mat[c4d.MATERIAL_DIFFUSION_SHADER] = shd2

    Is the shd1 removed or is it in memory?



  • On 26/05/2017 at 03:08, xxxxxxxx wrote:

    Hi,

    shd1 is still in memory. To remove it from the material's shader list after it's been overwriten, call shd1.Remove().
    Assigning a shader to MATERIAL_DIFFUSION_SHADER only set a link to the shader.



  • On 26/05/2017 at 03:14, xxxxxxxx wrote:

    How can I remove all unused shaders?

    mat.GetFirstShader()
    while(shd) :
        shd.Remove()
        shd = mat.GetFirstShader()

    But this will remove all the shaders of the material including the required ones



  • On 30/05/2017 at 02:48, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    How can I remove all unused shaders?

    What do you mean by "unused shaders"? The shaders that you have inserted yourself into the material and that are no longer linked?

    To find such unused shaders, you can check the used and assigned channels of the material for each shader in its shader list (returned by GetFirstShader()). If a shader is found then it is used, otherwise it can be removed.


Log in to reply