Skip to content

Commit 42c8549

Browse files
zbucclaude
andcommitted
Fix Blender 4.2+ EEVEE engine compatibility
Blender 4.2+ replaced BLENDER_EEVEE with BLENDER_EEVEE_NEXT. This commit adds version-aware engine selection to support both versions. Changes: - utils/blender_version.py: Added get_eevee_engine_name() helper - config.py: Updated RenderConfig to use version-aware default engine - config.py: Added BLENDER_EEVEE_NEXT to valid render engines - All test files: Updated to use get_eevee_engine_name() instead of hardcoded strings - test_e2e_validation.py: Updated engine check to handle both EEVEE variants This fixes GitHub Actions failures on Blender 4.2 container tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent d33cf17 commit 42c8549

10 files changed

Lines changed: 34 additions & 10 deletions

File tree

blender_blocking/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from dataclasses import dataclass, field
66
from typing import Dict, Optional, Tuple
77

8+
from utils.blender_version import get_eevee_engine_name
9+
810

911
_VALID_RECON_MODES = {"legacy", "loft_profile", "silhouette_intersection"}
1012
_VALID_JOIN_MODES = {"auto", "boolean", "voxel", "simple"}
@@ -13,7 +15,7 @@
1315
_VALID_FILL_STRATEGIES = {"interp_linear", "interp_nearest", "constant"}
1416
_VALID_CANON_ANCHORS = {"center", "bottom_center"}
1517
_VALID_CANON_INTERP = {"nearest"}
16-
_VALID_RENDER_ENGINES = {"BLENDER_EEVEE", "WORKBENCH"}
18+
_VALID_RENDER_ENGINES = {"BLENDER_EEVEE", "BLENDER_EEVEE_NEXT", "WORKBENCH"}
1719
_VALID_COLOR_MODES = {"BW", "RGBA"}
1820
_VALID_CONTOUR_MODES = {"external", "ccomp", "tree", "hierarchy"}
1921
_VALID_BOOLEAN_SOLVERS = {"auto", "EXACT", "MANIFOLD", "FLOAT", "FAST"}
@@ -124,7 +126,7 @@ class RenderConfig:
124126
"""Configuration for rendering orthographic silhouettes."""
125127

126128
resolution: Tuple[int, int] = (512, 512)
127-
engine: str = "BLENDER_EEVEE"
129+
engine: str = field(default_factory=get_eevee_engine_name)
128130
transparent_bg: bool = True
129131
samples: int = 1
130132
margin_frac: float = 0.08

blender_blocking/generate_turntable_sequence.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
set_camera_top,
2828
silhouette_session,
2929
)
30+
from utils.blender_version import get_eevee_engine_name
3031

3132

3233
def clear_scene() -> None:
@@ -161,7 +162,7 @@ def generate_turntable_sequence(
161162
resolution=(512, 512),
162163
color_mode="BW",
163164
transparent_bg=False,
164-
engine="BLENDER_EEVEE",
165+
engine=get_eevee_engine_name(),
165166
background_color=(1.0, 1.0, 1.0, 1.0),
166167
silhouette_color=(0.0, 0.0, 0.0, 1.0),
167168
) as session:

blender_blocking/test_e2e_validation.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
render_orthogonal_views,
4545
)
4646
from blender_blocking.integration.image_processing.image_loader import load_image
47+
from blender_blocking.utils.blender_version import get_eevee_engine_name
4748
from blender_blocking.validation.silhouette_iou import (
4849
canonicalize_mask,
4950
compute_mask_iou,
@@ -101,7 +102,7 @@ def setup_render_settings(self) -> None:
101102

102103
# Fast rendering (we only need silhouettes)
103104
scene.render.engine = config.engine
104-
if config.engine == "BLENDER_EEVEE" and hasattr(scene, "eevee"):
105+
if config.engine in ("BLENDER_EEVEE", "BLENDER_EEVEE_NEXT") and hasattr(scene, "eevee"):
105106
scene.eevee.taa_render_samples = int(config.samples)
106107

107108
def extract_silhouette(self, image_path: str) -> np.ndarray:
@@ -484,8 +485,8 @@ def _parse_args(argv: Optional[list[str]] = None) -> argparse.Namespace:
484485
)
485486
parser.add_argument(
486487
"--engine",
487-
choices=("BLENDER_EEVEE", "WORKBENCH"),
488-
default="BLENDER_EEVEE",
488+
choices=("BLENDER_EEVEE", "BLENDER_EEVEE_NEXT", "WORKBENCH"),
489+
default=get_eevee_engine_name(),
489490
help="Render engine",
490491
)
491492
parser.add_argument(

blender_blocking/test_phase2_integration.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
set_camera_top,
5252
silhouette_session,
5353
)
54+
from utils.blender_version import get_eevee_engine_name
5455

