VTK  9.3.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 "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_2_0
18 #include "vtkInformation.h"
19 #include "vtkOSPRayCache.h" // For common cache infrastructure
20 #include "vtkRenderer.h"
21 #include "vtkRendererNode.h"
22 #include "vtkRenderingRayTracingModule.h" // For export macro
23 
24 #include <vector> // for ivars
25 
26 #ifdef VTKOSPRAY_ENABLE_DENOISER
27 #include <OpenImageDenoise/oidn.hpp> // for denoiser structures
28 #endif
29 
30 VTK_ABI_NAMESPACE_BEGIN
36 class vtkMatrix4x4;
37 class vtkOSPRayRendererNodeInternals;
39 class vtkRenderer;
40 
41 class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayRendererNode : public vtkRendererNode
42 {
43 public:
44  static vtkOSPRayRendererNode* New();
46  void PrintSelf(ostream& os, vtkIndent indent) override;
47 
51  void Build(bool prepass) override;
52 
56  void Render(bool prepass) override;
57 
61  void Invalidate(bool prepass) override;
62 
66  virtual void WriteLayer(unsigned char* buffer, float* zbuffer, int buffx, int buffy, int layer);
67 
68  // state beyond rendering core...
69 
75  static vtkInformationIntegerKey* SAMPLES_PER_PIXEL();
76 
78 
81  static void SetSamplesPerPixel(int, vtkRenderer* renderer);
82  static int GetSamplesPerPixel(vtkRenderer* renderer);
84 
90  static vtkInformationDoubleKey* MAX_CONTRIBUTION();
91 
93 
96  static void SetMaxContribution(double, vtkRenderer* renderer);
97  static double GetMaxContribution(vtkRenderer* renderer);
99 
104  static vtkInformationIntegerKey* MAX_DEPTH();
105 
107 
110  static void SetMaxDepth(int, vtkRenderer* renderer);
111  static int GetMaxDepth(vtkRenderer* renderer);
113 
119  static vtkInformationDoubleKey* MIN_CONTRIBUTION();
120 
122 
125  static void SetMinContribution(double, vtkRenderer* renderer);
126  static double GetMinContribution(vtkRenderer* renderer);
128 
134  static vtkInformationIntegerKey* ROULETTE_DEPTH();
135 
137 
140  static void SetRouletteDepth(int, vtkRenderer* renderer);
141  static int GetRouletteDepth(vtkRenderer* renderer);
143 
154  static vtkInformationDoubleKey* VOLUME_ANISOTROPY();
155 
157 
160  VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::SetScatteringAnisotropy instead")
161  static void SetVolumeAnisotropy(double value, vtkRenderer* renderer)
162  {
163  if (!renderer)
164  {
165  return;
166  }
167  vtkInformation* info = renderer->GetInformation();
169  };
170  VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::GetScatteringAnisotropy instead")
171  static double GetVolumeAnisotropy(vtkRenderer* renderer)
172  {
173  constexpr double DEFAULT_VOLUME_ANISOTROPY = 0.0;
174  if (!renderer)
175  {
176  return DEFAULT_VOLUME_ANISOTROPY;
177  }
178  vtkInformation* info = renderer->GetInformation();
179  if (info && info->Has(vtkOSPRayRendererNode::VOLUME_ANISOTROPY()))
180  {
182  }
183  return DEFAULT_VOLUME_ANISOTROPY;
184  };
186 
191  static vtkInformationDoubleKey* VARIANCE_THRESHOLD();
192 
194 
197  static void SetVarianceThreshold(double, vtkRenderer* renderer);
198  static double GetVarianceThreshold(vtkRenderer* renderer);
200 
202 
207  static vtkInformationIntegerKey* MAX_FRAMES();
208  static void SetMaxFrames(int, vtkRenderer* renderer);
209  static int GetMaxFrames(vtkRenderer* renderer);
211 
213 
217  static vtkInformationStringKey* RENDERER_TYPE();
218  static void SetRendererType(std::string name, vtkRenderer* renderer);
219  static std::string GetRendererType(vtkRenderer* renderer);
221 
227  static vtkInformationIntegerKey* AMBIENT_SAMPLES();
229 
232  static void SetAmbientSamples(int, vtkRenderer* renderer);
233  static int GetAmbientSamples(vtkRenderer* renderer);
235 
240  static vtkInformationDoubleKey* VOLUME_SAMPLING_RATE();
242 
245  static void SetVolumeSamplingRate(double, vtkRenderer* renderer);
246  static double GetVolumeSamplingRate(vtkRenderer* renderer);
248 
253  static vtkInformationIntegerKey* COMPOSITE_ON_GL();
255 
258  static void SetCompositeOnGL(int, vtkRenderer* renderer);
259  static int GetCompositeOnGL(vtkRenderer* renderer);
261 
265  static vtkInformationDoubleVectorKey* NORTH_POLE();
267 
270  static void SetNorthPole(double*, vtkRenderer* renderer);
271  static double* GetNorthPole(vtkRenderer* renderer);
273 
277  static vtkInformationDoubleVectorKey* EAST_POLE();
279 
282  static void SetEastPole(double*, vtkRenderer* renderer);
283  static double* GetEastPole(vtkRenderer* renderer);
285 
289  static vtkInformationObjectBaseKey* MATERIAL_LIBRARY();
290 
292 
295  static void SetMaterialLibrary(vtkOSPRayMaterialLibrary*, vtkRenderer* renderer);
296  static vtkOSPRayMaterialLibrary* GetMaterialLibrary(vtkRenderer* renderer);
298 
302  static vtkInformationDoubleKey* VIEW_TIME();
304 
307  static void SetViewTime(double, vtkRenderer* renderer);
308  static double GetViewTime(vtkRenderer* renderer);
310 
314  static vtkInformationIntegerKey* TIME_CACHE_SIZE();
316 
319  static void SetTimeCacheSize(int, vtkRenderer* renderer);
320  static int GetTimeCacheSize(vtkRenderer* renderer);
322 
326  OSPRenderer GetORenderer() { return this->ORenderer; }
327  void AddLight(OSPLight light) { this->Lights.push_back(light); }
328 
332  virtual void* GetBuffer() { return this->Buffer.data(); }
333 
337  virtual float* GetZBuffer() { return this->ZBuffer.data(); }
338 
339  // Get the last renderer color buffer as an OpenGL texture.
340  virtual int GetColorBufferTextureGL() { return this->ColorBufferTex; }
341 
342  // Get the last renderer depth buffer as an OpenGL texture.
343  virtual int GetDepthBufferTextureGL() { return this->DepthBufferTex; }
344 
345  // if you want to traverse your children in a specific order
346  // or way override this method
347  void Traverse(int operation) override;
348 
352  static vtkOSPRayRendererNode* GetRendererNode(vtkViewNode*);
353  vtkRenderer* GetRenderer();
354  RTW::Backend* GetBackend();
355 
359  static vtkInformationIntegerKey* DENOISER_THRESHOLD();
361 
364  static void SetDenoiserThreshold(int, vtkRenderer* renderer);
365  static int GetDenoiserThreshold(vtkRenderer* renderer);
367 
369 
372  static vtkInformationIntegerKey* ENABLE_DENOISER();
376  static void SetEnableDenoiser(int, vtkRenderer* renderer);
377  static int GetEnableDenoiser(vtkRenderer* renderer);
379 
381  {
386  NumberOfMode
387  };
388 
390 
397  static vtkInformationIntegerKey* BACKGROUND_MODE();
398  static void SetBackgroundMode(BackgroundMode, vtkRenderer* renderer);
399  static BackgroundMode GetBackgroundMode(vtkRenderer* renderer);
401 
402  std::vector<OSPGeometricModel> GeometricModels;
403  std::vector<OSPVolumetricModel> VolumetricModels;
404  std::vector<OSPInstance> Instances;
405 
406 protected:
408  ~vtkOSPRayRendererNode() override;
409 
413  void Denoise();
414 
415  // internal structures
416  std::vector<float> Buffer;
417  std::vector<float> ZBuffer;
418 
421 
422  OSPWorld OWorld{ nullptr };
423  OSPRenderer ORenderer{ nullptr };
424  OSPFrameBuffer OFrameBuffer{ nullptr };
425  OSPCamera OCamera{ nullptr };
426  int ImageX, ImageY;
427  std::vector<OSPLight> Lights;
432  bool UseBackplate{ true }; // use bgcolor for pathtracer or use bgcolor light
433  std::vector<float> ODepthBuffer;
438  vtkOSPRayRendererNodeInternals* Internal;
440 
441 #ifdef VTKOSPRAY_ENABLE_DENOISER
442  oidn::DeviceRef DenoiserDevice;
443  oidn::FilterRef DenoiserFilter;
444 #endif
445  bool DenoiserDirty{ true };
446  std::vector<osp::vec4f> ColorBuffer;
447  std::vector<osp::vec3f> NormalBuffer;
448  std::vector<osp::vec3f> AlbedoBuffer;
449  std::vector<osp::vec4f> DenoisedBuffer;
450 
452  std::set<OSPWorld> CacheContents;
453 
454 private:
456  void operator=(const vtkOSPRayRendererNode&) = delete;
457 };
458 
459 VTK_ABI_NAMESPACE_END
460 #endif
#define OSPLight
Definition: RTWrapper.h:25
std::vector< osp::vec4f > DenoisedBuffer
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:30
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:270
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:61
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: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
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:31
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: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
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:30
std::vector< float > ZBuffer