From ae7e9f66accff54bbffd7dafc11ab3c39185b7d5 Mon Sep 17 00:00:00 2001 From: Mango-3 Date: Fri, 30 Aug 2019 12:47:51 +0300 Subject: [PATCH 1/2] Add Guided Path Tracing lighting engine --- .../appleseedrenderer/appleseedrenderer.cpp | 363 ++++++++++--- .../appleseedrenderer/appleseedrenderer.rc | 49 ++ .../appleseedrendererparamdlg.cpp | 15 + .../appleseedrenderer/datachunks.h | 2 + .../appleseedrenderer/renderersettings.cpp | 150 +++++- .../appleseedrenderer/renderersettings.h | 15 + .../appleseedrenderer/resource.h | 488 ++++++++++-------- 7 files changed, 769 insertions(+), 313 deletions(-) diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp index f6e2fea..40b348a 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp @@ -94,7 +94,8 @@ namespace ParamMapIdPathTracer, ParamMapIdSPPM, ParamMapIdPostProcessing, - ParamMapIdSystem + ParamMapIdSystem, + ParamMapIdGuidedPathTracer }; enum ParamId @@ -147,6 +148,17 @@ namespace ParamIdVolumeDistanceSamples = 38, ParamIdOptLightOutsideVolumes = 39, + ParamIdGPTSamplesPerPass = 85, + ParamIdGPTIterationProgressionMode = 86, + ParamIdGPTEnableGuidedPathLimit = 87, + ParamIdGPTGuidedPathLimit = 88, + ParamIdGPTSpatialFilterType = 89, + ParamIdGPTDirectionalFilterType = 90, + ParamIdGPTGuidedBounceMode = 91, + ParamIdGPTSamplingFractionLearningRate = 92, + ParamIdGPTSamplingFractionMode = 93, + ParamIdGPTFixedSamplingFractionRatio = 94, + ParamIdSPPMPhotonType = 57, ParamIdSPPMDirectLightingType = 58, ParamIdSPPMEnableCaustics = 59, @@ -193,58 +205,72 @@ namespace const asf::KeyValuePair g_dialog_strings[] = { - { IDS_RENDERERPARAMS_FILTER_TYPE_1, L"Blackman-Harris" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_2, L"Box" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_3, L" Catmull-Rom Spline - Legacy" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_4, L" Cubic B-spline - Legacy" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_5, L"Gaussian" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_6, L" Lanczos - Legacy" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_7, L" Mitchell-Netravali - Legacy" }, - { IDS_RENDERERPARAMS_FILTER_TYPE_8, L"Triangle" }, - { IDS_RENDERERPARAMS_LOG_OPEN_MODE_1, L"Always" }, - { IDS_RENDERERPARAMS_LOG_OPEN_MODE_2, L"Never" }, - { IDS_RENDERERPARAMS_LOG_OPEN_MODE_3, L"On Error" }, - { IDS_RENDERERPARAMS_LOG_OPEN_MODE_4, L"On Warning" }, - { IDS_RENDERERPARAMS_SAMPLER_TYPE_1, L"Uniform Sampler" }, - { IDS_RENDERERPARAMS_SAMPLER_TYPE_2, L"Adaptive Tile Sampler" }, - { IDS_RENDERERPARAMS_DENOISE_MODE_1 , L"Off" }, - { IDS_RENDERERPARAMS_DENOISE_MODE_2, L"On" }, - { IDS_RENDERERPARAMS_DENOISE_MODE_3, L"Write Outputs" }, - { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, L"Path Tracing" }, - { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, L"Stochastic Progressive Photon Mapping" }, - { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3, L"Bidirectional Path Tracing" }, - { IDS_RENDERERPARAMS_LIGHT_SAMPLER_TYPE_1, L"CDF" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_1, L"No Override" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_2, L"Albedo" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_3, L"Ambient Occlusion" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_4, L"Assemblies" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_5, L"Assembly Instances" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_6, L"Barycentric Coordinates" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_7, L"Bitangents" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_8, L"Coverage" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_9, L"Depth" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_10, L"Facing Ratio" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_11, L"Geometric Normals" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_12, L"Materials" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_13, L"Object Instances" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_14, L"Objects" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_15, L"Original Shading Normals" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_16, L"Primitives" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_17, L"Ray Spread" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_18, L"Screen-Space Velocity" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_19, L"Screen-Space Wireframe" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_20, L"Shading Normals" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_21, L"Sides" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_22, L"Tangents" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_23, L"UV Coordinates" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_24, L"World-Space Position" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_25, L"World-Space Velocity" }, - { IDS_RENDERERPARAMS_SHADER_OVERRIDE_26, L"World-Space Wireframe" }, - { IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_1, L"Monochromatic" }, - { IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_2, L"Polychromatic" }, - { IDS_RENDERERPARAMS_SPPM_DL_TYPE_1, L"Ray Traced" }, - { IDS_RENDERERPARAMS_SPPM_DL_TYPE_2, L"SPPM" }, - { IDS_RENDERERPARAMS_SPPM_DL_TYPE_3, L"Off" } + { IDS_RENDERERPARAMS_FILTER_TYPE_1, L"Blackman-Harris" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_2, L"Box" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_3, L" Catmull-Rom Spline - Legacy" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_4, L" Cubic B-spline - Legacy" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_5, L"Gaussian" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_6, L" Lanczos - Legacy" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_7, L" Mitchell-Netravali - Legacy" }, + { IDS_RENDERERPARAMS_FILTER_TYPE_8, L"Triangle" }, + { IDS_RENDERERPARAMS_LOG_OPEN_MODE_1, L"Always" }, + { IDS_RENDERERPARAMS_LOG_OPEN_MODE_2, L"Never" }, + { IDS_RENDERERPARAMS_LOG_OPEN_MODE_3, L"On Error" }, + { IDS_RENDERERPARAMS_LOG_OPEN_MODE_4, L"On Warning" }, + { IDS_RENDERERPARAMS_SAMPLER_TYPE_1, L"Uniform Sampler" }, + { IDS_RENDERERPARAMS_SAMPLER_TYPE_2, L"Adaptive Tile Sampler" }, + { IDS_RENDERERPARAMS_DENOISE_MODE_1 , L"Off" }, + { IDS_RENDERERPARAMS_DENOISE_MODE_2, L"On" }, + { IDS_RENDERERPARAMS_DENOISE_MODE_3, L"Write Outputs" }, + { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, L"Path Tracing" }, + { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, L"Stochastic Progressive Photon Mapping" }, + { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3, L"Guided Path Tracing" }, + { IDS_RENDERERPARAMS_LIGHT_SAMPLER_TYPE_1, L"CDF" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_1, L"No Override" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_2, L"Albedo" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_3, L"Ambient Occlusion" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_4, L"Assemblies" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_5, L"Assembly Instances" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_6, L"Barycentric Coordinates" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_7, L"Bitangents" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_8, L"Coverage" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_9, L"Depth" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_10, L"Facing Ratio" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_11, L"Geometric Normals" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_12, L"Materials" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_13, L"Object Instances" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_14, L"Objects" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_15, L"Original Shading Normals" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_16, L"Primitives" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_17, L"Ray Spread" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_18, L"Screen-Space Velocity" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_19, L"Screen-Space Wireframe" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_20, L"Shading Normals" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_21, L"Sides" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_22, L"Tangents" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_23, L"UV Coordinates" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_24, L"World-Space Position" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_25, L"World-Space Velocity" }, + { IDS_RENDERERPARAMS_SHADER_OVERRIDE_26, L"World-Space Wireframe" }, + { IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_1, L"Monochromatic" }, + { IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_2, L"Polychromatic" }, + { IDS_RENDERERPARAMS_SPPM_DL_TYPE_1, L"Ray Traced" }, + { IDS_RENDERERPARAMS_SPPM_DL_TYPE_2, L"SPPM" }, + { IDS_RENDERERPARAMS_SPPM_DL_TYPE_3, L"Off" }, + { IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_1, L"Stochastic" }, + { IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_2, L"Box" }, + { IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_3, L"Nearest" }, + { IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_1, L"Box" }, + { IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_2, L"Nearest" }, + { IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_1, L"Learned Distribution" }, + { IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_2, L"Strictly Diffuse" }, + { IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_3, L"Strictly Glossy" }, + { IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_4, L"Prefer Diffuse" }, + { IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_5, L"Prefer Glossy" }, + { IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_1, L"Combine Iterations" }, + { IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_2, L"Automatic Cut-Off" }, + { IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_1, L"Learn" }, + { IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_2, L"Fixed" } }; class AppleseedRenderContext @@ -676,6 +702,50 @@ void AppleseedRendererPBlockAccessor::Get( v.i = static_cast(settings.m_texture_cache_size); break; + // + // Guided Path Tracer. + // + + case ParamIdGPTSamplesPerPass: + v.i = settings.m_gpt_samples_per_pass; + break; + + case ParamIdGPTEnableGuidedPathLimit: + v.i = static_cast(settings.m_gpt_enable_guided_bounce_limit); + break; + + case ParamIdGPTGuidedPathLimit: + v.i = settings.m_gpt_max_guided_bounces; + break; + + case ParamIdGPTSpatialFilterType: + v.i = settings.m_gpt_spatial_filter_type; + break; + + case ParamIdGPTDirectionalFilterType: + v.i = settings.m_gpt_directional_filter_type; + break; + + case ParamIdGPTGuidedBounceMode: + v.i = settings.m_gpt_guided_bounce_mode; + break; + + case ParamIdGPTSamplingFractionLearningRate: + v.f = settings.m_gpt_sampling_fraction_learning_rate; + break; + + case ParamIdGPTIterationProgressionMode: + v.i = settings.m_gpt_iteration_progression_mode; + break; + + case ParamIdGPTFixedSamplingFractionRatio: + v.f = settings.m_gpt_fixed_bsdf_sampling_fraction; + break; + + case ParamIdGPTSamplingFractionMode: + v.i = settings.m_gpt_bsdf_sampling_fraction_mode; + break; + default: break; } @@ -1065,6 +1135,50 @@ void AppleseedRendererPBlockAccessor::Set( settings.m_texture_cache_size = v.i; break; + // + // Guided Path Tracer. + // + + case ParamIdGPTSamplesPerPass: + settings.m_gpt_samples_per_pass = v.i; + break; + + case ParamIdGPTEnableGuidedPathLimit: + settings.m_gpt_enable_guided_bounce_limit = v.i > 0; + break; + + case ParamIdGPTGuidedPathLimit: + settings.m_gpt_max_guided_bounces = v.i; + break; + + case ParamIdGPTSpatialFilterType: + settings.m_gpt_spatial_filter_type = v.i; + break; + + case ParamIdGPTDirectionalFilterType: + settings.m_gpt_directional_filter_type = v.i; + break; + + case ParamIdGPTGuidedBounceMode: + settings.m_gpt_guided_bounce_mode = v.i; + break; + + case ParamIdGPTSamplingFractionLearningRate: + settings.m_gpt_sampling_fraction_learning_rate = v.f; + break; + + case ParamIdGPTIterationProgressionMode: + settings.m_gpt_iteration_progression_mode = v.i; + break; + + case ParamIdGPTFixedSamplingFractionRatio: + settings.m_gpt_fixed_bsdf_sampling_fraction = v.f; + break; + + case ParamIdGPTSamplingFractionMode: + settings.m_gpt_bsdf_sampling_fraction_mode = v.i; + break; + default: break; } @@ -1095,59 +1209,67 @@ ParamBlockDesc2 g_param_block_desc( 0, // parameter block's reference number // --- P_MULTIMAP arguments --- - 7, + 8, // --- P_AUTO_UI arguments for Parameters rollup --- ParamMapIdOutput, - IDD_FORMVIEW_RENDERERPARAMS_OUTPUT, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_OUTPUT, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdImageSampling, - IDD_FORMVIEW_RENDERERPARAMS_IMAGESAMPLING, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_IMAGESAMPLING, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdLighting, - IDD_FORMVIEW_RENDERERPARAMS_LIGHTING, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_LIGHTING, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdPathTracer, - IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdSPPM, - IDD_FORMVIEW_RENDERERPARAMS_SPPM, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_SPPM, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdPostProcessing, - IDD_FORMVIEW_RENDERERPARAMS_POSTPROCESSING, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_POSTPROCESSING, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, ParamMapIdSystem, - IDD_FORMVIEW_RENDERERPARAMS_SYSTEM, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag + IDD_FORMVIEW_RENDERERPARAMS_SYSTEM, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag nullptr, + ParamMapIdGuidedPathTracer, + IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING, // ID of the dialog template + 0, // ID of the dialog's title string + 0, // IParamMap2 creation/deletion flag mask + 0, // rollup creation flag + nullptr, + + // --- Parameters specifications for Output rollup --- ParamIdOuputMode, L"output_mode", TYPE_INT, P_TRANSIENT, 0, @@ -1312,7 +1434,7 @@ ParamBlockDesc2 g_param_block_desc( ParamIdLightingAlgorithm, L"lighting_algorithm", TYPE_INT, P_TRANSIENT, 0, p_ui, ParamMapIdLighting, TYPE_INT_COMBOBOX, IDC_COMBO_LIGHTING_ALGORITHM, - 2, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, + 3, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3, p_default, 0, p_accessor, &g_pblock_accessor, p_end, @@ -1729,6 +1851,81 @@ ParamBlockDesc2 g_param_block_desc( p_accessor, &g_pblock_accessor, p_end, + // --- Parameters specifications for Guided Path Tracer rollup --- + + ParamIdGPTSamplesPerPass, L"gpt_samples_per_pass", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_POS_INT, IDC_TEXT_GPT_SAMPLES_PER_PASS, IDC_SPINNER_GPT_SAMPLES_PER_PASS, SPIN_AUTOSCALE, + p_default, 8, + p_range, 1, 1000000, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTEnableGuidedPathLimit, L"enable_path_guide_limit", TYPE_BOOL, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_SINGLECHEKBOX, IDC_CHECK_GPT_GUIDED_PATH_LENGTH, + p_default, TRUE, + p_enable_ctrls, 1, ParamIdGPTGuidedPathLimit, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTGuidedPathLimit, L"path_guide_limit", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_INT, IDC_TEXT_GPT_GUIDED_PATH_LENGTH, IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, SPIN_AUTOSCALE, + p_default, 8, + p_range, 1, 100, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTSpatialFilterType, L"spatial_filter_type", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SPATIAL_FILTER_TYPE, + 3, IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_1, IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_2, + IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_3, + p_default, 0, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTDirectionalFilterType, L"directional_filter_type", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE, + 2, IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_1, IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_2, + p_default, 0, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTGuidedBounceMode, L"guided_bounce_mode", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE, + 5, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_1, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_2, + IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_3, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_4, + IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_5, + p_default, 0, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTSamplingFractionLearningRate, L"sampling_fraction_learning_rate", TYPE_FLOAT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, SPIN_AUTOSCALE, + p_default, 0.01f, + p_range, 1.0e-6f, 0.99f, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTIterationProgressionMode, L"iteration_progression_mode", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE, + 2, IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_1, IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_2, + p_default, 0, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTFixedSamplingFractionRatio, L"fixed_sampling_fraction_ratio", TYPE_FLOAT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, SPIN_AUTOSCALE, + p_default, 0.5f, + p_range, 1.0e-6f, 0.99f, + p_accessor, & g_pblock_accessor, + p_end, + + ParamIdGPTSamplingFractionMode, L"bsdf_sampling_fraction_mode", TYPE_INT, P_TRANSIENT, 0, + p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE, + 2, IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_1, IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_2, + p_default, 0, + p_accessor, & g_pblock_accessor, + p_end, + p_end ); diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc index c7831bc..dc62925 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc @@ -350,6 +350,45 @@ BEGIN "SpinnerControl",WS_TABSTOP,125,140,6,10 END +IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING DIALOGEX 0, 0, 200, 163 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LTEXT "Samples Per Pass:",IDC_STATIC_GPT_SAMPLES_PER_PASS,0,1,65,8 + CONTROL "Samples Per Pass",IDC_TEXT_GPT_SAMPLES_PER_PASS, + "CustEdit",WS_TABSTOP,107,0,22,10 + CONTROL "Samples Per Pass",IDC_SPINNER_GPT_SAMPLES_PER_PASS, + "SpinnerControl",WS_TABSTOP,131,0,6,10 + CONTROL "Max. Guided Path Length",IDC_TEXT_GPT_GUIDED_PATH_LENGTH, + "CustEdit",WS_TABSTOP,107,87,21,10 + CONTROL "Max. Guided Path Length",IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, + "SpinnerControl",WS_TABSTOP,131,87,6,10 + CONTROL "Max. Guided Bounces:",IDC_CHECK_GPT_GUIDED_PATH_LENGTH, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,88,95,8 + LTEXT "Spatial Filter:",IDC_STATIC,0,17,56,8 + COMBOBOX IDC_COMBO_GPT_SPATIAL_FILTER_TYPE,107,14,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Directional Filter:",IDC_STATIC,0,32,55,8 + COMBOBOX IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE,107,30,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Guided Bounce Mode:",IDC_STATIC,4,72,73,8 + COMBOBOX IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE,107,70,92,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Learning Rate:",IDC_STATIC_GPT_SAMPLING_FRACTION_LEARNING_RATE,3,132,48,8 + CONTROL "BSDF Sampling Fraction Learning Rate",IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, + "CustEdit",WS_TABSTOP,107,131,30,10 + CONTROL "BSDF Sampling Fraction Learning Rate",IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, + "SpinnerControl",WS_TABSTOP,138,131,6,10 + LTEXT "Iteration Progression:",IDC_STATIC,0,48,100,8 + COMBOBOX IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE,107,46,92,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Mode:",IDC_STATIC,3,117,102,8 + COMBOBOX IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE,107,114,39,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Fixed Fraction:",IDC_STATIC_GPT_FIXED_BSDF_SAMPLING_FRACTION,3,146,101,8 + CONTROL "Fixed BSDF Sampling Fraction",IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, + "CustEdit",WS_TABSTOP,107,146,30,10 + CONTROL "Fixed BSDF Sampling Fraction",IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, + "SpinnerControl",WS_TABSTOP,138,146,6,10 + GROUPBOX "BSDF / SD-Tree Sampling Fraction",IDC_STATIC,0,105,199,54 + GROUPBOX "Path Continuation",IDC_STATIC,0,61,199,39 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -401,6 +440,11 @@ BEGIN BEGIN BOTTOMMARGIN, 288 END + + IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING, DIALOG + BEGIN + BOTTOMMARGIN, 156 + END END #endif // APSTUDIO_INVOKED @@ -450,6 +494,11 @@ BEGIN 0 END +IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING AFX_DIALOG_LAYOUT +BEGIN + 0 +END + ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp b/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp index 4140d1c..8cbba2c 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp @@ -536,6 +536,7 @@ struct AppleseedRendererParamDlg::Impl IParamMap2* m_pmap_image_sampling; IParamMap2* m_pmap_lighting; IParamMap2* m_pmap_pathtracer; + IParamMap2* m_pmap_guided_pathtracer; IParamMap2* m_pmap_sppm; IParamMap2* m_pmap_postprocessing; IParamMap2* m_pmap_system; @@ -548,6 +549,7 @@ struct AppleseedRendererParamDlg::Impl , m_pmap_image_sampling(nullptr) , m_pmap_lighting(nullptr) , m_pmap_pathtracer(nullptr) + , m_pmap_guided_pathtracer(nullptr) , m_pmap_sppm(nullptr) , m_pmap_postprocessing(nullptr) , m_pmap_system(nullptr) @@ -595,6 +597,15 @@ struct AppleseedRendererParamDlg::Impl L"Path Tracing", 0); + m_pmap_guided_pathtracer = CreateRParamMap2( + 7, + renderer->GetParamBlock(0), + rend_params, + g_module, + MAKEINTRESOURCE(IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING), + L"Guided Path Tracing", + 0); + m_pmap_sppm = CreateRParamMap2( 4, renderer->GetParamBlock(0), @@ -646,6 +657,10 @@ struct AppleseedRendererParamDlg::Impl if (m_pmap_output != nullptr) DestroyRParamMap2(m_pmap_output); + + if (m_pmap_guided_pathtracer != nullptr) + DestroyRParamMap2(m_pmap_guided_pathtracer); + } }; diff --git a/src/appleseed-max-impl/appleseedrenderer/datachunks.h b/src/appleseed-max-impl/appleseedrenderer/datachunks.h index d701066..d8ce527 100644 --- a/src/appleseed-max-impl/appleseedrenderer/datachunks.h +++ b/src/appleseed-max-impl/appleseedrenderer/datachunks.h @@ -138,3 +138,5 @@ const USHORT ChunkSettingsSPPMViewPhotons = 0x1710; const USHORT ChunkSettingsSPPMViewPhotonsRadius = 0x1711; const USHORT ChunkSettingsSPPMMaxRayIntensitySet = 0x1712; const USHORT ChunkSettingsSPPMMaxRayIntensity = 0x1713; + +const USHORT ChunkSettingsGuidedPathtracer = 0x1800; diff --git a/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp b/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp index d9dfd19..e512fc5 100644 --- a/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp @@ -99,6 +99,17 @@ namespace m_max_ray_intensity = 1.0f; m_clamp_roughness = false; + m_gpt_samples_per_pass = 8; + m_gpt_enable_guided_bounce_limit = true; + m_gpt_max_guided_bounces = 8; + m_gpt_spatial_filter_type = 0; + m_gpt_directional_filter_type = 0; + m_gpt_guided_bounce_mode = 0; + m_gpt_sampling_fraction_learning_rate = 0.01f; + m_gpt_iteration_progression_mode = 0; + m_gpt_bsdf_sampling_fraction_mode = 0; + m_gpt_fixed_bsdf_sampling_fraction = 0.5f; + m_sppm_photon_type = 1; m_sppm_direct_lighting_mode = 0; m_sppm_enable_caustics = true; @@ -192,8 +203,9 @@ const char* get_lighting_engine_type(const int lighting_engine_type) { switch (lighting_engine_type) { - case 0: return "pt"; - case 1: return "sppm"; + case 0: return "pt"; // unidirectional path tracing + case 1: return "sppm"; // stochastic progressive photon mapping + case 2: return "gpt"; // guided path tracing default: assert(!"Invalid lighting engine type."); return "pt"; @@ -237,6 +249,70 @@ const char* get_sppm_direct_lighting_mode(const int lighting_mode) } } +const char* get_gpt_spatial_filter_type(const int filter_type) +{ + switch (filter_type) + { + case 0: return "stochastic"; + case 1: return "box"; + case 2: return "nearest"; + default: + assert(!"Invalid spatial filter type."); + return "stochastic"; + } +} + +const char* get_gpt_directional_filter_type(const int filter_type) +{ + switch (filter_type) + { + case 0: return "box"; + case 1: return "nearest"; + default: + assert(!"Invalid directional filter type."); + return "box"; + } +} + +const char* get_gpt_guided_bounce_mode(const int bounce_mode) +{ + switch (bounce_mode) + { + case 0: return "learn"; + case 1: return "strictly_diffuse"; + case 2: return "strictly_glossy"; + case 3: return "prefer_diffuse"; + case 4: return "prefer_glossy"; + default: + assert(!"Invalid guided bounce mode."); + return "learn"; + } +} + +const char* get_gpt_iteration_progression_mode(const int mode_type) +{ + switch (mode_type) + { + case 0: return "combine"; + case 1: return "automatic"; + default: + assert(!"Unknown parameter for iteration progression."); + return "combine"; + } +} + +const char* get_gpt_sampling_fraction_mode(const int mode_type) +{ + switch (mode_type) + { + case 0: return "learn"; + case 1: return "fixed"; + default: + assert(!"Unknown parameter for bsdf sampling fraction mode."); + return "learn"; + } +} + const RendererSettings& RendererSettings::defaults() { static DefaultRendererSettings default_settings; @@ -252,6 +328,8 @@ void RendererSettings::apply(asr::Project& project) const apply_settings_to_interactive_config(project); } +// Common render settings. + void RendererSettings::apply_common_settings(asr::Project& project, const char* config_name) const { asr::ParamArray& params = project.configurations().get_by_name(config_name)->get_parameters(); @@ -264,6 +342,8 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* params.insert_path("light_sampler.algorithm", get_lighting_algorithm_type(m_light_sampling_algorithm)); + // Path tracing. + params.insert_path("pt.max_bounces", m_global_bounces); if (m_diffuse_bounces_enabled) @@ -297,6 +377,8 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* if (m_max_ray_intensity_set) params.insert_path("pt.max_ray_intensity", m_max_ray_intensity); + // SPPM. + params.insert_path("sppm.photon_type", get_sppm_photon_type(m_sppm_photon_type)); params.insert_path("sppm.dl_mode", get_sppm_direct_lighting_mode(m_sppm_direct_lighting_mode)); params.insert_path("sppm.enable_caustics", m_sppm_enable_caustics); @@ -322,6 +404,57 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* params.insert_path("sppm.view_photons", m_sppm_view_photons); params.insert_path("sppm.view_photons_radius", m_sppm_view_photons_radius); + // Guided path tracing. + + params.insert_path("gpt.bsdf_sampling_fraction", get_gpt_sampling_fraction_mode(m_gpt_bsdf_sampling_fraction_mode)); + params.insert_path("gpt.fixed_bsdf_sampling_fraction_value", m_gpt_fixed_bsdf_sampling_fraction); + params.insert_path("gpt.guided_bounce_mode", get_gpt_guided_bounce_mode(m_gpt_guided_bounce_mode)); + params.insert_path("gpt.iteration_progression", get_gpt_iteration_progression_mode(m_gpt_iteration_progression_mode)); + params.insert_path("gpt.learning_rate", m_gpt_sampling_fraction_learning_rate); + params.insert_path("gpt.spatial_filter", get_gpt_spatial_filter_type(m_gpt_spatial_filter_type)); + params.insert_path("gpt.samples_per_pass", m_gpt_samples_per_pass); + params.insert_path("gpt.directional_filter", get_gpt_directional_filter_type(m_gpt_directional_filter_type)); + params.insert_path("gpt.rr_min_path_length", m_rr_min_path_length); + params.insert_path("gpt.next_event_estimation", "true"); + + if (m_gpt_enable_guided_bounce_limit) + params.insert_path("gpt.max_guided_bounces", m_gpt_max_guided_bounces); + else params.insert_path("gpt.max_guided_bounces", -1); + + if (!m_dl_enable_dl) + params.insert_path("gpt.enable_dl", false); + + params.insert_path("gpt.enable_caustics", m_enable_caustics); + params.insert_path("gpt.dl_light_samples", m_dl_light_samples); + params.insert_path("gpt.dl_low_light_threshold", m_dl_low_light_threshold); + params.insert_path("gpt.ibl_env_samples", m_ibl_env_samples); + params.insert_path("gpt.enable_ibl", m_background_emits_light); + params.insert_path("gpt.max_bounces", m_global_bounces); + + if (m_diffuse_bounces_enabled) + params.insert_path("gpt.max_diffuse_bounces", m_diffuse_bounces); + + if (!m_enable_gi) + params.insert_path("gpt.max_diffuse_bounces", 0); + + if (m_glossy_bounces_enabled) + params.insert_path("gpt.max_glossy_bounces", m_glossy_bounces); + + if (m_specular_bounces_enabled) + params.insert_path("gpt.max_specular_bounces", m_specular_bounces); + + if (m_volume_bounces_enabled) + params.insert_path("gpt.max_volume_bounces", m_volume_bounces); + + params.insert_path("gpt.volume_distance_samples", m_volume_distance_samples); + params.insert_path("gpt.optimize_for_lights_outside_volumes", m_optimize_for_lights_outside_volumes); + params.insert_path("gpt.clamp_roughness", m_clamp_roughness); + + if (m_max_ray_intensity_set) + params.insert_path("gpt.max_ray_intensity", m_max_ray_intensity); + + // System. + params.insert_path("use_embree", m_enable_embree); params.insert_path("texture_store.max_size", m_texture_cache_size * 1024 * 1024); @@ -333,13 +466,22 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* params.insert_path("shading_engine.override_shading.mode", get_shader_override_type(m_shader_override)); } +// Final render settings. + void RendererSettings::apply_settings_to_final_config(asr::Project& project) const { asr::ParamArray& params = project.configurations().get_by_name("final")->get_parameters(); params.insert_path("generic_frame_renderer.tile_ordering", "spiral"); params.insert_path("passes", m_passes); - params.insert_path("shading_result_framebuffer", m_passes == 1 ? "ephemeral" : "permanent"); + if (m_passes == 1 && m_lighting_algorithm == 0) + { + params.insert_path("shading_result_framebuffer", "ephemeral"); + } + else + { + params.insert_path("shading_result_framebuffer", "permanent"); + } if (m_sampler_type == 0) { @@ -358,6 +500,8 @@ void RendererSettings::apply_settings_to_final_config(asr::Project& project) con } } +// Interactive render settings. + void RendererSettings::apply_settings_to_interactive_config(asr::Project& project) const { asr::ParamArray& params = project.configurations().get_by_name("interactive")->get_parameters(); diff --git a/src/appleseed-max-impl/appleseedrenderer/renderersettings.h b/src/appleseed-max-impl/appleseedrenderer/renderersettings.h index 0d86e34..0740c4e 100644 --- a/src/appleseed-max-impl/appleseedrenderer/renderersettings.h +++ b/src/appleseed-max-impl/appleseedrenderer/renderersettings.h @@ -120,6 +120,21 @@ class RendererSettings int m_rr_min_path_length; bool m_optimize_for_lights_outside_volumes; + // + // Guided Path Tracer. + // + + int m_gpt_samples_per_pass; + bool m_gpt_enable_guided_bounce_limit; + int m_gpt_max_guided_bounces; + int m_gpt_spatial_filter_type; + int m_gpt_directional_filter_type; + int m_gpt_guided_bounce_mode; + float m_gpt_sampling_fraction_learning_rate; + int m_gpt_iteration_progression_mode; + int m_gpt_bsdf_sampling_fraction_mode; + float m_gpt_fixed_bsdf_sampling_fraction; + // // Stochastic Progressive Photon Mapping. // diff --git a/src/appleseed-max-impl/appleseedrenderer/resource.h b/src/appleseed-max-impl/appleseedrenderer/resource.h index 8c0ae87..2ff5c57 100644 --- a/src/appleseed-max-impl/appleseedrenderer/resource.h +++ b/src/appleseed-max-impl/appleseedrenderer/resource.h @@ -2,239 +2,273 @@ // Microsoft Visual C++ generated include file. // Used by appleseedrenderer.rc // -#define IDD_FORMVIEW_RENDERERPARAMS_ABOUT 100 -#define IDC_TEXT_PLUGIN_VERSION 101 -#define IDC_TEXT_APPLESEED_VERSION 102 -#define IDC_STATIC_NEW_VERSION 103 -#define IDC_BUTTON_DOWNLOAD 104 -#define IDD_FORMVIEW_RENDERERPARAMS_IMAGESAMPLING 200 -#define IDC_TEXT_PIXEL_SAMPLES 201 -#define IDC_SPINNER_PIXEL_SAMPLES 202 -#define IDC_TEXT_PASSES 203 -#define IDC_SPINNER_PASSES 204 -#define IDC_TEXT_TILE_SIZE 205 -#define IDC_SPINNER_TILE_SIZE 206 -#define IDC_COMBO_FILTER 207 -#define IDC_TEXT_FILTER_SIZE 208 -#define IDC_SPINNER_FILTER_SIZE 209 -#define IDS_RENDERERPARAMS_FILTER_TYPE_1 210 -#define IDS_RENDERERPARAMS_FILTER_TYPE_2 211 -#define IDS_RENDERERPARAMS_FILTER_TYPE_3 212 -#define IDS_RENDERERPARAMS_FILTER_TYPE_4 213 -#define IDS_RENDERERPARAMS_FILTER_TYPE_5 214 -#define IDS_RENDERERPARAMS_FILTER_TYPE_6 215 -#define IDS_RENDERERPARAMS_FILTER_TYPE_7 216 -#define IDS_RENDERERPARAMS_FILTER_TYPE_8 217 -#define IDC_COMBO_SAMPLER_TYPE 218 -#define IDS_RENDERERPARAMS_SAMPLER_TYPE_1 219 -#define IDS_RENDERERPARAMS_SAMPLER_TYPE_2 220 -#define IDC_STATIC_ADAPTIVE_BATCH_SIZE 221 -#define IDC_TEXT_ADAPTIVE_BATCH_SIZE 222 -#define IDC_SPINNER_ADAPTIVE_BATCH_SIZE 223 -#define IDC_STATIC_MIN_ADAPTIVE_SAMPLES 224 -#define IDC_TEXT_MIN_ADAPTIVE_SAMPLES 225 -#define IDC_SPINNER_MIN_ADAPTIVE_SAMPLES 226 -#define IDC_STATIC_MAX_ADAPTIVE_SAMPLES 227 -#define IDC_TEXT_MAX_ADAPTIVE_SAMPLES 228 -#define IDC_SPINNER_MAX_ADAPTIVE_SAMPLES 229 -#define IDC_STATIC_ADAPTIVE_NOISE_THRESHOLD 230 -#define IDC_TEXT_ADAPTIVE_NOISE_THRESHOLD 231 -#define IDC_SPINNER_ADAPTIVE_NOISE_THRESHOLD 232 -#define IDC_TEXT_NOISE_SEED 233 -#define IDC_SPINNER_NOISE_SEED 234 -#define IDC_CHECK_ENABLE_NOISE_SEED 235 -#define IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING 300 -#define IDC_CHECK_GI 301 -#define IDC_CHECK_CAUSTICS 302 -#define IDC_STATIC_BOUNCES 303 -#define IDC_TEXT_BOUNCES 304 -#define IDC_SPINNER_BOUNCES 305 -#define IDC_CHECK_MAX_RAY_INTENSITY 306 -#define IDC_TEXT_MAX_RAY_INTENSITY 307 -#define IDC_SPINNER_MAX_RAY_INTENSITY 308 -#define IDC_CHECK_BACKGROUND_EMITS_LIGHT 309 -#define IDC_STATIC_BACKGROUND_ALPHA 310 -#define IDC_TEXT_BACKGROUND_ALPHA 311 -#define IDC_SPINNER_BACKGROUND_ALPHA 312 -#define IDC_CHECK_FORCE_OFF_DEFAULT_LIGHT 313 -#define IDC_CHECK_ROUGHNESS 314 -#define IDC_CHECK_ENABLE_DBOUNCE 315 -#define IDC_TEXT_DBOUNCES 316 -#define IDC_SPINNER_DBOUNCES 317 -#define IDC_CHECK_ENABLE_GBOUNCE 318 -#define IDC_TEXT_GBOUNCES 319 -#define IDC_SPINNER_GBOUNCES 320 -#define IDC_CHECK_ENABLE_SBOUNCE 321 -#define IDC_TEXT_SBOUNCES 322 -#define IDC_SPINNER_SBOUNCES 323 -#define IDC_CHECK_ENABLE_VBOUNCE 324 -#define IDC_TEXT_VBOUNCES 325 -#define IDC_SPINNER_VBOUNCES 326 -#define IDC_STATIC_DL_SAMPLES 327 -#define IDC_TEXT_DL_SAMPLES 328 -#define IDC_SPINNER_DL_SAMPLES 329 -#define IDC_STATIC_DL_LOW_LIGHT_THRESHOLD 330 -#define IDC_TEXT_DL_LOW_LIGHT_THRESHOLD 331 -#define IDC_SPINNER_DL_LOW_LIGHT_THRESHOLD 332 -#define IDC_STATIC_ENV_SAMPLES 333 -#define IDC_TEXT_ENV_SAMPLES 334 -#define IDC_SPINNER_ENV_SAMPLES 335 -#define IDC_STATIC_RR_MIN_PATH_LENGTH 336 -#define IDC_TEXT_RR_MIN_PATH_LENGTH 337 -#define IDC_SPINNER_RR_MIN_PATH_LENGTH 338 -#define IDC_CHECK_DL 339 -#define IDC_STATIC_VOL_DISTANCE_SAMPLES 340 -#define IDC_TEXT_VOL_DISTANCE_SAMPLES 341 -#define IDC_SPINNER_VOL_DISTANCE_SAMPLES 342 -#define IDC_CHECK_LIGHT_OUTSIDE_VOLUMES 343 -#define IDD_FORMVIEW_RENDERERPARAMS_OUTPUT 400 -#define IDC_RADIO_RENDER 401 -#define IDC_RADIO_SAVEPROJECT 402 -#define IDC_RADIO_SAVEPROJECT_AND_RENDER 403 -#define IDC_STATIC_PROJECT_FILEPATH 404 -#define IDC_TEXT_PROJECT_FILEPATH 405 -#define IDC_BUTTON_BROWSE 406 -#define IDC_STATIC_SCALE_MULTIPLIER 407 -#define IDC_TEXT_SCALE_MULTIPLIER 408 -#define IDC_SPINNER_SCALE_MULTIPLIER 409 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_1 410 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_2 411 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_3 412 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_4 413 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_5 414 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_6 415 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_7 416 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_8 417 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_9 418 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_10 419 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_11 420 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_12 421 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_13 422 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_14 423 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_15 424 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_16 425 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_17 426 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_18 427 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_19 428 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_20 429 -#define IDC_COMBO_DIAGNOSTIC_SHADER_MODE 430 -#define IDC_TEXT_DIAGNOSTIC_SHADER_MODE 431 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_21 440 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_22 441 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_23 442 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_24 443 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_25 444 -#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_26 445 -#define IDC_TEXT_MATERIAL_PREVIEW_QUALITY 450 -#define IDC_SPINNER_MATERIAL_PREVIEW_QUALITY 451 -#define IDC_STATIC_MATERIAL_PREVIEW_QUALITY 452 -#define IDD_FORMVIEW_RENDERERPARAMS_SYSTEM 500 -#define IDC_TEXT_RENDERINGTHREADS 501 -#define IDC_SPINNER_RENDERINGTHREADS 502 -#define IDC_CHECK_LOW_PRIORITY_MODE 503 -#define IDC_CHECK_USE_MAX_PROCEDURAL_MAPS 504 -#define IDC_CHECK_LOG_MATERIAL_EDITOR 505 -#define IDC_TEXT_TEXTURE_CACHE_SIZE 506 -#define IDC_SPINNER_TEXTURE_CACHE_SIZE 507 -#define IDC_CHECK_ENABLE_EMBREE 508 -#define IDD_DIALOG_LOG 600 -#define IDC_COMBO_LOG 601 -#define IDC_STATIC_LOG 602 -#define IDC_BUTTON_LOG 603 -#define IDC_EDIT_LOG 604 -#define IDC_CHECK_RENDER_STAMP 605 -#define IDC_TEXT_RENDER_STAMP 606 -#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_1 607 -#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_2 608 -#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_3 609 -#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_4 610 -#define IDD_FORMVIEW_RENDERERPARAMS_POSTPROCESSING 700 -#define IDC_COMBO_DENOISE_MODE 701 -#define IDC_CHECK_SKIP_DENOISED_PIXELS 702 -#define IDC_CHECK_RANDOM_PIXEL_ORDER 703 -#define IDC_CHECK_PREFILTER_SPIKES 704 -#define IDC_STATIC_SPIKE_THRESHOLD 705 -#define IDC_TEXT_SPIKE_THRESHOLD 706 -#define IDC_SPINNER_SPIKE_THRESHOLD 707 -#define IDC_STATIC_PATCH_DISTANCE 708 -#define IDC_TEXT_PATCH_DISTANCE 709 -#define IDC_SPINNER_PATCH_DISTANCE 710 -#define IDC_STATIC_DENOISE_SCALES 711 -#define IDC_TEXT_DENOISE_SCALES 712 -#define IDC_SPINNER_DENOISE_SCALES 713 -#define IDS_RENDERERPARAMS_DENOISE_MODE_1 714 -#define IDS_RENDERERPARAMS_DENOISE_MODE_2 715 -#define IDS_RENDERERPARAMS_DENOISE_MODE_3 716 -#define IDD_FORMVIEW_RENDERERPARAMS_LIGHTING 800 -#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1 801 -#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2 802 -#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3 803 -#define IDC_COMBO_LIGHTING_ALGORITHM 804 -#define IDC_COMBO_LIGHT_SAMPLING_ALGORITHM 805 -#define IDS_RENDERERPARAMS_LIGHT_SAMPLER_TYPE_1 806 -#define IDC_CHECK_ENABLE_IMPORTANCE_SAMPLING 810 -#define IDD_FORMVIEW_RENDERERPARAMS_SPPM 900 -#define IDC_COMBO_SPPM_PHOTON_TYPE 901 -#define IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_1 902 -#define IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_2 903 -#define IDC_COMBO_SPPM_DL_TYPE 904 -#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_1 905 -#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_2 906 -#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_3 907 -#define IDC_CHECK_SPPM_CAUSTICS 908 -#define IDC_CHECK_SPPM_IMAGE_BASED_LIGHTING 909 -#define IDC_STATIC_SPPM_PT_BOUNCES 910 -#define IDC_TEXT_SPPM_PT_BOUNCES 911 -#define IDC_SPINNER_SPPM_PT_BOUNCES 912 -#define IDC_CHECK_SPPM_PT_BOUNCES 913 -#define IDC_STATIC_SPPM_PT_RR_MIN_PATH_LENGTH 914 -#define IDC_TEXT_SPPM_PT_RR_MIN_PATH_LENGTH 915 -#define IDC_SPINNER_SPPM_PT_RR_MIN_PATH_LENGTH 916 -#define IDC_STATIC_SPPM_PT_LIGHT_PHOTONS 917 -#define IDC_TEXT_SPPM_PT_LIGHT_PHOTONS 918 -#define IDC_SPINNER_SPPM_PT_LIGHT_PHOTONS 919 -#define IDC_STATIC_SPPM_PT_ENVIRONMENT_PHOTONS 920 -#define IDC_TEXT_SPPM_PT_ENVIRONMENT_PHOTONS 921 -#define IDC_SPINNER_SPPM_PT_ENVIRONMENT_PHOTONS 922 -#define IDC_STATIC_SPPM_RADIANCE_BOUNCES 923 -#define IDC_TEXT_SPPM_RADIANCE_BOUNCES 924 -#define IDC_SPINNER_SPPM_RADIANCE_BOUNCES 925 -#define IDC_CHECK_SPPM_RADIANCE_BOUNCES 926 -#define IDC_STATIC_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 927 -#define IDC_TEXT_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 928 -#define IDC_SPINNER_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 929 -#define IDC_STATIC_SPPM_RADIANCE_INITIAL_RADIUS 930 -#define IDC_TEXT_SPPM_RADIANCE_INITIAL_RADIUS 931 -#define IDC_SPINNER_SPPM_RADIANCE_INITIAL_RADIUS 932 -#define IDC_STATIC_SPPM_RADIANCE_MAX_PHOTONS 933 -#define IDC_TEXT_SPPM_RADIANCE_MAX_PHOTONS 934 -#define IDC_SPINNER_SPPM_RADIANCE_MAX_PHOTONS 935 -#define IDC_STATIC_SPPM_RADIANCE_ALPHA 936 -#define IDC_TEXT_SPPM_RADIANCE_ALPHA 937 -#define IDC_SPINNER_SPPM_RADIANCE_ALPHA 938 -#define IDC_CHECK_SPPM_VIEW_PHOTONS 939 -#define IDC_SPINNER_SPPM_VIEW_PHOTONS_RADIUS 940 -#define IDC_TEXT_SPPM_VIEW_PHOTONS_RADIUS 941 -#define IDC_STATIC_SPPM_VIEW_PHOTONS_RADIUS 942 -#define IDC_CHECK_SPPM_MAX_RAY_INTENSITY 943 -#define IDC_SPINNER_SPPM_MAX_RAY_INTENSITY 944 -#define IDC_TEXT_SPPM_MAX_RAY_INTENSITY 945 -#define IDC_STATIC_SPPM_MAX_RAY_INTENSITY 946 - -#define IDC_STATIC_LIGHTING 453 -#define IDC_STATIC_OVERRIDE_MATERIAL 454 -#define IDC_BUTTON_OVERRIDE_MATERIAL 455 -#define IDC_CHECK_OVERRIDE_MATERIAL 456 -#define IDC_CHECK_OVERRIDE_MATERIAL_SKIP_LIGHTS 457 -#define IDC_CHECK_OVERRIDE_MATERIAL_SKIP_GLASS 458 +#define IDD_FORMVIEW_RENDERERPARAMS_ABOUT 100 +#define IDC_TEXT_PLUGIN_VERSION 101 +#define IDD_FORMVIEW 101 +#define IDC_TEXT_APPLESEED_VERSION 102 +#define IDC_STATIC_NEW_VERSION 103 +#define IDC_BUTTON_DOWNLOAD 104 +#define IDD_FORMVIEW_RENDERERPARAMS_IMAGESAMPLING 200 +#define IDC_TEXT_PIXEL_SAMPLES 201 +#define IDC_SPINNER_PIXEL_SAMPLES 202 +#define IDC_TEXT_PASSES 203 +#define IDC_SPINNER_PASSES 204 +#define IDC_TEXT_TILE_SIZE 205 +#define IDC_SPINNER_TILE_SIZE 206 +#define IDC_COMBO_FILTER 207 +#define IDC_TEXT_FILTER_SIZE 208 +#define IDC_SPINNER_FILTER_SIZE 209 +#define IDS_RENDERERPARAMS_FILTER_TYPE_1 210 +#define IDS_RENDERERPARAMS_FILTER_TYPE_2 211 +#define IDS_RENDERERPARAMS_FILTER_TYPE_3 212 +#define IDS_RENDERERPARAMS_FILTER_TYPE_4 213 +#define IDS_RENDERERPARAMS_FILTER_TYPE_5 214 +#define IDS_RENDERERPARAMS_FILTER_TYPE_6 215 +#define IDS_RENDERERPARAMS_FILTER_TYPE_7 216 +#define IDS_RENDERERPARAMS_FILTER_TYPE_8 217 +#define IDC_COMBO_SAMPLER_TYPE 218 +#define IDS_RENDERERPARAMS_SAMPLER_TYPE_1 219 +#define IDS_RENDERERPARAMS_SAMPLER_TYPE_2 220 +#define IDC_STATIC_ADAPTIVE_BATCH_SIZE 221 +#define IDC_TEXT_ADAPTIVE_BATCH_SIZE 222 +#define IDC_SPINNER_ADAPTIVE_BATCH_SIZE 223 +#define IDC_STATIC_MIN_ADAPTIVE_SAMPLES 224 +#define IDC_TEXT_MIN_ADAPTIVE_SAMPLES 225 +#define IDC_SPINNER_MIN_ADAPTIVE_SAMPLES 226 +#define IDC_STATIC_MAX_ADAPTIVE_SAMPLES 227 +#define IDC_TEXT_MAX_ADAPTIVE_SAMPLES 228 +#define IDC_SPINNER_MAX_ADAPTIVE_SAMPLES 229 +#define IDC_STATIC_ADAPTIVE_NOISE_THRESHOLD 230 +#define IDC_TEXT_ADAPTIVE_NOISE_THRESHOLD 231 +#define IDC_SPINNER_ADAPTIVE_NOISE_THRESHOLD 232 +#define IDC_TEXT_NOISE_SEED 233 +#define IDC_SPINNER_NOISE_SEED 234 +#define IDC_CHECK_ENABLE_NOISE_SEED 235 +#define IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING 300 +#define IDC_CHECK_GI 301 +#define IDC_CHECK_CAUSTICS 302 +#define IDC_STATIC_BOUNCES 303 +#define IDC_TEXT_BOUNCES 304 +#define IDC_SPINNER_BOUNCES 305 +#define IDC_CHECK_MAX_RAY_INTENSITY 306 +#define IDC_TEXT_MAX_RAY_INTENSITY 307 +#define IDC_SPINNER_MAX_RAY_INTENSITY 308 +#define IDC_CHECK_BACKGROUND_EMITS_LIGHT 309 +#define IDC_STATIC_BACKGROUND_ALPHA 310 +#define IDC_TEXT_BACKGROUND_ALPHA 311 +#define IDC_SPINNER_BACKGROUND_ALPHA 312 +#define IDC_CHECK_FORCE_OFF_DEFAULT_LIGHT 313 +#define IDC_CHECK_ROUGHNESS 314 +#define IDC_CHECK_ENABLE_DBOUNCE 315 +#define IDC_TEXT_DBOUNCES 316 +#define IDC_SPINNER_DBOUNCES 317 +#define IDC_CHECK_ENABLE_GBOUNCE 318 +#define IDC_TEXT_GBOUNCES 319 +#define IDC_SPINNER_GBOUNCES 320 +#define IDC_CHECK_ENABLE_SBOUNCE 321 +#define IDC_TEXT_SBOUNCES 322 +#define IDC_SPINNER_SBOUNCES 323 +#define IDC_CHECK_ENABLE_VBOUNCE 324 +#define IDC_TEXT_VBOUNCES 325 +#define IDC_SPINNER_VBOUNCES 326 +#define IDC_STATIC_DL_SAMPLES 327 +#define IDC_TEXT_DL_SAMPLES 328 +#define IDC_SPINNER_DL_SAMPLES 329 +#define IDC_STATIC_DL_LOW_LIGHT_THRESHOLD 330 +#define IDC_TEXT_DL_LOW_LIGHT_THRESHOLD 331 +#define IDC_SPINNER_DL_LOW_LIGHT_THRESHOLD 332 +#define IDC_STATIC_ENV_SAMPLES 333 +#define IDC_TEXT_ENV_SAMPLES 334 +#define IDC_SPINNER_ENV_SAMPLES 335 +#define IDC_STATIC_RR_MIN_PATH_LENGTH 336 +#define IDC_TEXT_RR_MIN_PATH_LENGTH 337 +#define IDC_SPINNER_RR_MIN_PATH_LENGTH 338 +#define IDC_CHECK_DL 339 +#define IDC_STATIC_VOL_DISTANCE_SAMPLES 340 +#define IDC_TEXT_VOL_DISTANCE_SAMPLES 341 +#define IDC_SPINNER_VOL_DISTANCE_SAMPLES 342 +#define IDC_CHECK_LIGHT_OUTSIDE_VOLUMES 343 +#define IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING 350 +#define IDC_TEXT_GPT_SAMPLES_PER_PASS 351 +#define IDC_SPINNER_GPT_SAMPLES_PER_PASS 352 +#define IDC_STATIC_GPT_SAMPLES_PER_PASS 353 +#define IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE 354 +#define IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_1 355 +#define IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_2 356 +#define IDC_CHECK_GPT_GUIDED_PATH_LENGTH 357 +#define IDC_TEXT_GPT_GUIDED_PATH_LENGTH 358 +#define IDC_STATIC_GPT_GUIDED_PATH_LENGTH 359 +#define IDC_SPINNER_GPT_GUIDED_PATH_LENGTH 360 +#define IDC_COMBO_GPT_SPATIAL_FILTER_TYPE 361 +#define IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_1 362 +#define IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_2 363 +#define IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_3 364 +#define IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE 365 +#define IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_1 366 +#define IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_2 367 +#define IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE 368 +#define IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_1 369 +#define IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_2 370 +#define IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_3 371 +#define IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_4 372 +#define IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_5 373 +#define IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE 374 +#define IDC_STATIC_GPT_SAMPLING_FRACTION_LEARNING_RATE 375 +#define IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE 376 +#define IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE 377 +#define IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_1 378 +#define IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_2 379 +#define IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION 380 +#define IDC_STATIC_GPT_FIXED_BSDF_SAMPLING_FRACTION 381 +#define IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION 382 +#define IDD_FORMVIEW_RENDERERPARAMS_OUTPUT 400 +#define IDC_RADIO_RENDER 401 +#define IDC_RADIO_SAVEPROJECT 402 +#define IDC_RADIO_SAVEPROJECT_AND_RENDER 403 +#define IDC_STATIC_PROJECT_FILEPATH 404 +#define IDC_TEXT_PROJECT_FILEPATH 405 +#define IDC_BUTTON_BROWSE 406 +#define IDC_STATIC_SCALE_MULTIPLIER 407 +#define IDC_TEXT_SCALE_MULTIPLIER 408 +#define IDC_SPINNER_SCALE_MULTIPLIER 409 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_1 410 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_2 411 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_3 412 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_4 413 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_5 414 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_6 415 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_7 416 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_8 417 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_9 418 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_10 419 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_11 420 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_12 421 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_13 422 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_14 423 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_15 424 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_16 425 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_17 426 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_18 427 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_19 428 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_20 429 +#define IDC_COMBO_DIAGNOSTIC_SHADER_MODE 430 +#define IDC_TEXT_DIAGNOSTIC_SHADER_MODE 431 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_21 440 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_22 441 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_23 442 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_24 443 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_25 444 +#define IDS_RENDERERPARAMS_SHADER_OVERRIDE_26 445 +#define IDC_TEXT_MATERIAL_PREVIEW_QUALITY 450 +#define IDC_SPINNER_MATERIAL_PREVIEW_QUALITY 451 +#define IDC_STATIC_MATERIAL_PREVIEW_QUALITY 452 +#define IDC_STATIC_LIGHTING 453 +#define IDC_STATIC_OVERRIDE_MATERIAL 454 +#define IDC_BUTTON_OVERRIDE_MATERIAL 455 +#define IDC_CHECK_OVERRIDE_MATERIAL 456 +#define IDC_CHECK_OVERRIDE_MATERIAL_SKIP_LIGHTS 457 +#define IDC_CHECK_OVERRIDE_MATERIAL_SKIP_GLASS 458 +#define IDD_FORMVIEW_RENDERERPARAMS_SYSTEM 500 +#define IDC_TEXT_RENDERINGTHREADS 501 +#define IDC_SPINNER_RENDERINGTHREADS 502 +#define IDC_CHECK_LOW_PRIORITY_MODE 503 +#define IDC_CHECK_USE_MAX_PROCEDURAL_MAPS 504 +#define IDC_CHECK_LOG_MATERIAL_EDITOR 505 +#define IDC_TEXT_TEXTURE_CACHE_SIZE 506 +#define IDC_SPINNER_TEXTURE_CACHE_SIZE 507 +#define IDC_CHECK_ENABLE_EMBREE 508 +#define IDD_DIALOG_LOG 600 +#define IDC_COMBO_LOG 601 +#define IDC_STATIC_LOG 602 +#define IDC_BUTTON_LOG 603 +#define IDC_EDIT_LOG 604 +#define IDC_CHECK_RENDER_STAMP 605 +#define IDC_TEXT_RENDER_STAMP 606 +#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_1 607 +#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_2 608 +#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_3 609 +#define IDS_RENDERERPARAMS_LOG_OPEN_MODE_4 610 +#define IDD_FORMVIEW_RENDERERPARAMS_POSTPROCESSING 700 +#define IDC_COMBO_DENOISE_MODE 701 +#define IDC_CHECK_SKIP_DENOISED_PIXELS 702 +#define IDC_CHECK_RANDOM_PIXEL_ORDER 703 +#define IDC_CHECK_PREFILTER_SPIKES 704 +#define IDC_STATIC_SPIKE_THRESHOLD 705 +#define IDC_TEXT_SPIKE_THRESHOLD 706 +#define IDC_SPINNER_SPIKE_THRESHOLD 707 +#define IDC_STATIC_PATCH_DISTANCE 708 +#define IDC_TEXT_PATCH_DISTANCE 709 +#define IDC_SPINNER_PATCH_DISTANCE 710 +#define IDC_STATIC_DENOISE_SCALES 711 +#define IDC_TEXT_DENOISE_SCALES 712 +#define IDC_SPINNER_DENOISE_SCALES 713 +#define IDS_RENDERERPARAMS_DENOISE_MODE_1 714 +#define IDS_RENDERERPARAMS_DENOISE_MODE_2 715 +#define IDS_RENDERERPARAMS_DENOISE_MODE_3 716 +#define IDD_FORMVIEW_RENDERERPARAMS_LIGHTING 800 +#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1 801 +#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2 802 +#define IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3 803 +#define IDC_COMBO_LIGHTING_ALGORITHM 804 +#define IDC_COMBO_LIGHT_SAMPLING_ALGORITHM 805 +#define IDS_RENDERERPARAMS_LIGHT_SAMPLER_TYPE_1 806 +#define IDC_CHECK_ENABLE_IMPORTANCE_SAMPLING 810 +#define IDD_FORMVIEW_RENDERERPARAMS_SPPM 900 +#define IDC_COMBO_SPPM_PHOTON_TYPE 901 +#define IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_1 902 +#define IDS_RENDERERPARAMS_SPPM_PHOTON_TYPE_2 903 +#define IDC_COMBO_SPPM_DL_TYPE 904 +#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_1 905 +#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_2 906 +#define IDS_RENDERERPARAMS_SPPM_DL_TYPE_3 907 +#define IDC_CHECK_SPPM_CAUSTICS 908 +#define IDC_CHECK_SPPM_IMAGE_BASED_LIGHTING 909 +#define IDC_STATIC_SPPM_PT_BOUNCES 910 +#define IDC_TEXT_SPPM_PT_BOUNCES 911 +#define IDC_SPINNER_SPPM_PT_BOUNCES 912 +#define IDC_CHECK_SPPM_PT_BOUNCES 913 +#define IDC_STATIC_SPPM_PT_RR_MIN_PATH_LENGTH 914 +#define IDC_TEXT_SPPM_PT_RR_MIN_PATH_LENGTH 915 +#define IDC_SPINNER_SPPM_PT_RR_MIN_PATH_LENGTH 916 +#define IDC_STATIC_SPPM_PT_LIGHT_PHOTONS 917 +#define IDC_TEXT_SPPM_PT_LIGHT_PHOTONS 918 +#define IDC_SPINNER_SPPM_PT_LIGHT_PHOTONS 919 +#define IDC_STATIC_SPPM_PT_ENVIRONMENT_PHOTONS 920 +#define IDC_TEXT_SPPM_PT_ENVIRONMENT_PHOTONS 921 +#define IDC_SPINNER_SPPM_PT_ENVIRONMENT_PHOTONS 922 +#define IDC_STATIC_SPPM_RADIANCE_BOUNCES 923 +#define IDC_TEXT_SPPM_RADIANCE_BOUNCES 924 +#define IDC_SPINNER_SPPM_RADIANCE_BOUNCES 925 +#define IDC_CHECK_SPPM_RADIANCE_BOUNCES 926 +#define IDC_STATIC_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 927 +#define IDC_TEXT_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 928 +#define IDC_SPINNER_SPPM_RADIANCE_RR_MIN_PATH_LENGTH 929 +#define IDC_STATIC_SPPM_RADIANCE_INITIAL_RADIUS 930 +#define IDC_TEXT_SPPM_RADIANCE_INITIAL_RADIUS 931 +#define IDC_SPINNER_SPPM_RADIANCE_INITIAL_RADIUS 932 +#define IDC_STATIC_SPPM_RADIANCE_MAX_PHOTONS 933 +#define IDC_TEXT_SPPM_RADIANCE_MAX_PHOTONS 934 +#define IDC_SPINNER_SPPM_RADIANCE_MAX_PHOTONS 935 +#define IDC_STATIC_SPPM_RADIANCE_ALPHA 936 +#define IDC_TEXT_SPPM_RADIANCE_ALPHA 937 +#define IDC_SPINNER_SPPM_RADIANCE_ALPHA 938 +#define IDC_CHECK_SPPM_VIEW_PHOTONS 939 +#define IDC_SPINNER_SPPM_VIEW_PHOTONS_RADIUS 940 +#define IDC_TEXT_SPPM_VIEW_PHOTONS_RADIUS 941 +#define IDC_STATIC_SPPM_VIEW_PHOTONS_RADIUS 942 +#define IDC_CHECK_SPPM_MAX_RAY_INTENSITY 943 +#define IDC_SPINNER_SPPM_MAX_RAY_INTENSITY 944 +#define IDC_TEXT_SPPM_MAX_RAY_INTENSITY 945 +#define IDC_STATIC_SPPM_MAX_RAY_INTENSITY 946 +#define IDC_CHECK1 1043 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 111 +#define _APS_NEXT_RESOURCE_VALUE 114 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1043 +#define _APS_NEXT_CONTROL_VALUE 1045 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif From 0747fe6df8e90bf33d4bf92ab30ea871ecb1a3a1 Mon Sep 17 00:00:00 2001 From: Mango-3 Date: Mon, 23 Sep 2019 09:54:04 +0300 Subject: [PATCH 2/2] Reorganize Path Guiding Settings --- .../appleseedrenderer/appleseedrenderer.cpp | 51 ++++++++----- .../appleseedrenderer/appleseedrenderer.rc | 76 ++++++++++--------- .../appleseedrendererparamdlg.cpp | 14 ---- .../appleseedrenderer/renderersettings.cpp | 13 +++- .../appleseedrenderer/renderersettings.h | 1 + .../appleseedrenderer/resource.h | 1 + 6 files changed, 82 insertions(+), 74 deletions(-) diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp index 40b348a..570af43 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.cpp @@ -158,6 +158,7 @@ namespace ParamIdGPTSamplingFractionLearningRate = 92, ParamIdGPTSamplingFractionMode = 93, ParamIdGPTFixedSamplingFractionRatio = 94, + ParamIdGPTEnablePathGuiding = 95, ParamIdSPPMPhotonType = 57, ParamIdSPPMDirectLightingType = 58, @@ -224,7 +225,6 @@ namespace { IDS_RENDERERPARAMS_DENOISE_MODE_3, L"Write Outputs" }, { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, L"Path Tracing" }, { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, L"Stochastic Progressive Photon Mapping" }, - { IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3, L"Guided Path Tracing" }, { IDS_RENDERERPARAMS_LIGHT_SAMPLER_TYPE_1, L"CDF" }, { IDS_RENDERERPARAMS_SHADER_OVERRIDE_1, L"No Override" }, { IDS_RENDERERPARAMS_SHADER_OVERRIDE_2, L"Albedo" }, @@ -706,6 +706,10 @@ void AppleseedRendererPBlockAccessor::Get( // Guided Path Tracer. // + case ParamIdGPTEnablePathGuiding: + v.i = static_cast(settings.m_gpt_enable_path_guiding); + break; + case ParamIdGPTSamplesPerPass: v.i = settings.m_gpt_samples_per_pass; break; @@ -1139,6 +1143,10 @@ void AppleseedRendererPBlockAccessor::Set( // Guided Path Tracer. // + case ParamIdGPTEnablePathGuiding: + settings.m_gpt_enable_path_guiding = v.i > 0; + break; + case ParamIdGPTSamplesPerPass: settings.m_gpt_samples_per_pass = v.i; break; @@ -1209,7 +1217,7 @@ ParamBlockDesc2 g_param_block_desc( 0, // parameter block's reference number // --- P_MULTIMAP arguments --- - 8, + 7, // --- P_AUTO_UI arguments for Parameters rollup --- @@ -1262,13 +1270,6 @@ ParamBlockDesc2 g_param_block_desc( 0, // rollup creation flag nullptr, - ParamMapIdGuidedPathTracer, - IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING, // ID of the dialog template - 0, // ID of the dialog's title string - 0, // IParamMap2 creation/deletion flag mask - 0, // rollup creation flag - nullptr, - // --- Parameters specifications for Output rollup --- @@ -1434,7 +1435,7 @@ ParamBlockDesc2 g_param_block_desc( ParamIdLightingAlgorithm, L"lighting_algorithm", TYPE_INT, P_TRANSIENT, 0, p_ui, ParamMapIdLighting, TYPE_INT_COMBOBOX, IDC_COMBO_LIGHTING_ALGORITHM, - 3, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_3, + 2, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_1, IDS_RENDERERPARAMS_LIGHTING_ALGORITHM_2, p_default, 0, p_accessor, &g_pblock_accessor, p_end, @@ -1851,31 +1852,39 @@ ParamBlockDesc2 g_param_block_desc( p_accessor, &g_pblock_accessor, p_end, - // --- Parameters specifications for Guided Path Tracer rollup --- + // --- Parameters specifications for Guided Path Tracer --- + + ParamIdGPTEnablePathGuiding, L"enable_path_guiding", TYPE_BOOL, P_TRANSIENT, 0, + p_ui, ParamMapIdPathTracer, TYPE_SINGLECHEKBOX, IDC_CHECK_GPT_ENABLE_PATH_GUIDING, + p_default, FALSE, + p_enable_ctrls, 10, ParamIdGPTSamplesPerPass, ParamIdGPTGuidedPathLimit, ParamIdGPTSpatialFilterType, ParamIdGPTFixedSamplingFractionRatio, ParamIdGPTEnableGuidedPathLimit, + ParamIdGPTDirectionalFilterType, ParamIdGPTGuidedBounceMode, ParamIdGPTSamplingFractionLearningRate, ParamIdGPTIterationProgressionMode, ParamIdGPTSamplingFractionMode, + p_accessor, & g_pblock_accessor, + p_end, ParamIdGPTSamplesPerPass, L"gpt_samples_per_pass", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_POS_INT, IDC_TEXT_GPT_SAMPLES_PER_PASS, IDC_SPINNER_GPT_SAMPLES_PER_PASS, SPIN_AUTOSCALE, + p_ui, ParamMapIdPathTracer, TYPE_SPINNER, EDITTYPE_POS_INT, IDC_TEXT_GPT_SAMPLES_PER_PASS, IDC_SPINNER_GPT_SAMPLES_PER_PASS, SPIN_AUTOSCALE, p_default, 8, p_range, 1, 1000000, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTEnableGuidedPathLimit, L"enable_path_guide_limit", TYPE_BOOL, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_SINGLECHEKBOX, IDC_CHECK_GPT_GUIDED_PATH_LENGTH, + p_ui, ParamMapIdPathTracer, TYPE_SINGLECHEKBOX, IDC_CHECK_GPT_GUIDED_PATH_LENGTH, p_default, TRUE, p_enable_ctrls, 1, ParamIdGPTGuidedPathLimit, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTGuidedPathLimit, L"path_guide_limit", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_INT, IDC_TEXT_GPT_GUIDED_PATH_LENGTH, IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, SPIN_AUTOSCALE, + p_ui, ParamMapIdPathTracer, TYPE_SPINNER, EDITTYPE_INT, IDC_TEXT_GPT_GUIDED_PATH_LENGTH, IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, SPIN_AUTOSCALE, p_default, 8, p_range, 1, 100, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTSpatialFilterType, L"spatial_filter_type", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SPATIAL_FILTER_TYPE, + p_ui, ParamMapIdPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SPATIAL_FILTER_TYPE, 3, IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_1, IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_2, IDS_RENDERERPARAMS_GPT_SPATIAL_FILTER_TYPE_3, p_default, 0, @@ -1883,14 +1892,14 @@ ParamBlockDesc2 g_param_block_desc( p_end, ParamIdGPTDirectionalFilterType, L"directional_filter_type", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE, + p_ui, ParamMapIdPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE, 2, IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_1, IDS_RENDERERPARAMS_GPT_DIRECTIONAL_FILTER_TYPE_2, p_default, 0, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTGuidedBounceMode, L"guided_bounce_mode", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE, + p_ui, ParamMapIdPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE, 5, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_1, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_2, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_3, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_4, IDS_RENDERERPARAMS_GPT_GUIDED_BOUNCE_MODE_TYPE_5, @@ -1899,28 +1908,28 @@ ParamBlockDesc2 g_param_block_desc( p_end, ParamIdGPTSamplingFractionLearningRate, L"sampling_fraction_learning_rate", TYPE_FLOAT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, SPIN_AUTOSCALE, + p_ui, ParamMapIdPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, SPIN_AUTOSCALE, p_default, 0.01f, p_range, 1.0e-6f, 0.99f, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTIterationProgressionMode, L"iteration_progression_mode", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE, + p_ui, ParamMapIdPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE, 2, IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_1, IDS_RENDERERPARAMS_GPT_ITERATION_PROGRESSION_TYPE_2, p_default, 0, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTFixedSamplingFractionRatio, L"fixed_sampling_fraction_ratio", TYPE_FLOAT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, SPIN_AUTOSCALE, + p_ui, ParamMapIdPathTracer, TYPE_SPINNER, EDITTYPE_FLOAT, IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, SPIN_AUTOSCALE, p_default, 0.5f, p_range, 1.0e-6f, 0.99f, p_accessor, & g_pblock_accessor, p_end, ParamIdGPTSamplingFractionMode, L"bsdf_sampling_fraction_mode", TYPE_INT, P_TRANSIENT, 0, - p_ui, ParamMapIdGuidedPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE, + p_ui, ParamMapIdPathTracer, TYPE_INT_COMBOBOX, IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE, 2, IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_1, IDS_RENDERERPARAMS_GPT_SAMPLING_FRACTION_MODE_TYPE_2, p_default, 0, p_accessor, & g_pblock_accessor, diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc index dc62925..2dc9266 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrenderer.rc @@ -118,7 +118,7 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,162,124,10 END -IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING DIALOGEX 0, 0, 200, 210 +IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING DIALOGEX 0, 0, 200, 408 STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN @@ -174,6 +174,42 @@ BEGIN "SpinnerControl",WS_TABSTOP,124,115,6,10 CONTROL "Optimize For Lights Outside Volumes",IDC_CHECK_LIGHT_OUTSIDE_VOLUMES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,0,132,130,10 + LTEXT "Samples Per Pass:",IDC_STATIC_GPT_SAMPLES_PER_PASS,7,241,65,8 + CONTROL "Samples Per Pass",IDC_TEXT_GPT_SAMPLES_PER_PASS, + "CustEdit",WS_TABSTOP,107,240,22,10 + CONTROL "Samples Per Pass",IDC_SPINNER_GPT_SAMPLES_PER_PASS, + "SpinnerControl",WS_TABSTOP,131,240,6,10 + CONTROL "Max. Guided Path Length",IDC_TEXT_GPT_GUIDED_PATH_LENGTH, + "CustEdit",WS_TABSTOP,107,328,21,10 + CONTROL "Max. Guided Path Length",IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, + "SpinnerControl",WS_TABSTOP,131,328,6,10 + CONTROL "Max Guided Bounces:",IDC_CHECK_GPT_GUIDED_PATH_LENGTH, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,329,95,8 + LTEXT "Spatial Filter:",IDC_STATIC,7,257,56,8 + COMBOBOX IDC_COMBO_GPT_SPATIAL_FILTER_TYPE,107,254,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Directional Filter:",IDC_STATIC,7,272,55,8 + COMBOBOX IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE,107,270,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Guided Bounce Mode:",IDC_STATIC,7,313,73,8 + COMBOBOX IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE,107,311,83,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Learning Rate:",IDC_STATIC_GPT_SAMPLING_FRACTION_LEARNING_RATE,7,374,48,8 + CONTROL "BSDF Sampling Fraction Learning Rate",IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, + "CustEdit",WS_TABSTOP,107,373,30,10 + CONTROL "BSDF Sampling Fraction Learning Rate",IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, + "SpinnerControl",WS_TABSTOP,138,373,6,10 + LTEXT "Iteration Progression:",IDC_STATIC,7,288,83,8 + COMBOBOX IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE,107,286,84,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Mode:",IDC_STATIC,7,359,102,8 + COMBOBOX IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE,107,356,39,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Fixed Fraction:",IDC_STATIC_GPT_FIXED_BSDF_SAMPLING_FRACTION,7,388,101,8 + CONTROL "Fixed BSDF Sampling Fraction",IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, + "CustEdit",WS_TABSTOP,107,388,30,10 + CONTROL "Fixed BSDF Sampling Fraction",IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, + "SpinnerControl",WS_TABSTOP,138,388,6,10 + GROUPBOX "BSDF / SD-Tree Sampling Fraction",IDC_STATIC,4,345,190,56 + GROUPBOX "Path Continuation",IDC_STATIC,4,300,190,42 + CONTROL "Enable Guided Path Tracing",IDC_CHECK_GPT_ENABLE_PATH_GUIDING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,227,105,10 + GROUPBOX "Guided Path Tracing",IDC_STATIC,0,215,198,190 END IDD_FORMVIEW_RENDERERPARAMS_SYSTEM DIALOGEX 0, 0, 200, 96 @@ -350,43 +386,10 @@ BEGIN "SpinnerControl",WS_TABSTOP,125,140,6,10 END -IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING DIALOGEX 0, 0, 200, 163 +IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING DIALOGEX 0, 0, 200, 17 STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN - LTEXT "Samples Per Pass:",IDC_STATIC_GPT_SAMPLES_PER_PASS,0,1,65,8 - CONTROL "Samples Per Pass",IDC_TEXT_GPT_SAMPLES_PER_PASS, - "CustEdit",WS_TABSTOP,107,0,22,10 - CONTROL "Samples Per Pass",IDC_SPINNER_GPT_SAMPLES_PER_PASS, - "SpinnerControl",WS_TABSTOP,131,0,6,10 - CONTROL "Max. Guided Path Length",IDC_TEXT_GPT_GUIDED_PATH_LENGTH, - "CustEdit",WS_TABSTOP,107,87,21,10 - CONTROL "Max. Guided Path Length",IDC_SPINNER_GPT_GUIDED_PATH_LENGTH, - "SpinnerControl",WS_TABSTOP,131,87,6,10 - CONTROL "Max. Guided Bounces:",IDC_CHECK_GPT_GUIDED_PATH_LENGTH, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,88,95,8 - LTEXT "Spatial Filter:",IDC_STATIC,0,17,56,8 - COMBOBOX IDC_COMBO_GPT_SPATIAL_FILTER_TYPE,107,14,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Directional Filter:",IDC_STATIC,0,32,55,8 - COMBOBOX IDC_COMBO_GPT_DIRECTIONAL_FILTER_TYPE,107,30,71,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Guided Bounce Mode:",IDC_STATIC,4,72,73,8 - COMBOBOX IDC_COMBO_GPT_GUIDED_BOUNCE_MODE_TYPE,107,70,92,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Learning Rate:",IDC_STATIC_GPT_SAMPLING_FRACTION_LEARNING_RATE,3,132,48,8 - CONTROL "BSDF Sampling Fraction Learning Rate",IDC_TEXT_GPT_SAMPLING_FRACTION_LEARNING_RATE, - "CustEdit",WS_TABSTOP,107,131,30,10 - CONTROL "BSDF Sampling Fraction Learning Rate",IDC_SPINNER_GPT_SAMPLING_FRACTION_LEARNING_RATE, - "SpinnerControl",WS_TABSTOP,138,131,6,10 - LTEXT "Iteration Progression:",IDC_STATIC,0,48,100,8 - COMBOBOX IDC_COMBO_GPT_ITERATION_PROGRESSION_TYPE,107,46,92,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Mode:",IDC_STATIC,3,117,102,8 - COMBOBOX IDC_COMBO_GPT_SAMPLING_FRACTION_MODE_TYPE,107,114,39,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Fixed Fraction:",IDC_STATIC_GPT_FIXED_BSDF_SAMPLING_FRACTION,3,146,101,8 - CONTROL "Fixed BSDF Sampling Fraction",IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION, - "CustEdit",WS_TABSTOP,107,146,30,10 - CONTROL "Fixed BSDF Sampling Fraction",IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION, - "SpinnerControl",WS_TABSTOP,138,146,6,10 - GROUPBOX "BSDF / SD-Tree Sampling Fraction",IDC_STATIC,0,105,199,54 - GROUPBOX "Path Continuation",IDC_STATIC,0,61,199,39 END @@ -410,6 +413,7 @@ BEGIN IDD_FORMVIEW_RENDERERPARAMS_PATH_TRACING, DIALOG BEGIN + BOTTOMMARGIN, 228 END IDD_FORMVIEW_RENDERERPARAMS_SYSTEM, DIALOG @@ -443,7 +447,7 @@ BEGIN IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING, DIALOG BEGIN - BOTTOMMARGIN, 156 + BOTTOMMARGIN, 10 END END #endif // APSTUDIO_INVOKED diff --git a/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp b/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp index 8cbba2c..48351fa 100644 --- a/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/appleseedrendererparamdlg.cpp @@ -536,7 +536,6 @@ struct AppleseedRendererParamDlg::Impl IParamMap2* m_pmap_image_sampling; IParamMap2* m_pmap_lighting; IParamMap2* m_pmap_pathtracer; - IParamMap2* m_pmap_guided_pathtracer; IParamMap2* m_pmap_sppm; IParamMap2* m_pmap_postprocessing; IParamMap2* m_pmap_system; @@ -549,7 +548,6 @@ struct AppleseedRendererParamDlg::Impl , m_pmap_image_sampling(nullptr) , m_pmap_lighting(nullptr) , m_pmap_pathtracer(nullptr) - , m_pmap_guided_pathtracer(nullptr) , m_pmap_sppm(nullptr) , m_pmap_postprocessing(nullptr) , m_pmap_system(nullptr) @@ -597,15 +595,6 @@ struct AppleseedRendererParamDlg::Impl L"Path Tracing", 0); - m_pmap_guided_pathtracer = CreateRParamMap2( - 7, - renderer->GetParamBlock(0), - rend_params, - g_module, - MAKEINTRESOURCE(IDD_FORMVIEW_RENDERERPARAMS_GUIDED_PATH_TRACING), - L"Guided Path Tracing", - 0); - m_pmap_sppm = CreateRParamMap2( 4, renderer->GetParamBlock(0), @@ -658,9 +647,6 @@ struct AppleseedRendererParamDlg::Impl if (m_pmap_output != nullptr) DestroyRParamMap2(m_pmap_output); - if (m_pmap_guided_pathtracer != nullptr) - DestroyRParamMap2(m_pmap_guided_pathtracer); - } }; diff --git a/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp b/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp index e512fc5..d8d38a4 100644 --- a/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp +++ b/src/appleseed-max-impl/appleseedrenderer/renderersettings.cpp @@ -99,6 +99,7 @@ namespace m_max_ray_intensity = 1.0f; m_clamp_roughness = false; + m_gpt_enable_path_guiding = false; m_gpt_samples_per_pass = 8; m_gpt_enable_guided_bounce_limit = true; m_gpt_max_guided_bounces = 8; @@ -205,7 +206,6 @@ const char* get_lighting_engine_type(const int lighting_engine_type) { case 0: return "pt"; // unidirectional path tracing case 1: return "sppm"; // stochastic progressive photon mapping - case 2: return "gpt"; // guided path tracing default: assert(!"Invalid lighting engine type."); return "pt"; @@ -335,7 +335,11 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* asr::ParamArray& params = project.configurations().get_by_name(config_name)->get_parameters(); params.insert_path("sampling_mode", "qmc"); - params.insert_path("lighting_engine", get_lighting_engine_type(m_lighting_algorithm)); + + if (m_gpt_enable_path_guiding) + params.insert_path("lighting_engine", "gpt"); + else params.insert_path("lighting_engine", get_lighting_engine_type(m_lighting_algorithm)); + if (m_enable_light_importance_sampling) params.insert_path("light_sampler.enable_importance_sampling", m_enable_light_importance_sampling); @@ -372,7 +376,10 @@ void RendererSettings::apply_common_settings(asr::Project& project, const char* params.insert_path("pt.rr_min_path_length", m_rr_min_path_length); params.insert_path("pt.volume_distance_samples", m_volume_distance_samples); params.insert_path("pt.optimize_for_lights_outside_volumes", m_optimize_for_lights_outside_volumes); - params.insert_path("pt.clamp_roughness", m_clamp_roughness); + + // Disable roughness clamping for guided path tracing. + if (!m_gpt_enable_path_guiding) + params.insert_path("pt.clamp_roughness", m_clamp_roughness); if (m_max_ray_intensity_set) params.insert_path("pt.max_ray_intensity", m_max_ray_intensity); diff --git a/src/appleseed-max-impl/appleseedrenderer/renderersettings.h b/src/appleseed-max-impl/appleseedrenderer/renderersettings.h index 0740c4e..febebed 100644 --- a/src/appleseed-max-impl/appleseedrenderer/renderersettings.h +++ b/src/appleseed-max-impl/appleseedrenderer/renderersettings.h @@ -124,6 +124,7 @@ class RendererSettings // Guided Path Tracer. // + bool m_gpt_enable_path_guiding; int m_gpt_samples_per_pass; bool m_gpt_enable_guided_bounce_limit; int m_gpt_max_guided_bounces; diff --git a/src/appleseed-max-impl/appleseedrenderer/resource.h b/src/appleseed-max-impl/appleseedrenderer/resource.h index 2ff5c57..ceb6f6c 100644 --- a/src/appleseed-max-impl/appleseedrenderer/resource.h +++ b/src/appleseed-max-impl/appleseedrenderer/resource.h @@ -121,6 +121,7 @@ #define IDC_TEXT_GPT_FIXED_BSDF_SAMPLING_FRACTION 380 #define IDC_STATIC_GPT_FIXED_BSDF_SAMPLING_FRACTION 381 #define IDC_SPINNER_GPT_FIXED_BSDF_SAMPLING_FRACTION 382 +#define IDC_CHECK_GPT_ENABLE_PATH_GUIDING 383 #define IDD_FORMVIEW_RENDERERPARAMS_OUTPUT 400 #define IDC_RADIO_RENDER 401 #define IDC_RADIO_SAVEPROJECT 402