VTK  9.2.6
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 =========================================================================*/
25 #ifndef vtkOSPRayRendererNode_h
26 #define vtkOSPRayRendererNode_h
27 
28 #include "RTWrapper/RTWrapper.h" // for handle types
29 #include "vtkDeprecation.h" // For deprecation macro
30 #include "vtkInformation.h"
31 #include "vtkOSPRayCache.h" // For common cache infrastructure
32 #include "vtkRenderer.h"
33 #include "vtkRendererNode.h"
34 #include "vtkRenderingRayTracingModule.h" // For export macro
35 
36 #include <vector> // for ivars
37 
38 #ifdef VTKOSPRAY_ENABLE_DENOISER
39 #include <OpenImageDenoise/oidn.hpp> // for denoiser structures
40 #endif
41 
47 class vtkMatrix4x4;
48 class vtkOSPRayRendererNodeInternals;
50 class vtkRenderer;
51 
52 class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayRendererNode : public vtkRendererNode
53 {
54 public:
55  static vtkOSPRayRendererNode* New();
57  void PrintSelf(ostream& os, vtkIndent indent) override;
58 
62  void Build(bool prepass) override;
63 
67  void Render(bool prepass) override;
68 
72  void Invalidate(bool prepass) override;
73 
77  virtual void WriteLayer(unsigned char* buffer, float* zbuffer, int buffx, int buffy, int layer);
78 
79  // state beyond rendering core...
80 
86  static vtkInformationIntegerKey* SAMPLES_PER_PIXEL();
87 
89 
92  static void SetSamplesPerPixel(int, vtkRenderer* renderer);
93  static int GetSamplesPerPixel(vtkRenderer* renderer);
95 
101  static vtkInformationDoubleKey* MAX_CONTRIBUTION();
102 
104 
107  static void SetMaxContribution(double, vtkRenderer* renderer);
108  static double GetMaxContribution(vtkRenderer* renderer);
110 
115  static vtkInformationIntegerKey* MAX_DEPTH();
116 
118 
121  static void SetMaxDepth(int, vtkRenderer* renderer);
122  static int GetMaxDepth(vtkRenderer* renderer);
124 
130  static vtkInformationDoubleKey* MIN_CONTRIBUTION();
131 
133 
136  static void SetMinContribution(double, vtkRenderer* renderer);
137  static double GetMinContribution(vtkRenderer* renderer);
139 
145  static vtkInformationIntegerKey* ROULETTE_DEPTH();
146 
148 
151  static void SetRouletteDepth(int, vtkRenderer* renderer);
152  static int GetRouletteDepth(vtkRenderer* renderer);
154 
165  static vtkInformationDoubleKey* VOLUME_ANISOTROPY();
166 
168 
171  VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::SetScatteringAnisotropy instead")
172  static void SetVolumeAnisotropy(double value, vtkRenderer* renderer)
173  {
174  if (!renderer)
175  {
176  return;
177  }
178  vtkInformation* info = renderer->GetInformation();
180  };
181  VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::GetScatteringAnisotropy instead")
182  static double GetVolumeAnisotropy(vtkRenderer* renderer)
183  {
184  constexpr double DEFAULT_VOLUME_ANISOTROPY = 0.0;
185  if (!renderer)
186  {
187  return DEFAULT_VOLUME_ANISOTROPY;
188  }
189  vtkInformation* info = renderer->GetInformation();
190  if (info && info->Has(vtkOSPRayRendererNode::VOLUME_ANISOTROPY()))
191  {
193  }
194  return DEFAULT_VOLUME_ANISOTROPY;
195  };
197 
202  static vtkInformationDoubleKey* VARIANCE_THRESHOLD();
203 
205 
208  static void SetVarianceThreshold(double, vtkRenderer* renderer);
209  static double GetVarianceThreshold(vtkRenderer* renderer);
211 
213 
218  static vtkInformationIntegerKey* MAX_FRAMES();
219  static void SetMaxFrames(int, vtkRenderer* renderer);
220  static int GetMaxFrames(vtkRenderer* renderer);
222 
224 
228  static vtkInformationStringKey* RENDERER_TYPE();
229  static void SetRendererType(std::string name, vtkRenderer* renderer);
230  static std::string GetRendererType(vtkRenderer* renderer);
232 
238  static vtkInformationIntegerKey* AMBIENT_SAMPLES();
240 
243  static void SetAmbientSamples(int, vtkRenderer* renderer);
244  static int GetAmbientSamples(vtkRenderer* renderer);
246 
251  static vtkInformationIntegerKey* COMPOSITE_ON_GL();
253 
256  static void SetCompositeOnGL(int, vtkRenderer* renderer);
257  static int GetCompositeOnGL(vtkRenderer* renderer);
259 
263  static vtkInformationDoubleVectorKey* NORTH_POLE();
265 
268  static void SetNorthPole(double*, vtkRenderer* renderer);
269  static double* GetNorthPole(vtkRenderer* renderer);
271 
275  static vtkInformationDoubleVectorKey* EAST_POLE();
277 
280  static void SetEastPole(double*, vtkRenderer* renderer);
281  static double* GetEastPole(vtkRenderer* renderer);
283 
287  static vtkInformationObjectBaseKey* MATERIAL_LIBRARY();
288 
290 
293  static void SetMaterialLibrary(vtkOSPRayMaterialLibrary*, vtkRenderer* renderer);
294  static vtkOSPRayMaterialLibrary* GetMaterialLibrary(vtkRenderer* renderer);
296 
300  static vtkInformationDoubleKey* VIEW_TIME();
302 
305  static void SetViewTime(double, vtkRenderer* renderer);
306  static double GetViewTime(vtkRenderer* renderer);
308 
312  static vtkInformationIntegerKey* TIME_CACHE_SIZE();
314 
317  static void SetTimeCacheSize(int, vtkRenderer* renderer);
318  static int GetTimeCacheSize(vtkRenderer* renderer);
320 
324  OSPRenderer GetORenderer() { return this->ORenderer; }
325  void AddLight(OSPLight light) { this->Lights.push_back(light); }
326 
330  virtual void* GetBuffer() { return this->Buffer.data(); }
331 
335  virtual float* GetZBuffer() { return this->ZBuffer.data(); }
336 
337  // Get the last renderer color buffer as an OpenGL texture.
338  virtual int GetColorBufferTextureGL() { return this->ColorBufferTex; }
339 
340  // Get the last renderer depth buffer as an OpenGL texture.
341  virtual int GetDepthBufferTextureGL() { return this->DepthBufferTex; }
342 
343  // if you want to traverse your children in a specific order
344  // or way override this method
345  void Traverse(int operation) override;
346 
350  static vtkOSPRayRendererNode* GetRendererNode(vtkViewNode*);
351  vtkRenderer* GetRenderer();
352  RTW::Backend* GetBackend();
353 
357  static vtkInformationIntegerKey* DENOISER_THRESHOLD();
359 
362  static void SetDenoiserThreshold(int, vtkRenderer* renderer);
363  static int GetDenoiserThreshold(vtkRenderer* renderer);
365 
367 
370  static vtkInformationIntegerKey* ENABLE_DENOISER();
374  static void SetEnableDenoiser(int, vtkRenderer* renderer);
375  static int GetEnableDenoiser(vtkRenderer* renderer);
377 
379  {
384  NumberOfMode
385  };
386 
388 
395  static vtkInformationIntegerKey* BACKGROUND_MODE();
396  static void SetBackgroundMode(BackgroundMode, vtkRenderer* renderer);
397  static BackgroundMode GetBackgroundMode(vtkRenderer* renderer);
399 
400  std::vector<OSPGeometricModel> GeometricModels;
401  std::vector<OSPVolumetricModel> VolumetricModels;
402  std::vector<OSPInstance> Instances;
403 
404 protected:
406  ~vtkOSPRayRendererNode() override;
407 
411  void Denoise();
412 
413  // internal structures
414  std::vector<float> Buffer;
415  std::vector<float> ZBuffer;
416 
419 
420  OSPWorld OWorld{ nullptr };
421  OSPRenderer ORenderer{ nullptr };
422  OSPFrameBuffer OFrameBuffer{ nullptr };
423  OSPCamera OCamera{ nullptr };
424  int ImageX, ImageY;
425  std::vector<OSPLight> Lights;
430  bool UseBackplate{ true }; // use bgcolor for pathtracer or use bgcolor light
431  std::vector<float> ODepthBuffer;
436  vtkOSPRayRendererNodeInternals* Internal;
438 
439 #ifdef VTKOSPRAY_ENABLE_DENOISER
440  oidn::DeviceRef DenoiserDevice;
441  oidn::FilterRef DenoiserFilter;
442 #endif
443  bool DenoiserDirty{ true };
444  std::vector<osp::vec4f> ColorBuffer;
445  std::vector<osp::vec3f> NormalBuffer;
446  std::vector<osp::vec3f> AlbedoBuffer;
447  std::vector<osp::vec4f> DenoisedBuffer;
448 
450  std::set<OSPWorld> CacheContents;
451 
452 private:
454  void operator=(const vtkOSPRayRendererNode&) = delete;
455 };
456 
457 #endif
#define OSPLight
Definition: RTWrapper.h:22
std::vector< osp::vec4f > DenoisedBuffer
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:41
virtual int GetColorBufferTextureGL()
std::vector< osp::vec3f > NormalBuffer
std::set< OSPWorld > CacheContents
Store vtkAlgorithm input/output information.
virtual int GetDepthBufferTextureGL()
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
vtkOSPRayRendererNodeInternals * Internal
vtkOSPRayCache< vtkOSPRayCacheItemObject > * Cache
virtual void * GetBuffer()
Get the last rendered ColorBuffer.
#define VTK_DEPRECATED_IN_9_2_0(reason)
abstract specification for renderers
Definition: vtkRenderer.h:72
virtual float * GetZBuffer()
Get the last rendered ZBuffer.
Key for string values in vtkInformation.
a collection of materials for vtk apps to draw from
#define OSPCamera
Definition: RTWrapper.h:21
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:39
int Get(vtkInformationIntegerKey *key)
Get/Set an integer-valued entry.
Key for integer values in vtkInformation.
Key for vtkObjectBase values.
std::vector< OSPGeometricModel > GeometricModels
std::vector< OSPLight > Lights
int Has(vtkInformationKey *key)
Check whether the given key appears in this information object.
#define OSPFrameBuffer
Definition: RTWrapper.h:28
std::vector< osp::vec3f > AlbedoBuffer
void Set(vtkInformationRequestKey *key)
Get/Set a request-valued entry.
virtual void Render(bool)
Makes calls to make self visible.
Definition: vtkViewNode.h:67
std::vector< OSPVolumetricModel > VolumetricModels
vtkViewNode specialized for vtkRenderers
#define OSPWorld
Definition: RTWrapper.h:17
OSPRenderer GetORenderer()
Methods for other nodes to access.
virtual void Invalidate(bool)
Clear any cached data.
Definition: vtkViewNode.h:72
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:16
std::vector< osp::vec4f > ColorBuffer
static vtkInformationDoubleKey * VOLUME_ANISOTROPY()
When present on renderer, affects path traced rendering phase function.
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:41
std::vector< float > ZBuffer