File: make_reference_models.py

package info (click to toggle)
embree 4.3.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 100,656 kB
  • sloc: cpp: 228,918; xml: 40,944; ansic: 2,685; python: 812; sh: 635; makefile: 228; csh: 42
file content (77 lines) | stat: -rw-r--r-- 2,375 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from email.mime import base
import glob
import os
import subprocess
import platform
import time
import sys

script_dir = os.path.dirname(os.path.abspath(__file__))

verbose = False

if len(sys.argv) < 3:
    print("""
Compute reference images for model tests.
needs the embree_viewer or embree_pathtracer respectively in the build folder
usage: 
    python make_reference.py <renderer> <tests_file>
where
    <renderer>    - one of [viewer, pathtracer]
    <tests_file>  - file containing a list of tests as relative paths to .ecs files e.g. tests/models/tests_all.txt

example:
    python tests/models/make_reference.py viewer tests/models/tests_all.txt

     - computes reference images for all tests in tests_all.txt using the viewer OVERWRITING old images in folder 
""")
    exit()

renderer = os.path.sep.join([script_dir, "..", "..", "build", "embree_" + sys.argv[1]])

fin = sys.argv[2]
tests = []
with open(fin, 'r') as f:
    tests = [l for l in [l.strip() for l in f.readlines()] if l and not l.startswith("#")]

if not os.path.exists(script_dir + os.path.sep + "reference"):
    os.mkdir(script_dir + os.path.sep + "reference")

errs = []
tt = time.time()
dirname = os.path.dirname(fin)
for t in tests:
    (path, filename) = os.path.split(t)
    (basename, ext) = os.path.splitext(filename)

    outimage = f"{os.path.sep.join([script_dir, 'reference', sys.argv[1] + '_' + path.replace(os.path.sep, '_')])}_{basename}.exr"
    cmd = f"{renderer} -c {dirname + os.path.sep + t} -o {outimage}"

    if verbose:
        print(cmd)
    if os.system(cmd) == 0:
        print(f"Rendered {outimage}")
    else:
        errs.append(dirname + os.path.sep + t)



    if sys.argv[1] == "viewer":
        outimage = f"{os.path.sep.join([script_dir, 'reference', sys.argv[1] + '_quad_coherent_' + path.replace(os.path.sep, '_')])}_{basename}.exr"
        cmd = f"{renderer} -c {dirname + os.path.sep + t} -o {outimage} -convert-triangles-to-quads --coherent"
        if verbose:
            print(cmd)
        os.system(cmd)
        if os.system(cmd) == 0:
            print(f"Rendered {outimage}")
        else:
            if dirname + os.path.sep + t not in errs:
                errs.append(dirname + os.path.sep + t)

print (time.time() - tt)

if errs:
    print("There have been errors!")
    for e in errs:
        print(f"  - {e}")
    print("Could not be rendered")