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=========================================================================*/
22#ifndef vtkOSPRayRendererNode_h
23#define vtkOSPRayRendererNode_h
24
25#include "RTWrapper/RTWrapper.h" // for handle types
26#include "vtkDeprecation.h" // For deprecation macro
27#include "vtkInformation.h"
28#include "vtkOSPRayCache.h" // For common cache infrastructure
29#include "vtkRenderer.h"
30#include "vtkRendererNode.h"
31#include "vtkRenderingRayTracingModule.h" // For export macro
32
33#include <vector> // for ivars
34
35#ifdef VTKOSPRAY_ENABLE_DENOISER
36#include <OpenImageDenoise/oidn.hpp> // for denoiser structures
37#endif
38
44class vtkMatrix4x4;
45class vtkOSPRayRendererNodeInternals;
47class vtkRenderer;
48
49class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayRendererNode : public vtkRendererNode
50{
51public:
54 void PrintSelf(ostream& os, vtkIndent indent) override;
55
59 void Build(bool prepass) override;
60
64 void Render(bool prepass) override;
65
69 void Invalidate(bool prepass) override;
70
74 virtual void WriteLayer(unsigned char* buffer, float* zbuffer, int buffx, int buffy, int layer);
75
76 // state beyond rendering core...
77
84
86
89 static void SetSamplesPerPixel(int, vtkRenderer* renderer);
90 static int GetSamplesPerPixel(vtkRenderer* renderer);
92
99
101
104 static void SetMaxContribution(double, vtkRenderer* renderer);
105 static double GetMaxContribution(vtkRenderer* renderer);
107
113
115
118 static void SetMaxDepth(int, vtkRenderer* renderer);
119 static int GetMaxDepth(vtkRenderer* renderer);
121
128
130
133 static void SetMinContribution(double, vtkRenderer* renderer);
134 static double GetMinContribution(vtkRenderer* renderer);
136
143
145
148 static void SetRouletteDepth(int, vtkRenderer* renderer);
149 static int GetRouletteDepth(vtkRenderer* renderer);
151
163
165
168 VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::SetScatteringAnisotropy instead")
169 static void SetVolumeAnisotropy(double value, vtkRenderer* renderer)
170 {
171 if (!renderer)
172 {
173 return;
174 }
175 vtkInformation* info = renderer->GetInformation();
177 };
178 VTK_DEPRECATED_IN_9_2_0("Use vtkVolumeProperty::GetScatteringAnisotropy instead")
179 static double GetVolumeAnisotropy(vtkRenderer* renderer)
180 {
181 constexpr double DEFAULT_VOLUME_ANISOTROPY = 0.0;
182 if (!renderer)
183 {
184 return DEFAULT_VOLUME_ANISOTROPY;
185 }
186 vtkInformation* info = renderer->GetInformation();
187 if (info && info->Has(vtkOSPRayRendererNode::VOLUME_ANISOTROPY()))
188 {
189 return (info->Get(vtkOSPRayRendererNode::VOLUME_ANISOTROPY()));
190 }
191 return DEFAULT_VOLUME_ANISOTROPY;
192 };
194
200
202
205 static void SetVarianceThreshold(double, vtkRenderer* renderer);
206 static double GetVarianceThreshold(vtkRenderer* renderer);
208
210
216 static void SetMaxFrames(int, vtkRenderer* renderer);
217 static int GetMaxFrames(vtkRenderer* renderer);
219
221
226 static void SetRendererType(std::string name, vtkRenderer* renderer);
227 static std::string GetRendererType(vtkRenderer* renderer);
229
237
240 static void SetAmbientSamples(int, vtkRenderer* renderer);
241 static int GetAmbientSamples(vtkRenderer* renderer);
243
250
253 static void SetCompositeOnGL(int, vtkRenderer* renderer);
254 static int GetCompositeOnGL(vtkRenderer* renderer);
256
262
265 static void SetNorthPole(double*, vtkRenderer* renderer);
266 static double* GetNorthPole(vtkRenderer* renderer);
268
274
277 static void SetEastPole(double*, vtkRenderer* renderer);
278 static double* GetEastPole(vtkRenderer* renderer);
280
285
287
293
299
302 static void SetViewTime(double, vtkRenderer* renderer);
303 static double GetViewTime(vtkRenderer* renderer);
305
311
314 static void SetTimeCacheSize(int, vtkRenderer* renderer);
315 static int GetTimeCacheSize(vtkRenderer* renderer);
317
321 OSPRenderer GetORenderer() { return this->ORenderer; }
322 void AddLight(OSPLight light) { this->Lights.push_back(light); }
323
327 virtual void* GetBuffer() { return this->Buffer.data(); }
328
332 virtual float* GetZBuffer() { return this->ZBuffer.data(); }
333
334 // Get the last renderer color buffer as an OpenGL texture.
335 virtual int GetColorBufferTextureGL() { return this->ColorBufferTex; }
336
337 // Get the last renderer depth buffer as an OpenGL texture.
338 virtual int GetDepthBufferTextureGL() { return this->DepthBufferTex; }
339
340 // if you want to traverse your children in a specific order
341 // or way override this method
342 void Traverse(int operation) override;
343
350
356
359 static void SetDenoiserThreshold(int, vtkRenderer* renderer);
360 static int GetDenoiserThreshold(vtkRenderer* renderer);
362
364
371 static void SetEnableDenoiser(int, vtkRenderer* renderer);
372 static int GetEnableDenoiser(vtkRenderer* renderer);
374
376 {
381 NumberOfMode
382 };
383
385
396
397 std::vector<OSPGeometricModel> GeometricModels;
398 std::vector<OSPVolumetricModel> VolumetricModels;
399 std::vector<OSPInstance> Instances;
400
401protected:
404
408 void Denoise();
409
410 // internal structures
411 std::vector<float> Buffer;
412 std::vector<float> ZBuffer;
413
416
417 OSPWorld OWorld{ nullptr };
418 OSPRenderer ORenderer{ nullptr };
419 OSPFrameBuffer OFrameBuffer{ nullptr };
420 OSPCamera OCamera{ nullptr };
421 int ImageX, ImageY;
422 std::vector<OSPLight> Lights;
427 bool UseBackplate{ true }; // use bgcolor for pathtracer or use bgcolor light
428 std::vector<float> ODepthBuffer;
433 vtkOSPRayRendererNodeInternals* Internal;
434 std::string PreviousType;
435
436#ifdef VTKOSPRAY_ENABLE_DENOISER
437 oidn::DeviceRef DenoiserDevice;
438 oidn::FilterRef DenoiserFilter;
439#endif
440 bool DenoiserDirty{ true };
441 std::vector<osp::vec4f> ColorBuffer;
442 std::vector<osp::vec3f> NormalBuffer;
443 std::vector<osp::vec3f> AlbedoBuffer;
444 std::vector<osp::vec4f> DenoisedBuffer;
445
447 std::set<OSPWorld> CacheContents;
448
449private:
451 void operator=(const vtkOSPRayRendererNode&) = delete;
452};
453
454#endif
#define OSPWorld
Definition RTWrapper.h:17
#define OSPLight
Definition RTWrapper.h:22
#define OSPFrameBuffer
Definition RTWrapper.h:28
#define OSPRenderer
Definition RTWrapper.h:16
#define OSPCamera
Definition RTWrapper.h:21
a simple class to control print indentation
Definition vtkIndent.h:34
Key for double values in vtkInformation.
Key for integer values in vtkInformation.
Key for vtkObjectBase values.
Key for string values in vtkInformation.
Store vtkAlgorithm input/output information.
represent and manipulate 4x4 transformation matrices
temporal cache ospray structures to speed flipbooks
a collection of materials for vtk apps to draw from
links vtkRenderers to OSPRay
static void SetMaxFrames(int, vtkRenderer *renderer)
When present on renderer, controls the number of ospray render calls for each refresh.
static double GetVarianceThreshold(vtkRenderer *renderer)
Convenience method to set/get VARIANCE_THRESHOLD on a vtkRenderer.
static void SetRendererType(std::string name, vtkRenderer *renderer)
Set the OSPRay renderer type to use (e.g.
static vtkOSPRayRendererNode * GetRendererNode(vtkViewNode *)
Convenience method to get and downcast renderable.
std::vector< osp::vec3f > NormalBuffer
std::vector< float > Buffer
RTW::Backend * GetBackend()
static void SetAmbientSamples(int, vtkRenderer *renderer)
Convenience method to set/get AMBIENT_SAMPLES on a vtkRenderer.
virtual float * GetZBuffer()
Get the last rendered ZBuffer.
static int GetRouletteDepth(vtkRenderer *renderer)
Convenience method to set/get ROULETTE_DEPTH on a vtkRenderer.
void Build(bool prepass) override
Builds myself.
static vtkInformationDoubleKey * MIN_CONTRIBUTION()
When present on renderer, sample contributions below this value will be neglected to speedup renderin...
static void SetCompositeOnGL(int, vtkRenderer *renderer)
Convenience method to set/get COMPOSITE_ON_GL on a vtkRenderer.
static vtkInformationDoubleKey * VOLUME_ANISOTROPY()
When present on renderer, affects path traced rendering phase function.
static vtkInformationDoubleKey * MAX_CONTRIBUTION()
When present on renderer, samples are clamped to this value before they are accumulated into the fram...
~vtkOSPRayRendererNode() override
OSPRenderer GetORenderer()
Methods for other nodes to access.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkInformationIntegerKey * SAMPLES_PER_PIXEL()
When present on renderer, controls the number of primary rays shot per pixel default is 1.
std::vector< OSPVolumetricModel > VolumetricModels
std::vector< OSPInstance > Instances
static int GetAmbientSamples(vtkRenderer *renderer)
Convenience method to set/get AMBIENT_SAMPLES on a vtkRenderer.
static void SetMaterialLibrary(vtkOSPRayMaterialLibrary *, vtkRenderer *renderer)
Convenience method to set/get Material library on a renderer.
static void SetVarianceThreshold(double, vtkRenderer *renderer)
Convenience method to set/get VARIANCE_THRESHOLD on a vtkRenderer.
static int GetEnableDenoiser(vtkRenderer *renderer)
Enable denoising (if supported).
static void SetEastPole(double *, vtkRenderer *renderer)
Convenience method to set/get EAST_POLE on a vtkRenderer.
static vtkInformationObjectBaseKey * MATERIAL_LIBRARY()
Material Library attached to the renderer.
static void SetMaxContribution(double, vtkRenderer *renderer)
Convenience method to set/get MAX_CONTRIBUTION on a vtkRenderer.
static void SetMaxDepth(int, vtkRenderer *renderer)
Convenience method to set/get MAX_DEPTH on a vtkRenderer.
static double GetMaxContribution(vtkRenderer *renderer)
Convenience method to set/get MAX_CONTRIBUTION on a vtkRenderer.
vtkOSPRayRendererNodeInternals * Internal
static int GetTimeCacheSize(vtkRenderer *renderer)
Convenience method to set/get TIME_CACHE_SIZE on a vtkRenderer.
static void SetMinContribution(double, vtkRenderer *renderer)
Convenience method to set/get MIN_CONTRIBUTION on a vtkRenderer.
static int GetMaxFrames(vtkRenderer *renderer)
When present on renderer, controls the number of ospray render calls for each refresh.
std::vector< float > ODepthBuffer
static int GetMaxDepth(vtkRenderer *renderer)
Convenience method to set/get MAX_DEPTH on a vtkRenderer.
static vtkInformationIntegerKey * BACKGROUND_MODE()
Control use of the path tracer backplate and environmental background.
static vtkInformationIntegerKey * ROULETTE_DEPTH()
When present on renderer, controls the ray recursion depth at which to start Russian roulette termina...
static BackgroundMode GetBackgroundMode(vtkRenderer *renderer)
Control use of the path tracer backplate and environmental background.
static double GetViewTime(vtkRenderer *renderer)
Convenience method to set/get VIEW_TIME on a vtkRenderer.
static double * GetEastPole(vtkRenderer *renderer)
Convenience method to set/get EAST_POLE on a vtkRenderer.
std::vector< OSPLight > Lights
static vtkInformationIntegerKey * MAX_DEPTH()
When present on renderer, controls the maximum ray recursion depth default is 20.
static std::string GetRendererType(vtkRenderer *renderer)
Set the OSPRay renderer type to use (e.g.
static vtkInformationIntegerKey * TIME_CACHE_SIZE()
Temporal cache size.
vtkOSPRayCache< vtkOSPRayCacheItemObject > * Cache
static void SetDenoiserThreshold(int, vtkRenderer *renderer)
Convenience method to set/get DENOISER_THRESHOLD on a vtkRenderer.
std::vector< float > ZBuffer
virtual void WriteLayer(unsigned char *buffer, float *zbuffer, int buffx, int buffy, int layer)
Put my results into the correct place in the provided pixel buffer.
virtual void * GetBuffer()
Get the last rendered ColorBuffer.
static double GetMinContribution(vtkRenderer *renderer)
Convenience method to set/get MIN_CONTRIBUTION on a vtkRenderer.
std::set< OSPWorld > CacheContents
static vtkInformationDoubleKey * VARIANCE_THRESHOLD()
When present on renderer, controls the threshold for adaptive accumulation default is 0....
static vtkInformationIntegerKey * COMPOSITE_ON_GL()
used to make the renderer add ospray's content onto GL rendered content on the window
std::vector< osp::vec3f > AlbedoBuffer
void AddLight(OSPLight light)
void Render(bool prepass) override
Traverse graph in ospray's preferred order and render.
static vtkOSPRayMaterialLibrary * GetMaterialLibrary(vtkRenderer *renderer)
Convenience method to set/get Material library on a renderer.
static int GetSamplesPerPixel(vtkRenderer *renderer)
Convenience method to set/get SAMPLES_PER_PIXEL on a vtkRenderer.
static vtkInformationIntegerKey * AMBIENT_SAMPLES()
When present on renderer, controls the number of ambient occlusion samples shot per hit.
std::vector< osp::vec4f > ColorBuffer
static vtkInformationIntegerKey * ENABLE_DENOISER()
Enable denoising (if supported).
static void SetNorthPole(double *, vtkRenderer *renderer)
Convenience method to set/get NORTH_POLE on a vtkRenderer.
static double * GetNorthPole(vtkRenderer *renderer)
Convenience method to set/get NORTH_POLE on a vtkRenderer.
static void SetRouletteDepth(int, vtkRenderer *renderer)
Convenience method to set/get ROULETTE_DEPTH on a vtkRenderer.
static int GetCompositeOnGL(vtkRenderer *renderer)
Convenience method to set/get COMPOSITE_ON_GL on a vtkRenderer.
void Traverse(int operation) override
static vtkOSPRayRendererNode * New()
static void SetViewTime(double, vtkRenderer *renderer)
Convenience method to set/get VIEW_TIME on a vtkRenderer.
void Invalidate(bool prepass) override
Invalidates cached rendering data.
static void SetSamplesPerPixel(int, vtkRenderer *renderer)
Convenience method to set/get SAMPLES_PER_PIXEL on a vtkRenderer.
std::vector< osp::vec4f > DenoisedBuffer
static vtkInformationDoubleVectorKey * NORTH_POLE()
World space direction of north pole for gradient and texture background.
void Denoise()
Denoise the colors stored in ColorBuffer and put into Buffer.
std::vector< OSPGeometricModel > GeometricModels
static vtkInformationIntegerKey * MAX_FRAMES()
When present on renderer, controls the number of ospray render calls for each refresh.
static vtkInformationDoubleVectorKey * EAST_POLE()
World space direction of east pole for texture background.
static void SetEnableDenoiser(int, vtkRenderer *renderer)
Convenience method to set/get ENABLE_DENOISER on a vtkRenderer.
static vtkInformationIntegerKey * DENOISER_THRESHOLD()
Accumulation threshold when above which denoising kicks in.
static int GetDenoiserThreshold(vtkRenderer *renderer)
Convenience method to set/get DENOISER_THRESHOLD on a vtkRenderer.
static void SetTimeCacheSize(int, vtkRenderer *renderer)
Convenience method to set/get TIME_CACHE_SIZE on a vtkRenderer.
static vtkInformationStringKey * RENDERER_TYPE()
Set the OSPRay renderer type to use (e.g.
vtkRenderer * GetRenderer()
static vtkInformationDoubleKey * VIEW_TIME()
Requested time to show in a renderer and to lookup in a temporal cache.
static void SetBackgroundMode(BackgroundMode, vtkRenderer *renderer)
Control use of the path tracer backplate and environmental background.
vtkViewNode specialized for vtkRenderers
abstract specification for renderers
Definition vtkRenderer.h:67
a node within a VTK scene graph
Definition vtkViewNode.h:39
#define VTK_DEPRECATED_IN_9_2_0(reason)
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287