Entry 127
"The streams' fog"
Filescrates/piney-stream/src/scene.rscrates/piney-stream/src/draw.rscrates/piney-stream/src/effect.rscrates/piney-stream/src/lib.rsdocs/engine/stream.md
Seven of the effect tasks 121-125 ported set a fog on the scene's draw environment: streams 2, 3, 4, 7, 13, 16 and 20. None of them was drawn, so those cutscenes had no depth haze.
SetFog
ccDrawEnv::SetFog(near, far, nearRate, farRate, colour) (0x00105820)
keeps these values:
fMax = 2.55 (100 - nearRate)andfMin = 2.55 (100 - farRate);fogAandfogB, the line fromfMaxatneartofMinatfar.
The three-argument form (0x00105890) is that with rates 0 and 100: clear
to full fog. VU1 fogs every vertex of an object whose fogSW bit 3 is
set, at fogB + fogA w, held between the two. The tasks take a few
objects out of it: Func_str0001's four sky objects and the others'
OBJ_sfp7bac2.
The port
- The fog.
Scene::fogis aSceneFog, andScene::fog_offholds the objects taken out of it. The tasks set both at their start. - The draw. Each model gets one
Fogat its centre's view depth, the approximation the field and dungeon draws already use. - Stream 4.
Func_str0110's cue x3 (SetFog(0, 0, 0, 0, 0)) takes the fog away from the next frame on.
Checked
scene::tests::fog_lineschecks both forms: clear atnear, full or held atfMinfromfar, and the colour bytes.- Shots.
- Stream 3's dungeon walls darken to its green-blue with distance.
- Stream 7's floor takes its tint.
- Stream 2 still looks as it did.
- The packet fixtures are unchanged: they do not include the models.
Still unknown
- Per-vertex fog. The port's fog is per model, not per vertex, so a large model (a whole room) is fogged at its centre's depth throughout. - Stream 4's fog off. What
SetFog(0, 0, ...)'s divisions by zero leave infogAandfogBon the EE is not worked out. The port takes it as no fog.