Designs
- Show closed items
Activity
-
Newest first Oldest first
-
Show all activity Show comments only Show history only
- Author Developer
VTKH: Render --> Plot ?
- Data members:
- vtkm::rendering::CanvasRayTracer Canvas
- vtkm::rendering::Camera
- Width, Height, Bounds
- FG and BG colors
- Image name
- Other Methods
- Set World/Scene Annotations
- Set Shading
- SetComments
Scene
- Data Members:
- list vtkh::Renderer*
- vector vtkh::Render
Renderer (e.g., RayTracer, VolumeRenderer, etc)
- Data Members:
- Input, Output
- Compositor
- Mapper
- vector vtkh::Render Renders
Code:
- vtkm::rendering::Camera camera;
- vtkh::Render = vtkh::MakeRender(w,h, bounds, camera, imageName);
- vtkh::RayTracer tracer;
-
- tracer.SetInput()
-
- tracer.SetField()
- vtkh::Scene scene;
-
- scene.AddRender(render);
-
- scene.AddRenderer(&tracer);
-
- scene.Render();
Edited by Dave Pugmire - Author Developer
vtkm::rendering::Actor
- DataMembers:
-
- Cells, coords, field, colortable
vtkm::rendering::Scene
- vector Actors;
vtkm::rendering::View3D
- vtkm::rendering::Scene
- vtkm::rendering::Camera
- vtkm::rendering::Mapper *
- vtkm::rendering::Canvas *
- vtkm::rendering::WorldAnnotator *
- vtkm::rendering::TextAnnotation
Code:
- vtkm::rendering::Camera camera;
- vtkm::Actor actor(ds, field, colorTable);
- vtkm::rendering::Scene scene
-
- scene.AddActor(actor);
- vtkm::rendering::CanvasRayTracer canvas;
- vtkm::rendering::MapperRayTracer mapper;
- vtkm::rendering::View3D view(scene, mapper, canvas, camera, bg);
-
- view.Paint();
-
- view.SaveAs("output.png");
Edited by Dave Pugmire - Author Developer
Tasks: If Renderer::Mapper can move to Render, then a Render is close to a vtkm::View
Moving Renderer::Mapper to vtkh::Render:
Renderer::DoExecute() -- needs to get the mapper. --DoExecute: pass in Render (View)
VTKM callstack:
- View::Paint()
-
- this->GetCanvas().Clear()
-
- this->RenderAnnotations()
-
- this->GetScene().Render(this->GetMapper(), this->GetCanvas(), this->GetCamera())
-
-
- Scene::Render(mapper, canvas, camera)
-
-
-
-
- for (auto actor : this->Actors)
-
-
-
-
-
-
- actor.Render(mapper, canvas, camera)
-
-
-
-
-
-
-
-
- mapper.SetCanvas(canvas)
-
-
-
-
-
-
-
-
-
- mapper.SetActiveColorTable(this->colortable)
-
-
-
-
-
-
-
-
-
- mapper.RenderCells(...)
-
-
-
-
VTKH callstack:
- Scene::Render()
-
- for (render : this->Renders)
-
-
- render.GetCanvas.Clear()
-
-
-
- for (renderer : this->Renderers)
-
-
-
-
- renderer->SetComposite(...)
-
-
-
-
-
- renderer->SetRenders({render})
-
-
-
-
-
- renderer->Update() / renderer->DoExecute()
-
-
-
-
-
-
- for (ds : this->Input->GetPartitions())
-
-
-
-
-
-
-
-
- for (render : this->Renders)
-
-
-
-
-
-
-
-
-
-
- this->SetShading(render->GetShading()) ....
-
-
-
-
-
-
-
-
-
-
-
-
- this->Mapper->SetActiveColorTable(this->ColorTable)
-
-
-
-
-
-
-
-
-
-
-
-
-
- camera = render.GetCamera()
-
-
-
-
-
-
-
-
-
-
-
-
-
- canvas = render.GetCanvas()
-
-
-
-
-
-
-
-
-
-
-
-
-
- this->Mapper->SetCanvas(canvas)
-
-
-
-
-
-
-
-
-
-
-
-
-
- this->RenderCells(ds, this->ColorTable, camera, this->Range)
-
-
-
-
-
-
-
-
-
- renderer: this->Composite()
-
-
Edited by Dave Pugmire - Author Developer
Updates: Most of the functionality of the vtkm::rendering::Actor was inside of vtkh::Renderer. vtkh::Renderer now contains an Actor. All of the access to datasets, field name, colortable is held in the Actor.
Right now the Mapper is in vtkh::Renderer as well. Having it in the Renderer might make sense.
Next steps:
- Author Developer
Notes from discussion with @mmathai
- Render ---> Plot: DONE
- Actor and Mapper can be together : DONE (removed Mapper from Plot)
- Actor needs materials
- Scene: List of Render/Plot, Lights, global stuff (background/env map/skybox)
- Render/Plot: has a list of Renderers.
- Renderer: Actor + Mapper. std::vector<std::pair<Actor, Mapper>>
Future:
- custom mappers that can be easily plugged into the system.
- Actor access to more things (e.g., computed normals, etc)
-
- be able to set properties in the Actor that can go to the mapper.
-
- group the properties. Normal: field, Emmisive: field, .....
- How to pass global information into the mapper (lights, background, etc).
-
- Fixed API might be ok: SetLights(), SetSkyBox(), etc.
Edited by Dave Pugmire - Author Developer
Post Actor changes:
VTKH: Render --> Plot ?
- Data members:
- vtkm::rendering::CanvasRayTracer Canvas
- vtkm::rendering::Camera
- Width, Height, Bounds
- FG and BG colors
- Image name
- Other Methods
- Set World/Scene Annotations
- Set Shading
- SetComments
Scene
- Data Members:
- list vtkh::Renderer*
- vector vtkh::Render
Renderer (e.g., RayTracer, VolumeRenderer, etc)
- Data Members:
-
- Actor
-
- Compositor
-
- Mapper
-
- vector vtkh::Render Renders
Code:
- vtkm::rendering::Camera camera;
- vtkh::Render = vtkh::MakeRender(w,h, bounds, camera, imageName);
- vtkh::RayTracer tracer;
-
- tracer.SetInput()
-
- tracer.SetField()
- vtkh::Scene scene;
-
- scene.AddRender(render);
-
- scene.AddRenderer(&tracer);
-
- scene.Render();
- Author Developer
Scene::Render()
- Cinema batch is on this->Renders
- foreach r : this->Renders
-
- foreach R : this->Renderers
-
-
- R.Update()
-
Render --> Plot
Scene::Render()
- batch on this->Plots.size()
-
assume batchsize is 1.
- for plot in this->Plots :
-
- plot.GetCanvas().Clear();
-
- numRenderers / opaqueRenderers = this->Renderers.size()
-
- //opaque pass
-
- for renderer in opaqueRenderers :
-
-
- if last rendererer: renderer->SetDoComposite(true); else false;
-
-
-
- renderer->SetPlots(current_batch)
-
-
-
- renderer->Update()
-
-
-
- renderer->ClearPlots()
-
-
- if (this->HasVolume)
-
-
- synch_depths if needed.
-
-
-
- renderer->SetDoComposiste(true);
-
-
-
- renderer->SetPlots(current_batch)
-
-
-
- renderer->Update()
-
-
- if (do_once)
-
-
- for r : this->Renderers
-
-
-
-
- Add ranges (r->GetScalarRange)
-
-
-
-
-
- Add field names
-
-
-
-
-
- Add colortables
-
-
-
- //render screen annotations.
-
- foreach plot : current_batch
-
-
- plot.RenderWorldAnnotations()
-
-
-
- plot.RenderScreenAnnotations()
-
-
-
- plot.RenderBackground()
-
-
-
- plot.Save()
-
Edited by Dave Pugmire - Author Developer
cinema: image saving is the issue...
- Author Developer
Summary of changes.
Current interface:
vtkm::cont::PartitionedDataSet input = ...
vtkm::rendering::Camera camera;
//set camera parameters
vtkm::rendering::Actor(input, fieldName, colorTable);
vtkm::rendering::Scene scene;
vtkm::rendering::CanvasRayTracer canvas(512,512);
scene.AddActor(actor);
vtkm::rendering::View3D view(scene, vtkm::rendering::MapperVolume(), canvas, camera, bg);
view.Paint();
New interface:
vtkm::cont::PartitionedDataSet input = ...
vtkm::rendering::Camera camera;
//set camera parameters
vtkm::rendering::Actor actor(pds, fieldName, colorTable);
vtkh::VolumeRenderer tracer;
tracer.SetInput(actor);
vtkh::Plot plot = vtkh::MakePlot(512, 512, camera, pds, imgName);
plot.AddRenderer(&tracer);
vtkh::Scene scene;
scene.AddPlot(plot);
scene.Render();
Edited by Dave Pugmire - Author Developer
VTKh classes:
vtkm::rendering::Actor
- Contains
vtkm::cont::PartitionedDataSet
vtkm::rendering::vtkh::Scene
std::vector<vtkm::rendering::vtkh::Plot> Plots;
void Render();
vtkm::rendering::vtkh::Plot
- Camera
std::vector<vtkm::rendering::vtkh::Renderer*> Renderers;
vtkm::rendering::CanvasRayTracer
- Annotations
vtkm::rendering::vtkh::Renderer
vtkm::rendering::Actor Actor;
vtkm::rendering::Mapper Mapper
vtkm::rendering::vtkh::Compositor Compositor
Edited by Dave Pugmire - Contains
- Author Developer
VTKm classes:
vtkm::rendering::Scene
std::vector<vtkm::rendering::Actor> Actors;
vtkm::rendering::View
vtkm::rendering::Scene
vtkm::rendering::Mapper
vtkm::rendering::Canvas
vtkm::rendering::WorldAnnotator
vtkm::rendering::TextAnnotation
vtkm::rendering::Camera
void Paint();
Edited by Dave Pugmire - Author Developer
Discussion at Hackathon: Intended audience. VTK-m is not going to be a high-end renderer or have all the complexity to replace the renderers in ParaView, VisIt, etc. To do this we need to place bounds on the goals of the rendering system. We envision three different use cases:
- Provide a way to render the results created using VTK-m.
- Tested for research into GPU-accelerated rendering
- Renderer for Ascent who want a dependency-free renderer.
As such this will limit the scope of the rendering system.
Two main tasks: Good class names (API), and better support for multi-pass rendering.
Edited by Dave Pugmire - Author Developer
ANARI:
ANARIActor
CellSet, Coordinates, Field
ANARIMapper
Actor, colorTable, Name
ANARIScene
World
std::vector of {Mapper, ShowFlag}
Camera
- pos, dir, up, etc.
Frame
- image size, camera, renderer (options),
Run it:
anari_cpp::render(d, frame);
Question: What is the setAndRelease()? Called on a world and given a mapper. World had a named mapper. the 1D array means the world can have a list of mappers with that name.
Edited by Dave Pugmire - Author Developer
Volume example
- world = ANARIWorld();
- actor = ANARIActor(dataset, field);
- volMapper = ANARIVolumeMapper(actor);
- world.AddMapper(volMapper);
- camera = ANARICamera(pos, dir, up, etc);
- frame = ANARIFrame(camera, imgSize, world, etc);
- ANARIrender(frame);
Edited by Dave Pugmire - Author Developer
Multi-mapper example
- world = ANARIWorld();
- scene = ANARIScene(world);
- scene.AddMapper(ANARIVolumeMapper(actor1));
- scene.AddMapper(ANARISurfaceMapper(actor2));
- camera = ANARICamera(pos, dir, up, etc);
- frame = ANARIFrame(camera, imgSize, world, etc);
- ANARIrender(frame);
Edited by Dave Pugmire - Author Developer
Frame:
- Canvas
- Camera
- Renderer (options)
- World
-
- Instance/Group
-
-
- Surface
-
-
-
- Volume
-
-
-
- Light
-
Edited by Dave Pugmire - Author Developer
std::vector<Frame> frames
- foreach f in frames
-
- f.render()
-
-
- SM = world.sortmappers (surface, volume, view, etc) also multi-pass.
-
-
-
- foreach m in SM
-
-
-
-
- m.RenderCells (pass in world to get e.g., lights, other fields, etc)
-
-
-
-
-
- composite if needed
-
-
-
-
- render annotations (keep this as independent as possible (let Anari do everything else))
-
Edited by Dave Pugmire