[Bf-blender-cvs] [6a782ed767f] blender2.8: Eevee: add regression tests.
Brecht Van Lommel
noreply at git.blender.org
Fri May 18 17:12:49 CEST 2018
Commit: 6a782ed767f993404cd5ba1cd233f49f9fffaaf2
Author: Brecht Van Lommel
Date: Fri May 18 16:40:41 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB6a782ed767f993404cd5ba1cd233f49f9fffaaf2
Eevee: add regression tests.
This adds Eevee render tests using the Cycles files. Currently it must
be enabled by setting WITH_OPENGL_RENDER_TESTS=ON. Once we have reference
images we can enable it by default.
Some of the Cycles and Eevee tests are also currently broken due to
modifier and particle changes.
Differential Revision: https://developer.blender.org/D3182
===================================================================
M tests/python/CMakeLists.txt
M tests/python/cycles_render_tests.py
A tests/python/eevee_render_tests.py
M tests/python/modules/render_report.py
===================================================================
diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt
index 50e2927f54f..d5ba68b9b93 100644
--- a/tests/python/CMakeLists.txt
+++ b/tests/python/CMakeLists.txt
@@ -531,9 +531,9 @@ function(add_python_test testname testscript)
endif()
endfunction()
-if(WITH_CYCLES)
- if(OPENIMAGEIO_IDIFF AND EXISTS "${TEST_SRC_DIR}/render/ctests/shader")
- macro(add_cycles_render_test subject)
+if(OPENIMAGEIO_IDIFF AND EXISTS "${TEST_SRC_DIR}/render/ctests/shader")
+ macro(add_cycles_render_test subject)
+ if(WITH_CYCLES)
add_python_test(
cycles_${subject}_test
${CMAKE_CURRENT_LIST_DIR}/cycles_render_tests.py
@@ -542,31 +542,39 @@ if(WITH_CYCLES)
-idiff "${OPENIMAGEIO_IDIFF}"
-outdir "${TEST_OUT_DIR}/cycles"
)
- endmacro()
- if(WITH_OPENGL_RENDER_TESTS)
- add_cycles_render_test(opengl)
endif()
- add_cycles_render_test(bake)
- add_cycles_render_test(bsdf)
- add_cycles_render_test(denoise)
- add_cycles_render_test(displacement)
- add_cycles_render_test(hair)
- add_cycles_render_test(image_data_types)
- add_cycles_render_test(image_mapping)
- add_cycles_render_test(image_texture_limit)
- add_cycles_render_test(integrator)
- add_cycles_render_test(light)
- add_cycles_render_test(mesh)
- add_cycles_render_test(motion_blur)
- add_cycles_render_test(render_layer)
- add_cycles_render_test(reports)
- add_cycles_render_test(shader)
- add_cycles_render_test(shadow_catcher)
- add_cycles_render_test(sss)
- add_cycles_render_test(volume)
- else()
- MESSAGE(STATUS "Disabling Cycles tests because tests folder does not exist")
- endif()
+
+ if(WITH_OPENGL_RENDER_TESTS AND (NOT ${subject} MATCHES "bake"))
+ add_python_test(
+ eevee_${subject}_test
+ ${CMAKE_CURRENT_LIST_DIR}/eevee_render_tests.py
+ -blender "$<TARGET_FILE:blender>"
+ -testdir "${TEST_SRC_DIR}/render/ctests/${subject}"
+ -idiff "${OPENIMAGEIO_IDIFF}"
+ -outdir "${TEST_OUT_DIR}/eevee"
+ )
+ endif()
+ endmacro()
+ add_cycles_render_test(bake)
+ add_cycles_render_test(bsdf)
+ add_cycles_render_test(denoise)
+ add_cycles_render_test(displacement)
+ add_cycles_render_test(hair)
+ add_cycles_render_test(image_data_types)
+ add_cycles_render_test(image_mapping)
+ add_cycles_render_test(image_texture_limit)
+ add_cycles_render_test(integrator)
+ add_cycles_render_test(light)
+ add_cycles_render_test(mesh)
+ add_cycles_render_test(motion_blur)
+ add_cycles_render_test(render_layer)
+ add_cycles_render_test(reports)
+ add_cycles_render_test(shader)
+ add_cycles_render_test(shadow_catcher)
+ add_cycles_render_test(sss)
+ add_cycles_render_test(volume)
+elseif(WITH_CYCLES)
+ MESSAGE(STATUS "Disabling Cycles tests because tests folder does not exist")
endif()
if(WITH_OPENGL_DRAW_TESTS)
diff --git a/tests/python/cycles_render_tests.py b/tests/python/cycles_render_tests.py
index a01a6f74e15..eb7a1d96d24 100755
--- a/tests/python/cycles_render_tests.py
+++ b/tests/python/cycles_render_tests.py
@@ -77,6 +77,7 @@ def render_file(filepath, output_filepath):
shutil.copy(frame_filepath, output_filepath)
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(output.decode("utf-8"))
return None
except subprocess.CalledProcessError as e:
@@ -84,6 +85,7 @@ def render_file(filepath, output_filepath):
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(e.output.decode("utf-8"))
if b"Error: engine not found" in e.output:
return "NO_ENGINE"
@@ -95,6 +97,7 @@ def render_file(filepath, output_filepath):
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(e)
return "CRASH"
diff --git a/tests/python/cycles_render_tests.py b/tests/python/eevee_render_tests.py
similarity index 51%
copy from tests/python/cycles_render_tests.py
copy to tests/python/eevee_render_tests.py
index a01a6f74e15..176bb470e9a 100755
--- a/tests/python/cycles_render_tests.py
+++ b/tests/python/eevee_render_tests.py
@@ -8,67 +8,62 @@ import shutil
import subprocess
import sys
+def setup():
+ import bpy
+
+ # Enable Eevee features
+ scene = bpy.context.scene
+ eevee = scene.eevee
+
+ eevee.sss_enable = True
+ eevee.ssr_enable = True
+ eevee.ssr_refraction = True
+ eevee.gtao_enable = True
+ eevee.dof_enable = True
+
+ eevee.volumetric_enable = True
+ eevee.volumetric_shadows = True
+ eevee.volumetric_tile_size = '2'
+
+ for mat in bpy.data.materials:
+ mat.use_screen_refraction = True
+ mat.use_screen_subsurface = True
+
+# When run from inside Blender, render and exit.
+try:
+ import bpy
+ inside_blender = True
+except ImportError:
+ inside_blender = False
+
+if inside_blender:
+ try:
+ setup()
+ except Exception as e:
+ print(e)
+ sys.exit(1)
+
def render_file(filepath, output_filepath):
dirname = os.path.dirname(filepath)
basedir = os.path.dirname(dirname)
subject = os.path.basename(dirname)
- custom_args = os.getenv('CYCLESTEST_ARGS')
- custom_args = shlex.split(custom_args) if custom_args else []
-
- # OSL and GPU examples
- # custom_args += ["--python-expr", "import bpy; bpy.context.scene.cycles.shading_system = True"]
- # custom_args += ["--python-expr", "import bpy; bpy.context.scene.cycles.device = 'GPU'"]
-
frame_filepath = output_filepath + '0001.png'
- if subject == 'opengl':
- command = [
- BLENDER,
- "--window-geometry", "0", "0", "1", "1",
- "-noaudio",
- "--factory-startup",
- "--enable-autoexec",
- filepath,
- "-E", "CYCLES"]
- command += custom_args
- command += [
- "-o", output_filepath,
- "-F", "PNG",
- '--python', os.path.join(basedir,
- "util",
- "render_opengl.py")]
- elif subject == 'bake':
- command = [
- BLENDER,
- "-b",
- "-noaudio",
- "--factory-startup",
- "--enable-autoexec",
- filepath,
- "-E", "CYCLES"]
- command += custom_args
- command += [
- "-o", output_filepath,
- "-F", "PNG",
- '--python', os.path.join(basedir,
- "util",
- "render_bake.py")]
- else:
- command = [
- BLENDER,
- "--background",
- "-noaudio",
- "--factory-startup",
- "--enable-autoexec",
- filepath,
- "-E", "CYCLES"]
- command += custom_args
- command += [
- "-o", output_filepath,
- "-F", "PNG",
- "-f", "1"]
+ command = [
+ BLENDER,
+ "--background",
+ "-noaudio",
+ "--factory-startup",
+ "--enable-autoexec",
+ filepath,
+ "-E", "BLENDER_EEVEE",
+ "-P",
+ os.path.realpath(__file__),
+ "-o", output_filepath,
+ "-F", "PNG",
+ "-f", "1"]
try:
# Success
@@ -77,6 +72,7 @@ def render_file(filepath, output_filepath):
shutil.copy(frame_filepath, output_filepath)
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(output.decode("utf-8"))
return None
except subprocess.CalledProcessError as e:
@@ -84,6 +80,7 @@ def render_file(filepath, output_filepath):
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(e.output.decode("utf-8"))
if b"Error: engine not found" in e.output:
return "NO_ENGINE"
@@ -95,6 +92,7 @@ def render_file(filepath, output_filepath):
if os.path.exists(frame_filepath):
os.remove(frame_filepath)
if VERBOSE:
+ print(" ".join(command))
print(e)
return "CRASH"
@@ -122,12 +120,13 @@ def main():
output_dir = args.outdir[0]
from modules import render_report
- report = render_report.Report("Cycles Test Report", output_dir, idiff)
+ report = render_report.Report("Eevee Test Report", output_dir, idiff)
report.set_pixelated(True)
+ report.set_reference_dir("eevee_renders")
ok = report.run(test_dir, render_file)
sys.exit(not ok)
-if __name__ == "__main__":
+if not inside_blender and __name__ == "__main__":
main()
diff --git a/tests/python/modules/render_report.py b/tests/python/modules/render_report.py
index 5ccd5076fbc..ec54ba4e823 100755
--- a/tests/python/modules/render_report.py
+++ b/tests/python/modules/render_report.py
@@ -59,11 +59,11 @@ def test_get_name(filepath):
filename = os.path.basename(filepath)
return os.path.splitext(filename)[0]
-def test_get_images(output_dir, filepath):
+def test_get_images(output_dir, filepath, reference_dir):
testname = test_get_name(filepath)
dirpath = os.path.dirname(filepath)
- old_dirpath = os.path.join(dirpath, "reference_renders")
+ old_dirpath = os.path.join(dirpath, reference_dir)
old_img = os.path.join(old_dirpath, testname + ".png")
ref_dirpath = os.path.join(output_dir, os.path.basename(dirpath), "ref")
@@ -90,6 +90,7 @@ class Report:
__slots__ = (
'title',
'output_dir',
+ 'reference_dir',
'idiff',
'pixelated',
'verbose',
@@ -101,6 +102,7 @@ class Report:
def __init__(self, title, output_dir, idiff):
self.title = title
self.output_dir = output_dir
+ self.reference_dir = 'reference_renders'
self.idiff = idiff
self.pixelated = False
@@ -120,6 +122,9 @@ class Report:
def set_pixelated(self, pixelated):
self.pixelated = pixelated
+ def set_reference_dir(self, reference_dir):
+ self.reference_dir = reference_dir
+
def run(self
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list