Cycles: merge of cycles-x branch, a major update to the renderer

This includes much improved GPU rendering performance, viewport interactivity,
new shadow catcher, revamped sampling settings, subsurface scattering anisotropy,
new GPU volume sampling, improved PMJ sampling pattern, and more.

Some features have also been removed or changed, breaking backwards compatibility.
Including the removal of the OpenCL backend, for which alternatives are under
development.

Release notes and code docs:
https://wiki.blender.org/wiki/Reference/Release_Notes/3.0/Cycles
https://wiki.blender.org/wiki/Source/Render/Cycles

Credits:
* Sergey Sharybin
* Brecht Van Lommel
* Patrick Mours (OptiX backend)
* Christophe Hery (subsurface scattering anisotropy)
* William Leeson (PMJ sampling pattern)
* Alaska (various fixes and tweaks)
* Thomas Dinges (various fixes)

For the full commit history, see the cycles-x branch. This squashes together
all the changes since intermediate changes would often fail building or tests.

Ref T87839, T87837, T87836
Fixes T90734, T89353, T80267, T80267, T77185, T69800
This commit is contained in:
Brecht Van Lommel
2021-09-20 17:59:20 +02:00
parent fa6b1007ba
commit 0803119725
544 changed files with 34250 additions and 43628 deletions

View File

@@ -17,6 +17,16 @@ def _run(args):
scene.render.image_settings.file_format = 'PNG'
scene.cycles.device = 'CPU' if device_type == 'CPU' else 'GPU'
if scene.cycles.use_adaptive_sampling:
# Render samples specified in file, no other way to measure
# adaptive sampling performance reliably.
scene.cycles.time_limit = 0.0
else:
# Render for fixed amount of time so it's adaptive to the
# machine and devices.
scene.cycles.samples = 16384
scene.cycles.time_limit = 10.0
if scene.cycles.device == 'GPU':
# Enable specified GPU in preferences.
prefs = bpy.context.preferences
@@ -62,12 +72,14 @@ class CyclesTest(api.Test):
'device_index': device_index,
'render_filepath': str(env.log_file.parent / (env.log_file.stem + '.png'))}
_, lines = env.run_in_blender(_run, args, ['--debug-cycles', '--verbose', '1', self.filepath])
_, lines = env.run_in_blender(_run, args, ['--debug-cycles', '--verbose', '2', self.filepath])
# Parse render time from output
prefix_time = "Render time (without synchronization): "
prefix_memory = "Peak: "
prefix_time_per_sample = "Average time per sample: "
time = None
time_per_sample = None
memory = None
for line in lines:
line = line.strip()
@@ -75,12 +87,20 @@ class CyclesTest(api.Test):
if offset != -1:
time = line[offset + len(prefix_time):]
time = float(time)
offset = line.find(prefix_time_per_sample)
if offset != -1:
time_per_sample = line[offset + len(prefix_time_per_sample):]
time_per_sample = time_per_sample.split()[0]
time_per_sample = float(time_per_sample)
offset = line.find(prefix_memory)
if offset != -1:
memory = line[offset + len(prefix_memory):]
memory = memory.split()[0].replace(',', '')
memory = float(memory)
if time_per_sample:
time = time_per_sample
if not (time and memory):
raise Exception("Error parsing render time output")
@@ -88,5 +108,5 @@ class CyclesTest(api.Test):
def generate(env):
filepaths = env.find_blend_files('cycles-x/*')
filepaths = env.find_blend_files('cycles/*')
return [CyclesTest(filepath) for filepath in filepaths]

View File

@@ -637,7 +637,6 @@ if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS)
set(render_tests
bsdf
denoise
denoise_animation
displacement
hair
image_colorspace