Commit Graph

449 Commits

Author SHA1 Message Date
ritenseki 652c306099 docs+diag: audit report, stage env-map diagnostic, verified/unverified marks
LIVE_AUDIT_2026-08-05.md records the audit behind the previous commit: the
evidence for each fix, the tool invocations that produced it, and — deliberately
— the three conclusions I got wrong before the data corrected them, since each
was a plausible-sounding guess:

  * "66 same-named wash lights stay lit" — that 66 is the mob_a000 crowd, not
    lights. live10149 has 4 duplicated light names, 10 objects.
  * "the light handlers need name -> List support first" — every one of song
    1177's 28 BlinkLight group names maps to exactly one GameObject; the groups
    address containers and GetComponentsInChildren already covered the children.
  * "plane_000 should look lighter than the other two" — _EnvRate 0.75 vs 1.00
    cannot be distinguished once the term saturates to white, so that comparison
    could never have decided anything either way.

Also records which song exercises which fix, since only 1177 is downloaded
locally and it carries no bgColor2 / spotlight3d / transform data.

Stage floor blow-out (plane_000 / stage_object_001 / specular_002): four
mechanisms now ruled out rather than one cause found. Not lighting — live10149
has 10102 GameObjects and zero Light components, and the Live code never touches
Light at all. Not a missing reflection texture — StageEnvMapDiag reports 0 of 3
null. Not the unwritten _ColorPower — BgColor1's power field has a median of
1.000 on all three groups, which retroactively supports reverting that write.
Not the env reflection term — F9 zeroes _EnvRate on all three renderers, and the
log confirms it fired nine times with no visible change. Also corrects a sampling
error of mine: frame 0 is near-black, but across all 257 keys the floor's median
luminance is 0.548 and 81% of keys exceed 0.3, so it is meant to be bright for
most of the song. Next binary test is forcing _MulColor0 to black.

StageEnvMapDiag logs the env-map bindings once at stage init and attaches an
opt-in F9 toggle that flips _EnvRate between its authored value and 0 through a
property block. Diagnostic only; inert unless the key is pressed.

LIVE_DEV_MAP.md now separates "implemented" from "checked". Ten rows drop to
"OK?" because nobody has verified them — this session found four tracks that
were marked done and had never once produced output, so an unchecked mark is
not evidence of health. GlobalFog drops to partial: its data is height fog
(isDistance=0, isHeight=1) but the handler enables Unity distance fog, and
RenderSettings has no height fog. The claim that BlinkLight and Spotlight3d
drive child Light components was wrong and is corrected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 13:42:47 +08:00
ritenseki 64087b534e Live: fix five silently-failing track paths + one init bug
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>
2026-08-05 13:42:18 +08:00
ritenseki a3a7b83236 Live: fix six silently-failing track paths, add PostFilm data layer
Every fix here is the same shape: the keyframe data was already parsed
correctly and then dropped somewhere downstream, with no error logged.
Found by dumping the authoritative schema with tools/ and comparing against
what the handlers actually consume.

BgColor1 (8) — the largest track in the corpus, 43617 keys / 59 songs
  * AlterUpdate_BgColor1 filtered on a `validBgColorNames` whitelist of four
    character group names, discarding the other 16 stage groups outright.
    On song 1177 that is ~92% of the track's keys. Filter removed; Director
    now routes by group name (characters vs stage).
  * Stage branch resolves renderers by walking the whole stage hierarchy.
    StageObjectMap alone is not enough: it dedupes by name, and crowd groups
    have 66-570 same-named objects, so only the first was ever coloured.
  * Writes _MulColor0, confirmed by enumerating the shaders' property tables.
    _AmbientColor belongs to BgColor2 — they are separate channels on the
    same shader and must not be written by both.
  * Populates fields the dispatcher had always left at default: colorPower,
    scale, vertexColorToonPower, outlineWidthPower, LightBlendMode,
    IsSilhouette, IsProjector, TimelineName.

Object (33) — the neon sign never descended from the ceiling
  * The group name `neonsign` is a StageController._stageObjectUnits *unit*
    name; no GameObject of that name exists, so the whole track never fired.
    UpdateObject now falls back to StageObjectUnitMap and applies to each
    child of the unit.
  * ObjectUpdateInfo.OffsetType was populated by the dispatcher but never
    read, so Add-relative positions were written as absolute and objects
    snapped to their parent's origin. Now honoured against a lazily captured
    base local TRS.

BlinkLight (45) — 19420 keys / 57 songs, the biggest lighting payload
  * Wrote _Color, which does not exist on Gallop/3D/Live/Stage/LightBlinkBlend
    (its colour channel is _BlinkLightColor), so the write was a no-op and the
    lights rendered black. Now probes the shader for the real property.
  * Brightness goes to _ColorPower instead of being folded into the colour,
    falling back to colour*power only where that property is absent.
  * Uses MaterialPropertyBlock; the old path hit Renderer.materials every
    frame, allocating and breaking batching.

PostFilm (39) — ~20200 keys / 59 songs, previously recorded as empty
  * Data class fields reordered to the bundle's TypeTree order and the five
    missing BlinkLight* fields added; LiveTimelineKeyPostFilmDataList created;
    postFilmKeys / postFilm2Keys / postFilm3Keys declared on the worksheet.
    Runtime now deserializes 100 / 161 / 87 keys on song 1177.
  * AlterUpdate_PostFilm dispatch with interpolation, PostFilmUpdateInfo,
    a URP ScriptableRendererFeature and a full-screen blit shader.
  * Rendering is disabled by default: filmOptionParam's geometry is undefined
    anywhere we can read. All 100 keys on song 1177 are Vignette variants, so
    that parameter decides the whole look, and the shader that defines it is
    not in the `shader` bundle (all 499 searched by name and by property
    signature) — it ships inside the app binary.

Diagnostics
  * LiveTimelineWorksheetDiag dumps every track field with group names and key
    counts, and Probe() tests whether a candidate field name matches the
    bundle TypeTree. Confirmed worksheetList.Count == 1 (SheetType MainLive),
    and that WashLightList really is spelled with a capital W — upstream
    katboi01 uses washLightList, which never populates.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 01:11:57 +08:00
ritenseki 7fc1511fd4 Fix StageController light filter: use explicit patterns instead of Contains("light")
Replace broad Contains("light") with IsTimelineControlledLight() that matches
only objects actually controlled by timeline handlers (blinklight, spotlight3d,
_wash_, laser). Neonsigns, glow meshes, UV scroll objects and other static stage
props now keep their prefab default state instead of being silently disabled.

Also fix UVScrollLight handler to use GetComponentsInChildren<Renderer>(true)
so inactive renderers are included in material search.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 20:19:45 +08:00
ritenseki e76dd1c6f0 Fix BgColor2 to write _AmbientColor on stage materials
Replaces incorrect RenderSettings.ambient* with per-material
_AmbientColor writes on stage renderers, confirmed via live10106
material dump.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 19:52:38 +08:00
ritenseki 04d8db3bb1 Fix UVScrollLight offset accumulation; update track docs
scrollSpeedX/Y was incorrectly passed to SetTextureScale (tiling),
now accumulated as per-frame offset delta on top of keyframe scrollOffsetX/Y.
Added _uvScrollAccum dict cleared on InitializeTimeline.

Also updated LIVE_TRACKS.md with full-scan coverage numbers and
live-shader-todo.md with blocked-track categorization.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 18:55:17 +08:00
ritenseki 5fdbad92d2 Fix BgColor2 dispatch and unify Director handler style
- Fix LiveTimelineBgColor2Data.keys type (BgColor1DataList → BgColor2DataList)
- Add AlterUpdate_BgColor2 call and implementation in LiveTimelineControl
- Subscribe OnUpdateBgColor2 in Director with ambient color handler
- Extract all anonymous delegates in Director to named OnXxxUpdate methods
- Add LIVE_TRACKS.md: full track reference table (IDs 0–102)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:08:22 +08:00
ritenseki 988e8789f4 Fix BlinkLight, WashLight, Spotlight3d to use material properties
Stage light objects have no Unity Light components — they are
self-illuminated meshes. All three handlers now write to MeshRenderer
material properties instead.

BlinkLight: GetComponentsInChildren<Renderer> → _Color + _ColorPower.
pattern==0 uses per-renderer color0Array/powerArray; blink cycle
multiplies col * intensity into _Color.

Spotlight3d: adds _Color + _ColorPower writes after transform update.
color/colorPower fields were previously unused.

WashLight: sets _ProjectorColorPower from CameraProjectionColorPower
on projector materials. _ProjectorMulColor0 left at material default
(no color field in keyData).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:38:36 +08:00
ritenseki a4821f4e82 Add Core RP assembly reference to umamusume.asmdef
Volume, VolumeProfile, TextureCurve are in Unity.RenderPipelines.Core.Runtime,
not in the URP Runtime assembly. asmdef references are non-transitive so
both assemblies must be listed explicitly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:23:11 +08:00
ritenseki dde480daea Add URP runtime assembly reference to umamusume.asmdef
Required for UnityEngine.Rendering.Universal namespace used
in Director.cs post-processing handlers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:20:39 +08:00
ritenseki fefcd96b07 Add ChromaticAberration, HdrBloom, ColorCorrection post-processing tracks
Three new URP Volume Override tracks (Path A):

ChromaticAberration (73): power → intensity, isEnable toggles effect.
Per-channel redOffset/greenOffset/blueOffset not expressible in URP built-in CA.

HdrBloom (38): bloomIntensity → Bloom.intensity, threshold → Bloom.threshold.
Fields unconfirmed (no bundle data in 30-song scan).

ColorCorrection (61): saturation (game 1.0=neutral) → ColorAdjustments.saturation
(URP range -100..100). redCurve/greenCurve/blueCurve → ColorCurves via TextureCurve.
Depth curves and selective color have no URP equivalent.

Director.InitializeTimeline() acquires or creates a Volume on Camera.main and
adds the required overrides programmatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 14:17:41 +08:00
ritenseki c0c7a5bfbe Fix BlinkLight flicker and ParticleGroup dual-rate emission
BlinkLight (pattern != 0): was always on; now computes intensity each
frame from turnOnTime/keepTime/turnOffTime/intervalTime/waitTime/
loopCount/powerMin/powerMax — supports fade-in, hold, fade-out, interval
cycle. pattern == 0 retains the original static per-light path.

ParticleGroup: was driving emission from FlickerLightRate only;
now uses MinMaxCurve(FlickerDarkRate, FlickerLightRate) so Unity
randomly samples between the two rates each emission event.

Also adds TODO comments on WashLight, Laser, UVScrollLight incomplete
fields, updates CLAUDE.md track table and live-shader-todo.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 13:16:44 +08:00
ritenseki 2e0f28ad7e Add Live stage lighting and effects tracks
New data classes (11):
  BlinkLight, GlobalFog, Spotlight3d, UVScrollLight,
  VolumeLight, LightShafts, Particle, ParticleGroup,
  WashLight, Laser + CLAUDE.md

WorkSheet: added 11 new [SerializeField] fields
LiveTimelineControl: added 9 new events + AlterUpdate_SimpleListControl helper
Director: added handlers for all new tracks

Key fixes:
  - StageController: register light objects in StageObjectMap (was skipped
    with continue), fixes missing stage props like ceiling neonsign
  - Spotlight3d handler: use keyData.assetName for StageObjectMap lookup
  - BlinkLight: SetActive + child Light color/intensity from timeline data

