Merge branch 'master' into soc-2018-npr Fix errors
[blender.git] / source / blender / makesrna / intern / rna_scene.c
index e14f499e714c92ed623882686fabf793c711e604..230082aa5dd445819385b6b014af67f7f03751d1 100644 (file)
@@ -33,6 +33,7 @@
 #include "DNA_gpencil_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_screen_types.h" /* TransformOrientation */
+#include "DNA_lanpr_types.h"
 
 #include "IMB_imbuf_types.h"
 
@@ -1143,14 +1144,16 @@ static void rna_ImageFormatSettings_file_format_set(PointerRNA *ptr, int value)
     const int depth_ok = BKE_imtype_valid_depths(imf->imtype);
     if ((imf->depth & depth_ok) == 0) {
       /* set first available depth */
-      char depth_ls[] = {R_IMF_CHAN_DEPTH_32,
-                         R_IMF_CHAN_DEPTH_24,
-                         R_IMF_CHAN_DEPTH_16,
-                         R_IMF_CHAN_DEPTH_12,
-                         R_IMF_CHAN_DEPTH_10,
-                         R_IMF_CHAN_DEPTH_8,
-                         R_IMF_CHAN_DEPTH_1,
-                         0};
+      char depth_ls[] = {
+          R_IMF_CHAN_DEPTH_32,
+          R_IMF_CHAN_DEPTH_24,
+          R_IMF_CHAN_DEPTH_16,
+          R_IMF_CHAN_DEPTH_12,
+          R_IMF_CHAN_DEPTH_10,
+          R_IMF_CHAN_DEPTH_8,
+          R_IMF_CHAN_DEPTH_1,
+          0,
+      };
       int i;
 
       for (i = 0; depth_ls[i]; i++) {
@@ -2394,6 +2397,56 @@ static char *rna_UnitSettings_path(PointerRNA *UNUSED(ptr))
   return BLI_strdup("unit_settings");
 }
 
+/* lanpr */
+
+void rna_lanpr_active_line_layer_index_range(
+       PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
+{
+       SceneLANPR *lanpr = (SceneLANPR *)ptr->data;
+       *min = 0;
+       *max = max_ii(0, BLI_listbase_count(&lanpr->line_layers) - 1);
+}
+
+int rna_lanpr_active_line_layer_index_get(PointerRNA *ptr)
+{
+       SceneLANPR *lanpr = (SceneLANPR *)ptr->data;
+       LANPR_LineLayer *ls;
+       int i = 0;
+       for (ls = lanpr->line_layers.first; ls; ls = ls->next) {
+               if (ls == lanpr->active_layer) return i;
+               i++;
+       }
+       return 0;
+}
+
+void rna_lanpr_active_line_layer_index_set(PointerRNA *ptr, int value)
+{
+       SceneLANPR *lanpr = (SceneLANPR *)ptr->data;
+       LANPR_LineLayer *ls;
+       int i = 0;
+       for (ls = lanpr->line_layers.first; ls; ls = ls->next) {
+               if (i == value) {
+                       lanpr->active_layer = ls;
+                       return;
+               }
+               i++;
+       }
+       lanpr->active_layer = 0;
+}
+
+PointerRNA rna_lanpr_active_line_layer_get(PointerRNA *ptr)
+{
+       SceneLANPR *lanpr = (SceneLANPR *)ptr->data;
+       LANPR_LineLayer *ls = lanpr->active_layer;
+       return rna_pointer_inherit_refine(ptr, &RNA_LANPR_LineLayer, ls);
+}
+
+void rna_lanpr_active_line_layer_set(PointerRNA *ptr, PointerRNA value)
+{
+       SceneLANPR *lanpr = (SceneLANPR *)ptr->data;
+       lanpr->active_layer = value.data;
+}
+
 #else
 
 /* Grease Pencil Interpolation tool settings */
@@ -2686,11 +2739,8 @@ static void rna_def_tool_settings(BlenderRNA *brna)
        ICON_PIVOT_CURSOR,
        "3D Cursor",
        "Draw stroke at 3D cursor location"},
-      {0,
-       "VIEW",
-       ICON_RESTRICT_VIEW_ON,
-       "View",
-       "Stick stroke to the view "}, /* weird, GP_PROJECT_VIEWALIGN is inverted */
+      /* Weird, GP_PROJECT_VIEWALIGN is inverted. */
+      {0, "VIEW", ICON_RESTRICT_VIEW_ON, "View", "Stick stroke to the view "},
       {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_VIEW,
        "SURFACE",
        ICON_FACESEL,
@@ -6541,420 +6591,374 @@ static void rna_def_scene_display(BlenderRNA *brna)
 
 static void rna_def_scene_eevee(BlenderRNA *brna)
 {
-  StructRNA *srna;
-  PropertyRNA *prop;
-
-  static const EnumPropertyItem eevee_shadow_method_items[] = {
-      {SHADOW_ESM, "ESM", 0, "ESM", "Exponential Shadow Mapping"},
-      {SHADOW_VSM, "VSM", 0, "VSM", "Variance Shadow Mapping"},
-      {0, NULL, 0, NULL, NULL},
-  };
-
-  static const EnumPropertyItem eevee_shadow_size_items[] = {
-      {64, "64", 0, "64px", ""},
-      {128, "128", 0, "128px", ""},
-      {256, "256", 0, "256px", ""},
-      {512, "512", 0, "512px", ""},
-      {1024, "1024", 0, "1024px", ""},
-      {2048, "2048", 0, "2048px", ""},
-      {4096, "4096", 0, "4096px", ""},
-      {0, NULL, 0, NULL, NULL},
-  };
-
-  static const EnumPropertyItem eevee_gi_visibility_size_items[] = {
-      {8, "8", 0, "8px", ""},
-      {16, "16", 0, "16px", ""},
-      {32, "32", 0, "32px", ""},
-      {64, "64", 0, "64px", ""},
-      {0, NULL, 0, NULL, NULL},
-  };
-
-  static const EnumPropertyItem eevee_volumetric_tile_size_items[] = {
-      {2, "2", 0, "2px", ""},
-      {4, "4", 0, "4px", ""},
-      {8, "8", 0, "8px", ""},
-      {16, "16", 0, "16px", ""},
-      {0, NULL, 0, NULL, NULL},
-  };
-
-  static float default_bloom_color[3] = {1.0f, 1.0f, 1.0f};
-
-  srna = RNA_def_struct(brna, "SceneEEVEE", NULL);
-  RNA_def_struct_path_func(srna, "rna_SceneEEVEE_path");
-  RNA_def_struct_ui_text(srna, "Scene Display", "Scene display settings for 3d viewport");
-
-  /* Indirect Lighting */
-  prop = RNA_def_property(srna, "gi_diffuse_bounces", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 3);
-  RNA_def_property_ui_text(prop,
-                           "Diffuse Bounces",
-                           "Number of time the light is reinjected inside light grids, "
-                           "0 disable indirect diffuse light");
-  RNA_def_property_range(prop, 0, INT_MAX);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "gi_cubemap_resolution", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, eevee_shadow_size_items);
-  RNA_def_property_enum_default(prop, 512);
-  RNA_def_property_ui_text(prop, "Cubemap Size", "Size of every cubemaps");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "gi_visibility_resolution", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, eevee_gi_visibility_size_items);
-  RNA_def_property_enum_default(prop, 32);
-  RNA_def_property_ui_text(prop,
-                           "Irradiance Visibility Size",
-                           "Size of the shadow map applied to each irradiance sample");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "gi_irradiance_smoothing", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_range(prop, 0.0f, FLT_MAX);
-  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 5, 2);
-  RNA_def_property_float_default(prop, 0.1f);
-  RNA_def_property_ui_text(prop,
-                           "Irradiance Smoothing",
-                           "Smoother irradiance interpolation but introduce light bleeding");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gi_glossy_clamp", PROP_FLOAT, PROP_NONE);
-  RNA_def_property_float_default(prop, 0.0f);
-  RNA_def_property_ui_text(prop,
-                           "Clamp Glossy",
-                           "Clamp pixel intensity to reduce noise inside glossy reflections "
-                           "from reflection cubemaps (0 to disabled)");
-  RNA_def_property_range(prop, 0.0f, FLT_MAX);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "gi_filter_quality", PROP_FLOAT, PROP_NONE);
-  RNA_def_property_float_default(prop, 1.0f);
-  RNA_def_property_ui_text(
-      prop, "Filter Quality", "Take more samples during cubemap filtering to remove artifacts");
-  RNA_def_property_range(prop, 1.0f, 8.0f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "gi_show_irradiance", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SHOW_IRRADIANCE);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_icon(prop, ICON_HIDE_ON, 1);
-  RNA_def_property_ui_text(
-      prop, "Show Irradiance Cache", "Display irradiance samples in the viewport");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gi_show_cubemaps", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SHOW_CUBEMAPS);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_icon(prop, ICON_HIDE_ON, 1);
-  RNA_def_property_ui_text(
-      prop, "Show Cubemap Cache", "Display captured cubemaps in the viewport");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gi_irradiance_display_size", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_sdna(prop, NULL, "gi_irradiance_draw_size");
-  RNA_def_property_range(prop, 0.05f, 10.0f);
-  RNA_def_property_float_default(prop, 0.1f);
-  RNA_def_property_ui_text(prop,
-                           "Irradiance Display Size",
-                           "Size of the irradiance sample spheres to debug captured light");
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gi_cubemap_display_size", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_sdna(prop, NULL, "gi_cubemap_draw_size");
-  RNA_def_property_range(prop, 0.05f, 10.0f);
-  RNA_def_property_float_default(prop, 0.3f);
-  RNA_def_property_ui_text(
-      prop, "Cubemap Display Size", "Size of the cubemap spheres to debug captured light");
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gi_auto_bake", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GI_AUTOBAKE);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(prop, "Auto Bake", "Auto bake indirect lighting when editing probes");
-
-  prop = RNA_def_property(srna, "gi_cache_info", PROP_STRING, PROP_NONE);
-  RNA_def_property_string_sdna(prop, NULL, "light_cache_info");
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-  RNA_def_property_ui_text(prop, "Light Cache Info", "Info on current cache status");
-
-  /* Temporal Anti-Aliasing (super sampling) */
-  prop = RNA_def_property(srna, "taa_samples", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 16);
-  RNA_def_property_ui_text(prop, "Viewport Samples", "Number of samples, unlimited if 0");
-  RNA_def_property_range(prop, 0, INT_MAX);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "taa_render_samples", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 64);
-  RNA_def_property_ui_text(prop, "Render Samples", "Number of samples per pixels for rendering");
-  RNA_def_property_range(prop, 1, INT_MAX);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_taa_reprojection", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_TAA_REPROJECTION);
-  RNA_def_property_boolean_default(prop, 1);
-  RNA_def_property_ui_text(prop,
-                           "Viewport Denoising",
-                           "Denoise image using temporal reprojection "
-                           "(can leave some ghosting)");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Screen Space Subsurface Scattering */
-  prop = RNA_def_property(srna, "use_sss", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSS_ENABLED);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(
-      prop, "Subsurface Scattering", "Enable screen space subsurface scattering");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "sss_samples", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 7);
-  RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute the scattering effect");
-  RNA_def_property_range(prop, 1, 32);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "sss_jitter_threshold", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.3f);
-  RNA_def_property_ui_text(
-      prop, "Jitter Threshold", "Rotate samples that are below this threshold");
-  RNA_def_property_range(prop, 0.0f, 1.0f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_sss_separate_albedo", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSS_SEPARATE_ALBEDO);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(prop,
-                           "Separate Albedo",
-                           "Avoid albedo being blurred by the subsurface scattering "
-                           "but uses more video memory");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Screen Space Reflection */
-  prop = RNA_def_property(srna, "use_ssr", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_ENABLED);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(prop, "Screen Space Reflections", "Enable screen space reflection");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_ssr_refraction", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_REFRACTION);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(prop, "Screen Space Refractions", "Enable screen space Refractions");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_ssr_halfres", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_HALF_RESOLUTION);
-  RNA_def_property_boolean_default(prop, 1);
-  RNA_def_property_ui_text(prop, "Half Res Trace", "Raytrace at a lower resolution");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "ssr_quality", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.25f);
-  RNA_def_property_ui_text(prop, "Trace Precision", "Precision of the screen space raytracing");
-  RNA_def_property_range(prop, 0.0f, 1.0f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "ssr_max_roughness", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.5f);
-  RNA_def_property_ui_text(
-      prop, "Max Roughness", "Do not raytrace reflections for roughness above this value");
-  RNA_def_property_range(prop, 0.0f, 1.0f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "ssr_thickness", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_default(prop, 0.2f);
-  RNA_def_property_ui_text(prop, "Thickness", "Pixel thickness used to detect intersection");
-  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
-  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 5, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "ssr_border_fade", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.075f);
-  RNA_def_property_ui_text(prop, "Edge Fading", "Screen percentage used to fade the SSR");
-  RNA_def_property_range(prop, 0.0f, 0.5f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "ssr_firefly_fac", PROP_FLOAT, PROP_NONE);
-  RNA_def_property_float_default(prop, 10.0f);
-  RNA_def_property_ui_text(prop, "Clamp", "Clamp pixel intensity to remove noise (0 to disabled)");
-  RNA_def_property_range(prop, 0.0f, FLT_MAX);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Volumetrics */
-  prop = RNA_def_property(srna, "use_volumetric", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_ENABLED);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(
-      prop, "Volumetrics", "Enable scattering and absorbance of volumetric material");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_start", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_default(prop, 0.1f);
-  RNA_def_property_ui_text(prop, "Start", "Start distance of the volumetric effect");
-  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
-  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_end", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_default(prop, 100.0f);
-  RNA_def_property_ui_text(prop, "End", "End distance of the volumetric effect");
-  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
-  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_tile_size", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_default(prop, 8);
-  RNA_def_property_enum_items(prop, eevee_volumetric_tile_size_items);
-  RNA_def_property_ui_text(prop,
-                           "Tile Size",
-                           "Control the quality of the volumetric effects "
-                           "(lower size increase vram usage and quality)");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_samples", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 64);
-  RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute volumetric effects");
-  RNA_def_property_range(prop, 1, 256);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_sample_distribution", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.8f);
-  RNA_def_property_ui_text(
-      prop, "Exponential Sampling", "Distribute more samples closer to the camera");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_volumetric_lights", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_LIGHTS);
-  RNA_def_property_boolean_default(prop, 1);
-  RNA_def_property_ui_text(
-      prop, "Volumetric Lighting", "Enable scene light interactions with volumetrics");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_light_clamp", PROP_FLOAT, PROP_NONE);
-  RNA_def_property_float_default(prop, 0.0f);
-  RNA_def_property_range(prop, 0.0f, FLT_MAX);
-  RNA_def_property_ui_text(prop, "Clamp", "Maximum light contribution, reducing noise");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_volumetric_shadows", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_SHADOWS);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(
-      prop, "Volumetric Shadows", "Generate shadows from volumetric material (Very expensive)");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "volumetric_shadow_samples", PROP_INT, PROP_NONE);
-  RNA_def_property_int_default(prop, 16);
-  RNA_def_property_range(prop, 1, 128);
-  RNA_def_property_ui_text(
-      prop, "Volumetric Shadow Samples", "Number of samples to compute volumetric shadowing");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Ambient Occlusion */
-  prop = RNA_def_property(srna, "use_gtao", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_ENABLED);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(prop,
-                           "Ambient Occlusion",
-                           "Enable ambient occlusion to simulate medium scale indirect shadowing");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_gtao_bent_normals", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_BENT_NORMALS);
-  RNA_def_property_boolean_default(prop, 1);
-  RNA_def_property_ui_text(
-      prop, "Bent Normals", "Compute main non occluded direction to sample the environment");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "use_gtao_bounce", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_BOUNCE);
-  RNA_def_property_boolean_default(prop, 1);
-  RNA_def_property_ui_text(prop,
-                           "Bounces Approximation",
-                           "An approximation to simulate light bounces "
-                           "giving less occlusion on brighter objects");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gtao_factor", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 1.0f);
-  RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
-  RNA_def_property_range(prop, 0.0f, FLT_MAX);
-  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 2);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gtao_quality", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 0.25f);
-  RNA_def_property_ui_text(prop, "Trace Precision", "Precision of the horizon search");
-  RNA_def_property_range(prop, 0.0f, 1.0f);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "gtao_distance", PROP_FLOAT, PROP_DISTANCE);
-  RNA_def_property_float_default(prop, 0.2f);
-  RNA_def_property_ui_text(
-      prop, "Distance", "Distance of object that contribute to the ambient occlusion effect");
-  RNA_def_property_range(prop, 0.0f, 100000.0f);
-  RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Depth of Field */
-  prop = RNA_def_property(srna, "use_dof", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_DOF_ENABLED);
-  RNA_def_property_boolean_default(prop, 0);
-  RNA_def_property_ui_text(
-      prop, "Depth of Field", "Enable depth of field using the values from the active camera");
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  prop = RNA_def_property(srna, "bokeh_max_size", PROP_FLOAT, PROP_PIXEL);
-  RNA_def_property_float_default(prop, 100.0f);
-  RNA_def_property_ui_text(
-      prop, "Max Size", "Max size of the bokeh shape for the depth of field (lower is faster)");
-  RNA_def_property_range(prop, 0.0f, 2000.0f);
-  RNA_def_property_ui_range(prop, 2.0f, 200.0f, 1, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-
-  prop = RNA_def_property(srna, "bokeh_threshold", PROP_FLOAT, PROP_FACTOR);
-  RNA_def_property_float_default(prop, 1.0f);
-  RNA_def_property_ui_text(
-      prop, "Sprite Threshold", "Brightness threshold for using sprite base depth of field");
-  RNA_def_property_range(prop, 0.0f, 100000.0f);
-  RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
-  RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
-  RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
-  /* Bloom */
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       static const EnumPropertyItem eevee_shadow_method_items[] = {
+               {SHADOW_ESM, "ESM", 0, "ESM", "Exponential Shadow Mapping"},
+               {SHADOW_VSM, "VSM", 0, "VSM", "Variance Shadow Mapping"},
+               {0, NULL, 0, NULL, NULL},
+       };
+
+       static const EnumPropertyItem eevee_shadow_size_items[] = {
+               {64, "64", 0, "64px", ""},
+               {128, "128", 0, "128px", ""},
+               {256, "256", 0, "256px", ""},
+               {512, "512", 0, "512px", ""},
+               {1024, "1024", 0, "1024px", ""},
+               {2048, "2048", 0, "2048px", ""},
+               {4096, "4096", 0, "4096px", ""},
+               {0, NULL, 0, NULL, NULL},
+       };
+
+       static const EnumPropertyItem eevee_gi_visibility_size_items[] = {
+               {8, "8", 0, "8px", ""},
+               {16, "16", 0, "16px", ""},
+               {32, "32", 0, "32px", ""},
+               {64, "64", 0, "64px", ""},
+               {0, NULL, 0, NULL, NULL},
+       };
+
+       static const EnumPropertyItem eevee_volumetric_tile_size_items[] = {
+               {2, "2", 0, "2px", ""},
+               {4, "4", 0, "4px", ""},
+               {8, "8", 0, "8px", ""},
+               {16, "16", 0, "16px", ""},
+               {0, NULL, 0, NULL, NULL},
+       };
+
+       static float default_bloom_color[3] = {1.0f, 1.0f, 1.0f};
+
+       srna = RNA_def_struct(brna, "SceneEEVEE", NULL);
+       RNA_def_struct_path_func(srna, "rna_SceneEEVEE_path");
+       RNA_def_struct_ui_text(srna, "Scene Display", "Scene display settings for 3d viewport");
+
+       /* Indirect Lighting */
+       prop = RNA_def_property(srna, "gi_diffuse_bounces", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 3);
+       RNA_def_property_ui_text(prop, "Diffuse Bounces", "Number of time the light is reinjected inside light grids, "
+                                "0 disable indirect diffuse light");
+       RNA_def_property_range(prop, 0, INT_MAX);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+
+       prop = RNA_def_property(srna, "gi_cubemap_resolution", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, eevee_shadow_size_items);
+       RNA_def_property_enum_default(prop, 512);
+       RNA_def_property_ui_text(prop, "Cubemap Size", "Size of every cubemaps");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+
+       prop = RNA_def_property(srna, "gi_visibility_resolution", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, eevee_gi_visibility_size_items);
+       RNA_def_property_enum_default(prop, 32);
+       RNA_def_property_ui_text(prop, "Irradiance Visibility Size",
+                                "Size of the shadow map applied to each irradiance sample");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+
+       prop = RNA_def_property(srna, "gi_irradiance_smoothing", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_range(prop, 0.0f, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 5, 2);
+       RNA_def_property_float_default(prop, 0.1f);
+       RNA_def_property_ui_text(prop, "Irradiance Smoothing", "Smoother irradiance interpolation but introduce light bleeding");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gi_glossy_clamp", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.0f);
+       RNA_def_property_ui_text(prop, "Clamp Glossy", "Clamp pixel intensity to reduce noise inside glossy reflections "
+                                                      "from reflection cubemaps (0 to disabled)");
+       RNA_def_property_range(prop, 0.0f, FLT_MAX);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+
+       prop = RNA_def_property(srna, "gi_filter_quality", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Filter Quality", "Take more samples during cubemap filtering to remove artifacts");
+       RNA_def_property_range(prop, 1.0f, 8.0f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+
+       prop = RNA_def_property(srna, "gi_show_irradiance", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SHOW_IRRADIANCE);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_icon(prop, ICON_HIDE_ON, 1);
+       RNA_def_property_ui_text(prop, "Show Irradiance Cache", "Display irradiance samples in the viewport");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gi_show_cubemaps", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SHOW_CUBEMAPS);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_icon(prop, ICON_HIDE_ON, 1);
+       RNA_def_property_ui_text(prop, "Show Cubemap Cache", "Display captured cubemaps in the viewport");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gi_irradiance_display_size", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_sdna(prop, NULL, "gi_irradiance_draw_size");
+       RNA_def_property_range(prop, 0.05f, 10.0f);
+       RNA_def_property_float_default(prop, 0.1f);
+       RNA_def_property_ui_text(prop, "Irradiance Display Size", "Size of the irradiance sample spheres to debug captured light");
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gi_cubemap_display_size", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_sdna(prop, NULL, "gi_cubemap_draw_size");
+       RNA_def_property_range(prop, 0.05f, 10.0f);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Cubemap Display Size", "Size of the cubemap spheres to debug captured light");
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gi_auto_bake", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GI_AUTOBAKE);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Auto Bake", "Auto bake indirect lighting when editing probes");
+
+       prop = RNA_def_property(srna, "gi_cache_info", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "light_cache_info");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Light Cache Info", "Info on current cache status");
+
+       /* Temporal Anti-Aliasing (super sampling) */
+       prop = RNA_def_property(srna, "taa_samples", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 16);
+       RNA_def_property_ui_text(prop, "Viewport Samples", "Number of samples, unlimited if 0");
+       RNA_def_property_range(prop, 0, INT_MAX);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "taa_render_samples", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 64);
+       RNA_def_property_ui_text(prop, "Render Samples", "Number of samples per pixels for rendering");
+       RNA_def_property_range(prop, 1, INT_MAX);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_taa_reprojection", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_TAA_REPROJECTION);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Viewport Denoising", "Denoise image using temporal reprojection "
+                                "(can leave some ghosting)");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       /* Screen Space Subsurface Scattering */
+       prop = RNA_def_property(srna, "use_sss", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSS_ENABLED);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Subsurface Scattering", "Enable screen space subsurface scattering");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "sss_samples", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 7);
+       RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute the scattering effect");
+       RNA_def_property_range(prop, 1, 32);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "sss_jitter_threshold", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Jitter Threshold", "Rotate samples that are below this threshold");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_sss_separate_albedo", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSS_SEPARATE_ALBEDO);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Separate Albedo", "Avoid albedo being blurred by the subsurface scattering "
+                                "but uses more video memory");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       /* Screen Space Reflection */
+       prop = RNA_def_property(srna, "use_ssr", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_ENABLED);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Screen Space Reflections", "Enable screen space reflection");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_ssr_refraction", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_REFRACTION);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Screen Space Refractions", "Enable screen space Refractions");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_ssr_halfres", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SSR_HALF_RESOLUTION);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Half Res Trace", "Raytrace at a lower resolution");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "ssr_quality", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.25f);
+       RNA_def_property_ui_text(prop, "Trace Precision", "Precision of the screen space raytracing");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "ssr_max_roughness", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.5f);
+       RNA_def_property_ui_text(prop, "Max Roughness", "Do not raytrace reflections for roughness above this value");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "ssr_thickness", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_default(prop, 0.2f);
+       RNA_def_property_ui_text(prop, "Thickness", "Pixel thickness used to detect intersection");
+       RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 5, 3);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "ssr_border_fade", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.075f);
+       RNA_def_property_ui_text(prop, "Edge Fading", "Screen percentage used to fade the SSR");
+       RNA_def_property_range(prop, 0.0f, 0.5f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "ssr_firefly_fac", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 10.0f);
+       RNA_def_property_ui_text(prop, "Clamp", "Clamp pixel intensity to remove noise (0 to disabled)");
+       RNA_def_property_range(prop, 0.0f, FLT_MAX);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       /* Volumetrics */
+       prop = RNA_def_property(srna, "use_volumetric", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_ENABLED);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Volumetrics", "Enable scattering and absorbance of volumetric material");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_start", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_default(prop, 0.1f);
+       RNA_def_property_ui_text(prop, "Start", "Start distance of the volumetric effect");
+       RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_end", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_default(prop, 100.0f);
+       RNA_def_property_ui_text(prop, "End", "End distance of the volumetric effect");
+       RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_tile_size", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_default(prop, 8);
+       RNA_def_property_enum_items(prop, eevee_volumetric_tile_size_items);
+       RNA_def_property_ui_text(prop, "Tile Size", "Control the quality of the volumetric effects "
+                                "(lower size increase vram usage and quality)");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_samples", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 64);
+       RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute volumetric effects");
+       RNA_def_property_range(prop, 1, 256);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_sample_distribution", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.8f);
+       RNA_def_property_ui_text(prop, "Exponential Sampling", "Distribute more samples closer to the camera");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_volumetric_lights", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_LIGHTS);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Volumetric Lighting", "Enable scene light interactions with volumetrics");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_light_clamp", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.0f);
+       RNA_def_property_range(prop, 0.0f, FLT_MAX);
+       RNA_def_property_ui_text(prop, "Clamp", "Maximum light contribution, reducing noise");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_volumetric_shadows", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_VOLUMETRIC_SHADOWS);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Volumetric Shadows", "Generate shadows from volumetric material (Very expensive)");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "volumetric_shadow_samples", PROP_INT, PROP_NONE);
+       RNA_def_property_int_default(prop, 16);
+       RNA_def_property_range(prop, 1, 128);
+       RNA_def_property_ui_text(prop, "Volumetric Shadow Samples", "Number of samples to compute volumetric shadowing");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       /* Ambient Occlusion */
+       prop = RNA_def_property(srna, "use_gtao", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_ENABLED);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Ambient Occlusion", "Enable ambient occlusion to simulate medium scale indirect shadowing");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_gtao_bent_normals", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_BENT_NORMALS);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Bent Normals", "Compute main non occluded direction to sample the environment");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_gtao_bounce", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_GTAO_BOUNCE);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Bounces Approximation", "An approximation to simulate light bounces "
+                                "giving less occlusion on brighter objects");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gtao_factor", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
+       RNA_def_property_range(prop, 0.0f, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 2);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gtao_quality", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 0.25f);
+       RNA_def_property_ui_text(prop, "Trace Precision", "Precision of the horizon search");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gtao_distance", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_default(prop, 0.2f);
+       RNA_def_property_ui_text(prop, "Distance", "Distance of object that contribute to the ambient occlusion effect");
+       RNA_def_property_range(prop, 0.0f, 100000.0f);
+       RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       /* Depth of Field */
+       prop = RNA_def_property(srna, "use_dof", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_DOF_ENABLED);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Depth of Field", "Enable depth of field using the values from the active camera");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "bokeh_max_size", PROP_FLOAT, PROP_PIXEL);
+       RNA_def_property_float_default(prop, 100.0f);
+       RNA_def_property_ui_text(prop, "Max Size", "Max size of the bokeh shape for the depth of field (lower is faster)");
+       RNA_def_property_range(prop, 0.0f, 2000.0f);
+       RNA_def_property_ui_range(prop, 2.0f, 200.0f, 1, 3);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
   prop = RNA_def_property(srna, "use_bloom", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_BLOOM_ENABLED);
   RNA_def_property_boolean_default(prop, 0);
