31 #include <optixu/optixpp_namespace.h>
34 #include <unordered_map>
43 static const char* CONTEXT_SCENE_TOP_OBJECT =
"top_object";
44 static const char* CONTEXT_SCENE_TOP_SHADOWER =
"top_shadower";
47 static const char* CONTEXT_RENDERER_JITTER =
"jitter4";
48 static const char* CONTEXT_RENDERER_FRAME =
"frame";
49 static const char* CONTEXT_RENDERER_RADIANCE_RAY_TYPE =
"radianceRayType";
50 static const char* CONTEXT_RENDERER_SHADOW_RAY_TYPE =
"shadowRayType";
51 static const char* CONTEXT_RENDERER_SCENE_EPSILON =
"sceneEpsilon";
52 static const char* CONTEXT_RENDERER_AMBIENT_LIGHT_COLOR =
"ambientLightColor";
53 static const char* CONTEXT_RENDERER_BACKGROUND_COLOR =
"bgColor";
54 static const char* CONTEXT_RENDERER_SAMPLES_PER_PIXEL =
"samples_per_pixel";
57 static const char* CONTEXT_CAMERA_EYE =
"eye";
58 static const char* CONTEXT_CAMERA_ORIENTATION =
"orientation";
59 static const char* CONTEXT_CAMERA_DIR =
"dir";
60 static const char* CONTEXT_CAMERA_U =
"U";
61 static const char* CONTEXT_CAMERA_V =
"V";
62 static const char* CONTEXT_CAMERA_W =
"W";
63 static const char* CONTEXT_CAMERA_APERTURE_RADIUS = CAMERA_PROPERTY_APERTURE_RADIUS.name.c_str();
64 static const char* CONTEXT_CAMERA_FOCAL_DISTANCE = CAMERA_PROPERTY_FOCAL_DISTANCE.name.c_str();
65 static const char* CONTEXT_CAMERA_FIELD_OF_VIEW = CAMERA_PROPERTY_FIELD_OF_VIEW.name.c_str();
66 static const char* CONTEXT_CAMERA_ASPECT = CAMERA_PROPERTY_ASPECT_RATIO.name.c_str();
67 static const char* CONTEXT_CAMERA_OFFSET =
"offset";
70 static const char* CONTEXT_EXCEPTION_BAD_COLOR =
"bad_color";
73 static const char* CUDA_FUNC_PERSPECTIVE_CAMERA =
"perspectiveCamera";
74 static const char* CONTEXT_CAMERA_STEREO = CAMERA_PROPERTY_STEREO.name.c_str();
75 static const char* CONTEXT_CAMERA_IPD = CAMERA_PROPERTY_INTERPUPILLARY_DISTANCE.name.c_str();
76 static const char* CONTEXT_CAMERA_IPD_OFFSET =
"ipd_offset";
79 static const char* CUDA_FUNC_ORTHOGRAPHIC_CAMERA =
"orthographicCamera";
80 static const char* CONTEXT_CAMERA_HEIGHT = CAMERA_PROPERTY_HEIGHT.name.c_str();
83 static const char* CONTEXT_ENABLE_CLIPPING_PLANES = CAMERA_PROPERTY_ENABLE_CLIPPING_PLANES.name.c_str();
84 static const char* CONTEXT_CLIPPING_PLANES =
"clippingPlanes";
85 static const char* CONTEXT_NB_CLIPPING_PLANES =
"nbClippingPlanes";
88 static const char* CONTEXT_LIGHTS = RENDERER_PROPERTY_LIGHTS;
91 static const char* CONTEXT_USE_ENVIRONMENT_MAP =
"use_envmap";
94 static const char* CONTEXT_SPHERE_SIZE =
"sphere_size";
95 static const char* CONTEXT_CYLINDER_SIZE =
"cylinder_size";
96 static const char* CONTEXT_CONE_SIZE =
"cone_size";
97 static const char* CONTEXT_SDF_GEOMETRY_SIZE =
"sdf_geometry_size";
98 static const char* CONTEXT_VOLUME_SIZE =
"volume_size";
99 static const char* CONTEXT_FIELD_SIZE =
"field_size";
102 static const char* CONTEXT_MATERIAL_KA =
"Ka";
103 static const char* CONTEXT_MATERIAL_KD =
"Kd";
104 static const char* CONTEXT_MATERIAL_KS =
"Ks";
105 static const char* CONTEXT_MATERIAL_KR =
"Kr";
106 static const char* CONTEXT_MATERIAL_KO =
"Ko";
107 static const char* CONTEXT_MATERIAL_GLOSSINESS =
"glossiness";
108 static const char* CONTEXT_MATERIAL_REFRACTION_INDEX =
"refraction_index";
109 static const char* CONTEXT_MATERIAL_SPECULAR_EXPONENT =
"phong_exp";
110 static const char* CONTEXT_MATERIAL_SHADING_MODE =
"shading_mode";
111 static const char* CONTEXT_MATERIAL_USER_PARAMETER =
"user_parameter";
112 static const char* CONTEXT_MATERIAL_CAST_USER_DATA =
"cast_user_data";
113 static const char* CONTEXT_MATERIAL_CLIPPING_MODE =
"clipping_mode";
114 static const char* CONTEXT_MATERIAL_VALUE_RANGE =
"value_range";
115 static const char* CONTEXT_MATERIAL_RADIANCE_LODS =
"radianceLODs";
118 static const char* CONTEXT_STAGE_TONE_MAPPER =
"TonemapperSimple";
119 static const char* CONTEXT_STAGE_DENOISER =
"DLDenoiser";
120 static const char* CONTEXT_INPUT_BUFFER =
"input_buffer";
121 static const char* CONTEXT_OUTPUT_BUFFER =
"output_buffer";
122 static const char* CONTEXT_DEPTH_BUFFER =
"depth_buffer";
123 static const char* CONTEXT_INPUT_ALBEDO_BUFFER =
"input_albedo_buffer";
124 static const char* CONTEXT_INPUT_NORMAL_BUFFER =
"input_normal_buffer";
125 static const char* CONTEXT_TONE_MAPPER_EXPOSURE =
"exposure";
126 static const char* CONTEXT_TONE_MAPPER_GAMMA =
"gamma";
127 static const char* CONTEXT_DENOISE_BLEND =
"blend";
128 static const char* CONTEXT_ACCUMULATION_BUFFER =
"accum_buffer";
129 static const char* CONTEXT_DENOISED_BUFFER =
"denoised_buffer";
130 static const char* CONTEXT_TONEMAPPED_BUFFER =
"tonemapped_buffer";
131 static const char* CONTEXT_FRAME_NUMBER =
"frame_number";
134 static const char* CONTEXT_VOLUME_GRADIENT_SHADING_ENABLED =
"volumeGradientShadingEnabled";
135 static const char* CONTEXT_VOLUME_GRADIENT_OFFSET =
"volumeGradientOffset";
136 static const char* CONTEXT_VOLUME_ADAPTIVE_MAX_SAMPLING_RATE =
"volumeAdaptiveMaxSamplingRate";
137 static const char* CONTEXT_VOLUME_ADAPTIVE_SAMPLING =
"volumeAdaptiveSampling";
138 static const char* CONTEXT_VOLUME_SINGLE_SHADE =
"volumeSingleShade";
139 static const char* CONTEXT_VOLUME_PRE_INTEGRATION =
"volumePreIntegration";
140 static const char* CONTEXT_VOLUME_SAMPLING_RATE =
"volumeSamplingRate";
141 static const char* CONTEXT_VOLUME_SPECULAR_COLOR =
"volumeSpecularColor";
142 static const char* CONTEXT_VOLUME_CLIPPING_BOX_LOWER =
"volumeClippingBoxLower";
143 static const char* CONTEXT_VOLUME_CLIPPING_BOX_UPPER =
"volumeClippingBoxUpper";
144 static const char* CONTEXT_VOLUME_USER_PARAMETERS =
"volumeUserParameters";
147 static const char* CONTEXT_FIELD_GRADIENT_SHADING_ENABLED =
"fieldGradientShadingEnabled";
148 static const char* CONTEXT_FIELD_GRADIENT_OFFSET =
"fieldGradientOffset";
149 static const char* CONTEXT_FIELD_SAMPLING_RATE =
"fieldSamplingRate";
150 static const char* CONTEXT_FIELD_CUTOFF =
"fieldCutoff";
151 static const char* CONTEXT_FIELD_DISTANCE =
"fieldDistance";
152 static const char* CONTEXT_FIELD_EPSILON =
"fieldEpsilon";
153 static const char* CONTEXT_FIELD_ACCUMULATION_STEPS =
"fieldAccumulationSteps";
154 static const char* CONTEXT_FIELD_USE_OCTREE =
"fieldUseOctree";
157 static const char* CONTEXT_GEOMETRY_SDF_EPSILON =
"geometrySdfEpsilon";
158 static const char* CONTEXT_GEOMETRY_SDF_NB_MARCH_ITERATIONS =
"geometrySdfNbMarchIterations";
159 static const char* CONTEXT_GEOMETRY_SDF_BLEND_FACTOR =
"geometrySdfBlendFactor";
160 static const char* CONTEXT_GEOMETRY_SDF_BLEND_LERP_FACTOR =
"geometrySdfBlendLerpFactor";
161 static const char* CONTEXT_GEOMETRY_SDF_OMEGA =
"geometrySdfOmega";
162 static const char* CONTEXT_GEOMETRY_SDF_DISTANCE =
"geometrySdfDistance";
165 static const char* CONTEXT_USER_DATA = RENDERER_PROPERTY_USER_DATA;
222 std::unique_lock<std::mutex>
getScopeLock() {
return std::unique_lock<std::mutex>(_mutex); }
228 void _printSystemInformation()
const;
230 static std::unique_ptr<OptiXContext> _context;
232 ::optix::Context _optixContext{
nullptr};
234 std::map<std::string, OptiXShaderProgramPtr> _rendererPrograms;
235 std::map<std::string, OptiXCameraProgramPtr> _cameraPrograms;
237 std::map<OptixGeometryType, ::optix::Program> _optixBoundsPrograms;
238 std::map<OptixGeometryType, ::optix::Program> _optixIntersectionPrograms;
240 std::unordered_map<void*, ::optix::TextureSampler> _optixTextureSamplers;
#define RT_DESTROY(__object)
OptiXCameraProgramPtr getCamera(const std::string &name)
void addCamera(const std::string &name, OptiXCameraProgramPtr program)
OptiXShaderProgramPtr getRenderer(const std::string &name)
::optix::GeometryGroup createGeometryGroup(const bool compact)
::optix::Group createGroup()
static OptiXContext & get()
::optix::Material createMaterial()
::optix::Geometry createGeometry(const OptixGeometryType type)
void addRenderer(const std::string &name, OptiXShaderProgramPtr program)
::optix::Context getOptixContext()
std::unique_lock< std::mutex > getScopeLock()
::optix::TextureSampler createTextureSampler(Texture2DPtr texture)
void setCamera(const std::string &name)
std::shared_ptr< OptiXCameraProgram > OptiXCameraProgramPtr
std::shared_ptr< OptixShaderProgram > OptiXShaderProgramPtr
std::shared_ptr< Texture2D > Texture2DPtr
::optix::Program exception_program
::optix::Program closest_hit_textured
::optix::Program closest_hit