Tests: add automated regressions tests for Hydra Storm
These are meant to test Hydra integration. Currently they are only enabled for WITH_OPENGL_RENDER_TESTS=ON due to similar reasons as Eevee and Workbench, which is that they require a GPU and results can be platform dependent due to hardware and driver differences. There are separate tests for USD and Hydra export paths. The goal is to make these identical, but they aren't yet. So for that reason they have separate reference renders, and there is a HTML page to compare them. Ref #110765
This commit is contained in:
parent
83fa353efc
commit
647f2053a9
@ -665,6 +665,33 @@ if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS)
|
||||
-outdir "${TEST_OUT_DIR}/workbench"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
if(WITH_HYDRA)
|
||||
# Hydra Storm
|
||||
foreach(render_test ${render_tests})
|
||||
add_python_test(
|
||||
storm_hydra_${render_test}_test
|
||||
${CMAKE_CURRENT_LIST_DIR}/storm_render_tests.py
|
||||
-blender "${TEST_BLENDER_EXE}"
|
||||
-testdir "${TEST_SRC_DIR}/render/${render_test}"
|
||||
-idiff "${OPENIMAGEIO_IDIFF}"
|
||||
-outdir "${TEST_OUT_DIR}/storm_hydra"
|
||||
-export_method "HYDRA"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
foreach(render_test ${render_tests})
|
||||
add_python_test(
|
||||
storm_usd_${render_test}_test
|
||||
${CMAKE_CURRENT_LIST_DIR}/storm_render_tests.py
|
||||
-blender "${TEST_BLENDER_EXE}"
|
||||
-testdir "${TEST_SRC_DIR}/render/${render_test}"
|
||||
-idiff "${OPENIMAGEIO_IDIFF}"
|
||||
-outdir "${TEST_OUT_DIR}/storm_usd"
|
||||
-export_method "USD"
|
||||
)
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
101
tests/python/storm_render_tests.py
Normal file
101
tests/python/storm_render_tests.py
Normal file
@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-FileCopyrightText: 2015-2023 Blender Foundation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import platform
|
||||
import shlex
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def setup():
|
||||
import bpy
|
||||
import addon_utils
|
||||
|
||||
addon_utils.enable("hydra_storm")
|
||||
|
||||
for scene in bpy.data.scenes:
|
||||
scene.render.engine = 'HYDRA_STORM'
|
||||
scene.hydra.export_method = os.environ['BLENDER_HYDRA_EXPORT_METHOD']
|
||||
|
||||
|
||||
# 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 get_arguments(filepath, output_filepath):
|
||||
return [
|
||||
"--background",
|
||||
"-noaudio",
|
||||
"--factory-startup",
|
||||
"--enable-autoexec",
|
||||
"--debug-memory",
|
||||
"--debug-exit-on-error",
|
||||
filepath,
|
||||
"-P",
|
||||
os.path.realpath(__file__),
|
||||
"-o", output_filepath,
|
||||
"-F", "PNG",
|
||||
"-f", "1"]
|
||||
|
||||
|
||||
def create_argparse():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("-blender", nargs="+")
|
||||
parser.add_argument("-testdir", nargs=1)
|
||||
parser.add_argument("-outdir", nargs=1)
|
||||
parser.add_argument("-idiff", nargs=1)
|
||||
parser.add_argument("-export_method", nargs=1)
|
||||
return parser
|
||||
|
||||
|
||||
def main():
|
||||
parser = create_argparse()
|
||||
args = parser.parse_args()
|
||||
|
||||
blender = args.blender[0]
|
||||
test_dir = args.testdir[0]
|
||||
idiff = args.idiff[0]
|
||||
output_dir = args.outdir[0]
|
||||
export_method = args.export_method[0]
|
||||
|
||||
from modules import render_report
|
||||
|
||||
if export_method == 'HYDRA':
|
||||
report = render_report.Report("Storm Hydra", output_dir, idiff)
|
||||
report.set_reference_dir("storm_hydra_renders")
|
||||
report.set_compare_engine('cycles', 'CPU')
|
||||
else:
|
||||
report = render_report.Report("Storm USD", output_dir, idiff)
|
||||
report.set_reference_dir("storm_usd_renders")
|
||||
report.set_compare_engine('hydra_storm')
|
||||
|
||||
report.set_pixelated(True)
|
||||
|
||||
test_dir_name = Path(test_dir).name
|
||||
|
||||
os.environ['BLENDER_HYDRA_EXPORT_METHOD'] = export_method
|
||||
|
||||
ok = report.run(test_dir, blender, get_arguments, batch=True)
|
||||
|
||||
sys.exit(not ok)
|
||||
|
||||
|
||||
if not inside_blender and __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user