I'm trying to write a script to add the mograph camera shader to the luminance channel of a material, and then set the Camera target. I can insert other shaders, but I cannot locate in the documentation the correct way to instantiate that shader, nor how to modify the property of a shader once added to the material.
Solved Mograph Camera Shader from Python
hello ,
here's an example on how to create a camera shader and set the link of the camera.
Be aware you need to create the shader using it's ID so it could be changed in the future.
I've used a script from @m_adam as a base and just added the camera shader stuff. You can thanks him a lot ^^
Cheers
Manuel
import c4d
from c4d import gui
def main():
# Gets the active object
if op is None:
raise ValueError("op is none, please select one object.")
# Retrieves the BaseDraw of Render View
bd = doc.GetRenderBaseDraw()
if bd is None:
raise ValueError("no BaseDraw found")
# Retrieves the scene camera
cam = bd.GetSceneCamera(doc)
if cam is None:
raise ValueError("there's no camera")
# Creates a default Cinema 4D Material, the created material only exist in the memory
mat = c4d.BaseMaterial(c4d.Mmaterial)
if mat is None:
raise RuntimeError("Failed to creates a new BaseMaterial.")
# Inserts the material in the active document
doc.InsertMaterial(mat)
# Creates the Camera Shader
#be aware you have to use the ID here but it can changed in future release
sha = c4d.BaseList2D(440000050)
if sha is None:
raise RuntimeError("Failed to creates a bitmap shader.")
# Defines the camera link inside the shader
sha[c4d.MGCAMERASHADER_LINK] = cam
# Inserts the shader into the material
mat[c4d.MATERIAL_COLOR_SHADER] = sha
mat.InsertShader(sha)
# Checks if there is already a texture tag on the active object, if not creates it
textureTag = op.GetTag(c4d.Ttexture)
if not textureTag:
textureTag = op.MakeTag(c4d.Ttexture)
# If the texture tag is not available at this point, something went wrong
if textureTag is None:
raise RuntimeError("Failed to retrieves the texture tag.")
# Links the newly created material from the textureTag Material link parameter
textureTag[c4d.TEXTURETAG_MATERIAL] = mat
# Changes the texture tag projection to UVW
textureTag[c4d.TEXTURETAG_PROJECTION] = c4d.TEXTURETAG_PROJECTION_UVW
# Informs Cinema 4D something changed in the scene
c4d.EventAdd()
# Execute main()
if __name__=='__main__':
main()
MAXON SDK Specialist