[{"id":"U465","fact":"**A sub-section's inner time is the engine's own transform, and the same call exists on 5.3 to 5.8: `UMovieSceneSubSection::OuterToInnerTransform().TransformTime(outer)`.** It folds in the start offset (in the CHILD's ticks), the time scale, the child's playback start and its tick resolution. Measured through evaluate_sequence {descend:true} on 5.3.2 and 5.8.2: a sub-section from 1 s with StartFrameOffset 12000 (0.5 s at 24000/s) maps outer 2.0 s to inner 1.5 s, innerTick 36000, and a child line 0 -> 1 over 4 s reads 0.375 there - the value the child gives on its own at 1.5 s.","source":"5.3 `Runtime/MovieScene/Public/Sections/MovieSceneSubSection.h:101` and 5.3 `Runtime/MovieScene/Public/Evaluation/MovieSceneSequenceTransform.h:280`; 5.8 `Runtime/MovieScene/Public/Sections/MovieSceneSubSection.h:131` and 5.8 `Runtime/MovieScene/Public/Evaluation/MovieSceneSequenceTransform.h:733`; tools/test_ue_spec_extensions.py SX100-SX104. Read and measured 2026-10-04","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE Sequencer sub-sections, signed objects, material shader maps and leader poses"},{"id":"U466","fact":"**Every Modify and PostEditChangeProperty on a Sequencer section gives it and every outer a new signature (UMovieSceneSignedObject::MarkAsChanged), so a channel written through set_property's TEXT form plays at once.** Measured on 5.3.2 and 5.8.2: a FloatCurve and a BoolCurve rewritten as text on an open sequence were applied by the running Sequencer on the next set_sequencer_time (Intensity 100 -> 5000, the light shown), and a Movie Render Queue render after the write showed the visibility change a render before it had not. Rewriting identical text still changes the signature (the write bracket's Modify).","source":"5.3 `Runtime/MovieScene/Private/MovieSceneSignedObject.cpp:175` (Modify) and 5.3 `Runtime/MovieScene/Private/MovieSceneSignedObject.cpp:187` (PostEditChangeProperty); 5.8 `Runtime/MovieScene/Private/MovieSceneSignedObject.cpp:241` and 5.8 `Runtime/MovieScene/Private/MovieSceneSignedObject.cpp:253`; tools/test_ue_spec_extensions.py SX200-SX206. Read and measured 2026-10-04","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE Sequencer sub-sections, signed objects, material shader maps and leader poses"},{"id":"U467","fact":"**After a material graph edit its shader map is incomplete and NOTHING compiles until something draws: UMaterial::PostEditChangeProperty caches with EMaterialShaderPrecompileMode::None.** So IsCompilationFinished is already true and every shader queue count 0 while IsGameThreadShaderMapComplete is false. UMaterial::CacheShaders(Default) re-caches from the current state and submits the rest; recompile_material {wait:true} then saw the map complete after 1.2 s on 5.3.2 and 2.9 s on 5.8.2 for a three-constant opaque material.","source":"5.3 `Runtime/Engine/Private/Materials/Material.cpp:4661` and 5.3 `Runtime/Engine/Private/Materials/Material.cpp:2590` (CacheShaders) and 5.3 `Runtime/Engine/Private/Materials/MaterialShared.cpp:815` (IsCompilationFinished); 5.8 `Runtime/Engine/Private/Materials/Material.cpp:5418` and 5.8 `Runtime/Engine/Private/Materials/Material.cpp:2804` and 5.8 `Runtime/Engine/Private/Materials/MaterialShared.cpp:876`; tools/test_ue_spec_extensions.py SX300-SX303. Read and measured 2026-10-04","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE Sequencer sub-sections, signed objects, material shader maps and leader poses"},{"id":"U468","fact":"**A leader pose written on a Blueprint's SCS template reaches every placed instance pointing at the TEMPLATE; an instance follower of a construction-script leader reads None after one rerun; a follower of a native leader keeps it through a save and reopen.** LeaderPoseComponent is a saved TWeakObjectPtr UPROPERTY that OnRegister hands back to SetLeaderPoseComponent, and the setter re-routes a chain to its top leader. Measured on 5.3.2 and 5.8.2: Shirt's template leader read `BP_..._C:Body_GEN_VARIABLE` on a placed instance; Hat (an instance component following the BP-made Body) read Body, then None after set_actor_transform.","source":"5.3 `Runtime/Engine/Classes/Components/SkinnedMeshComponent.h:227` and 5.3 `Runtime/Engine/Private/Components/SkinnedMeshComponent.cpp:654` (OnRegister) and 5.3 `Runtime/Engine/Private/Components/SkinnedMeshComponent.cpp:2364-2391` (the chain); 5.8 `Runtime/Engine/Classes/Components/SkinnedMeshComponent.h:314` and 5.8 `Runtime/Engine/Private/Components/SkinnedMeshComponent.cpp:871` and 5.8 `Runtime/Engine/Private/Components/SkinnedMeshComponent.cpp:3198-3225`; tools/test_ue_spec_extensions.py SX500-SX507. Read and measured 2026-10-04","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE Sequencer sub-sections, signed objects, material shader maps and leader poses"},{"id":"U493","fact":"**UMovieSceneSkeletalAnimationSection::MatchSectionByBoneTransform is exported (MOVIESCENETRACKS_API) though not a UFUNCTION: it sets the section's MatchedLocationOffset / MatchedRotationOffset so the named bone of its clip lands where the previous (or next) section's clip has it at the match frame, under the section's bMatchTranslation / bMatchIncludeZHeight / bMatchRotation* switches.** Measured through add_sequence_section {matchBone: pelvis} on two tutorial walks (5.8.2 and 5.3.2): offset (-1.03, -1.99, 0) cm and yaw -3.97 degrees; the pelvis step into the join frame of the engine's exported clip fell from 2.31 cm to 0.80 (0.85 the frame before).","source":"5.3 `Runtime/MovieSceneTracks/Public/Sections/MovieSceneSkeletalAnimationSection.h:253` and 5.8 `Runtime/MovieSceneTracks/Public/Sections/MovieSceneSkeletalAnimationSection.h:276`; tools/test_ue_spec_extensions_e.py SX2600-SX2601. Read and measured 2026-10-04","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U517","fact":"**A material instance that first meets a skeletal mesh while a play session runs (a Movie Render Queue render is one) renders the Default Material and keeps doing so: in PIE the editor will not set the missing bUsedWithSkeletalMesh usage, it logs 'missing usage flag SkeletalMesh! Default Material will be used in game' once per instance (UsageFlagWarnings), and bAutomaticallySetUsageInEditor does not help. Outside PIE the same first meeting sets the flag on the instance itself, logs 'needed to set usage flag', recompiles it and dirties its package.** Measured 2026-10-04 on 5.8.2: 21 colorway instances first used in an MRQ render logged the warning and drew gray in later thumbnails and renders; the three that first met the mesh in the editor logged 'needed to set usage flag' and read bHasStaticPermutationResource True. A parent with bUsedWithSkeletalMesh set (set_property + recompile_material wait) made all 24 render their textures.","source":"5.8 `Runtime/Engine/Private/Materials/MaterialInstance.cpp:1762` (UMaterialInstance::SetMaterialUsage: line 1788 sets it only outside PIE, line 1826 warns); 5.8 `Runtime/Engine/Private/Materials/Material.cpp:1873` (the same rule for a UMaterial). Read and measured 2026-10-04","engine":"5.8","ue":["5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U518","fact":"**A Sequencer visibility track keys VISIBLE: its bool channel's true means shown, and the engine inverts it onto the bound property, which stores HIDDEN semantics - AActor::bHidden on an actor (an actor has no bHiddenInGame; that is USceneComponent's). A track keyed true on bHidden shows the actor; key false to hide it.** Measured 2026-10-05 on 5.8.2: stand-in actors given a bHidden visibility track keyed true kept rendering through the MetaHumans that replaced them; keyed false they vanished in the same frame (MRQ single frame 880, after reload_packages); the officers' own tracks key false outside their on-screen span. A track bound to bHiddenInGame on an actor did nothing.","source":"5.8 `Runtime/MovieSceneTracks/Private/Tracks/MovieSceneVisibilityTrack.cpp:87` (ProcessSourceValueForKeying: 'store hidden semantics ... the visibility section's bool channel stores visible semantics'); 5.3 `Runtime/MovieSceneTracks/Private/Tracks/MovieSceneVisibilityTrack.cpp:28` (SetIsExternallyInverted(true)). Read and measured 2026-10-05","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U519","fact":"**A transient ULevelSequencePlayer (NewObject, Initialize on the world's persistent level, SetPlaybackPosition Jump) evaluates a level sequence synchronously - the entity runner is flushed inside the call - so a bound skeletal mesh can be read at any frame without the open Sequencer: TickAnimation(0) then RefreshBoneTransforms(nullptr) computes the pose on the game thread (no tick function means no parallel evaluation), and Stop plus RestoreState puts the actor back.** Measured on 5.8.2 and 5.3.2: the tutorial walk's hand_r, foot_l and head at frame 17 of a 30 fps sequence matched get_anim_pose at 0.5667 s within 0.015 cm; the open Sequencer's playhead and the component's own pose were unchanged after.","source":"5.8 `Runtime/MovieScene/Private/MovieSceneSequencePlayer.cpp:1489`; 5.8 `Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:2920`; tools/test_ue_spec_extensions_h.py SX4700-SX4703. Measured 2026-10-05","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U520","fact":"**5.8 removed FMovieSceneSequencePlaybackSettings.bRestoreState (present 5.3 to 5.7); a player that restores state sets FinishCompletionStateOverride = ForceRestoreState.** And on a background probe editor, set_sequencer_time moved the playhead while the bound component kept the old frame's bones for 3 s and more: the Sequencer's pose reaches the bones only when the editor ticks the component.","source":"5.3 `Runtime/MovieScene/Public/MovieSceneSequencePlaybackSettings.h:86`; 5.8 `Runtime/MovieScene/Public/MovieSceneSequencePlaybackSettings.h:117`; tools/test_ue_spec_extensions_h.py SX4705. Measured 2026-10-05","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U521","fact":"**A Sequencer double channel's final value is the absolute sections' weighted mean plus every additive section's weighted total: Value = AbsoluteResult.Total / AbsoluteResult.Weight + AdditiveResult.Total + AdditiveFromBaseResult.Total, written only when the absolute weight is non-zero; overrides apply after.** So an additive z 50 at full weight over an absolute z 100 evaluates z 150 (evaluate_sequence's composite sums it this way since 26f009df).","source":"5.8 `Runtime/MovieSceneTracks/Private/Systems/MovieScenePiecewiseDoubleBlenderSystem.cpp:316`; tools/test_sequencer_film.py T3650-T3653. Read and measured 2026-10-06","engine":"5.8","ue":["5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U542","fact":"**Movie Render Queue's MP4 encoder module (MovieRenderPipelineMP4Encoder) ships from 5.6; 5.5's MovieRenderPipeline.uplugin has no such module**, so an .mp4 render through MRQ is possible from 5.6, not only 5.8.","source":"5.6: Plugins/MovieScene/MovieRenderPipeline/MovieRenderPipeline.uplugin:76; 5.5: same file, module list ends at UEOpenExrRTTI :76 with no MP4 encoder; measured 2026-10-13 by the test lane on 5.6.1 (test_render_sequence 118/1, mp4 written 12717 bytes)","engine":"5.6 - 5.8","ue":["5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U620","fact":"**A Control Rig pose asset's PastePose writes only the controls selected on the rig instance; with them selected (UControlRig::SelectControl) and bDoKey it keys the sequence's rig track whether or not the sequence is open in Sequencer** (RS1700: 0 -> 18 keys closed, 36 after a second paste with it open, 5.3.2, 5.5.4, 5.7.4, 5.8.3, 2026-10-18).","source":"5.3 `ControlRigPose.cpp:92`; 5.8 `ControlRigPose.cpp:222`","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)"},{"id":"U677","fact":"**Blender's FBX camera arrives in a Level Sequence with its focus distance 1000 times too far and its transform's scale at 100.**","source":"measured 2026-11-01, tools/test_wave3_w4d.py CAM103 holds the corrected values on each engine","engine":"5.3-5.8","ue":["5.3","5.4","5.5","5.6","5.7","5.8"],"bl":[],"section":"UE generic routes settled live - create_asset, set_property, edit_container, call_function, evaluate_sequence (UE 5.8.2 scratch editor, 2026-10-04)","value":"focus 3 m -> 300,000 cm in FocusSettings.ManualFocusDistance; Scale.X/Y/Z 100; a key's time is frame / fps; no f-stop channel"}]