diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2018-06-14 17:18:34 +0300 |
---|---|---|
committer | Lukas Stockner <lukas.stockner@freenet.de> | 2018-06-14 23:07:07 +0300 |
commit | 716e138a1b8cb81e13f7da2da5d16763d868743a (patch) | |
tree | 3aed0b6a0ab447071f9f4ba802cdc2f080b54a27 /intern/cycles/blender/addon | |
parent | fd19069999e3655206ccf21dc851801a325dea5d (diff) |
Cycles: Automatically detect HDRI resolution by default and use non-square sampling map
The automatic mode checks all Enviroment Texture nodes and picks the largest image's resolution.
If there are no Enviroment Textures, it just uses the old default.
Also, the sampling map now isn't limited to square shapes. The automatic detection uses the exact image size,
the manual UI option now halves the value to get the height.
A default aspect ratio of 2:1 makes sense since this is what most HDRIs use.
Reviewers: brecht, sergey
Differential Revision: https://developer.blender.org/D3477
Diffstat (limited to 'intern/cycles/blender/addon')
-rw-r--r-- | intern/cycles/blender/addon/properties.py | 18 | ||||
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 8 | ||||
-rw-r--r-- | intern/cycles/blender/addon/version_update.py | 13 |
3 files changed, 26 insertions, 13 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 8dbd80f3747..4484dcfbfd7 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -128,6 +128,12 @@ enum_volume_interpolation = ( ('CUBIC', "Cubic", "Smoothed high quality interpolation, but slower") ) +enum_world_mis = ( + ('NONE', "None", "Don't sample the background, faster but might cause noise for non-solid backgrounds"), + ('AUTOMATIC', "Auto", "Automatically try to determine the best setting"), + ('MANUAL', "Manual", "Manually set the resolution of the sampling map, higher values are slower and require more memory but reduce noise") + ) + enum_device_type = ( ('CPU', "CPU", "CPU", 0), ('CUDA', "CUDA", "CUDA", 1), @@ -938,15 +944,15 @@ class CyclesWorldSettings(bpy.types.PropertyGroup): description="Cycles world settings", type=cls, ) - cls.sample_as_light = BoolProperty( - name="Multiple Importance Sample", - description="Use multiple importance sampling for the environment, " - "enabling for non-solid colors is recommended", - default=True, + cls.sampling_method = EnumProperty( + name="Sampling method", + description="How to sample the background light", + items=enum_world_mis, + default='AUTOMATIC', ) cls.sample_map_resolution = IntProperty( name="Map Resolution", - description="Importance map size is resolution x resolution; " + description="Importance map size is resolution x resolution/2; " "higher values potentially produce less noise, at the cost of memory and speed", min=4, max=8192, default=1024, diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 707f8756f6f..2b11a2eefb0 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -1214,11 +1214,13 @@ class CYCLES_WORLD_PT_settings(CyclesButtonsPanel, Panel): col = split.column() col.label(text="Surface:") - col.prop(cworld, "sample_as_light", text="Multiple Importance") + col.prop(cworld, "sampling_method", text="Sampling") sub = col.column(align=True) - sub.active = cworld.sample_as_light - sub.prop(cworld, "sample_map_resolution") + sub.active = cworld.sampling_method != 'NONE' + subsub = sub.row(align=True) + subsub.active = cworld.sampling_method == 'MANUAL' + subsub.prop(cworld, "sample_map_resolution") if use_branched_path(context): subsub = sub.row(align=True) subsub.active = use_sample_all_lights(context) diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py index 292f0a1fa90..dc28bc647b5 100644 --- a/intern/cycles/blender/addon/version_update.py +++ b/intern/cycles/blender/addon/version_update.py @@ -377,10 +377,6 @@ def do_versions(self): for world in bpy.data.worlds: cworld = world.cycles - # World MIS - if not cworld.is_property_set("sample_as_light"): - cworld.sample_as_light = False - # World MIS Samples if not cworld.is_property_set("samples"): cworld.samples = 4 @@ -431,3 +427,12 @@ def do_versions(self): if bpy.data.version <= (2, 79, 3): # Switch to squared roughness convention square_roughness_nodes_insert() + + for world in bpy.data.worlds: + cworld = world.cycles + # World MIS + if not cworld.is_property_set("sampling_method"): + if cworld.get("sample_as_light", False): + cworld.sampling_method = 'MANUAL' + else: + cworld.sampling_method = 'NONE' |