[SOLVED]Create new renderdata



  • On 17/01/2017 at 13:53, xxxxxxxx wrote:

    Is there a way for creating completly new RenderData?
    For exemple set render engine to Hardware seem to broke the UI since we got the interface of the standar render but we don't have parameter for hardware.
    Also I'm not able to use some preset or set a custom size.

    import c4d
      
    def main() :
        rd = c4d.documents.RenderData()
        rd[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PREVIEWHARDWARE #Not working ?
      
        rd[c4d.RDATA_FRAMESEQUENCE] = 2
        rd[c4d.RDATA_PRESET] = c4d.RDATA_PRESET_HDV1080_25#Not working
        rd[c4d.RDATA_XRES_VIRTUAL] = 1920.0#Not working
        rd[c4d.RDATA_YRES_VIRTUAL] = 1080.0#Not working
        rd[c4d.RDATA_FRAMERATE] = 25.0
        rd[c4d.VP_PREVIEWHARDWARE_ENHANCEDOPENGL] = True
        rd[c4d.VP_PREVIEWHARDWARE_SHADOW] = True
        rd[c4d.VP_PREVIEWHARDWARE_POSTEFFECT] = True
        rd[c4d.VP_PREVIEWHARDWARE_NOISE] = True
        rd[c4d.VP_PREVIEWHARDWARE_ANTIALIASING] = 32
        rd[c4d.RDATA_PATH] = "test"
        rd[c4d.RDATA_FORMAT] = c4d.FILTER_JPG
      
        c4d.StopAllThreads()
        doc.InsertRenderData(rd)
        doc.SetActiveRenderData(rd)
        c4d.EventAdd()
      
    if __name__=='__main__':
        main()
    


  • On 18/01/2017 at 08:56, xxxxxxxx wrote:

    Hi,

    let's go through this one by one:

    rd[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PREVIEWHARDWARE #Not working ?
    

    The actual switching of the engine (in the sense of having the combo box change to the HW renderer) should work this way (at least it does here). The problem is, that you still need to manually add the actual video post effect "Hardware OpenGL" to make it work and have the relevant parameters.
    I suggest to take a look at the RenderData manual in our C++ documentation. Among others you can find a code snippet that actually switches to the HW preview render.

    rd[c4d.RDATA_PRESET] = c4d.RDATA_PRESET_HDV1080_25 #Not working
    

    Unfortunately the presets can not be used in Python (in C++ there might be workarounds using certain messages). The resolution preset does not get stored, instead certain parameters get modified, when the user interacts with the preset menu.

    rd[c4d.RDATA_XRES_VIRTUAL] = 1920.0#Not working
    rd[c4d.RDATA_YRES_VIRTUAL] = 1080.0#Not working
    

    Here we have two options. Either take a look at the above linked manual page and set the resolution via RDATA_XRES and RDATA_YRES IDs directly, like so:

    rd[c4d.RDATA_XRES] = 1920.0
    rd[c4d.RDATA_YRES] = 1080.0
    

    Or, if you want to stick to those virtual IDs (for whatever reason), then you need to fake user interaction in order to make it work. Like so:

    rd.SetParameter(c4d.RDATA_XRES_VIRTUAL, 1920, c4d.DESCFLAGS_SET_USERINTERACTION)
    rd.SetParameter(c4d.RDATA_YRES_VIRTUAL, 1080, c4d.DESCFLAGS_SET_USERINTERACTION)
    


  • On 18/01/2017 at 12:00, xxxxxxxx wrote:

    Thanks you a lot Andreas.
    I still don't have the reflex to check C++ but I should.

    Here is the correct python code if any other people want it

    import c4d
      
    def main() :
        rd = c4d.documents.RenderData()
        rd_bc = rd.GetDataInstance()
        
        rd_bc[c4d.RDATA_RENDERENGINE] = c4d.RDATA_RENDERENGINE_PREVIEWHARDWARE
        
        hardware_vp = c4d.BaseList2D(c4d.RDATA_RENDERENGINE_PREVIEWHARDWARE)
        hardware_vp[c4d.VP_PREVIEWHARDWARE_ENHANCEDOPENGL] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_SHADOW] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_POSTEFFECT] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_NOISE] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_TESSELLATION] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_SSAO] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_REFLECTIONS] = True
        hardware_vp[c4d.VP_PREVIEWHARDWARE_ANTIALIASING] = 32
        rd.InsertVideoPost(hardware_vp)
        
        rd_bc[c4d.RDATA_XRES] = 1920
        rd_bc[c4d.RDATA_YRES]  = 1080
        rd_bc[c4d.RDATA_FRAMERATE] = 25
        rd_bc[c4d.RDATA_FORMAT] = c4d.FILTER_JPG
        rd_bc[c4d.RDATA_PATH] = "test"
        
        c4d.StopAllThreads()
        doc.InsertRenderDataLast(rd)
        doc.SetActiveRenderData(rd)
        c4d.EventAdd()
        
    if __name__=='__main__':
        main()
    

Log in to reply