Team Render Questions [SOLVED]



  • On 19/11/2015 at 06:29, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   16+ 
    Platform:   Windows  ; Mac  ;  Mac OSX  ; 
    Language(s) :     C++  ;

    ---------
    ok, killed that other thread again because I noticed that if I first call "Save Project with all assets" and then do the team rendering it works fine. I was under the assumption that calling Team Render to PV would automatically call an asset saving into a temporary folder or something like that. Apparently that's not the case.

    Anyway, I have another question. When I Team Render to the Picture Viewer with 2 machines, I noticed that if one machine finishes its frame range and is assigned a new range, that there is a pre-roll stage of all previous frames.

    So if it is assigned frames 75-90, my scene hook::Execute function is called for all 74 previous frames.
    How can I detect these pre-roll frames so I can tell my scene hook not to do anything? Alternatively knowing the frame range itself would already do.

    Thanks!



  • On 20/11/2015 at 04:19, xxxxxxxx wrote:

    Hello,

    actually, prerolling in this Team Render context is no different than prerolling in any other context. When you render locally a frame or frame sequence that does not start with frame 0, it will preroll. It seems there are not special flags or anything else given to the Execute() function to indicate this this is a preroll call.

    To get the assigned frame range on a client you have to send a message to the server requesting that range. This can look like this:

      
    NetRenderDocumentContext* context = doc->GetNetRenderDocumentContext();  
    if(context)  
    {  
     BaseContainer msg(MSG_NETRENDER_ANIMATION_RANGE), result;  
     msg.SetUuid(CONTAINER_JOBUUID, context->_renderJob->GetUuid());  
               
      if(NetGeSyncMessage(context->_service, context->_renderJob->GetServerUuid(), msg, result) == MESSAGERESULT_OK)  
      {  
          if(result.GetBool(CONTAINER_RANGE_AVAILABLE))  
          {  
              const Int32 rangeStart = result.GetInt32(CONTAINER_RANGE_FROM);  
              const Int32 rangeEnd = result.GetInt32(CONTAINER_RANGE_TO);  
      
              GePrint("Range: " + String::IntToString(rangeStart) + ":" + String::IntToString(rangeEnd));  
          }  
      }  
    }  
    

    best wishes,
    Sebastian



  • On 20/11/2015 at 10:26, xxxxxxxx wrote:

    Thank you Sebastian! It would have taken me quite some time to figure out this one on my own. Also it helps me diving into the net lib conceptually.

    Cheers


Log in to reply