Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
Introduction

...

  • depth (how far away from pinhole camera this plane should exist in space) 
  • alpha gain or other "image attributes"
  • more attributes to fine tune fit

...

UsdGeomImagePlaneAPI Schema

The UsdImagePlane UsdGeomImagePlaneAPI  schema defines basic properties for rendering an image plane. The UsdImagePlane UsdGeomImagePlaneAPI  schema derives from UsdSchemaBase  and will be a Multi-Apply Schema that would be restricted to UsdGeomCamera prim types.

Properties

  • asset image = @@
    • Path to image file,
      • can be time sampled per frame
      • This will have to be per frame, as USD/Hydra do not at this time support a $F substitution for image/texture asset paths.
  • double depth = 0
    • distance, in scene units, from the pinhole to the point on the optical axis where the image plane sits
      • lo in CG Camera diagram 2.1 in https://cookeoptics.com/i-technology/ > "Cooke Camera Lens Definitions for VFX"

      • alternative name: "distance" (Autodesk Maya used "depth")
      • A nice default could be -1 or "infinite" so that it would always be behind CG. That might be hard to coexist with a physically placed in scene camera depth that exists in front of and behind cg elements.
  • uniform token fit = "vertical"
    • How the image plane is fit to the filmback. Possible values:
      • "horizontal" - fit image width to filmback and keep image aspect ratio
      • "vertical"- fit image height to filmback and keep image aspect ratio
      • "best" - from Maya, but maybe this behavior is too ambiguous
      • "fill" - stretched to filmback
      • "to size" - constant size, centered on filmback, and requiring more data to define "image size"
  • float[2] offset
    • in same units as camera filmback - tenth of scene unit
  • token visibilitybool enabled
    • Control image plane visibility. Possible values: 
      • "inherited"
      • "visible"
      • "invisible"
      • alternate name: "visible"
      • regardless of this value, if the (camera) prim itself is invisible, the image plane will not be visible in the viewport/render

Why a Multi-Apply API Schema?

...

camera = stage.GetPrimAtPath('/world/cam')
imagePlaneApi = UsdImagePlaneAPIUsdGeomImagePlaneAPI(camera)
imagePlaneApi.CreateImagePlane("imagePlane1")
framesToImages = [(f, fileSequence.frameAt(i) for f in fileSequence.frames()]
imagePlaneApi.SetImagePlaneImageAttr(framesToImages, "imagePlane1")

...

def Xform "world" {
    def Camera "cam" (        
apiSchemas = ["UsdGeomImagePlaneAPI:imagePlane1"]
){         ...         string[] imagePlanes = ["imagePlane1"]         asset imagePlane1:image = {             1001: @/path/to/image.1001.exr@,              1002:...             }         float imagePlane1:depth = 1000.0     } }

Hydra Implementation

TODO: Flesh out and discuss with Hydra team.

  • Use UsdPreviewSurface textures in a way similar to GeomModel texture cards.
  • Do the compositing in an Hdx post task

Open Questions

Should you have the ability to define multiple Image planes per camera? YES

...

  • Requires relationships between camera + plane primsWould have to traverse below camera to find whether has any image planes 
  • Requires an extra API schema to encode the relationship on the Camera.
  • There's the possibility that someone targets something other than an ImagePlane with the relationship, so there are more ways to "get stuff wrong".

Using existing USD types (Plane + material + camera + expressions)

...