Coverage (58 songs): BlinkLight 56/58, Effect 55/58, GlobalFog 40/58,
  UVScrollLight 32/58, Spotlight3d 30/58

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 11:34:04 +08:00
ritenseki 4d5593dd22 Update .gitignore and add missing .meta file
- Ignore Unity auto-generated files (packages-lock.json, ShaderGraphSettings.asset)
- Ignore investigation/build scripts (umamusume.csproj, etc.)
- Add LiveTimelineEffectData.cs.meta

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 07:44:22 +08:00
ritenseki abdbfc0f42 Add Live Effect track (track ID 60) implementation
- LiveTimelineEffectData.cs: new data class with full field set
  (color, offset, owner, occurrenceSpot, IsLinkOwner*, etc.)
  derived from actual cutt asset bundle TypeTree dump
- LiveTimelineWorkSheet: add effectList field
- LiveTimelineControl: add OnUpdateEffect event and AlterUpdate_EffectControl
- Director: add OnEffectUpdate handler and ApplyEffectTransform helper
  loads prefab from 3d/effect/live/pfb_{name}, instantiates per key frame

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 21:24:52 +08:00
Maidd ffb9973455 Added support for Global's encrypted DB 2025-11-12 03:22:47 +07:00
katboi01 3cb3239316 Fixed loaded file export on global
Added workaround for isReadable error on scene export to .pmx
Fixed compilation on android
Incremented version
2025-10-04 00:27:12 +02:00
Ji O 5351f82f09 Load assets via Stream
* Load assets via Stream, Compatible with new versions of unencrypted DB
2025-10-03 23:21:48 +02:00
Sera eb35f2db0f Update README.md (#146)
* Update README.md
2025-10-03 11:00:39 +02:00
katboi01 6e3b53abb2 Removed automatic database update for standalone mode. Incremented version. 2025-09-28 14:30:50 +02:00
CroakFang d66991c2ef Add support for exporting prop, compatible with the new version, add the EnableRootMotion option (#143)
* update BillboardBuilder

* add a new enum value

* Add the EnableRootMotion option to support scenarios where the character is not within the camera view

* Add support for exporting prop

* update

* compatible with the new version 2

* update

---------

Co-authored-by: 左右看 <1918891542@qq.com>
2025-09-28 12:10:18 +02:00
katboi01 2f2f06eadc Updated translation source and credits 2025-09-01 22:51:01 +02:00
katboi01 21c7dea855 Added auto region detection 2025-09-01 22:41:41 +02:00
CroakFang 8682e43342 export pmx vertex normal bug fix 2025-08-03 20:10:55 +08:00
CroakFang ebe376644a static mesh export uv bug fix 2025-08-03 19:02:34 +08:00
CroakFang 22af0f80e0 bug fix for func InstantiateEntry 2025-08-03 10:13:15 +08:00
左右看 293df1f5b3 Added support for billboard sphere export. 2025-08-03 08:34:26 +08:00
katboi01 ad5ff72ad9 Mini uma loading hotfix 2025-08-02 12:45:58 +02:00
katboi01 c1cfba70a9 Merge pull request #113 from croakfang/master
fix https://github.com/katboi01/UmaViewer/issues/111
2025-08-02 09:21:53 +02:00
katboi01 4eb00e9ee9 Added image sequence recording 2025-08-02 09:19:38 +02:00
CroakFang 4c9eba4111 fix https://github.com/katboi01/UmaViewer/issues/111 2025-08-02 14:11:45 +08:00
katboi01 b3d179c0c7 Loaded assets can now be copied to a selected folder 2025-08-02 07:47:02 +02:00
katboi01 37cd7d2ee3 Added audio files to list of loaded assets 2025-08-01 22:35:33 +02:00
katboi01 d9b4686275 Possible fix for infinite audio export 2025-08-01 21:15:45 +02:00
CroakFang 009f142f5b Fix some VMD export issues and some other changes (#100)
* Bug fix, improved UI layout and live vocals

* Bug Fixes, New Live Compatibility

* Android build support

* Update build.yml

* Fix issues with the new version of the game

* bug fix

* add config button

* Improve performance

* Sync fork

* bug fix, new uma compatibility

* Add /UserSettings to gitignore

* bug fix, add live characher shader control

* fix compilation errors

* fix compilation errors 2

* fix the live lighting calculation logic

* bug fix, add editor layout settings to gitignore

* bug fix, add editor layout settings to gitignore

* Add time scale keys for live

* live camera bug fix

* add live stage control, optimize live performance

* fix build error

* add uma head custom

* Add tiptoes rotation for VMD export

* Add a save path prompt when exporting VMD files.

* Remove the debug code for body dragging.

* Remove unused physics components to improve performance.

* Fix incorrect VMD exports for loop animations
Fix VMD motion errors during repeated recordings
Fix ghost bone persistence after multiple recordings

* Revert "Remove unused physics components to improve performance."

This reverts commit 7a1ae7f7d13d05380f9215b653d1c6719303a458.

* Reapply "Remove unused physics components to improve performance."

This reverts commit fe4c05f6942198864ca06e25f17a11440961040d.

* fix https://github.com/katboi01/UmaViewer/issues/95

* live timescale bug fix

* bug fix for skin and tail textures in live

* bug fix for skin and tail textures in live (2)

* fix https://github.com/katboi01/UmaViewer/issues/108

* message ui bug fix
2025-07-31 20:43:45 +02:00
Evans Jahja 956bbdb6d2 Added .mp3 export (#92)
* Update to larger bitrate

* Add support for sub-voice export

---------

Co-authored-by: katboi01 <59540382+katboi01@users.noreply.github.com>
2025-07-20 07:18:58 +02:00
katboi01 d48aa4488e fix compilation error 2025-07-12 13:48:24 +02:00
katboi01 e32a38c6c7 Refactor: Moved settings panels to their own classes (#89)
This should not affect any functionalities
2025-07-12 13:36:19 +02:00
CroakFang 204752d7d6 Add custom head, live character shader control, and live stage control. (#88)
* Bug fix, improved UI layout and live vocals

* Bug Fixes, New Live Compatibility

* Android build support

* Update build.yml

* Update build.yml

* Update build.yml

* Update build.yml

* Update build.yml

* Update build.yml

* Fix issues with the new version of the game

* bug fix

* add config button

* Improve performance

* Sync fork

* bug fix, new uma compatibility

* Add /UserSettings to gitignore

* bug fix, add live characher shader control

* fix compilation errors

* fix compilation errors 2

* fix the live lighting calculation logic

* bug fix, add editor layout settings to gitignore

* bug fix, add editor layout settings to gitignore

* Add time scale keys for live

* live camera bug fix

* add live stage control, optimize live performance

* fix build error

* add uma head custom
2025-07-11 17:23:57 +02:00
katboi01 a42ea93ffd Added support for global (right side bar -> other -> region) 2025-07-04 18:39:45 +02:00
katboi01 c8554e500c Fixed division by zero error when downloading assets
Fixed exporting multiple MMD models
2025-03-27 13:12:01 +01:00
katboi01 7eb8de69df Fixed antialiasing setting sometimes not being applied 2025-01-31 11:03:07 +01:00
katboi01 45a17176be Update screenshot transparency for Unity 2022 2025-01-31 10:30:46 +01:00
katboi01 e2d5402edb Updated engine version to 2022.3.56f1 2025-01-20 10:59:14 +01:00
katboi01 d3be8e28f7 Removed unnecessary API call for mob names
Added tails to mini umas
2024-12-14 10:33:15 +01:00
katboi01 959c96c26c Fixed 'Loaded Assets' entries not opening the correct file path 2024-12-13 14:16:09 +01:00
katboi01 58e3e5b1dd Restored AntiAliasing settings 2024-12-13 00:20:05 +01:00
katboi01 7f71b16f63 Added new EN translation source 2024-12-10 12:58:11 +01:00
katboi01 38c7f9fef9 fixed screenshot save location for Android 2024-11-16 11:05:43 +01:00
katboi01 c0631b617c Removed bulk download at the start of program 2024-11-11 18:52:12 +01:00