← Back to Blog tutorials

Fix Godot's blank ETC2/ASTC export error on Web and mobile

By BitSoul Team9/1/20264 min read1 views
Fix Godot's blank ETC2/ASTC export error on Web and mobile

You disabled ETC2/ASTC compression to test something, went back to export for Web or for visionOS/Quest under Apple Embedded, and the export dialog shows a red validation error with an empty message box. No text, no hint, nothing to search for. The fix: open Project Settings, go to Rendering, then Textures, then VRAM Compression, and turn Import ETC2 ASTC back on — or tick VRAM Texture Compression > For Mobile in the export preset itself. The blank box isn't your project being broken; it's a real gap in Godot's export validation that only two of four platforms have closed.

The blank error, decoded

Every export platform in Godot runs `has_valid_project_configuration()` before it lets you export. When ETC2/ASTC import is disabled, that check calls `ResourceImporterTextureSettings::should_import_etc2_astc()`, gets `false` back, and sets `valid = false`. On macOS and Android, that path also appends a `TTR()` string explaining exactly what's wrong — macOS got that message in a fix merged January 2024 (PR #86769, milestone 4.3), Android got it in a fix merged April 2026 (PR #117341, milestone 4.7). Web and Apple Embedded never got the matching line. They set `valid = false` and stop — no `err +=` call before it. That's documented in issue #119803, filed against 4.6.3 stable and reproduced on 4.7 dev, with a companion fix (PR #119804) proposed for the two remaining platforms. Until that lands, Web and Apple Embedded exports fail silently on this specific setting while every other validation error in the same dialog shows text.

The practical effect: if you inherited a project, or duplicated an export preset from someone who unchecked mobile VRAM compression to speed up an editor build, you'll stare at an unlabeled red X with no idea it's a texture-format setting and not something wrong with your scene, your icons, or your export template install.

Where the ETC2/ASTC checkbox actually lives

Where the ETC2/ASTC checkbox actually lives — illustrated

There are two settings that matter, and they're in different places:

  1. Project Settings > Rendering > Textures > VRAM Compression > Import ETC2 ASTC — the global switch that controls whether the editor imports textures into ETC2/ASTC at all.
  2. The export preset's own Options tab, where Web and mobile-embedded presets carry a VRAM Texture Compression > For Mobile checkbox that has to agree with setting 1.

Both need to be on for a Web or Apple Embedded export to pass validation. Toggle only the export preset checkbox and leave the project setting off, and you'll trip the exact blank-error path above.

Compression isn't cosmetic here — it's the difference between a texture that fits in VRAM on a phone and one that doesn't load at all. A 2048×2048 texture at uncompressed RGBA8 is 16MB in memory. ETC2 RGB8 packs that down to 4 bits per pixel — 2MB, an 8:1 ratio. ASTC at a 4×4 block size lands at 8 bits per pixel — 4MB, a 4:1 ratio. On a mid-range Android device or a WebGL/WebGPU build running off a phone GPU, a scene with even a dozen uncompressed 2K textures is 192MB of texture memory before geometry, and that's the kind of budget that gets a mobile browser tab killed.

The Fix Import button that skips your texture

The Fix Import button that skips your texture — illustrated

There's a second, older trap that makes this worse to debug: prior to a fix merged for 4.5 (PR #107015, issue #106992), clicking the "Fix Import" prompt that appears after you enable VRAM Texture Compression > For Mobile updated the project setting but did not actually re-import the texture. No `.etc2` variant got written into the `.import` file. The texture kept using its old, uncompressed import settings until you ran Project > Reload Current Project, at which point the re-import finally ran. If you're on 4.4.x or earlier, don't trust "Fix Import" alone — reload the project and check the `.import` file (or the Import dock's preview) for the compressed variant before you export.

| Platform | Shows an error message | Fix Import re-imports immediately |
|---|---|---|
| macOS | Yes, since 4.3 (Jan 2024) | Yes (4.5+) |
| Android | Yes, since 4.7 (Apr 2026) | Yes (4.5+) |
| Web | No — blank `valid = false` | Yes (4.5+) |
| Apple Embedded (visionOS/Quest via embedded) | No — blank `valid = false` | Yes (4.5+) |

Gotchas

GLB imports make this worse because Godot doesn't tag imported textures for a specific platform automatically — a model brought in through the glTF importer gets whatever the project-wide texture import defaults are, and if mobile VRAM compression was off when you imported it, re-enabling the project setting later doesn't retroactively fix textures already sitting in `.godot/imported/` until you force a reimport. Second: the blank error only fires for this one setting; every other export validation failure on Web and Apple Embedded still prints text, so the silence itself is the tell that you're looking at issue #119803's gap and not a template or signing problem. Third: if you're testing texture budgets before an export, load a texture-heavy prop like the Combat Drone GLB, check its import settings after toggling compression, and confirm the `.import` file actually changed rather than trusting the editor's checkbox state — a free account's two monthly downloads cover evaluation; commercial use is included with paid memberships (pricing).

For the material and geometry side of the same import pipeline, see how Godot's GLTF importer flattens normal maps and how Godot 4.7.2's PCSS shadow fix changes what those compressed textures look like once lit. If collision is next on your export checklist, why GLB imports have no collision in Unity, Godot, and UE5 covers the other silent gap in the same workflow.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: godot texturing pbr optimization workflow tutorials

Skip the modelling — download it instead

A free BitSoul account gets you 2 models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models