diff --git a/source/presentation/4.0/index.md b/source/presentation/4.0/index.md
index 824934f97..2716d61be 100644
--- a/source/presentation/4.0/index.md
+++ b/source/presentation/4.0/index.md
@@ -382,7 +382,7 @@ Collections may include both other Collections and Manifests, forming a tree-str
### Range
-IIIF Ranges are used to represent structure _WITHIN_ a Manifest beyond the default order of the Containers in the `items` property. Ranges define meaningful divisions or sequences---such as chapters in a book, sections of a newspaper, or movements of a musical work---that allow clients to present hierarchical or linear navigation interfaces that enable the user to quickly move through the object's content..
+IIIF Ranges are used to represent structure _WITHIN_ a Manifest beyond the default order of the Containers in the `items` property. Ranges define meaningful divisions or sequences---such as chapters in a book, sections of a newspaper, or movements of a musical work---that allow clients to present hierarchical or linear navigation interfaces that enable the user to quickly move through the object's content..
Ranges may include Containers, parts of Containers via Specific Resources or fragment URIs, or other Ranges, creating tree-like structures that reflect the logical or intellectual organization of the resource, such as a table of contents or an alternative ordering of items.
@@ -1140,9 +1140,7 @@ Properties: [fileSize](#model/fileSize), [format](#model/format), [provides](#mo
# 3D
-3D Content Resources are painted into Scenes.
-
-Scenes have infinite height (y axis), width (x axis) and depth (z axis), where 0 on each axis (the origin of the coordinate system) is treated as the center of the scene's space.
+Scenes describe a 3D boundless space with infinite height (y axis), width (x axis) and depth (z axis), where 0 on each axis (the origin of the coordinate system) is treated as the center of the scene's space.
The positive y axis points upwards, the positive x axis points to the right, and the positive z axis points forwards (a [right-handed cartesian coordinate system](https://en.wikipedia.org/wiki/Right-hand_rule)).
@@ -1150,10 +1148,10 @@ The positive y axis points upwards, the positive x axis points to the right, and
(Image: Wikipedia)
+3D Content Resources are painted into Scenes. This can include 3D models, which can be painted into Scenes as Annotations with `motivation` "painting". Due to particular considerations of 3D space and rendering content within that space, such as scaling or textures with forward and backward faces, non-3D Content Resources must first be wrapped within an appropriate Container or Resource before being painted into a Scene. Image and video resources should be painted on to a Canvas, where the Canvas can in turn be painted into a Scene. Audio resources or Timelines should be referenced by an AudioEmitter and the AudioEmitter can be painted into a Scene. For further detail about painting Containers within other Containers, see [Nesting](#nesting).
## 3D Supporting Resources
-
Constructs from the domain of 3D graphics are expressed in IIIF as Resources. They are associated with Scenes via Painting Annotations in the same manner as Content Resources. They aid in or enhance the rendering of Content Resources, especially in Scenes.
### Cameras
@@ -1270,7 +1268,7 @@ The Light is green and has a position, but has its default orientation of lookin
},
"target": {
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://example.org/iiif/scene1/page/p1/1",
"type": "Scene"
@@ -1306,7 +1304,7 @@ The Light is green and has a position, but has its default orientation of lookin
"target": [
{
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://example.org/iiif/scene1/page/p1/1",
"type": "Scene"
@@ -1422,7 +1420,7 @@ This example is a Manifest with a single Scene with multiple models painted into
"motivation": ["painting"],
"body": [{
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/pawn.glb",
"label": {"en": ["Pawn 2 tipped over"]},
@@ -1437,7 +1435,7 @@ This example is a Manifest with a single Scene with multiple models painted into
"z": -90.0
},
{
- "type": "Translate Transform",
+ "type": "TranslateTransform",
"x": 0.0,
"y": 1.0,
"z": 0.0
@@ -1467,7 +1465,7 @@ This example is a Manifest with a single Scene with multiple models painted into
"exclude": ["Audio", "Lights"],
"body": [{
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/queen.glb",
"label": {"en": ["Queen"]},
@@ -1574,7 +1572,7 @@ In this example, the audio content resources have durations that do not match th
"quantityValue": 0.1
}
}],
- "target": [
+ "target": [
{
"id": "https://example.org/iiif/scene1",
"type": "Scene"
@@ -1592,7 +1590,8 @@ In this example, the audio content resources have durations that do not match th
"source": {
"id": "https://example.org/iiif/assets/orchestra_percussion_120s.mp3",
"type": "Audio",
- "format": "audio/mp3"
+ "format": "audio/mp3",
+ "duration": 120.0
},
"volume": {
"id": "https://example.org/iiif/quantity/2",
@@ -1604,7 +1603,7 @@ In this example, the audio content resources have durations that do not match th
"target": [{
"id": "https://example.org/iiif/selectors/anno2",
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://example.org/iiif/scene1",
"type": "Scene"
@@ -1636,7 +1635,8 @@ In this example, the audio content resources have durations that do not match th
"source": {
"id": "https://example.org/iiif/assets/orchestra_tuba_10s.mp3",
"type": "Audio",
- "format": "audio/mp3"
+ "format": "audio/mp3",
+ "duration": 10.0
},
"angle": 45.0,
"volume": {
@@ -1651,7 +1651,7 @@ In this example, the audio content resources have durations that do not match th
{
"id": "https://example.org/iiif/scene1#xyz=3,0,-2&t=30,60",
"type": "Scene"
- }
+ }
]
}
],
@@ -1668,7 +1668,7 @@ In this example, the audio content resources have durations that do not match th
],
"target": [{
"type": "SpecificResource",
- "source":
+ "source":
{
"id": "https://example.org/iiif/scene1",
"type": "Scene"
@@ -1706,73 +1706,119 @@ Properties: [duration](#model/duration), [volume](#model/volume), [angle](#model
{: .note}
-# Nesting (more about Containers as Content Resources)
+# Nesting
> How does this relate to model doc? What's normative and needs to be in model.md because it defines a Scene?
-A Canvas can be painted into a Scene as an Annotation, but the 2D nature of Canvases requires special consideration due to important differences between Canvases and Scenes. A Canvas describes a bounded 2D space with finite `height` and `width` measured in pixels with a pixel origin at the top-left corner of the Canvas, while Scenes describe a boundless 3D space with x, y, and z axes of arbitrary coordinate units and a coordinate origin at the center of the space. It is important to note that in many cases the pixel scale used by a Canvas or a 2D image content resource will not be in proportion to the desired 3D coordinate unit scale in a Scene.
+A Container can be painted into another Container as an Annotation with `motivation` "painting". For example, a Timeline may be painted into a Canvas, a Canvas may be painted into another Canvas, a Canvas may be painted into a Scene, and a Scene may be painted into another Scene. Multiple Containers may be hierarchically nested within each other, and so the list of examples above could be implemented as a single nesting sequence of five Containers.
-When a Canvas is painted as an Annotation targeting a Scene, the top-left corner of the Canvas (the pixel origin) is aligned with the 3D coordinate origin of the Scene. The top edge of the Canvas is aligned with (e.g., is colinear to) the positive x axis extending from the coordinate origin. The left edge of the Canvas is aligned with (e.g., is colinear to) the negative y axis extending from the coordinate origin. The Canvas is scaled to the Scene such that the pixel dimensions correspond to 3D coordinate units - a Canvas 200 pixels wide and 400 pixels high will extend 200 coordinate units across the x axis and 400 coordinate units across the y axis. Please note: direction terms "top", "bottom", "right", and "left" used in this section refer to the frame of reference of the Canvas itself, not the Scene into which the Canvas is painted.
+A Timeline, Canvas, or Scene with `duration` can only be painted into a Container that also has `duration`. It is possible to associate a Container with `duration` with a Container that does not have `duration` as the content of a `commenting` annotation rather than painting it into the Container. If a Container with `duration` has a shorter or longer `duration` than the Container into which it is to be painted, the `timeMode` property can be used to instruct clients how to resolve the mismatch.
-A Canvas in a Scene has a specific forward face and a backward face. By default, the forward face of a Canvas should point in the direction of the positive z axis. If the property `backgroundColor` is used, this color should be used for the backward face of the Canvas. Otherwise, a reverse view of the forward face of the Canvas should be visible on the backward face.
+```jsonc
+{
+ "id": "https://example.org/iiif/presentation/examples/nesting/anno1",
+ "type": "Annotation",
+ "motivation": ["painting"],
+ "timeMode": "loop",
+ "body": {
+ "id": "https://example.org/iiif/presentation/examples/nesting/timeline/t1",
+ "type": "Timeline",
+ "label": { "en": [ "Side A: 99 Luftballons" ] },
+ "duration": 231
+ },
+ "target": "https://example.org/iiif/presentation/examples/nesting/canvas-10minute-duration"
+}
+```
-
- To Do: Add an image demonstrating default Canvas placement in Scene
-
-A `PointSelector` can be used to modify the point at which the Canvas will be painted, by establishing a new point to align with the top-left corner of the Canvas instead of the Scene coordinate origin. Transforms can also be used to modify Canvas rotation, scale, or translation.
+## Painting a Canvas or Timeline into a Scene
-
+When a Canvas is painted as an Annotation targeting a Scene, the top-left corner of the Canvas (the 2D coordinate origin) is aligned with the 3D coordinate origin of the Scene. The top edge of the Canvas is aligned with (e.g., is colinear to) the positive x axis extending from the coordinate origin. The left edge of the Canvas is aligned with (e.g., is colinear to) the negative y axis extending from the coordinate origin. The direction terms "top", "bottom", "right", and "left" used in this section refer to the frame of reference of the Canvas itself, not the Scene into which the Canvas is painted.
-## Scene in Scene
+The Canvas is scaled to the Scene such that the 2D coordinate dimensions correspond to 3D coordinate units - a Canvas 16 units wide and 9 units high will extend 16 coordinate units across the x axis and 9 coordinate units across the y axis. Because Canvas coordinate units and image content resource pixels are not equivalent, any image with a 16:9 aspect ratio painted on this Canvas would extend 16 coordinate units by 9 coordinate units in the 3D space of the Scene, whether it was 160 pixels wide and 90 pixels high or 16,000 pixels wide and 9,000 pixels high. This provides one way to control the size of a Canvas painted into a Scene.
-Scenes and other IIIF containers, such as Canvases, may also be embedded within Scenes, as described below in the nesting section [fwd-ref-to-nesting].
+A Canvas in a Scene has a specific forward face and a backward face. By default, the forward face of a Canvas should point in the direction of the positive z axis. If the property `backgroundColor` is used, this color should be used for the backward face of the Canvas. Otherwise, a reverse view of the forward face of the Canvas should be visible on the backward face.
-```json
+
+ To Do: Add an image demonstrating default Canvas placement in Scene
+
+
+A `PointSelector` can be used to modify the point at which the Canvas will be painted, by establishing a new point to align with the top-left corner of the Canvas instead of the Scene coordinate origin. [Transforms](#transforms) can be used to modify Canvas rotation, scale, or translation, allowing in particular for an alternate method to control the size of a Canvas to be scaled appropriately to other contents within a Scene. The forward face and backward face of a Canvas can be interchanged with a Scale Transform scaling the z axis by -1.0, though this reflection will also produce mirroring.
+
+```jsonc
{
- "id": "https://example.org/iiif/scenes/1",
- "type": "Scene",
- "label": {"en": ["Chessboard"]},
- "backgroundColor": "#000000",
- "items": [
- "Note: Annotations Live Here"
- ]
+ "id": "https://example.org/iiif/presentation/examples/nesting/anno2",
+ "type": "Annotation",
+ "motivation": ["painting"],
+ "body": [{
+ "type": "SpecificResource",
+ "source":
+ {
+ "id": "https://example.org/iiif/presentation/examples/nesting/canvas/c1",
+ "type": "Canvas",
+ "width": 2,
+ "height": 2,
+ "items": [ { ... } ]
+ },
+ "transform": [
+ {
+ "type": "ScaleTransform",
+ "x": 2.0,
+ "y": 2.0,
+ "z": -1.0
+ }
+ ]
+ }],
+ "target": [{
+ "type": "SpecificResource",
+ "source": {
+ "id": "https://example.org/iiif/presentation/examples/nesting/scene/s1",
+ "type": "Scene"
+ },
+ "selector": [
+ {
+ "type": "PointSelector",
+ "x": 4.0,
+ "y": 4.0,
+ "z": 0.0
+ }
+ ]
+ }]
}
```
-As with other resources, it may be appropriate to modify the initial scale, rotation, or translation of a content resource Scene prior to painting it within another Scene. Scenes associated with SpecificResources may be manipulated through the transforms described in Transforms(transforms_section).
-A simple example painting one Scene into another:
+>
+**Key Points**
+* The 2D Canvas painted into the Scene has an initial height and width of 2 units by 2 units. Absent any transform or the use of a PointSelector, this Canvas would by default face toward the Scene's positive z axis, would stretch 2 units across the x axis and 2 units across the y axis, and its top-left corner would align with the coordinate origin of the Scene. Instead, transforms and a PointSelector will modify this placement significantly.
+* A ScaleTransform is used to double the Canvas height and width, so that after transformation the Canvas will extend 4 coordinate units across the Scene x axis and 4 coordinate units across the Scene y axis.
+* The same ScaleTransform also reflects the z axis by scaling it by -1.0, meaning the Canvas is mirrored (flipped) and now faces toward the negative z axis.
+* A PointSelector is used to align the top-left corner of the transformed Canvas with Scene coordinate (4,4,0). In combination with the ScaleTransform, the bottom-right corner of the Canvas is now aligned with the coordinate origin of the Scene.
+{: .note}
-```json
+
+## Painting a Scene into a Scene
+
+Like Timelines or Canvases, Scenes can be painted into Scenes. As with other resources, it may be appropriate to modify the initial scale, rotation, or translation of a content resource Scene prior to painting it within another Scene. Scenes associated with SpecificResources may be manipulated through [Transforms](#transforms).
+
+When a Scene is nested into another Scene, the `backgroundColor` of the Scene to be nested should be ignored as it is non-sensible to import. All Annotations painted into the Scene to be nested will be painted into the Scene into which content is being nested, including Light or Camera resources. If the Scene to be nested has one or more Camera Annotations while the Scene into which content is being nested does not, the first Camera Annotation from the nested Scene will become the default Camera for the overall Scene.
+
+```jsonc
{
- "id": "https://example.org/iiif/3d/anno1",
+ "id": "https://example.org/iiif/presentation/examples/nesting/anno3",
"type": "Annotation",
"motivation": ["painting"],
"body": {
- "id": "https://example.org/iiif/scene1",
+ "id": "https://example.org/iiif/presentation/examples/nesting/scene/s1",
"type": "Scene"
},
- "target": "https://example.org/iiif/scene2"
+ "target": "https://example.org/iiif/presentation/examples/nesting/scene/s2"
}
```
-When a Scene is nested into another Scene, the `backgroundColor` of the Scene to be nested should be ignored as it is non-sensible to import. All Annotations painted into the Scene to be nested will be painted into the Scene into which content is being nested, including Light or Camera resources. If the Scene to be nested has one or more Camera Annotations while the Scene into which content is being nested does not, the first Camera Annotation from the nested Scene will become the default Camera for the overall Scene.
-
-
-
# Annotations
@@ -2019,7 +2065,7 @@ The resource the user should be taken to is the `body` of the annotation, and th
Sometimes it is necessary to modify the state of resources. Annotations with the motivation `activating` are referred to as _activating_ annotations, and are used to change resources from their initial state defined in the Manifest or from their current state. They allow IIIF to be used for interactive exhibitions, storytelling, digital dioramas and other interactive applications beyond simply conveying a set of static resources in a Container.
-The `target` of the activating annotation is the resource that triggers an action. This could be a commenting annotation, for which a user might click a corresponding UI element. In other scenarios the `target` could be the painting annotation of a 3D model, or an annotation that targets part of a model, or a region of a Canvas, or a point or segment of a Timeline, or any other annotation that a user could interact with (in whatever manner) to trigger an event. Even a volume of space in a Scene or an extent of time in a Container with `duration` could be the `target`. When that volume or time extent is triggered - which might be the user entering that volume or the playhead reaching the extent independently of user interaction - something happens.
+The `target` of the activating annotation is the resource that triggers an action. This could be a commenting annotation, for which a user might click a corresponding UI element. In other scenarios the `target` could be the painting annotation of a 3D model, or an annotation that targets part of a model, or a region of a Canvas, or a point or segment of a Timeline, or any other annotation that a user could interact with (in whatever manner) to trigger an event. Even a volume of space in a Scene or an extent of time in a Container with `duration` could be the `target`. When that volume or time extent is triggered - which might be the user entering that volume or the playhead reaching the extent independently of user interaction - something happens.
This specification does not define how a client indicates to a user that a resource is able to be interacted with.
@@ -2107,7 +2153,7 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r
"activating"
],
"target": "https://example.org/iiif/painting-annotation/lightswitch-1",
- "body": [
+ "body": [
{
"type": "SpecificResource",
"source": "https://example.org/iiif/scene/switch/scene-1/annos/1/activating-on-2",
@@ -2133,17 +2179,17 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r
],
"target": "https://example.org/iiif/painting-annotation/lightswitch-1",
"body": [
- {
+ {
"type": "SpecificResource",
"source": "https://example.org/iiif/scene/switch/scene-1/annos/1/activating-off-3",
"action": ["disable"]
},
- {
+ {
"type": "SpecificResource",
"source": "https://example.org/iiif/scene/switch/scene-1/lights/point-light-4",
"action": ["hide"]
},
- {
+ {
"type": "SpecificResource",
"source": "https://example.org/iiif/scene/switch/scene-1/annos/1/activating-on-2",
"action": ["enable"]
@@ -2159,7 +2205,7 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r
}
```
-* Initially, a model of a light switch is painted into the Scene. A PointLight is also painted, but with the `behavior` "hidden", which means it is inactive (i.e., off). A commenting annotation with the text "Click the switch to turn the light on or off" targets the light switch. An activating annotation targets the painting annotation that paints the switch, so that user interaction with the light switch will trigger the activating annotation. This activating annotation has a `body` property with three Specific Resources. The first enables the "off" activating annotation, the second shows the PointLight, and the last disables the activating annotation _itself_ - this activating annotation can no longer be activated by a user interaction with the light switch model (its `target`).
+* Initially, a model of a light switch is painted into the Scene. A PointLight is also painted, but with the `behavior` "hidden", which means it is inactive (i.e., off). A commenting annotation with the text "Click the switch to turn the light on or off" targets the light switch. An activating annotation targets the painting annotation that paints the switch, so that user interaction with the light switch will trigger the activating annotation. This activating annotation has a `body` property with three Specific Resources. The first enables the "off" activating annotation, the second shows the PointLight, and the last disables the activating annotation _itself_ - this activating annotation can no longer be activated by a user interaction with the light switch model (its `target`).
* A further activating annotation has the opposite effect. Initially this has the `behavior` "disabled" - which means it is inactive. It also targets the painting annotation, but has no effect while disabled.
* When the user interacts with the light switch model, the client processes any activating annotations that target it and are enabled. In this case, the first activating annotation is triggered because while both target the switch, only the first is enabled. This activation shows the light (i.e., removes its "hidden" `behavior` and therefore turning it on) and enables the other activating annotation, and disables itself.
* If the user clicks the light again, the client again processes any activating annotations that target it and are not disabled. This time the second activating annotation is the enabled one - and it hides the light (turning it off) and disables itself, and enables the first activating annotation again.
@@ -2356,7 +2402,7 @@ It is possible to associate a particular camera with a particular commenting ann
"type": "TextualBody",
"value": "Mandibular tooth"
}
- ],
+ ],
"target": {
// SpecificResource with PointSelector
}
@@ -2370,12 +2416,12 @@ It is possible to associate a particular camera with a particular commenting ann
"type": "TextualBody",
"value": "Right pterygoid hamulus"
}
- ],
+ ],
"target": {
// SpecificResource with PointSelector
}
},
- {
+ {
"id": "https://example.org/iiif/3d/anno9",
"type": "Annotation",
"motivation": ["activating"],
@@ -2422,12 +2468,12 @@ The commenting annotation now looks like this:
"type": "Annotation",
"motivation": ["commenting"],
"bodyValue": "Mandibular tooth",
- "scope": [
- {
- "id": "https://example.org/iiif/3d/anno-that-paints-desired-camera-to-view-tooth",
- "type": "Annotation"
- }
- ],
+ "scope": [
+ {
+ "id": "https://example.org/iiif/3d/anno-that-paints-desired-camera-to-view-tooth",
+ "type": "Annotation"
+ }
+ ],
"target": {
// SpecificResource with PointSelector
}
diff --git a/source/presentation/4.0/model.md b/source/presentation/4.0/model.md
index 06f8415d7..a8ee64a4e 100644
--- a/source/presentation/4.0/model.md
+++ b/source/presentation/4.0/model.md
@@ -304,6 +304,8 @@ All Containers _MUST_ be identified by a URI and it _MUST_ be an HTTP(S) URI. Th
Containers _SHOULD_ have an `items` property which is a list of Annotation Pages. Each Annotation Page, defined below, maintains a list of Annotations, which associate Content Resources to be rendered as part of the Container. Annotations that do not associate content to be rendered, but instead are about the Container itself, such as a comment or tag, are recorded using Annotation Pages in the `annotations` property of the Container. A Container _MAY_ have zero annotations associated with it and still be useful, such as when the properties of the Container convey to the user that it represents a page that has not been digitized, or there is otherwise no digital content available to display. In this case the `items` property is not included.
+Containers specify extents in space and/or time with one or more space or time dimensions such as `height`, `width`, or `duration`. These dimensions allow resources to be associated with specific regions of the Canvas, within the space and/or time extents provided. Content _MUST NOT_ be associated with space or time outside of the Container's dimensions, such as at coordinates below 0,0 or greater than specified height or width for a Canvas, or before 0 seconds or after the duration for a Timeline. Content resources that have dimensions which are not defined for the Container _MUST NOT_ be associated with that Container by an Annotation that has the `motivation` value "painting". For example, it is valid to use an Annotation that has the `motivation` value "painting" to associate an Image (which has only height and width) with a Canvas that has `height`, `width`, and `duration` properties, but it is an error to associate a Video resource (which has height, width and duration) with a Canvas that does not `duration`. Such a resource _MAY_ instead be referenced using the rendering property, or by Annotations that have a `motivation` value other than "painting" in the annotations property.
+
__Properties__
All Containers _MUST_ have the following properties: [id](#id), and [type](#type)
All Containers _SHOULD_ have the following properties: [label](#label), and [items](#items)
@@ -346,7 +348,7 @@ A Scene is a Container that represents an infinitely large three-dimensional spa
The axes of the coordinate system are measured in arbitrary units. All axes use the same unit scaling and do not necessarily correspond to any physical unit of measurement, unless `spatialScale` is supplied.
-All resources that can be added to a Scene have an implicit (e.g. Lights, Cameras) or explicit (e.g. Models, Scenes), local coordinate space. Transforms may modify the local coordinate space of a resource relative to the Scene’s "global" space.
+All 3d resources that can be added to a Scene have an implicit (e.g. Lights, Cameras) or explicit (e.g. Models, Scenes) local coordinate space. Transforms may modify the local coordinate space of a resource relative to the Scene’s "global" space.
__Properties__
A Scene _MAY_ have the following additional properties: [duration](#duration).
@@ -371,7 +373,7 @@ When Annotations are used to associate content resources with a Canvas, the cont
Annotations in IIIF _SHOULD NOT_ use the `bodyValue` property defined by the Web Annotation Data Model, but instead use the more consistent TextualBody class.
-For Timelines and Canvases, Annotations _MUST NOT_ target spatial or temporal points or regions outside of the bounds of the Container. For Scenes with a `duration`, Annotations _MUST NOT_ target temporal points or regions outside of that duration. Scenes, Canvases and other content with spatial extents _MUST NOT_ be annotated directly onto a Timeline which does not have a spatial extent. Resources with a `duration`, including Timelines and Canvases, _MAY_ be painted into Canvases and Scenes without a `duration`, however the playback of the resource will not able to be controlled or synchronized with the playback of other time-based media.
+For Timelines and Canvases, Annotations _MUST NOT_ target spatial or temporal points or regions outside of the bounds of the Container. For Scenes with a `duration`, Annotations _MUST NOT_ target temporal points or regions outside of that duration. Scenes, Canvases and other content with spatial extents _MUST NOT_ be annotated directly onto a Timeline which does not have a spatial extent. Resources with a `duration`, including Timelines and Canvases, _MUST NOT_ be painted into Canvases and Scenes without a `duration`, however they _MAY_ instead be referenced by a non-painting Annotation or using the rendering property.
__Properties__
An Annotation _MUST_ have the following properties: [id](#id), [type](#type), [target](#target), [motivation](#motivation).
@@ -468,12 +470,18 @@ Content Resources _MUST_ have an HTTP(s) given in `id`. It _MUST_ be able to be
If the Content Resource is an Image, and a IIIF Image service is available for it, then the `id` property of the Content Resource _MAY_ be a complete URI to any particular representation supported by the Image Service, such as `https://example.org/image1/full/1000,/0/default.jpg`, but _MUST NOT_ be just the URI of the Image Service. The Image _SHOULD_ have the service referenced from it using the `service` property.
-If the Content Resource is a 3d Model, then regardless of the file format, it is treated as being within an infinitely large three dimensional space with an origin (0 on all three axes). This is described as its "local coordinate space".
+If the Content Resource is a 3d Model, then regardless of the file format, it is treated as being within an infinitely large three dimensional space with an origin (0 on all three axes). This is described as its "local coordinate space". 3d Content Resources _MAY_ be painted into Scenes via a painting Annotation. When painted as an Annotation, the origin of the 3d Content Resource's local coordinate space _MUST_ be aligned with either the Scene coordinate origin by default or with a specific 3d point in the Scene if a [Point Selector](#point-selector) is used.
+
+Non-3d Content Resources such as images, audio, and video _MUST NOT_ be painted into a Scene as Annotations. Instead, to include image and video resources in a Scene, the resource(s) _MUST_ be painted on to a Canvas that is painted into the Scene. To include audio resources in a Scene, the resource(s) or Timeline _MUST_ be referenced by an AudioEmitter that is painted into the Scene.
If there is a need to distinguish between Content Resources, then all such resources _SHOULD_ have the `label` property.
Containers _MAY_ be treated as content resources for the purposes of annotating on to other Containers. In this situation, the Container _MAY_ be [embedded][prezi30-terminology] within the Annotation, be a reference within the same Manifest, or require dereferencing to obtain its description. This is often described as "nesting".
+A Canvas painted into a Scene has special requirements. The top-left corner of the Canvas _MUST_ be aligned with either the Scene coordinate origin by default or with a specific 3d point in the Scene if a [Point Selector](#point-selector) is used. The Canvas _MUST_ be scaled to the Scene such that Canvas coordinate dimensions after any [Transforms](#transforms) are applied correspond to Scene coordinate dimensions with 1:1 scaling. A Canvas painted into a Scene as an Annotation has forward and backward faces, and by default the forward face is toward the positive z axis of the Scene, though this may be modified by Transforms. The content of the Canvas _SHOULD_ be displayed on the forward face, and the backward face _SHOULD_ display either any `backgroundColor` of the Canvas or a reverse view of the content.
+
+A Scene painted into a Scene has one special requirement, that any `backgroundColor` of the Scene to be painted _SHOULD_ be ignored.
+
__Properties__
A Content Resource _MUST_ have the following properties: [id](#id), and [type](#type)
A Content Resource _SHOULD_ have the following properties: [label](#label)
@@ -525,6 +533,8 @@ There are common use cases in which a point, rather than a range or area, is the
The spatial aspect of the point is given with `x` and `y` for a two-dimensional point, along with `z` for a three-dimentional point. The temporal aspect of the point is given with `instant`. If `instant` is not supplied, and the target resource has a `duration`, the selector is interpreted as targeting the entire duration. If `instant` is supplied, but no spatial point, the selector is interpreted as targeting the entire spatial aspect of the resource.
+For 3d content resources painted into a Scene that have a local coordinate space relative to the relatively global coordinate space of the Scene, clients _MUST_ align the local coordinate origin of the content resource with the 3d point indicated by the Point Selector within the Scene. Thus the 3d resource's origin is placed at the desired point in the Scene. For a Canvas painted into a Scene as an Annotation, the top-left corner of the Canvas (the Canvas coordinate origin) _MUST_ be aligned with the 3d point indicated by the Point Selector within the Scene.
+
__Properties__
A Point Selector _MUST_ have the following properties: [type](#type)
A Point Selector _MAY_ have the following properties: [id](#id), [x](#x), [y](#y), [z](#z), and [instant](#instant).
@@ -2979,14 +2989,14 @@ An annotation with the motivation `activating` has any valid IIIF Resource, or l
There are two categories of activating annotation targets (interactable things):
-* Annotations - content of the container (a painting annotation rendered in the Scene) or content that targets the container (a commenting annotation, a map pin... which may have off-Container representations in a UI eg comments in a side panel).
+* Annotations - content of the container (a painting annotation rendered in the Scene) or content that targets the container (a commenting annotation, a map pin... which may have off-Container representations in a UI eg comments in a side panel).
* Extents of Containers - a volume of a Scene, region of a Canvas, or interval of time in any Container with a `duration` (the client may or may not render these "hit boxes")
How the client makes these interactable is client-dependent.
Need to cover:
-Clients supporting dynamic content need to support
+Clients supporting dynamic content need to support
- non-painting annotations e.g., commenting annos (and other annos that usually have textual bodies that could be made clickable by a client, or map pin markers, etc)
- painted resources such as models
@@ -3009,7 +3019,7 @@ If the body is a reference to a Painting Annotation or a non-painting , the clie
* if the annotation has the `behavior` "hidden", then remove "hidden" from the `behavior`.
-(example: click the comment, object appears, light goes on)
+(example: click the comment, object appears, light goes on)
enables and disables
@@ -3023,7 +3033,7 @@ You can just use enables and disables
### Playing animations
-If the `body` is of type `SpecificResource` with a `selector` property of type `AnimationSelector`, the named animation in the model painted by the `source` is played when the `target` is activated.
+If the `body` is of type `SpecificResource` with a `selector` property of type `AnimationSelector`, the named animation in the model painted by the `source` is played when the `target` is activated.
* If the body is a SpecificResource with a `selector` property with the type "AnimationSelector", play the animation named by the `value` property of the Selector. (see [ref]).
How do you stop the animation? And if you can stop it, what happens - reset? If you activate it again, does it resume or restart?
diff --git a/source/presentation/4.0/scratch.md b/source/presentation/4.0/scratch.md
index 59e3b67e6..525235b9d 100644
--- a/source/presentation/4.0/scratch.md
+++ b/source/presentation/4.0/scratch.md
@@ -414,4 +414,33 @@ What to do about activating annos in the introduced content?
"type": "Annotation"
}
],
+```
+
+>Taken from Nesting section in index.md
+
+
+
+```json
+{
+ "id": "https://example.org/iiif/scenes/1",
+ "type": "Scene",
+ "label": {"en": ["Chessboard"]},
+ "backgroundColor": "#000000",
+ "items": [
+ "Note: Annotations Live Here"
+ ]
+}
```
\ No newline at end of file