tahoma2d/doc/rendering_overview.md
luz paz de92e35ae2 FIx various typos
Found via `codespell -q 3 -S ./thirdparty,*.ts,./toonz,./stuff/doc/español -L inout,vertexes`
2022-01-20 18:45:55 -05:00

2.9 KiB

Rendering in Tahoma2D

Understanding the rendering code can be challenging in Tahoma2D

When a render, fast render, or preview command is given, it is handled in rendercommand.cpp

In rendercommand.cpp:

  • The file destination is verified.
  • The output or preview settings are retrieved
  • The scene background color is adjusted if the exported file type does not support transparency.
  • The fx stack for each frame is retrieved, including adding an additional over fx to lay the frame over the background color.
  • The process is then handed off to a movierenderer or a multimediarenderer.

A movierenderer exports standard image sequences or video formats. (movierenderer.cpp)

A multimediarenderer exports each layer of a frame individually for compositing elsewhere later. (multimediarenderer.cpp)

This document will focus on what happens with a movierenderer.

In movierenderer.cpp:

  • A movierenderer class receives the settings from the rendercommand
  • This class receives the list of frames to be rendered with their fx stack
  • Passes this information on to an Imp class which subclasses TrenderPort
    • The Imp communicates with the renderer and handles post rendering tasks, such as sending rendered frames to the level writer, creating the soundtrack, and adding a clapper board.
  • The Imp deletes old files if needed.
  • The Imp sets the output size based on the shrink setting from the output settings.
  • The Imp set up the Level Updater and Writer which will handled the frames when rendering is done.
  • Once all setup is done, the movierenderer calls startRendering.

The process is then handed off to trenderer.cpp

The TRenderer assigns a render id and tells the TRendererStartInvoker to emit start render.

A TRendererStartInvoker is a middle class that emits a startRender message to itself(?) and tells the renderer to begin (startRendering()).

In TRendererImp::startRendering():

  • The output area is setup
  • An Individual RenderTask is setup for each frame
  • The render tasks are launched

RenderTask::run() is where the frame renders begin.

  • An empty raster tile is retrieved
  • The time is computed in compute()
    • Compute is handled by TRasterFx::compute() - see below
  • A notification that the frame is complete is sent

in TRasterFx::compute()

  • The tile is adjusted to make sure that it is not at a fractional position
  • An alias string is built which contains the fx stack and parameters.
  • The tile and relevant info is then passed to a ResourceBuilder

The ResourceBuilder:

  • runs build
  • checks to see if the resource already exists
  • if it doesn't compute() is called
  • Compute calls doCompute on the fx
  • This fx will call compute on any needed info it needs to do it's processing.
  • This can continue for as many fx need info/data.
  • Once all fx for a frame have been processed, a final tile should be created and passed back.

The MovieRenderer::Imp will then get the final frames and tell the level writer to save them.