IIIF / api

Source for API and model specifications documents (api and model)
http://iiif.io/api
107 stars 56 forks source link

How to target a `Scene`? #2253

Open tomcrane opened 1 year ago

tomcrane commented 1 year ago

Given a Scene (#2251) and its coordinate system (#2252), what do annotation target properties look like (both painting and other kinds of annotation)?

An annotation or Range that targets a particular region of a Scene could use a PointSelector with floating point x, y and z properties, as well as a time point for Scenes with duration:

    "target": [
        {
            "type": "SpecificResource",
            "source": [
                {
                    "id": "https://example.org/iiif/scene1/page/p1/1",
                    "type": "Scene"
                }
            ],
            "selector": [
                {
                    "type": "PointSelector",
                    "x": 100.0,
                    "y": 100.0,
                    "z": 0.0,
                    "t": 180.0
                }
            ]
        }
    ]

For painting

This selector would place a model at 100,100,0 - but the model is not a point; what part of the model gets placed at that point?

Suggestion from 3D TSG and Napoli workshop (from https://github.com/IIIF/3d/issues/11#issuecomment-1589966361) is that

“the 0-point "local" origin of the model should align with the "global" position coordinate specified.”

What does the selector look like if the target is a particular time interval (on a Scene with a duration property?) The above example targets a time point but what’s the syntax for removing the annotation at 240 seconds?

What about annotation targets that are NOT POINTS? (this may be a separate issue)

See https://github.com/IIIF/3d/issues/14#issuecomment-1589926820 Do we want to tackle that now?

azaroth42 commented 1 year ago

Agree that the point selector selects a particular point in space and time. I think we need a point+duration selector to paint the model at that point, with a start and end time.

azaroth42 commented 10 months ago

Propose that the defaults for x,y and z are 0 if not specified, and thus a PointSelector without any of them is just the origin.

Propose that the default for t is the entire duration of the canvas, rather than t=0.

tomcrane commented 10 months ago

Some examples: https://github.com/IIIF/3d/tree/demo_milestones/demo/json/manifests

tomcrane commented 10 months ago

Just to clarify, the missing example would be a duration, which uses the same media fragment syntax as current Presentation 3:

NB this example is wrong for t, see below

                "selector": [
                {
                    "type": "PointSelector",
                    "x": 100.0,
                    "y": 100.0,
                    "z": 0.0,
                    "t": 10.5,37.0
                }
gjcope commented 10 months ago

Default t=0 seems preferable to me. I'm also unsure what meaning t has with scene in scene annotation. Especially if t differs.

azaroth42 commented 10 months ago

t=0 would mean that the annotation targeted only the very first instant of the Scene (or Canvas), and as soon as the duration started playing, it would disappear as no longer in scope.

gjcope commented 10 months ago

Got it. So how is the starting time point for the annotation defined? Say I want to annotate a model at 0.5s of its 1s duration and then play the remainder of the duration.

tomcrane commented 10 months ago

t in the PointSelector would only be valid if the Scene has a duration property.

I think my example is wrong, I will update it. t does not conform to the Media Fragments spec here? My t above is a duration not a Point.

The class is PointSelector not DurationSelector (or more generally ExtentSelector) but how would you combine a spatial point with a time duration ?

azaroth42 commented 10 months ago

Let's kick the semantics of t out to a separate issue, I think we all agree on the generalities.

tomcrane commented 10 months ago

This is the way to say "At 100,100,0 from 45 seconds to 90 seconds"

"selector": {
      "type": "PointSelector",
      "x": 100.0,
      "y": 100.0,
      "z": 0.0
      "refinedBy": {
        "type": "FragmentSelector",
        "value": "t=45,90"
      }
    }