Texture file sequence, get exact filename per frame
-
Hi!
For a render engine plugin, I would like to support animations (file sequences) as textures. In the bitmap shader, there are settings for animation, and c4d the automatically parses the texture file name to identify the frame number part which is modified per frame to render the appropriate texture.Is there anyway to get, for a given Bitmap shader and timepoint (BaseTime or frame), the exact texture name that c4d would load for rendering?
We could try to reverse engineer this of course, but it would be really convenient and more robust if there was a function for accessing this.
Thanks!
/Filip -
Hi,
I am not sure if that helps, but
BaseShader::GetBitmapreturns the correct bitmap. I do not have any image sequences lying around here, but I would assume it also does work there. The interpolation offset is determined by the document time of theBaseDocumentyou are passing toBaseShader::InitRender. As a Python example (I left out all the ifs and whens), the first material needs to be a standard material with some kind of movie in the color channel. Scrubbing the timeline and executing the script will cause it to open the corresponding frame of that movie in the Picture Viewer.You could then try to get the filename from that
BaseBitmap. BASEBITMAP_DATA might be helpful in that context.Cheers,
zipitimport c4d def main(): """ """ material = doc.GetFirstMaterial() shader = material[c4d.MATERIAL_COLOR_SHADER] irs = c4d.modules.render.InitRenderStruct(doc) shader.InitRender(irs) bitmap = shader.GetBitmap() shader.FreeRender() c4d.bitmaps.ShowBitmap(bitmap) if __name__=='__main__': main() -
Thanks for the input zipit!
That is promising, but unfortunately does not quite help in my case as I really need the filename rather than the bitmap itself. The rendering in my plugin is also, for various good reasons, not guaranteed to happen within a InitRender()/FreeRender() context.
/Filip
-
Hi,
jeah, I already suspected something like that; that is why included the link to
BASEBITMAP_DATA. WithBaseBitmap::GetDatayou can access these attribute, including several frame related attributes. The whole thing is flagged asprivatein both the C++ and Python docs, which usually means that things won't be as easy as one might think, which is why I did not really bother to go down that rabbit hole.Not quite sure about the
InitRenderpart. If you want to interpret aXbitmapBaseShaderlike Cinema would, you will have to sample it, i,e. init that shader for rendering. Everything else would be an eating the cake without eating it scenraio.Cheers,
zipit -
That
BASEBITMAP_DATAstuff is related to rendering information when a bitmap is displayed in the Picture Viewer (BaseBitmap Manual). -
@PluginStudent said in Texture file sequence, get exact filename per frame:
That
BASEBITMAP_DATAstuff is related to rendering information when a bitmap is displayed in the Picture Viewer (BaseBitmap Manual).Oh, I did not know that. Thanks for the link.
-
Hi @Filip , thanks for reaching out us.
With regard to your question, I confirm there's no available method in our API that provides you with the exact name of the bitmap used at a certain frame.
The information about which exact bitmap to fetch from the sequence of textures set in the BitmapShader, is instead calculated programmatically given the data stored inBITMAPSHADER_TIMING_FROM BITMAPSHADER_TIMING_TO BITMAPSHADER_TIMING_FPS BITMAPSHADER_TIMING_TIMING BITMAPSHADER_TIMING_MODE BITMAPSHADER_TIMING_LOOPS BITMAPSHADER_TIMING_RANGEFROM BITMAPSHADER_TIMING_RANGETOBest, R
-
@r_gigante Thanks for confirming. We will try to reverse engineer the filenames based on that data.
Cheers
/Filip