@@ -12,11 +12,9 @@ namespace Unity.Netcode.RuntimeTests
1212 /// measurement sequences and compares them step for step.
1313 /// </summary>
1414 /// <remarks>
15- /// The two exist in parallel: the managed one continues to serve
16- /// <see cref="TransformSyncModes.PerInstance"/> and the native one serves
17- /// <see cref="TransformSyncModes.Batched"/>, because the managed one cannot run inside a job. Unlike the
18- /// delta check, which the two synchronization modes genuinely share, there is nothing structural stopping
19- /// these two from drifting apart. This is what stops it.
15+ /// The two exist in parallel: the managed one serves <see cref="TransformSyncModes.PerInstance"/> and the
16+ /// native one serves <see cref="TransformSyncModes.Batched"/>, because the managed one cannot run inside a
17+ /// job. Nothing structural keeps them from drifting apart.
2018 /// </remarks>
2119 // These tests do not need to run against the Rust server.
2220 [ IgnoreIfServiceEnvironmentVariableSet ]
@@ -33,18 +31,14 @@ internal class NativeInterpolatorTests
3331 private const float k_Tolerance = 1E-4f ;
3432
3533 /// <summary>
36- /// Allowed while a value is still in motion, for the two paths that are known to be sensitive rather
37- /// than exact.
34+ /// Allowed while a value is still in motion, for the two paths that are equivalent rather than exact.
3835 /// </summary>
3936 /// <remarks>
40- /// Vector slerp is the one replacement in <see cref="NetworkTransformMath"/> that is equivalent rather
41- /// than exact, so its small per step difference compounds through the interpolator's feedback.
37+ /// Vector slerp is the one <see cref="NetworkTransformMath"/> replacement that is equivalent rather
38+ /// than exact, so its small per step difference compounds through the interpolator's feedback.<br />
4239 /// Quaternion smooth dampening converts to euler angles, dampens each angle, and converts back every
43- /// frame; near a gimbal transition a sub thousandth of a degree difference in the conversion is enough
44- /// to select a different (equally valid) euler representative, after which the two dampen toward
45- /// different angles. The managed implementation is just as fragile there, so this is the two diverging
46- /// under a shared weakness rather than one of them being wrong.<br /><br />
47- /// What matters is that neither drifts permanently, which is what the settle phase asserts.
40+ /// frame. Near a gimbal transition a sub thousandth of a degree difference selects a different, equally
41+ /// valid, euler representative, and the two then dampen toward different angles.
4842 /// </remarks>
4943 private const float k_TransientTolerance = 5.0f ;
5044
@@ -88,9 +82,6 @@ private NativeInterpolatorState CreateState(InterpolatorValueKind kind, bool isS
8882 } ;
8983 }
9084
91- /// <summary>
92- /// A deterministic motion path, so a failure is reproducible.
93- /// </summary>
9485 private static Vector3 PositionAt ( int tick )
9586 {
9687 return new Vector3 (
@@ -334,19 +325,14 @@ public void BufferOverflowKeepsNewestMeasurement()
334325 }
335326
336327 /// <summary>
337- /// An instance that stops being the authority part way through a session resets its interpolator, and
338- /// the measurements that follow are stamped with the tick they were authored on.<br />
339- /// Those stamps are older than the reset, so a seeded baseline would leave both ordering guards
340- /// rejecting them. Neither implementation seeds one, and this holds them to that.
328+ /// An interpolator reset part way through a session still accepts the measurements that follow it.
341329 /// </summary>
342330 /// <remarks>
343- /// This is the shape of an ownership transfer away from the local instance. It happens to the server
344- /// under a server authoritative motion model and to the previous owner under an owner authoritative
345- /// one.<br />
346- /// It is reproduced here rather than only through
347- /// <c>NetworkTransformSyncModeParityTests.OwnershipChangeKeepsReplicating</c> because the failure is
348- /// entirely internal to the interpolator. Once the buffered measurements are all older than a seeded
349- /// baseline, no amount of elapsed time recovers it.
331+ /// The reset stamps its baseline with the local time, while the measurements that follow carry the
332+ /// older tick they were authored on. See
333+ /// <see cref="BufferedLinearInterpolator{T}.ResetTo(T, double)"/>.<br />
334+ /// This is the shape of an ownership transfer away from the local instance: the server under server
335+ /// authority, the previous owner under owner authority.
350336 /// </remarks>
351337 [ Test ]
352338 public void ResetPartWayThroughSessionStillAcceptsOlderStampedMeasurements ( [ Values ] bool useManaged )
0 commit comments