Skip to content

Feature: support splat / DNTS texture options in CBlankMapGenerator #3009

Description

@PtaQQ

Summary

Blank maps generated via InitBlank=1 + blank_map_* options are not DNTS-capable: no splat
distribution texture, no splat detail-normal textures, and the SSMF shader is compiled without the
splat path. Please let CBlankMapGenerator accept splat texture options so a generated blank map can
render DNTS, the same way an archived SSMF map declares it via mapinfo.resources.

This unblocks runtime map-editor tools that generate a flat map and then paint the splat distribution.

See Map Editor pr for reference: beyond-all-reason/Beyond-All-Reason#7219

Current behavior (verified)

CBlankMapGenerator logs every map option but only acts on blank_map_x/y/height/color_{r,g,b}. With
splat keys injected, infolog shows them arriving:

[MapGen::CBlankMapGenerator] mapOpt<blank_map_splatdetailnormaltex1, luaui/.../Rock_Brown_1k_dnts.dds>

…but they have no effect on the generated map:

$ssmf_splat_normals:0..3  id=0 xsize=0          # detail-normal array never loaded
gl.TextureInfo("$ssmf_splat_distr") -> nil      # no distribution to query or paint

Requested behavior

When present, these options should populate the generated map's effective MapInfo (same fields the
archive [RESOURCES]/[SPLATS] blocks fill) so SSMF loads the detail-normal array and compiles the
DNTS shader variant:

Map option MapInfo field
blank_map_splatdetailnormaltex1..4 smf.splatDetailNormalTexNames[0..3] (VFS paths)
blank_map_splattexscale1..4 splats.TexScales[0..3] (default 0.01)
blank_map_splattexmult1..4 splats.TexMults[0..3] (default 1.0)
blank_map_splatdetailnormaldiffusealpha smf.splatDetailNormalDiffuseAlpha (0/1)
blank_map_splatdistr (optional) smf.splatDistrTexName

If detail-normal textures are supplied but no splatdistr, the generator should synthesize a blank
RGBA distribution (e.g. R=255, G=B=A=0) and bind it as $ssmf_splat_distr, so editor tools can read
its size and paint it via Spring.SetMapShadingTexture("$ssmf_splat_distr", luaTex).

DNTS should activate only when at least one splatdetailnormaltex* is given; otherwise behavior is
unchanged (full backward compatibility).

Notes

Let me know if this is the right approach for blank map generation at all or this should be built a different way.

The game-side already emits these exact keys; this is purely the engine half so can be easily tested with the Terraform Brush pulled.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: toolsAuxiliary engine tools and developer/server tooling (e.g. pr-downloader)

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions