virtual-world-framework / vwf

Virtual World Framework
https://virtual.wf
Other
142 stars 53 forks source link

Tickless model #450

Closed davideaster closed 9 years ago

davideaster commented 9 years ago

Don't record ticks in the queue. Don't tick nodes and model drivers.

If ticks pass through the message and become part of the application state, then unexecuted ticks must be included in the replication and persistence data. This adds unnecessary bulk to the state data, unnecessary traffic with the storage backend, and can increase buffer delays during poor network conditions.

More details are in 73217736e4756f6d7293de0691e726493a3934b4.

@eric79 @allisoncorey @scottnc27603 @rchadwic

davideaster commented 9 years ago

The biggest issue with this branch is that it breaks view transform interpolation in view/threejs.js. Turning off interpolateTransforms undoes the weirdness, but of course that's no answer.

@eric79, can interpolated transforms work without the models receiving ticks?

rchadwic commented 9 years ago

Hey. I think that in Sandbox we've gone to a different algorithm for motion smoothing that does not rely on the tick signal. Let me see how this might be merged in.

allisoncorey commented 9 years ago

New issues created by this branch:

allisoncorey commented 9 years ago

adl/assetCache was using the tick function. Updated in https://github.com/virtual-world-framework/vwf-apps/pull/19

scottnc27603 commented 9 years ago

@davideaster @allisoncorey Please review the ticked method in the new jiglib view driver. In particular the call to this.state.setProperty which actually calls the model through the shared state.

davideaster commented 9 years ago

Catching ticks in the view and calling a model method has the same issue that catching ticks in the model had. If time-based updates affect the model state, the model should be making future calls.

From a model driver, you can do something like:

this.kernel.callMethod( nodeID, "update", [], -0.05 )

Then catch update in calledMethod, do the update there, and call kernel.callMethod again to schedule the next update.

updated should be declared as a method in the component. Negative when times are relative to the current simulation time, so this will do an update every 50 ms of simulation time.