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.
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 profileAdvWarmupVolumeProfileAll, which enablesFilmGrain(type Large02, intensity 1, response 0.3). As far as the game's code shows, nothing turns it off during playback:AdvGlobalVolume.HideWarmupObjectshas no callers, so the warm-up objects stay active once shown.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. Withfilm-grainset, 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
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-grainbecomes the default again. If it does not, the step that removes it should be found and followed.