Skip to content

HeadTrackPlugin

Plugin assigning head pose to a scene node

Plugin attaches provided scene node to the head. Pose of the node (translation + rotation + scale) continuously updates according to pose estimation by @geenee/bodyprocessors!FaceProcessor. Children nodes inherently include this transform. The node can be seen as a virtual placeholder for real object. It’s recommended to attach top-level nodes that don’t include transforms relative to parent, otherwise head transform that is a pose in the world frame will be applied on top of them (will be treated as relative instead of absolute). Optionally anisotropic fine-tuning of the scale can be applied. In this case model will additionally adapt to shape of the face. If face isn’t detected by FaceProcessor plugin recursively hides the node. One of approaches to accurately align meshes with a face/head when modeling a scene is to make them children of one node at the origin and set their relative transforms using face/head base mesh as the reference, then instantiate HeadTrackPlugin for this scene node. You can also apply relative transforms of children of the head-attached parent node programmatically. It’s useful to add occluder model (base mesh of a head) as a child of the node. Another possible but less scalable approach is to have all meshes be built relative to the origin and aligned with the base mesh of face/head, in this case you can create HeadTrackPlugin for each mesh. This can be handy when parts are stored separately.

Extends

Constructors

new HeadTrackPlugin()

new HeadTrackPlugin(node, shapeScale): HeadTrackPlugin

Constructor

Parameters

node: Object3D<Object3DEventMap>

Scene node to attach

shapeScale: boolean = false

Tune scale according to shape of the face

Returns

HeadTrackPlugin

Overrides

ThreePlugin.constructor

Properties

loaded

loaded: boolean

Loaded state

Inherited from

ThreePlugin.loaded


node

protected node: Object3D<Object3DEventMap>

Scene node to attach


ordinal

ordinal: number

Ordinal number

Inherited from

ThreePlugin.ordinal


renderer?

protected optional renderer: Renderer<FaceResult>

Renderer loaded the plugin

Inherited from

ThreePlugin.renderer


scene?

protected optional scene: Scene

Reference to a scene instance

Inherited from

ThreePlugin.scene


shapeScale

protected shapeScale: boolean = false

Tune scale according to shape of the face

Methods

dispose()

dispose(): void

Dispose video plugin

Returns

void

Inherited from

ThreePlugin.dispose


load()

load(renderer): Promise<void>

Initialize plugin

Prepares or modifies the attached node if required. Reference to the scene object is cached and used by plugin on update() and unload(). You need to reload plugin if you want to change scene it’s attached to.

Parameters

renderer: Renderer<FaceResult>

Renderer this plugin is attached to

Returns

Promise<void>

Promise resolving when initialization is finished

Inherited from

ThreePlugin.load


setupCamera()

setupCamera(ratio, angle): void

Set camera parameters

Could be overridden to adjust plugin’s pipeline.

Parameters

ratio: number

Aspect ration of input video

angle: number

Vertical field of view in radians

Returns

void

Inherited from

ThreePlugin.setupCamera


setupVideo()

setupVideo(size): void

Set video size

Could be overridden to adjust plugin’s pipeline.

Parameters

size: Size

Resolution of input video

Returns

void

Inherited from

ThreePlugin.setupVideo


unload()

unload(): void

Reset plugin

Releases all resources allocated in load(). Deletes cached reference to the scene object.

Returns

void

Inherited from

ThreePlugin.unload


update()

update(result, stream): Promise<void>

Update pose of the node

Updates node’s transform (translation+rotation+scale) according to the pose estimated by @geenee/bodyprocessors!FaceProcessor. If face isn’t detected plugin recursively hides the attached node.

Parameters

result: FaceResult

Results of video processing

stream: HTMLCanvasElement

Captured video frame

Returns

Promise<void>

Promise resolving when update is finished

Overrides

ThreePlugin.update