Re: [ogpx] Synchronization of gestures (was: Limits to interoperability of scripted objects)
Carlo Wood <carlo@alinoe.com> Wed, 11 November 2009 10:13 UTC
Return-Path: <carlo@alinoe.com>
X-Original-To: ogpx@core3.amsl.com
Delivered-To: ogpx@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix)
with ESMTP id C474B3A6A80 for <ogpx@core3.amsl.com>;
Wed, 11 Nov 2009 02:13:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.765
X-Spam-Level:
X-Spam-Status: No, score=0.765 tagged_above=-999 required=5 tests=[AWL=-0.219,
BAYES_40=-0.185, HELO_EQ_AT=0.424, HOST_EQ_AT=0.745]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com
[127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BTeL6k0jjkCb for
<ogpx@core3.amsl.com>; Wed, 11 Nov 2009 02:13:09 -0800 (PST)
Received: from viefep15-int.chello.at (viefep15-int.chello.at [62.179.121.35])
by core3.amsl.com (Postfix) with ESMTP id 020453A6A69 for <ogpx@ietf.org>;
Wed, 11 Nov 2009 02:13:08 -0800 (PST)
Received: from edge04.upc.biz ([192.168.13.239]) by viefep15-int.chello.at
(InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id
<20091111101334.FVKL8249.viefep15-int.chello.at@edge04.upc.biz> for
<ogpx@ietf.org>; Wed, 11 Nov 2009 11:13:34 +0100
Received: from mail9.alinoe.com ([77.250.43.12]) by edge04.upc.biz with edge
id 3mDW1d0140FlQed04mDXdn; Wed, 11 Nov 2009 11:13:34 +0100
X-SourceIP: 77.250.43.12
Received: from carlo by mail9.alinoe.com with local (Exim 4.69) (envelope-from
<carlo@alinoe.com>) id 1N8ABU-00018L-Un for ogpx@ietf.org;
Wed, 11 Nov 2009 11:12:17 +0100
Date: Wed, 11 Nov 2009 11:12:16 +0100
From: Carlo Wood <carlo@alinoe.com>
To: ogpx@ietf.org
Message-ID: <20091111101216.GB5757@alinoe.com>
References: <e0b04bba0910262215td0cf125lb3129947e8f81891@mail.gmail.com>
<f72742de0910270951x6b4536d8wef165e850ba16ef8@mail.gmail.com>
<e0b04bba0911091956j5edc4840pd5a32d98eff3776e@mail.gmail.com>
<4AF8ECDE.2010900@cox.net>
<f72742de0911100919r76c337b6i980736db91f7f53c@mail.gmail.com>
<20091110201157.GA10861@alinoe.com> <20091110204155.GA5757@alinoe.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20091110204155.GA5757@alinoe.com>
User-Agent: Mutt/1.5.20 (2009-06-14)
Subject: Re: [ogpx] Synchronization of gestures (was: Limits to
interoperability of scripted objects)
X-BeenThere: ogpx@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Virtual Worlds and the Open Grid Protocol <ogpx.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/ogpx>,
<mailto:ogpx-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/ogpx>
List-Post: <mailto:ogpx@ietf.org>
List-Help: <mailto:ogpx-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ogpx>,
<mailto:ogpx-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 11 Nov 2009 10:13:13 -0000
My previous post was a brainstorm, and I made a view mistakes in it.
Let me try again.
Looking just at animations and sounds, we can observe that it
is impossible to deny playing a sound, and it is only possible
to deny playing an animation for ones own avatar. Nevertheless,
more in general one could think of world-manipulations, visible
to others, and requested by others, that require permissions,
the whole set of permissions can than be seen as a bit mask,
but is at the moment of no further interest. Hence, lets
concentrate for the sake of simplicity on animations.
The simplest case would be a scene with three avatars (agents,
whatever) A, B and C, where A proposes to animate B (to B)
and C is just an observer.
In the ideal situation without much lag, the protocol should
look something like this (were B/xyz and C could be a list of
agents/animations):
[A preloads animations (etc)]
A --request animation xyz of B--> simulator
simulator --A requests animation xyz --> B
[B starts preloading animations (etc)]
simulator --A requests animation xyz of B --> C
[C starts preloading animations (etc)]
B --OK--> simulator
simulator --Ready?--> A,B,C
A --Ready--> simulator
B --Ready--> simulator
C --Ready--> simulator
simulator --GO--> A,B,C
[all viewers play the animations for all avatars]
HOWEVER...
It seems better to seperate this "voting / handshaking" from whatever
is the action. If we assume an API, as morgaine proposed, that gives
us complete control over the world, then a logical step would be
to have a viewer-local scripting language that manipulates this
world (albeit locally, in this case). A given script provided by
another agent would fail if it would attempt to do something for
which it had no permission; so it should be known what permissions
a script needs before running it.
The above then can be done by replacing "animation(s)" with "running
a script". In the above case, the script would only need the
permission "animate your avatar for animation xyz".
The above then turns into:
[A preloads animation (etc)]
A --requests to run script on B,
needing permission "animate B with xyz"--> simulator
simulator --A requests to run script,
needing permissions "animate B with xyz"--> B
[B starts preloading animation (etc)]
simulator --preload animation xyz--> C
[C starts preloading animation (etc)]
B --OK--> simulator
simulator --script--> B
simulator --Ready?--> A,B,C
A --Ready--> simulator
B --Ready--> simulator
C --Ready--> simulator
simulator --GO--> A,B,C
[all viewers run the script]
Now, although EVERYTHING can be implemented from here on with
"running client-side scripts" (possibly predefined, permanently
cached scripts), I'd personally add one more step to seperate
the 'voting' mechanism from 'running a script'.
I think the most general support would be to first define
that some handle means "play script needing those permissions",
and then run the voting protocol, including it's timeout
and permission-denied policies, using that handle; in that
case the voting would look like:
* Define what we vote on, and what are the timeout/permission-denied
policies, and obtain voting-handle
* Handle preloading (tell everyone that they might need these assets).
* Ask for permissions
* Wait for permissions and/or timeouts
* Inform viewers of result about voting-handle
* Wait for preload-ready signals
* Inform viewers that everyone is ready and we have a 'go'.
* All viewers do as agreed, resulting a mutally synchronized
experience.
On Tue, Nov 10, 2009 at 09:41:55PM +0100, Carlo Wood wrote:
> * Viewer A (or object) initiates Multi-gesture Request
> to N (other) viewers, this involves a list of the
> animations (UUID) to play for each of the avatars
> involved, and sounds to play etc, and the starting
> position in the world of each avatar.
> * Each viewer reacts with: Ok, will try; or Nope, I won't.
> If any viewer denies the request (or times out?)
> then the server informs all viewers that the multi-
> animation was aborted (and why). [ An optional flag
> could be to continue anyway, but without the avatar(s)
> that don't want to. ]
> * Once all avatars that want to play the multi-animation
> are known, the server sends them a message: "We have a go!"
> * All viewers that have all the needed information to
> continue (downloaded and cached the animations, sounds etc)
> send a message to the server: "ready!"
> * As soon as all viewers are ready (optionally, a parameter
> of the original request includes a timeout after which
> the delayed avatar is considered to have said "no"),
> the server informs all viewers to start playing the
> multi-gesture.
>
> And YAY! finally a completely synchronized couple (and
> multi) animation, even synced with sound!
>
> Options in case of delays (timeouts) should be:
> - Play as soon data available locally,
> - Wait till at least N, or at least those, avatars
> are ready.
> - Abort completely if any can't play in time.
> - If someone is delayed and the rest already plays
> the animation, then the viewer can decide to abort
> or play the animations locally anyway, as soon as
> they become avaiable, etc etc... All those possibilities
> are mere bits in already existing messages, so why not.
>
> As a side effect of this it should be possible to
> play a gesture involving animation and sound by ONE
> avatar (as are the gestures in SL now) but *synchronized*:
> everyone sees it at the same time, and the animations ARE
> synced with the sound once the start to play (unlike now,
> where the animation is played and 30 seconds later you
> hear the sound).
--
Carlo Wood <carlo@alinoe.com>
- [ogpx] Limits to interoperability of scripted obj… Morgaine
- Re: [ogpx] Limits to interoperability of scripted… Joshua Bell
- Re: [ogpx] Limits to interoperability of scripted… Morgaine
- Re: [ogpx] Limits to interoperability of scripted… Lawson English
- Re: [ogpx] Limits to interoperability of scripted… Joshua Bell
- Re: [ogpx] Limits to interoperability of scripted… Carlo Wood
- [ogpx] Synchronization of gestures (was: Limits t… Carlo Wood
- Re: [ogpx] Limits to interoperability of scripted… Morgaine
- Re: [ogpx] Synchronization of gestures (was: Limi… Carlo Wood
- Re: [ogpx] Synchronization of gestures (was: Limi… Han Sontse
- Re: [ogpx] Synchronization of gestures (was: Limi… Carlo Wood
- Re: [ogpx] Synchronization of gestures (was: Limi… Carlo Wood
- Re: [ogpx] Synchronization of gestures Lawson English
- Re: [ogpx] Synchronization of gestures Carlo Wood
- Re: [ogpx] Synchronization of gestures (was: Limi… Nexii Malthus
- Re: [ogpx] Synchronization of gestures (was: Limi… Carlo Wood