[Bf-cycles] Render to memory buffer

Lukas Stockner lukas.stockner at freenet.de
Sat Mar 17 19:31:34 CET 2018


Answers inline.

On 17.03.2018 18:10, Guillaume Chéreau wrote:
> On Sat, Mar 17, 2018 at 11:01 PM, Lukas Stockner
> <lukas.stockner at freenet.de> wrote:
>> - Are you fine with getting a raw float buffer?
> Yes that's fine, I can easily do the conversion to RGB.
Okay, that makes things easier because you can just process the 
RenderBuffers directly and don't have to mess around with the 
film_convert kernels.
>> - Are you using interactive rendering?
> Yes, I am looking for the same kind of rendering as in Blender, where
> we start we a low res version and progressively improve it, if the
> user changes the scene of the camera position, the rendering is reset.
> It works more or less out of the box with the session->draw method,
> but it is using OpenGL to do the rendering directly on screen. What -I
> think- I want is to get the raw data and add put it into a dynamic
> texture that I can integrate into goxel rendering.
>
>> - Do you want to support multiple devices?
> Not sure what that means.  I only want to render on screen, and also
> into a file for export.
I was referring to the MultiDevice functionality, which is currently 
used for rendering on multiple GPUs at once (and might in the future be 
used for network rendering). The problem with that is that each device 
has its own memory space, so you can't just write all tiles into a 
single buffer - you'd have to allocate per-tile buffers, copy them back 
to the host and then combine them there (which is what Blender does when 
doing a non-interactve render).

Technically it is possible to allocate a single large buffer (on every 
device), have them write into it and then copy the right parts from the 
right devices to assemble it directly without moving stuff around, but 
since you can only copy back linear memory regions you'd have to modify 
tiling to split the image into horizontal slices (one slice per device). 
In fact, that is what Cycles currently does for viewport previews since 
OpenGL drawing also works better that way.
>> The easiest approaches I can think of right now are either using a shared
>> RenderBuffer for all tiles (already sort of implemented in session.cpp) or
>> just copying the pixels from their buffers into your shared buffer similar
>> to how Cycles for Blender does it in
>> BlenderSession::do_write_update_render_result.
> OK thanks for the tips, I will have a look at that.
> - Gui
> _______________________________________________
> Bf-cycles mailing list
> Bf-cycles at blender.org
> https://lists.blender.org/mailman/listinfo/bf-cycles



More information about the Bf-cycles mailing list