How do I access Redshift AOV settings from Python?



  • So once I have the BasicVideoPost object for the Redshift settings:

    rdata = doc.GetActiveRenderData()
    vpost = rdata.GetFirstVideoPost()
    assert vpost.GetType() == 1036219
    

    How do I access the data highlighted in red in the gui screencap below?

    rsrs.png

    Querying the REDSHIFT_RENDERER_AOV_COUNT:

    num_aovs = vpost[c4d.REDSHIFT_RENDERER_AOV_COUNT]
    

    yields 3, as I would expect, but from there I don't know how to get/set the settings data for any of those three AOVs.

    Update: I noticed relevant constants in vprsrenderer.h called REDSHIFT_RENDERER_AOV_LAYER_FIRST and REDSHIFT_RENDERER_AOV_LAYER_LAST, but trying to access any data using these results in a traceback:

    aov_layer = vpost[c4d.REDSHIFT_RENDERER_AOV_LAYER_FIRST]
    
    Traceback (most recent call last):
      File "console", line 1, in <module>
    AttributeError: Parameter value not accessible (object unknown in Python)


  • Hi @jcooper, thanks for reaching out us ;)

    With regard to your question, the code below should help you getting things sorted out

    import c4d
    import c4d.documents
    import redshift
    
    def PrintAOVs(vpRS):
        aovs = redshift.RendererGetAOVs(vpRS)
        for aov in aovs:
            print("-----------------------------------------------------------")
            print("Name                  :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_NAME))
            print("Type                  :%d" % aov.GetParameter(c4d.REDSHIFT_AOV_TYPE))
            print("Enabled               :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_ENABLED) else "No"))
            print("Multi-Pass            :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_MULTIPASS_ENABLED) else "No"))
            print("Direct                :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_FILE_ENABLED) else "No"))
            print("Direct Path           :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_FILE_PATH))
            #print("Direct Effective Path :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_FILE_EFFECTIVE_PATH)) # Available from 2.6.44/3.0.05
    
    def main():
        doc = c4d.documents.GetActiveDocument()
        renderdata = doc.GetActiveRenderData()
    
        # Get the Redshift videoPost and render settings
        vprs = redshift.FindAddVideoPost(renderdata, redshift.VPrsrenderer)
        if vprs is None:
            return
    
        PrintAOVs(vprs)
    
    if __name__=='__main__':
        main()
    

    Last but not the least, I recommend to check also the Redshift official forum where it's likely that questions like yours could have been already answered.

    Best, R



  • Hi @jcooper, thanks for reaching out us ;)

    With regard to your question, the code below should help you getting things sorted out

    import c4d
    import c4d.documents
    import redshift
    
    def PrintAOVs(vpRS):
        aovs = redshift.RendererGetAOVs(vpRS)
        for aov in aovs:
            print("-----------------------------------------------------------")
            print("Name                  :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_NAME))
            print("Type                  :%d" % aov.GetParameter(c4d.REDSHIFT_AOV_TYPE))
            print("Enabled               :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_ENABLED) else "No"))
            print("Multi-Pass            :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_MULTIPASS_ENABLED) else "No"))
            print("Direct                :%s" % ("Yes" if aov.GetParameter(c4d.REDSHIFT_AOV_FILE_ENABLED) else "No"))
            print("Direct Path           :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_FILE_PATH))
            #print("Direct Effective Path :%s" % aov.GetParameter(c4d.REDSHIFT_AOV_FILE_EFFECTIVE_PATH)) # Available from 2.6.44/3.0.05
    
    def main():
        doc = c4d.documents.GetActiveDocument()
        renderdata = doc.GetActiveRenderData()
    
        # Get the Redshift videoPost and render settings
        vprs = redshift.FindAddVideoPost(renderdata, redshift.VPrsrenderer)
        if vprs is None:
            return
    
        PrintAOVs(vprs)
    
    if __name__=='__main__':
        main()
    

    Last but not the least, I recommend to check also the Redshift official forum where it's likely that questions like yours could have been already answered.

    Best, R



  • Wow, thanks for the example, @r_gigante.

    Was it always possible to import a redshift module? Or is there any info from which version on (C4D / Redshift) this is possible!?

    Thanks,
    Lasse