Skip to content

Story film grain: the game's data keeps it on, a device shows none #1

Description

@nichinichisou0609

The story's film grain comes from the ADV global volume prefab (AdvGlobalVolume, loaded from its embedded address). Its warm-up volume (WarmupVolumes/VolumeAll: global, weight 1, layer 11) uses the profile AdvWarmupVolumeProfileAll, which enables FilmGrain (type Large02, intensity 1, response 0.3). As far as the game's code shows, nothing turns it off during playback:

  • AdvGlobalVolume.HideWarmupObjects has no callers, so the warm-up objects stay active once shown.
  • The story camera's volume mask includes layer 11. Its volume stack is recomputed when the warm-up objects are shown and when a Stage row applies its volume (Best and High).
  • The video camera updates its volume stack every frame with a mask of layer 11 alone, so videos get the grain too.
  • No stage profile overrides FilmGrain, and no game code touches it.

URP's uber post applies the grain at intensity × 4. The Large02 texture's alpha has a standard deviation of about 0.012, which gives a modulation of roughly 7–9 %. That should be visible, yet on a device story scenes show no visible film grain.

Current behaviour (525ed01): the player draws no film grain unless the host sets film-grain. With film-grain set, the grain tiles one texel per pixel of the screen the game renders at: the canvas width capped at the quality's resolution (1920 at Best and High, 1440 at Middle, 1024 at Low).

Not ruled out yet

  • A runtime patch: the App.Runtime assembly has hotfix hooks, the ADV assembly has none.
  • A quality level at which the story camera's stack never picks up the warm-up volume. This would not explain the videos, since their camera updates every frame.
  • Whether Best and High add a second grain in FinalPost. That depends on whether the UI camera is in the story camera's stack.

To settle it: take a lossless screenshot (PNG, not a screen recording) of a dark, flat story frame on a device, and note the quality setting. Grain shows up as pixel noise in flat areas; without grain those areas are flat. If the device draws the grain, film-grain becomes the default again. If it does not, the step that removes it should be found and followed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions