VTK  9.7.1
vtkOSPRayRendererNode.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
13 #ifndef vtkOSPRayRendererNode_h
14 #define vtkOSPRayRendererNode_h
15 
16 #include "RTWrapper/RTWrapper.h" // for handle types
17 #include "vtkInformation.h" // For deprecated function
18 #include "vtkOSPRayCache.h" // For common cache infrastructure
19 #include "vtkRenderer.h" // For deprecated function
20 #include "vtkRendererNode.h"
21 #include "vtkRenderingRayTracingModule.h" // For export macro
22 
23 #include <vector> // for ivars
24 
25 #ifdef VTKOSPRAY_ENABLE_DENOISER
26 #include <OpenImageDenoise/oidn.hpp> // for denoiser structures
27 #endif
28 
29 VTK_ABI_NAMESPACE_BEGIN
35 class vtkMatrix4x4;
36 class vtkOSPRayRendererNodeInternals;
38 
39 class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayRendererNode : public vtkRendererNode
40 {
41 public:
42  static vtkOSPRayRendererNode* New();
44  void PrintSelf(ostream& os, vtkIndent indent) override;
45 
49  void Build(bool prepass) override;
50 
54  void Render(bool prepass) override;
55 
59  void Invalidate(bool prepass) override;
60 
64  virtual void WriteLayer(unsigned char* buffer, float* zbuffer, int buffx, int buffy, int layer);
65 
66  // state beyond rendering core...
67 
74  static vtkInformationIntegerKey* SAMPLES_PER_PIXEL();
75 
77 
80  static void SetSamplesPerPixel(int, vtkRenderer* renderer);
81  static int GetSamplesPerPixel(vtkRenderer* renderer);
83 
90  static vtkInformationDoubleKey* MAX_CONTRIBUTION();
91 
93 
96  static void SetMaxContribution(double, vtkRenderer* renderer);
97  static double GetMaxContribution(vtkRenderer* renderer);
99 
105  static vtkInformationIntegerKey* MAX_DEPTH();
106 
108 
111  static void SetMaxDepth(int, vtkRenderer* renderer);
112  static int GetMaxDepth(vtkRenderer* renderer);
114 
121  static vtkInformationDoubleKey* MIN_CONTRIBUTION();
122 
124 
127  static void SetMinContribution(double, vtkRenderer* renderer);
128  static double GetMinContribution(vtkRenderer* renderer);
130 
137  static vtkInformationIntegerKey* ROULETTE_DEPTH();
138 
140 
143  static void SetRouletteDepth(int, vtkRenderer* renderer);
144  static int GetRouletteDepth(vtkRenderer* renderer);
146 
152  static vtkInformationDoubleKey* VARIANCE_THRESHOLD();
153 
155 
158  static void SetVarianceThreshold(double, vtkRenderer* renderer);
159  static double GetVarianceThreshold(vtkRenderer* renderer);
161 
168  static vtkInformationIntegerKey* MAX_FRAMES();
169 
171 
176  static void SetMaxFrames(int, vtkRenderer* renderer);
177  static int GetMaxFrames(vtkRenderer* renderer);
179 
185  static vtkInformationStringKey* RENDERER_TYPE();
187 
191  static void SetRendererType(std::string name, vtkRenderer* renderer);
192  static std::string GetRendererType(vtkRenderer* renderer);
194 
201  static vtkInformationIntegerKey* AMBIENT_SAMPLES();
203 
206  static void SetAmbientSamples(int, vtkRenderer* renderer);
207  static int GetAmbientSamples(vtkRenderer* renderer);
209 
215  static vtkInformationDoubleKey* VOLUME_SAMPLING_RATE();
217 
220  static void SetVolumeSamplingRate(double, vtkRenderer* renderer);
221  static double GetVolumeSamplingRate(vtkRenderer* renderer);
223 
229  static vtkInformationIntegerKey* COMPOSITE_ON_GL();
231 
234  static void SetCompositeOnGL(int, vtkRenderer* renderer);
235  static int GetCompositeOnGL(vtkRenderer* renderer);
237 
242  static vtkInformationDoubleVectorKey* NORTH_POLE();
244 
247  static void SetNorthPole(double*, vtkRenderer* renderer);
248  static double* GetNorthPole(vtkRenderer* renderer);
250 
255  static vtkInformationDoubleVectorKey* EAST_POLE();
257 
260  static void SetEastPole(double*, vtkRenderer* renderer);
261  static double* GetEastPole(vtkRenderer* renderer);
263 
268  static vtkInformationObjectBaseKey* MATERIAL_LIBRARY();
269 
271 
274  static void SetMaterialLibrary(vtkOSPRayMaterialLibrary*, vtkRenderer* renderer);
275  static vtkOSPRayMaterialLibrary* GetMaterialLibrary(vtkRenderer* renderer);
277 
282  static vtkInformationDoubleKey* VIEW_TIME();
284 
287  static void SetViewTime(double, vtkRenderer* renderer);
288  static double GetViewTime(vtkRenderer* renderer);
290 
295  static vtkInformationIntegerKey* TIME_CACHE_SIZE();
297 
300  static void SetTimeCacheSize(int, vtkRenderer* renderer);
301  static int GetTimeCacheSize(vtkRenderer* renderer);
303 
307  OSPRenderer GetORenderer() { return this->ORenderer; }
308  void AddLight(OSPLight light) { this->Lights.push_back(light); }
309 
313  virtual void* GetBuffer() { return this->Buffer.data(); }
314 
318  virtual float* GetZBuffer() { return this->ZBuffer.data(); }
319 
320  // Get the last renderer color buffer as an OpenGL texture.
321  virtual int GetColorBufferTextureGL() { return this->ColorBufferTex; }
322 
323  // Get the last renderer depth buffer as an OpenGL texture.
324  virtual int GetDepthBufferTextureGL() { return this->DepthBufferTex; }
325 
326  // if you want to traverse your children in a specific order
327  // or way override this method
328  void Traverse(int operation) override;
329 
333  static vtkOSPRayRendererNode* GetRendererNode(vtkViewNode*);
334  vtkRenderer* GetRenderer();
335  RTW::Backend* GetBackend();
336 
341  static vtkInformationIntegerKey* DENOISER_THRESHOLD();
343 
346  static void SetDenoiserThreshold(int, vtkRenderer* renderer);
347  static int GetDenoiserThreshold(vtkRenderer* renderer);
349 
351 
355  static vtkInformationIntegerKey* ENABLE_DENOISER();
359  static void SetEnableDenoiser(int, vtkRenderer* renderer);
360  static int GetEnableDenoiser(vtkRenderer* renderer);
362 
364  {
369  NumberOfMode
370  };
371 
380  static vtkInformationIntegerKey* BACKGROUND_MODE();
381 
383 
386  static void SetBackgroundMode(BackgroundMode, vtkRenderer* renderer);
387  static BackgroundMode GetBackgroundMode(vtkRenderer* renderer);
389 
390  std::vector<OSPGeometricModel> GeometricModels;
391  std::vector<OSPVolumetricModel> VolumetricModels;
392  std::vector<OSPInstance> Instances;
393 
394 protected:
396  ~vtkOSPRayRendererNode() override;
397 
401  void Denoise();
402 
403  // internal structures
404  std::vector<float> Buffer;
405  std::vector<float> ZBuffer;
406 
409 
410  OSPWorld OWorld{ nullptr };
411  OSPRenderer ORenderer{ nullptr };
412  OSPFrameBuffer OFrameBuffer{ nullptr };
413  OSPCamera OCamera{ nullptr };
414  int ImageX, ImageY;
415  std::vector<OSPLight> Lights;
420  bool UseBackplate{ true }; // use bgcolor for pathtracer or use bgcolor light
421  std::vector<float> ODepthBuffer;
426  vtkOSPRayRendererNodeInternals* Internal;
428 
429 #ifdef VTKOSPRAY_ENABLE_DENOISER
430  oidn::DeviceRef DenoiserDevice;
431  oidn::FilterRef DenoiserFilter;
432 #endif
433  bool DenoiserDirty{ true };
434  std::vector<osp::vec4f> ColorBuffer;
435  std::vector<osp::vec3f> NormalBuffer;
436  std::vector<osp::vec3f> AlbedoBuffer;
437  std::vector<osp::vec4f> DenoisedBuffer;
438 
440  std::set<OSPWorld> CacheContents;
441 
442 private:
444  void operator=(const vtkOSPRayRendererNode&) = delete;
445 };
446 
447 VTK_ABI_NAMESPACE_END
448 #endif
#define OSPLight
Definition: RTWrapper.h:25
std::vector< osp::vec4f > DenoisedBuffer
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:31
virtual int GetColorBufferTextureGL()
std::vector< osp::vec3f > NormalBuffer
std::set< OSPWorld > CacheContents
virtual int GetDepthBufferTextureGL()
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:318
vtkOSPRayRendererNodeInternals * Internal
vtkOSPRayCache< vtkOSPRayCacheItemObject > * Cache
virtual void * GetBuffer()
Get the last rendered ColorBuffer.
abstract specification for renderers
Definition: vtkRenderer.h:63
virtual float * GetZBuffer()
Get the last rendered ZBuffer.
Key for string values in vtkInformation.
a collection of materials for OSPRay-based rendering
#define OSPCamera
Definition: RTWrapper.h:24
void AddLight(OSPLight light)
Key for double vector values.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a simple class to control print indentation
Definition: vtkIndent.h:28
Key for integer values in vtkInformation.
Key for vtkObjectBase values.
std::vector< OSPGeometricModel > GeometricModels
std::vector< OSPLight > Lights
#define OSPFrameBuffer
Definition: RTWrapper.h:31
std::vector< osp::vec3f > AlbedoBuffer
virtual void Render(bool)
Makes calls to make self visible.
Definition: vtkViewNode.h:56
std::vector< OSPVolumetricModel > VolumetricModels
vtkViewNode specialized for vtkRenderers
#define OSPWorld
Definition: RTWrapper.h:20
OSPRenderer GetORenderer()
Methods for other nodes to access.
virtual void Invalidate(bool)
Clear any cached data.
Definition: vtkViewNode.h:61
std::vector< float > ODepthBuffer
std::vector< OSPInstance > Instances
static vtkRendererNode * New()
Key for double values in vtkInformation.
virtual void Traverse(int operation)
#define OSPRenderer
Definition: RTWrapper.h:19
std::vector< osp::vec4f > ColorBuffer
void Build(bool prepass) override
Build containers for our child nodes.
std::vector< float > Buffer
links vtkRenderers to OSPRay
a node within a VTK scene graph
Definition: vtkViewNode.h:30
std::vector< float > ZBuffer