Render into picture viewer without VolumeData



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 26/01/2012 at 03:15, xxxxxxxx wrote:

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

    ---------
    Hi all,

    As far as I know it's is possible to create a VideoPostData that is an external renderer and calls VolumeData::SkipRenderingProcess() in VideoPostData::Execute() at the stages VIDEOPOSTCALL_RENDER and VIDEOPOSTCALL_INNER. I have done some experiments and everything seems to work as advertised.

    Unfortunately then, the C4D renderer has already created a duplicate of the document and built a VolumeData including the render geometry and acceleration structures. As I don't need that data it just uses up memory.

    -> Is there a way to be able to render using the picture viewer, but without the creation of the render geometry?

    Many thanks in advance. Cheers,
    Marcus



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 26/01/2012 at 03:33, xxxxxxxx wrote:

    The docs say this:

    VIDEOPOSTCALL_RENDER - Render precalculation. VolumeData not yet completly accessible.

    My interpretation is that if SkipRenderProcess() is called at VIDEOPOSTCALL_RENDER, this will prevent the VolumeData from being built. I'm relying on that behaviour for one of my plugins, but maybe I should check this again :-).

    Best regards
    /Filip



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 26/01/2012 at 16:44, xxxxxxxx wrote:

    Thanks for the reply. That's what I thought first, too. But it shows, that the memory consumpton goes up quite a bit. So I had a closer look:

    VolumeData::GetObjCount() already returns the correct number of objects, accumulating the polygon count, also returns the total number and you can even do ray intersection tests.

    I think the only thing that is not done is the setup of the shaders, but I may be wrong here, too.

    Cheers,
    Marcus



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 26/01/2012 at 21:33, xxxxxxxx wrote:

    Ok, I can answer my question myself: The code below "renders" a checker board into the picture viewer without creating a VolumeData.

    By the way, the document pointed to by "vps->doc" is a copy of the scene document.

    Cheers,
    Marcus

      
    RENDERRESULT ExternalRenderer::Execute(BaseVideoPost*   node,   
                                           VideoPostStruct* vps)   
    {   
        if (vps && vps->render)   
        {   
            Render* render = vps->render;   
            VPBuffer* buffer= render->GetBuffer(VPBUFFER_RGBA, 0);   
            LONG width = buffer->GetBw();   
            LONG height = buffer->GetBh();   
            SReal *lineBuffer = bNew SReal[width * 4];   
            for (LONG row = 0; row < height; ++row)   
            {   
                if (row % 10 == 0)   
                {   
                   for (LONG col = 0; col < width; ++col)   
                   {   
                        if (((row / 10) & 1) ^ ((col / 10) & 1))   
                        {   
                            lineBuffer[col*4]   = 0.55;   
                            lineBuffer[col*4+1] = 0.55;   
                            lineBuffer[col*4+2] = 0.55;   
                            lineBuffer[col*4+3] = 0.55;   
                        }   
                        else   
                        {   
                            lineBuffer[col*4]   = 0.45;   
                            lineBuffer[col*4+1] = 0.45;   
                            lineBuffer[col*4+2] = 0.45;   
                            lineBuffer[col*4+3] = 0.45;   
                        }   
                   }   
                }   
                buffer->SetLine(0, row, width, lineBuffer, 32, false);   
                GeSleep(10);   
            }   
            bDelete(lineBuffer);   
            return RENDERRESULT_USERBREAK;   
        }   
      
        return RENDERRESULT_OK;   
    }   
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/01/2012 at 01:24, xxxxxxxx wrote:

    Unfortunately animation rendering doesn't relly work with this method since we stop during the first frame. -> All the nice animation functionality of the picture viewer becomes unavailable :(

    If someone knows a better way, please let me know.

    Thanks,
    Marcus


Log in to reply