VTK  9.0.1
vtkOSPRayRendererNode.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOSPRayRendererNode.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
22 #ifndef vtkOSPRayRendererNode_h
23 #define vtkOSPRayRendererNode_h
24 
25 #include "vtkRendererNode.h"
26 #include "vtkRenderingRayTracingModule.h" // For export macro
27 #include <vector> // for ivars
28 
29 #include "RTWrapper/RTWrapper.h" // for handle types
30 
31 #ifdef VTKOSPRAY_ENABLE_DENOISER
32 #include <OpenImageDenoise/oidn.hpp> // for denoiser structures
33 #endif
34 
40 class vtkMatrix4x4;
41 class vtkOSPRayRendererNodeInternals;
43 class vtkRenderer;
44 
45 class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayRendererNode : public vtkRendererNode
46 {
47 public:
48  static vtkOSPRayRendererNode* New();
50  void PrintSelf(ostream& os, vtkIndent indent) override;
51 
55  virtual void Build(bool prepass) override;
56 
60  virtual void Render(bool prepass) override;
61 
65  virtual void Invalidate(bool prepass) override;
66 
70  virtual void WriteLayer(unsigned char* buffer, float* zbuffer, int buffx, int buffy, int layer);
71 
72  // state beyond rendering core...
73 
79  static vtkInformationIntegerKey* SAMPLES_PER_PIXEL();
80 
82 
85  static void SetSamplesPerPixel(int, vtkRenderer* renderer);
86  static int GetSamplesPerPixel(vtkRenderer* renderer);
88 
94  static vtkInformationDoubleKey* MAX_CONTRIBUTION();
95 
97 
100  static void SetMaxContribution(double, vtkRenderer* renderer);
101  static double GetMaxContribution(vtkRenderer* renderer);
103 
108  static vtkInformationIntegerKey* MAX_DEPTH();
109 
111 
114  static void SetMaxDepth(int, vtkRenderer* renderer);
115  static int GetMaxDepth(vtkRenderer* renderer);
117 
123  static vtkInformationDoubleKey* MIN_CONTRIBUTION();
124 
126 
129  static void SetMinContribution(double, vtkRenderer* renderer);
130  static double GetMinContribution(vtkRenderer* renderer);
132 
138  static vtkInformationIntegerKey* ROULETTE_DEPTH();
139 
141 
144  static void SetRouletteDepth(int, vtkRenderer* renderer);
145  static int GetRouletteDepth(vtkRenderer* renderer);
147 
152  static vtkInformationDoubleKey* VARIANCE_THRESHOLD();
153 
155 
158  static void SetVarianceThreshold(double, vtkRenderer* renderer);
159  static double GetVarianceThreshold(vtkRenderer* renderer);
161 
163 
168  static vtkInformationIntegerKey* MAX_FRAMES();
169  static void SetMaxFrames(int, vtkRenderer* renderer);
170  static int GetMaxFrames(vtkRenderer* renderer);
172 
174 
178  static vtkInformationStringKey* RENDERER_TYPE();
179  static void SetRendererType(std::string name, vtkRenderer* renderer);
180  static std::string GetRendererType(vtkRenderer* renderer);
182 
188  static vtkInformationIntegerKey* AMBIENT_SAMPLES();
190 
193  static void SetAmbientSamples(int, vtkRenderer* renderer);
194  static int GetAmbientSamples(vtkRenderer* renderer);
196 
201  static vtkInformationIntegerKey* COMPOSITE_ON_GL();
203 
206  static void SetCompositeOnGL(int, vtkRenderer* renderer);
207  static int GetCompositeOnGL(vtkRenderer* renderer);
209 
213  static vtkInformationDoubleVectorKey* NORTH_POLE();
215 
218  static void SetNorthPole(double*, vtkRenderer* renderer);
219  static double* GetNorthPole(vtkRenderer* renderer);
221 
225  static vtkInformationDoubleVectorKey* EAST_POLE();
227 
230  static void SetEastPole(double*, vtkRenderer* renderer);
231  static double* GetEastPole(vtkRenderer* renderer);
233 
237  static vtkInformationObjectBaseKey* MATERIAL_LIBRARY();
238 
240 
243  static void SetMaterialLibrary(vtkOSPRayMaterialLibrary*, vtkRenderer* renderer);
244  static vtkOSPRayMaterialLibrary* GetMaterialLibrary(vtkRenderer* renderer);
246 
250  static vtkInformationDoubleKey* VIEW_TIME();
252 
255  static void SetViewTime(double, vtkRenderer* renderer);
256  static double GetViewTime(vtkRenderer* renderer);
258 
262  static vtkInformationIntegerKey* TIME_CACHE_SIZE();
264 
267  static void SetTimeCacheSize(int, vtkRenderer* renderer);
268  static int GetTimeCacheSize(vtkRenderer* renderer);
270 
274  OSPModel GetOModel() { return this->OModel; }
275  OSPRenderer GetORenderer() { return this->ORenderer; }
276  void AddLight(OSPLight light) { this->Lights.push_back(light); }
277 
281  virtual void* GetBuffer() { return this->Buffer.data(); }
282 
286  virtual float* GetZBuffer() { return this->ZBuffer.data(); }
287 
288  // Get the last renderer color buffer as an OpenGL texture.
289  virtual int GetColorBufferTextureGL() { return this->ColorBufferTex; }
290 
291  // Get the last renderer depth buffer as an OpenGL texture.
292  virtual int GetDepthBufferTextureGL() { return this->DepthBufferTex; }
293 
294  // if you want to traverse your children in a specific order
295  // or way override this method
296  virtual void Traverse(int operation) override;
297 
301  static vtkOSPRayRendererNode* GetRendererNode(vtkViewNode*);
302  vtkRenderer* GetRenderer();
303  RTW::Backend* GetBackend();
304 
308  static vtkInformationIntegerKey* DENOISER_THRESHOLD();
310 
313  static void SetDenoiserThreshold(int, vtkRenderer* renderer);
314  static int GetDenoiserThreshold(vtkRenderer* renderer);
316 
318 
321  static vtkInformationIntegerKey* ENABLE_DENOISER();
325  static void SetEnableDenoiser(int, vtkRenderer* renderer);
326  static int GetEnableDenoiser(vtkRenderer* renderer);
328 
330 
337  static vtkInformationIntegerKey* BACKGROUND_MODE();
338  static void SetBackgroundMode(int, vtkRenderer* renderer);
339  static int GetBackgroundMode(vtkRenderer* renderer);
341 protected:
343  ~vtkOSPRayRendererNode() override;
344 
348  void Denoise();
349 
350  // internal structures
351 #ifdef VTKOSPRAY_ENABLE_DENOISER
352  std::vector<float> Buffer;
353 #else
354  std::vector<unsigned char> Buffer;
355 #endif
356  std::vector<float> ZBuffer;
357 
360 
365  int ImageX, ImageY;
366  std::vector<OSPLight> Lights;
371  std::vector<float> ODepthBuffer;
376  vtkOSPRayRendererNodeInternals* Internal;
378 
379 #ifdef VTKOSPRAY_ENABLE_DENOISER
380  oidn::DeviceRef DenoiserDevice;
381  oidn::FilterRef DenoiserFilter;
382 #endif
383  bool DenoiserDirty{ true };
384  std::vector<osp::vec4f> ColorBuffer;
385  std::vector<osp::vec3f> NormalBuffer;
386  std::vector<osp::vec3f> AlbedoBuffer;
387  std::vector<osp::vec4f> DenoisedBuffer;
388 
389 private:
391  void operator=(const vtkOSPRayRendererNode&) = delete;
392 };
393 
394 #endif
vtkOSPRayRendererNode::ImageY
int ImageY
Definition: vtkOSPRayRendererNode.h:365
vtkOSPRayRendererNode
links vtkRenderers to OSPRay
Definition: vtkOSPRayRendererNode.h:45
vtkOSPRayRendererNode::GetZBuffer
virtual float * GetZBuffer()
Get the last rendered ZBuffer.
Definition: vtkOSPRayRendererNode.h:286
OSPLight
#define OSPLight
Definition: RTWrapper.h:19
vtkOSPRayRendererNode::GetDepthBufferTextureGL
virtual int GetDepthBufferTextureGL()
Definition: vtkOSPRayRendererNode.h:292
vtkInformationStringKey
Key for string values in vtkInformation.
Definition: vtkInformationStringKey.h:33
vtkOSPRayRendererNode::GetOModel
OSPModel GetOModel()
Methods for other nodes to access.
Definition: vtkOSPRayRendererNode.h:274
vtkOSPRayRendererNode::ZBuffer
std::vector< float > ZBuffer
Definition: vtkOSPRayRendererNode.h:356
vtkOSPRayRendererNode::PreviousType
std::string PreviousType
Definition: vtkOSPRayRendererNode.h:377
vtkOSPRayRendererNode::OModel
OSPModel OModel
Definition: vtkOSPRayRendererNode.h:361
OSPData
#define OSPData
Definition: RTWrapper.h:17
vtkOSPRayRendererNode::OFrameBuffer
OSPFrameBuffer OFrameBuffer
Definition: vtkOSPRayRendererNode.h:363
vtkInformationDoubleKey
Key for double values in vtkInformation.
Definition: vtkInformationDoubleKey.h:31
vtkOSPRayRendererNode::ColorBuffer
std::vector< osp::vec4f > ColorBuffer
Definition: vtkOSPRayRendererNode.h:384
OSPFrameBuffer
#define OSPFrameBuffer
Definition: RTWrapper.h:25
vtkRendererNode::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkOSPRayRendererNode::Internal
vtkOSPRayRendererNodeInternals * Internal
Definition: vtkOSPRayRendererNode.h:376
vtkInformationObjectBaseKey
Key for vtkObjectBase values.
Definition: vtkInformationObjectBaseKey.h:33
vtkInformationIntegerKey
Key for integer values in vtkInformation.
Definition: vtkInformationIntegerKey.h:31
vtkRendererNode::New
static vtkRendererNode * New()
RTWrapper.h
vtkOSPRayRendererNode::Lights
std::vector< OSPLight > Lights
Definition: vtkOSPRayRendererNode.h:366
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
vtkViewNode::Render
virtual void Render(bool)
Makes calls to make self visible.
Definition: vtkViewNode.h:63
vtkOSPRayMaterialLibrary
a collection of materials for vtk apps to draw from
Definition: vtkOSPRayMaterialLibrary.h:39
vtkOSPRayRendererNode::DenoisedBuffer
std::vector< osp::vec4f > DenoisedBuffer
Definition: vtkOSPRayRendererNode.h:387
vtkOSPRayRendererNode::CompositeOnGL
bool CompositeOnGL
Definition: vtkOSPRayRendererNode.h:370
vtkOSPRayRendererNode::ColorBufferTex
int ColorBufferTex
Definition: vtkOSPRayRendererNode.h:358
vtkViewNode
a node within a VTK scene graph
Definition: vtkViewNode.h:37
vtkOSPRayRendererNode::ActorCount
int ActorCount
Definition: vtkOSPRayRendererNode.h:373
vtkOSPRayRendererNode::AccumulateTime
vtkMTimeType AccumulateTime
Definition: vtkOSPRayRendererNode.h:374
vtkX3D::name
@ name
Definition: vtkX3D.h:225
vtkRendererNode.h
vtkOSPRayRendererNode::AccumulateCount
int AccumulateCount
Definition: vtkOSPRayRendererNode.h:372
vtkOSPRayRendererNode::AddLight
void AddLight(OSPLight light)
Definition: vtkOSPRayRendererNode.h:276
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkOSPRayRendererNode::DepthBufferTex
int DepthBufferTex
Definition: vtkOSPRayRendererNode.h:359
OSPModel
#define OSPModel
Definition: RTWrapper.h:16
RTW::Backend
Definition: Backend.h:7
vtkInformationDoubleVectorKey
Key for double vector values.
Definition: vtkInformationDoubleVectorKey.h:31
vtkOSPRayRendererNode::ORenderer
OSPRenderer ORenderer
Definition: vtkOSPRayRendererNode.h:362
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:67
vtkRendererNode::Build
void Build(bool prepass) override
Build containers for our child nodes.
vtkOSPRayRendererNode::AlbedoBuffer
std::vector< osp::vec3f > AlbedoBuffer
Definition: vtkOSPRayRendererNode.h:386
vtkOSPRayRendererNode::AccumulateMatrix
vtkMatrix4x4 * AccumulateMatrix
Definition: vtkOSPRayRendererNode.h:375
OSPRenderer
#define OSPRenderer
Definition: RTWrapper.h:15
vtkOSPRayRendererNode::GetORenderer
OSPRenderer GetORenderer()
Definition: vtkOSPRayRendererNode.h:275
vtkOSPRayRendererNode::ODepthBuffer
std::vector< float > ODepthBuffer
Definition: vtkOSPRayRendererNode.h:371
vtkOSPRayRendererNode::GetColorBufferTextureGL
virtual int GetColorBufferTextureGL()
Definition: vtkOSPRayRendererNode.h:289
vtkOSPRayRendererNode::OLightArray
OSPData OLightArray
Definition: vtkOSPRayRendererNode.h:364
vtkOSPRayRendererNode::Buffer
std::vector< unsigned char > Buffer
Definition: vtkOSPRayRendererNode.h:354
vtkOSPRayRendererNode::GetBuffer
virtual void * GetBuffer()
Get the last rendered ColorBuffer.
Definition: vtkOSPRayRendererNode.h:281
vtkOSPRayRendererNode::ComputeDepth
bool ComputeDepth
Definition: vtkOSPRayRendererNode.h:368
vtkRendererNode
vtkViewNode specialized for vtkRenderers
Definition: vtkRendererNode.h:30
vtkViewNode::Invalidate
virtual void Invalidate(bool)
Clear any cached data.
Definition: vtkViewNode.h:68
vtkOSPRayRendererNode::NumActors
int NumActors
Definition: vtkOSPRayRendererNode.h:367
vtkOSPRayRendererNode::Accumulate
bool Accumulate
Definition: vtkOSPRayRendererNode.h:369
vtkOSPRayRendererNode::NormalBuffer
std::vector< osp::vec3f > NormalBuffer
Definition: vtkOSPRayRendererNode.h:385
vtkViewNode::Traverse
virtual void Traverse(int operation)
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:293