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:
Cinema 4D Version: 13
Platform: Windows ; Mac OSX ;
Language(s) : C++ ;
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,
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 :-).
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.
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.
RENDERRESULT ExternalRenderer::Execute(BaseVideoPost* node,
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;
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);
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.