BS-JD-203 - Drag/drop material and texture application #18
Labels
No Label
area:animation
area:assets
area:audio
area:brushes
area:build-release
area:extensions
area:governance
area:hierarchy
area:inspector
area:navigation
area:operators
area:physics
area:project-ux
area:quality
area:rendering
area:runtime
area:scene-io
area:terrain
area:viewport
priority:P0
priority:P1
priority:P2
priority:P3
roadmap:jackdaw
roadmap:production
type:architecture
type:docs
type:epic
type:feature
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Falling-Metal-Interactive/Blacksite#18
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Make texture/material drag/drop work consistently for static mesh actors, primitive actors, and brush faces.
Why
The material workflow should use one predictable drop path across current meshes and future brush geometry.
Implementation notes
Acceptance criteria
Tests/docs
Material application tests across target kinds. Update README controls and docs/editor material workflow.
Progress landed in
cc6acb1(Complete M0 editor asset workflow).Completed M0-relevant portion:
Authoring Materialtexture refs are now Asset Browser-backed picker/drop fields with browse, locate, clear, hover/drop highlighting, compact rows, and thumbnail previews..jpgtextures can be assigned and previewed/loaded.Closing this ticket for the M0 drag/drop material+texture application workflow. Follow-up work for comprehensive material browsing/cataloging remains in BS-JD-201, and PBR texture-set auto-detection remains in BS-JD-202.
Correction: reopening this because BS-JD-203 is assigned to M2 and still includes broader target-kind/preview acceptance criteria (primitive/brush faces and richer commit/cancel coverage) beyond the M0 work.
cc6acb1should be treated as M0 progress for actor material/texture picker/drop and operator routing only. Remaining M2 scope stays open.Rbanh referenced this issue2026-07-11 18:49:46 -04:00
Expanded renderer-slot dependency: #51
Material/texture drag-drop now depends on the stable slot and resolver contract in #51.
The supported target matrix includes static renderer slots, skinned renderer slots, primitive material bindings, and brush faces. A one-slot renderer may assign directly; multi-slot renderers must expose an explicit slot/all choice. Clearing an assignment restores the imported source material. Preview/commit/cancel and undo must use the same slot-aware operator path, and material-only edits must not respawn geometry, joints, animation players, deformed buffers, or BLAS data.
#18 remains the user-facing drag/drop workflow; #51 owns the underlying material assets, instances, stable slots, migration, and render-path semantics.
Renderer-slot and texture-parameter drag/drop progress
The local #51 implementation adds the missing shared foundation and extends the user workflow:
Evidence and verification: #51 comment 865.
#18 stays open for the broader preview/commit/cancel matrix across primitive and brush-face viewport targets.
Targeted viewport-drop audit
The current drag card is visually polished, but the behavioral acceptance is not complete:
HydratedRendererMaterialBinding, but the drop path does not use its authored actor/slot identity;MaterialDescinstead of a specific rejection;The planned corrective slice uses the existing mesh-picking path for exact renderer-slot hits, authored brush-face intersection for stable face IDs, transient non-dirty preview state, and one typed operator/history commit on release. Leaving the viewport or pressing Escape restores the exact snapshot and removes helpers.
Material/Instance payloads will target renderer slots, primitives, and brush faces. Texture payloads will target primitive/brush base-color bindings; renderer slots will reject them with guidance to create/edit a Material Instance rather than mutating a shared material implicitly. A viewport hit will never broaden silently to all slots.
Plan:
.cursor/plans/material_library_and_targeted_drop_2026-07-12.plan.md.Implementation begins on a clean branch after #49 publication. This issue remains open.
Exact viewport-drop acceptance complete
Implemented in
02247f0, with live evidence in3794faa.The corrective target contract is now in place:
HydratedRendererMaterialBindingto one exact stable slot;Live Wayland QA verified green
Ground / Surfaceacquisition, visible material/inspector/usage preview, one release commit, exact undo restoration, and a second preview canceled with Escape without another commit.Focused tests cover exact multi-slot assignment/undo, brush-face-only preview/restore, primitive Material/Texture resolution, renderer Texture rejection, and locked-target rejection. The full workspace check, strict Clippy, all tests,
dev/hot-reloadfeature matrices, level validation (0 blockers), and navigation freshness all pass. Full verification record.