Turn Link's own motion vectors on by default.

DLSS, FSR 3.1 and frame generation get the real motion of Link and his equipment unless selective_motion = 0 is set. Its two status lines come every minute or two instead of every two seconds, now that every session writes them.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
chrg6
2026-11-12 14:38:26 -05:00
parent 3123d40017
commit e6392f381f
2 changed files with 7 additions and 7 deletions

View File

@@ -545,11 +545,11 @@
# dlaa_objmv = 1
# Motion vectors of Link's own for DLSS, FSR 3.1 and frame generation (game 1.1.1): Link and the equipment attached to him are
# drawn a second time with last frame's pose, so fast turns, attacks and jumps move by their real motion instead of an
# estimate from colour and depth. 0, the default: the estimate, as before. 1: on, to try; it reads the player's
# equipment from the game's memory at every submission and has not been played on this version yet. Read at start.
# estimate from colour and depth. 1, the default; 0: the estimate, as before 0.10.0. It reads the player's equipment
# from the game's memory at every submission. Read at start.
# motion_guard_degrees (35, 45 or 60, the default): a part that turns more than this in one frame is checked against
# last frame's depth before its vector is written.
# selective_motion = 0
# selective_motion = 1
# Characters' trails: where a character, animal or held item moves without motion vectors of its own (all of them with
# dlaa_objmv = 0), DLSS can drag a faint copy of it. The G-buffer marks those objects; on them and where they were the
# frame before, DLSS is told to favour the current frame by this percentage (0, 35, 65 or 100; 0 off). Higher removes

View File

@@ -32,11 +32,11 @@ static int owner_on;
static void owner_init(void *unused) {
(void)unused;
// NX2NAVI_SELECTIVE_MOTION (selective_motion; default 0, 1 on): off until it has been played. On, every guest
// NX2NAVI_SELECTIVE_MOTION (selective_motion; default 1, 0 off: the estimate from colour and depth). On, every guest
// submission walks the player's actor, equipment and models in guest memory (motion_owner_capture), each scene
// draw is looked up in that list (vk_fg_pose.inc pose_owner), and the player's meshes are drawn a second time
// into the motion vectors DLSS, FSR 3.1 and frame generation read.
owner_on = RT_V111 && rt_knob("SELECTIVE_MOTION", "0");
owner_on = RT_V111 && rt_knob("SELECTIVE_MOTION", "1");
}
int motion_owner_enabled(void) {
plat_once(&owner_once, owner_init, NULL);
@@ -259,7 +259,7 @@ void motion_owner_capture(MotionOwnerSnapshot *out) {
capture_model_buffers(out);
O.nbindings=out->count;
memcpy(O.bindings,out->bindings,out->count*sizeof *O.bindings);
if(O.captures%720==0) rt_log("motion direct: %u shape bindings from %u models",out->count,O.count);
if(O.captures%43200==0) rt_log("motion direct: %u shape bindings from %u models",out->count,O.count);
plat_mutex_unlock(&owner_lock);
qsort(out->bindings, out->count, sizeof *out->bindings, binding_address_order);
}
@@ -268,7 +268,7 @@ void motion_owner_present(void) {
if (!motion_owner_enabled()) return;
plat_mutex_lock(&owner_lock);
++O.producer_frame;
if (O.producer_frame % 120 == 0)
if (O.producer_frame % 7200 == 0) // on by default: a line every minute or two, not every two seconds
rt_log("motion ownership: %u models, %llu captures, %llu owned/%llu other queries, "
"%llu conflicts, %llu capacity misses, %u attachment rejections",
O.count, (unsigned long long)O.captures, (unsigned long long)O.owned_queries,