Designer Plugins
Plugins for Disguise Designer software.
Plugins for Disguise Designer software.
This guide explains how to use the Disguise Python API for projector calibration, covering the three main workflows: OmniCal, QuickCal, and Manual Calibration. These systems are used to align projectors in a 3D scene, ensuring that the projected image accurately maps onto physical and virtual objects.
Disguise offers three distinct systems for projector calibration, each suited to different production needs:
OmniCal (Automated Calibration): A fully automated, camera-based system that uses observations of the real world to calibrate projectors. It’s the most advanced and hands-off method, ideal for complex setups where precision is key. In the Python API, this is managed through the OpticalCalibrator resource.
QuickCal (Semi-Automated Alignment): A workflow for manually aligning 2D pixel coordinates from a projector’s output to known 3D points in the scene. This is useful for making quick adjustments without running a full automated calibration, especially when objects or projectors have moved slightly.
Manual Calibration: This involves directly manipulating a projector’s intrinsic and extrinsic properties, such as lens shift, throw ratio, and position. It is often used for fine-tuning or in situations where camera-based calibration is not feasible. This can also be used in conjunction with feed warping for precise control.
OmniCal is Disguise’s camera-based calibration system. It automates the process of capturing data from the environment and calculating the correct alignment for projectors.
Typical OmniCal Workflow:
opticalCalibrator resource.OptiCalStagePlan holds all the settings for the calibration, including which cameras and projectors to use.requestCalibrate() method starts the automated calibration process. This returns an OptiCalTask that can be monitored for progress.report and result properties.| Goal | Python |
|---|---|
| Access the OmniCal system | omnical = Resource.opticalCalibrator |
| Get the current stage plan | plan = omnical.plan |
| Get calibration settings | settings = plan.calibrationSettings |
| Start an automated capture | task = omnical.requestCapture() |
| Start a full calibration | task = omnical.requestCalibrate() |
| Check if a task is running | is_running = task.running() |
| Get task progress | progress = task.progress() (returns 0.0 to 1.0) |
| Check if a task was successful | was_successful = task.success() |
| Get the calibration report | report = omnical.report |
| Get the calibration result | result = omnical.result |
QuickCal is a workflow for aligning known 3D points to 2D pixel coordinates in a projector’s output. It’s a manual process but faster than a full OmniCal run. It does not use an OptiCalStagePlan and is instead managed through a ManualAlignmentPlan.
Typical QuickCal Workflow:
ManualAlignmentPlan resource.While the core QuickCal workflow is performed in the UI, you can access and modify alignment data via Python:
| Goal | Python |
|---|---|
| Access the manual alignment plan | manual_plan = Resource.ManualAlignmentPlan |
| Get alignment data for the plan | alignment_data = manual_plan.alignmentData |
| Get QuickCal view settings | quick_align_settings = manual_plan.alignmentSettings |
| Add an alignment coordinate | alignment_data.addAlignmentCoordinate(...) |
Manual calibration allows you to directly edit a projector’s properties. This is useful for fine-tuning or when you need to match a specific physical setup without camera-based calibration. This workflow does not involve the OpticalCalibrator and instead works by directly manipulating Projector resources.
Manual Calibration Workflow:
stage.projectors.calibration property which is a ProjectorConfig object that holds its settings.lensShift, throwRatio, position, and rotation.ProjectorConfig object.| Goal | Python |
|---|---|
| Get a projector from the stage | proj = stage.projectors[0] |
| Access the calibration config | proj_config = proj.calibration |
| Set the lens shift | proj_config.lensShift = [0.1, -0.05] # [horizontal, vertical] |
| Set the throw ratio | proj_config.throwRatio = 1.5 |
| Set the position | proj_config.position = [1.0, 2.5, -3.0] # [x, y, z] |
| Set the rotation | proj_config.rotation = [0, 45, 0] # [yaw, pitch, roll] |