@@ -7103,6 +7107,265 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
 }
 
+static void rna_def_scene_lanpr(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       static const EnumPropertyItem DEBUG_rna_enum_lanpr_reload[] = {
+               {0, "IDLE", 0, "Idle", "Idle"},
+               {1, "RELOAD", 0, "RELOAD", "Force reload the scene"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       static const EnumPropertyItem rna_enum_lanpr_master_mode[] = {
+               {LANPR_MASTER_MODE_SOFTWARE, "SOFTWARE", 0, "Software", "Software edge calculation" },
+               {LANPR_MASTER_MODE_DPIX, "DPIX", 0, "DPIX", "DPIX GPU edge calculation"},
+               {LANPR_MASTER_MODE_SNAKE, "SNAKE", 0, "Snake", "Image filter and GPU tracing method"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       static const EnumPropertyItem rna_enum_lanpr_enable_post_processing[] = {
+               {LANPR_POST_PROCESSING_DISABLED, "DISABLED", 0, "Disabled", "LANPR does not compute anything"},
+               {LANPR_POST_PROCESSING_ENABLED, "ENABLED", 0, "Enabled", "LANPR will compute feature lines in image post processing"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       static const EnumPropertyItem rna_enum_lanpr_display_thinning_result[] = {
+               {LANPR_POST_PROCESSING_DISABLED, "DISABLED", 0, "Edge Detection", "Display edge detector result"},
+               {LANPR_POST_PROCESSING_ENABLED, "ENABLED", 0, "Thinning", "Apply thinning filters for vector usage"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       static const EnumPropertyItem rna_enum_lanpr_use_same_taper[] = {
+               {LANPR_USE_DIFFERENT_TAPER, "DISABLED", 0, "Different", "Use different taper value"},
+               {LANPR_USE_SAME_TAPER, "ENABLED", 0, "Same", "Use same taper value for both sides of the line"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       static const EnumPropertyItem rna_enum_lanpr_enable_tip_extend[] = {
+               {LANPR_DISABLE_TIP_EXTEND, "DISABLED", 0, "Disable", "Do not extend curve tips"},
+               {LANPR_ENABLE_TIP_EXTEND, "ENABLED", 0, "Enable", "Extend curve tips to a user specified length"},
+               {0, NULL, 0, NULL, NULL}
+       };
+
+       srna = RNA_def_struct(brna, "SceneLANPR", NULL);
+       RNA_def_struct_sdna(srna, "SceneLANPR");
+       RNA_def_struct_ui_text(srna, "Scene LANPR Config", "LANPR global config");
+
+
+       prop = RNA_def_property(srna, "reloaded", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, DEBUG_rna_enum_lanpr_reload);
+       RNA_def_property_enum_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Reload", "Reload the scene");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+
+       prop = RNA_def_property(srna, "master_mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, rna_enum_lanpr_master_mode);
+       RNA_def_property_enum_default(prop, LANPR_MASTER_MODE_DPIX);
+       RNA_def_property_ui_text(prop, "Master Mode", "Choose calculation mode for NPR Line");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "enable_vector_trace", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, rna_enum_lanpr_enable_post_processing);
+       RNA_def_property_enum_default(prop, LANPR_POST_PROCESSING_DISABLED);
+       RNA_def_property_ui_text(prop, "Enable Post Processing", "Draw image post processing line or not");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "display_thinning_result", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, rna_enum_lanpr_display_thinning_result);
+       RNA_def_property_enum_default(prop, LANPR_POST_PROCESSING_DISABLED);
+       RNA_def_property_ui_text(prop, "Display", "Display mode");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_clamp", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 0.001f);
+       RNA_def_property_ui_text(prop, "Depth Clamp", "Depth clamp value for edge extraction");
+       RNA_def_property_ui_range(prop, 0.0, 0.01, 0.0001, 5);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_strength", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 800);
+       RNA_def_property_ui_text(prop, "Depth Strength", "Depth strength value for edge extraction");
+       RNA_def_property_ui_range(prop, 0, 1000, 10, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "normal_clamp", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 2);
+       RNA_def_property_ui_text(prop, "Normal Clamp", "Normal clamp value for edge extraction");
+       RNA_def_property_ui_range(prop, 0, 5, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "normal_strength", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 10);
+       RNA_def_property_ui_text(prop, "Normal Strength", "Normal strength value for edge extraction");
+       RNA_def_property_ui_range(prop, 0, 20, 1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "line_thickness", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 2.0f);
+       RNA_def_property_ui_text(prop, "Line Thickness", "Thickness of extracted line");
+       RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_width_influence", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Width Influence", "Use camera distance to control line width.");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_width_curve", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Width Curve", "Width curve");
+       RNA_def_property_ui_range(prop, -5.0f, 0.90f, 0.1, 1);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_alpha_influence", PROP_FLOAT, PROP_PERCENTAGE);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Alpha Influence", "Use camera distance to control line alpha.");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "depth_alpha_curve", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.3f);
+       RNA_def_property_ui_text(prop, "Alpha Curve", "alpha curve");
+       RNA_def_property_ui_range(prop, -5.0f, 0.90f, 0.1, 1);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "taper_left_distance", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 20.0f);
+       RNA_def_property_ui_text(prop, "Distance Left", "Left side taper distance");
+       RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "taper_right_distance", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 20.0f);
+       RNA_def_property_ui_text(prop, "Distance right", "Right side taper distance");
+       RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "taper_left_strength", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Strength left", "Left side taper strength");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "taper_right_strength", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Strength right", "Right side taper strength");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "use_same_taper", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, rna_enum_lanpr_use_same_taper);
+       RNA_def_property_enum_default(prop, LANPR_USE_DIFFERENT_TAPER);
+       RNA_def_property_ui_text(prop, "Taper", "Same/Different taper value");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "line_color", PROP_FLOAT, PROP_COLOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Line Color", "Drawing lines using this color");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "background_color", PROP_FLOAT, PROP_COLOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Background Color", "Background Color");
+       RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "enable_tip_extend", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, rna_enum_lanpr_enable_tip_extend);
+       RNA_def_property_enum_default(prop, LANPR_DISABLE_TIP_EXTEND);
+       RNA_def_property_ui_text(prop, "Extend Tips", "Extending tips of curves");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "extend_length", PROP_FLOAT, PROP_FACTOR);
+       RNA_def_property_float_default(prop, 1.0f);
+       RNA_def_property_ui_text(prop, "Extend Length", "Extend lenght of curves");
+       RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "crease_threshold", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.5f);
+       RNA_def_property_ui_text(prop, "Crease Threshold", "cosine value of face angle");
+       RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.01, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "crease_fade_threshold", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_default(prop, 0.5f);
+       RNA_def_property_ui_text(prop, "Crease Fade", "cosine value of face angle");
+       RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.01, 2);
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop = RNA_def_property(srna, "enable_intersections", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Calculate Intersections", "Calculate Intersections or not");
+
+       prop = RNA_def_property(srna, "enable_chaining", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_default(prop, 1);
+       RNA_def_property_ui_text(prop, "Enable Chaining", "Chain Feature Lines After Occlusion Test");
+
+       /* composition */
+
+       prop = RNA_def_property(srna, "composite_render_animation", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_default(prop, 0);
+       RNA_def_property_ui_text(prop, "Composition Render Animation", "Re-render backdrop and LANPR layer to produce animation(image sequence only).");
+
+       /* here's the collection stuff.... */
+
+       prop = RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE);
+       RNA_def_property_collection_sdna(prop, NULL, "line_layers", NULL);
+       RNA_def_property_struct_type(prop, "LANPR_LineLayer");
+       RNA_def_property_ui_text(prop, "Line Layers", "LANPR Line Layers");
+
+       /* this part I refered to gpencil's and freestyle's and it seems that there's no difference */
+       RNA_def_property_srna(prop, "LineLayers");
+       srna = RNA_def_struct(brna, "LineLayers", NULL);
+       RNA_def_struct_sdna(srna, "SceneLANPR");
+       RNA_def_struct_ui_text(srna, "LANPR Line Layers", "");
+
+       prop = RNA_def_property(srna, "active_layer", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "LANPR_LineLayer");
+       RNA_def_property_pointer_funcs(prop, "rna_lanpr_active_line_layer_get", "rna_lanpr_active_line_layer_set", NULL, NULL);
+       RNA_def_property_ui_text(prop, "Active Line Layer", "Active line layer being displayed");
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "active_layer_index", PROP_INT, PROP_UNSIGNED);
+       RNA_def_property_int_funcs(prop, "rna_lanpr_active_line_layer_index_get",
+                                  "rna_lanpr_active_line_layer_index_set",
+                                  "rna_lanpr_active_line_layer_index_range");
+       RNA_def_property_ui_text(prop, "Active Line Layer Index", "Index of active line layer slot");
+       RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+}
+
 void RNA_def_scene(BlenderRNA *brna)
 {
   StructRNA *srna;
@@ -7575,6 +7838,12 @@ void RNA_def_scene(BlenderRNA *brna)
   RNA_def_property_struct_type(prop, "SceneEEVEE");
   RNA_def_property_ui_text(prop, "EEVEE", "EEVEE settings for the scene");
 
+       /* LANPR */
+       prop = RNA_def_property(srna, "lanpr", PROP_POINTER, PROP_NONE);
+       //RNA_def_property_pointer_sdna(prop, NULL, "lanpr");
+       RNA_def_property_struct_type(prop, "SceneLANPR");
+       RNA_def_property_ui_text(prop, "LANPR", "LANPR settings for the scene");
+
   /* Nestled Data  */
   /* *** Non-Animated *** */
   RNA_define_animate_sdna(false);
@@ -7592,6 +7861,7 @@ void RNA_def_scene(BlenderRNA *brna)
   rna_def_display_safe_areas(brna);
   rna_def_scene_display(brna);
   rna_def_scene_eevee(brna);
+  rna_def_scene_lanpr(brna);
   RNA_define_animate_sdna(true);
   /* *** Animated *** */
   rna_def_scene_render_data(brna);