64087b534e830aabd0179cb76af91fc2cef03bd2
All found by auditing the tracks LIVE_DEV_MAP marked as done. Every one of
them parses its keyframes correctly and then drops the result downstream with
no error, so the picture looks plausible and nothing ever surfaces the failure.
Verified against the bundles with tools/ before changing anything.
GlobalLight (48) — 9636 keys / 59 songs, never worked
* Renderer.SetPropertyBlock() replaces the whole block rather than merging.
AlterLateUpdate runs GlobalLight then BgColor1, and both allocated a fresh
block for the same container.Renderers, so BgColor1 wiped all 13 rim
properties every frame. Song 1177 carries GlobalLight x2 and CharaColor x2,
and bgColor1/globalLight both cover 59/59 songs — this was never once live.
* Both handlers now GetPropertyBlock -> modify -> SetPropertyBlock, sharing
one persistent block. The stage-side BgColor1 branch and BlinkLight already
did this; the two character-side handlers were the only exceptions.
* _UseOriginalDirectionalLight / _OriginalDirectionalLightDir moved into the
block too. They were written through renderer.materials, which instantiates
a material copy and allocates an array on every frame, per renderer.
BgColor2 (9) — 14346 keys / 15 songs, at most one group survived
* The dispatcher never filled the group name and the handler never read one,
so up to 15 groups (son1010 carries BgWashA..BgWashO) each repainted the
entire stage every frame and only the last one in list order survived.
* Name is now threaded through and resolved via ResolveStageTargets, writing
_AmbientColor through a MaterialPropertyBlock, resolved once and cached.
* The name -> renderer mapping is still unknown and is NOT guessed here.
BgWashA..O / LaserA..C are neither GameObject names nor _stageObjectUnits
unit names (the three downloaded stages use concrete names like neonsign),
and BlinkLight carries no index back into BgColor2. Unresolved names fall
back to the previous whole-stage write and log a warning, so behaviour is
never worse than before; delete the fallback once the mapping is known.
Spotlight3d (68) — 1089 keys / 31 songs
UVScrollLight (46)
* Both wrote _Color. Enumerating all 499 shaders shows no Gallop/3D/Live/Stage
shader declares it — the only two stage/Bg shaders that do are BgShadowOnly
and RedAlphaGreenColorShadowFogUVScroll, neither related. Spotlight beams are
StageBeamLight*, and UVScroll targets LightAdd1_UV and
StageLightAdd1_UVAlphaMask_TransmittedLightMask; all use _MulColor0 /
_MulColor1 / _ColorPower. The colour write was a no-op while _ColorPower kept
working, so the lights tracked the music in brightness but never in colour.
* This is the same defect as the BlinkLight _Color bug fixed in a3a7b83, twice
over. "The property exists" is not "the target shader has it" — all three
slipped through on that distinction.
* UVScrollLight also gains the previously unused mulColor1, and both now use
MaterialPropertyBlock with cached lookups instead of walking every renderer
on the stage and touching r.materials each frame.
Transform (31) — 681 keys / 12 songs, never worked
* UpdateTransform only consulted StageObjectUnitMap and had no else branch, so
a group named after a GameObject silently did nothing. son1028's first group
is light001_glow_001. This is the mirror image of the Object-track fix in
a3a7b83, which was missing the unit-name path instead.
* Also strips "(Clone)" on the child lookup, which UpdateObject already did.
* TypeTree confirms LiveTimelineKeyTransformData has only position/rotate/
scale and no OffsetType, so absolute writes are correct here.
StageController init — 4 permanently dark lights on live10149
* SetActive(false) sat inside the dedupe check, so among same-named objects
only the first was disabled. Track groups address containers, and the lights
are their children: light001_wash_ground_a (x4), swing_wash_ground_a (x2),
base_rotate_wash_ground_a (x2) and light000_wash_ground_a (x2) all sit under
pfb_env_live10149_blinklight_wash_ground_a. The handler re-enables only the
container, so that one disabled child was never turned back on.
* Now only the topmost timeline-controlled light in each branch is disabled;
descendants keep their prefab state and follow the parent. Dedupe and insert
also agree on the stripped name now.
Only GlobalLight could be verified in the editor — song 1177 carries no
bgColor2, spotlight3d or transform data. The rest is code review plus bundle
ground truth.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Uma Viewer (2)
Unity application that makes it easy to view assets from Uma Musume: Pretty Derby.
| Version | Supported |
|---|---|
| JP (DMM) | ✅ |
| JP (Steam) | ✅ |
| KR | ✅ |
| Global | ✅ |
⚠️ 🌍 EN/Global users ⚠️
In UmaViewer, set WorkMode to Default and Region to Global in the 'Other' Settings tab.
Currently only the default work mode is supported - you need to download assets using the Download All button in the game's settings for the viewer to work.
Requirements/Installation
- Uma Musume: Pretty Derby with full data download is required to run the viewer.
- Depending on your version and update status, the game stores its data in different locations
- DMM/Steam Older installations : C:\Users\your_username\AppData\LocalLow\Cygames\umamusume(?)\
- DMM/Steam Fresh installations : ...\Umamusume installation directory\Umamusume_Data\Persistent(?)\
- In any case,confirm your file listing in target folder looks like this
- Target Folder\
- meta
- master\
- master.mdb
- dat\
- 2A\...
- 2B\...
- ...\...
- Target Folder\
- Download the most recent UmaViewer.zip file from Releases tab.
- Extract the archive anywhere, can be extracted over previous version.
- Run the UmaViewer.exe.
- UmaViewer will try to automatically detect the game data folder.
- If it fails or shows an error, go to Settings → Other → Change DataPath and manually select target folder.
- For Developers/Contributors
- Unity Hub with Unity Engine Version 2022.3.62f1 is recommended. It should be possible to run it on newer 2022.3.X versions.
- Clone or download and extract this repository.
- Import and Open the project in Unity Hub, missing files should be automatically repaired.
- Open the Assets/Scenes/Version2 scene.
- note: If there are errors in the console, JSON .NET For Unity may be required
Features
| ✓ - Working | / - Incomplete | x - Unsupported |
| Viewing main character models/animations | ✓ |
| Swapping costumes/animations between characters | ✓ |
| Viewing chibi models/animations | ✓ |
| Viewing mob (NPC) models | ✓ |
| Playing facial animations, custom sliders | ✓ |
| Cloth/Hair physics | ✓ |
| Playing Live Audio with Lyrics | ✓ |
| Exporting animations to MMD | ✓ |
| Recording animations (.gif), screenshots | ✓ |
| Viewing Props, Scenery, Live scenes | / |
| Exporting models | / |
All characters and animations are supported
Mobs / background characters as well
Mixing outfits and animations
Screenshot and .gif recording
and more
Also check out:
UmaChat by kagari - model viewer fork that lets you chat with Umas using AI + TTS
Special Thank to:
MarshmallowAndroid: UmaMusumeExplorer for acb/awb decoder.
Description
Languages
C#
94.3%
GLSL
1.8%
ShaderLab
1.6%
C
0.7%
JavaScript
0.5%
Other
0.9%