5556

5657
def clear_scene() -> None:
@@ -172,7 +173,7 @@ def render_turntable_silhouettes(
172173
resolution=(512, 512),
173174
color_mode="BW",
174175
transparent_bg=False,
175-
engine="BLENDER_EEVEE",
176+
engine=get_eevee_engine_name(),
176177
background_color=(1.0, 1.0, 1.0, 1.0),
177178
silhouette_color=(0.0, 0.0, 0.0, 1.0),
178179
) as session:

blender_blocking/test_silhouette_rendering.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
render_silhouette_frame,
3535
silhouette_session,
3636
)
37+
from utils.blender_version import get_eevee_engine_name
3738

3839

3940
def _load_mask(image_path: Path) -> np.ndarray:
@@ -80,7 +81,7 @@ def test_render_isolation(self) -> None:
8081
color_mode="RGBA",
8182
transparent_bg=False,
8283
hide_non_targets=True,
83-
engine="BLENDER_EEVEE",
84+
engine=get_eevee_engine_name(),
8485
) as session:
8586
configure_ortho_camera_for_view(
8687
session.camera,
@@ -100,7 +101,7 @@ def test_render_isolation(self) -> None:
100101
color_mode="RGBA",
101102
transparent_bg=False,
102103
hide_non_targets=True,
103-
engine="BLENDER_EEVEE",
104+
engine=get_eevee_engine_name(),
104105
) as session:
105106
configure_ortho_camera_for_view(
106107
session.camera,

blender_blocking/test_suite_multiview.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
silhouette_session,
4444
)
4545
from integration.blender_ops.raycast_utils import ray_cast_world
46+
from utils.blender_version import get_eevee_engine_name
4647

4748

4849
# Test suite configuration
@@ -433,7 +434,7 @@ def render_turntable(
433434
resolution=(resolution, resolution),
434435
color_mode="BW",
435436
transparent_bg=False,
436-
engine="BLENDER_EEVEE",
437+
engine=get_eevee_engine_name(),
437438
background_color=(1.0, 1.0, 1.0, 1.0),
438439
silhouette_color=(0.0, 0.0, 0.0, 1.0),
439440
) as session:

blender_blocking/utils/blender_version.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,23 @@ def get_blender_version_string() -> Optional[str]:
4040
return bpy.app.version_string
4141

4242

43+
def get_eevee_engine_name() -> str:
44+
"""
45+
Get the correct EEVEE engine name for the current Blender version.
46+
47+
Returns:
48+
"BLENDER_EEVEE_NEXT" for Blender 4.2+, "BLENDER_EEVEE" for earlier versions
49+
"""
50+
if not BLENDER_AVAILABLE:
51+
return "BLENDER_EEVEE" # Default for non-Blender context
52+
53+
version = bpy.app.version
54+
# Blender 4.2+ uses EEVEE_NEXT, earlier versions use EEVEE
55+
if version[0] >= 4 and version[1] >= 2:
56+
return "BLENDER_EEVEE_NEXT"
57+
return "BLENDER_EEVEE"
58+
59+
4360
def is_blender_version_at_least(major: int, minor: int = 0, patch: int = 0) -> bool:
4461
"""
4562
Check if Blender version is at least the specified version.
8.83 KB
Loading
7.3 KB
Loading
14.5 KB
Loading

0 commit comments

Comments
 (0)