#1461: Media faces render fullbright with no material, on PBR and legacy objects #1475

Closed
TheSlowly wants to merge 1 commit from TheSlowly/Slipstream:media-fullbright-pbr-1461 into main
Collaborator

Fixes #1461.

While a face shows live media, the face ingest gives it a fullbright, white-tinted row and a material holding only the media texture, ahead of any glTF or legacy material route. Every GPU path (G-buffer, forward blend, RT hits, GI, probes) already handles fullbright rows, so no shader changes and no per-frame cost. Media state is part of the face signature (parcel media keeps the face's texture id), and the scripted-colour fast path keeps the white tint.

Note: PBR media faces are opaque whatever the glTF alpha mode, per the ticket.

Tests: media_fullbright_checks.cpp, media_fullbright_source_checks.py in indra/newview/tests.

Fixes #1461. While a face shows live media, the face ingest gives it a fullbright, white-tinted row and a material holding only the media texture, ahead of any glTF or legacy material route. Every GPU path (G-buffer, forward blend, RT hits, GI, probes) already handles fullbright rows, so no shader changes and no per-frame cost. Media state is part of the face signature (parcel media keeps the face's texture id), and the scripted-colour fast path keeps the white tint. Note: PBR media faces are opaque whatever the glTF alpha mode, per the ticket. Tests: `media_fullbright_checks.cpp`, `media_fullbright_source_checks.py` in indra/newview/tests.
The Vulkan face ingest only swapped the media texture into the base colour slot and
kept everything else: a PBR face stayed on the glTF route, which classifyCleanFace never
lets go fullbright, so the media was multiplied by the material's base colour and lit
with its metallic/roughness, normal, emissive, shadows and probes (and legacy media
faces kept their tint, normal/spec maps and lighting). Live media is now decided once
per ingest, ahead of any material: llcleanmediaface.h gives the face a fullbright,
white-tinted row and a material holding only the media texture, alpha from the face's
own colour on legacy faces (opaque on PBR faces, whatever the glTF alpha mode). The GPU
sees an ordinary fullbright row, so the G-buffer, forward blend, ray-traced hits and GI
take their existing fullbright paths with no per-frame cost. The setTEColor tint fast
path keeps the white media tint too. Whether media is live is mixed into the face's
ingest signature, because parcel media plays under the face's own texture id.

Test-Plan:
    g++ -std=c++17 -I.. indra/newview/tests/media_fullbright_checks.cpp && ./a.out  (run in indra/newview/tests)
    python3 indra/newview/tests/media_fullbright_source_checks.py
    In world, RT off and on: a PBR object (dark tinted, metallic, normal-mapped, emissive
    material) with a MoAP face playing a page; the page shows at its own colour, unaffected
    by sun, shadow, local lights and probes, and looks the same in reflections and GI.
    Repeat on a legacy prim with a tint, normal/spec map and a 50% transparency face.
    Stop the media: the face returns to its material.
    Parcel media on a legacy face: fullbright while it plays, lit again when it stops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Collaborator

Superseded by your fix on main (c01b06f625), closing this one. The ticket's still in testing; I'll check your version in world.

Superseded by your fix on main (c01b06f625), closing this one. The ticket's still in testing; I'll check your version in world.
TheSlowly closed this pull request 2026-11-08 00:23:03 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream!1475
No description provided.