Files
blender/tests/python/eevee_render_tests.py
Brecht Van Lommel f3a33a9298 Fix/workaround Eevee tests crashing with Mantaflow
Skip light cache baking until T73921 is fixed. This should be fixed properly
but being able to run the tests at all is important now.
2020-03-11 14:42:46 +01:00

153 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
# Apache License, Version 2.0
import argparse
import os
import shlex
import shutil
import subprocess
import sys
def setup():
import bpy
for scene in bpy.data.scenes:
scene.render.engine = 'BLENDER_EEVEE'
# Enable Eevee features
scene = bpy.context.scene
eevee = scene.eevee
eevee.use_soft_shadows = True
eevee.use_ssr = True
eevee.use_ssr_refraction = True
eevee.use_gtao = True
eevee.gtao_distance = 1
eevee.use_volumetric_shadows = True
eevee.volumetric_tile_size = '2'
for mat in bpy.data.materials:
# This needs to be enabled case by case,
# otherwise we loose SSR and GTAO everywhere.
# mat.use_screen_refraction = True
mat.use_sss_translucency = True
# Workaround for crash with Mantaflow (T73921).
use_light_cache_bake = True
for ob in bpy.data.objects:
for mod in ob.modifiers:
if mod.type == 'FLUID':
use_light_cache_bake = False
cubemap = None
grid = None
# Does not work in edit mode
try:
# Simple probe setup
bpy.ops.object.lightprobe_add(type='CUBEMAP', location=(0.5, 0, 1.5))
cubemap = bpy.context.selected_objects[0]
cubemap.scale = (2.5,2.5,1.0)
cubemap.data.falloff = 0
cubemap.data.clip_start = 2.4
bpy.ops.object.lightprobe_add(type='GRID', location=(0, 0, 0.25))
grid = bpy.context.selected_objects[0]
grid.scale = (1.735,1.735,1.735)
grid.data.grid_resolution_x = 3
grid.data.grid_resolution_y = 3
grid.data.grid_resolution_z = 2
except:
pass
try:
# Try to only include the plane in reflections
plane = bpy.data.objects['Plane']
collection = bpy.data.collections.new("Reflection")
collection.objects.link(plane)
# Add all lights to light the plane
if invert == False:
for light in bpy.data.objects:
if light.type == 'LIGHT':
collection.objects.link(light)
# Add collection to the scene
scene.collection.children.link(collection)
cubemap.data.visibility_collection = collection
except:
pass
eevee.gi_diffuse_bounces = 1
eevee.gi_cubemap_resolution = '128'
eevee.gi_visibility_resolution = '16'
eevee.gi_irradiance_smoothing = 0
if use_light_cache_bake:
bpy.ops.scene.light_cache_bake()
# 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",
filepath,
"-E", "BLENDER_EEVEE",
"-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)
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]
from modules import render_report
report = render_report.Report("Eevee", output_dir, idiff)
report.set_pixelated(True)
report.set_reference_dir("eevee_renders")
report.set_compare_engines('eevee', 'cycles')
ok = report.run(test_dir, blender, get_arguments, batch=True)
sys.exit(not ok)
if not inside_blender and __name__ == "__main__":
main()