:Release Notes: - Agents files for opencode and claude - Skills for opencode and claude - 3d models with medical organs - Some textures :Detailed Notes: - :Testing Performed: - :QA Notes: - Looks like shit :) :Issues Addressed: TG-1
90 lines
7.4 KiB
Markdown
90 lines
7.4 KiB
Markdown
---
|
||
name: cinematic-laparoscope-camera
|
||
description: Cinematic camera work for the laparoscope (and any companion view) in the LaparoscopicSurgeryEmulation scene. Use when adjusting FOV, clipping planes, depth of field, exposure, framing, or adding a secondary view for the cavity. Never moves the preserved stereo rig.
|
||
---
|
||
|
||
# Cinematic Laparoscope Camera (project-scoped)
|
||
|
||
This skill constrains camera work to the laparoscope viewpoint the scene is built around. The project's existing stereo rig (preserved from `MainScene`) is **not** edited by this skill — the rig is the interop surface, and the new cavity work happens in front of the camera, not by moving the camera.
|
||
|
||
## When to load
|
||
|
||
Load when the agent is about to:
|
||
- Adjust FOV, near/far clip, depth-of-field, exposure, or post-processing on any camera in the active scene.
|
||
- Add a secondary "overview" or "wide" camera for setup / framing / screenshots.
|
||
- Diagnose "scene looks too far", "scene looks too bright", "scene has black frame", or "vignette is too strong" reports.
|
||
- Plan a screenshot composition for verification.
|
||
|
||
## Camera inventory (do not rename)
|
||
|
||
- The stereo rig from `MainScene` is preserved at its current path. Do not rename, do not move, do not retarget. It is the interop surface for WebRTC and any external automation.
|
||
- A laparoscope-style camera (or cameras) under `SurgeryBenchmark/Shared` is the **art-directed** camera the cinematic work targets. If one is not present, the Scene Director agent can add one as a bounded change; if the stereo rig is the only camera, this skill applies its framing notes to the rig's left/right eye and notes the constraint in the handoff.
|
||
|
||
## Laparoscope framing notes
|
||
|
||
A real rigid laparoscope has:
|
||
- A narrow FOV: typically 30°–70° diagonal. URP Camera `fieldOfView` 35–55 is a good starting range for "looks like a scope"; 60–75 is "looks like a wide scope"; > 80 starts to look like a generic game camera.
|
||
- A very close near clip: 0.01–0.05 m. Far clip can be short too — 5–20 m is enough for a cavity scene.
|
||
- A barrel of wet optics: mild `LensDistortion` (intensity 0.05–0.15) and a tight `Vignette` (intensity 0.25–0.4, smoothness 0.3–0.5).
|
||
- Optical highlights: a narrow `Bloom` with low `intensity` (0.1–0.3) and a `threshold` above 1.0 so it only catches the brightest specular hits.
|
||
- Color grading: `ColorAdjustments.contrast` slightly positive (0.05–0.15), `ColorAdjustments.postExposure` near 0, `Tonemapping` = Neutral or ACES. Avoid the heavy filmic look (too cinematic, looks like a game).
|
||
|
||
## Depth of field
|
||
|
||
The laparoscope's "focus" is what the user expects to be sharp. For the cavity:
|
||
- Set `DepthOfField.mode = Gaussian` (URP's Bokeh is heavier and slower).
|
||
- `DepthOfField.gaussianStart` near the closest tissue you want sharp; `DepthOfField.gaussianEnd` just past the farthest tissue you want sharp.
|
||
- `DepthOfField.gaussianMaxRadius` 1.0–2.5 px for a subtle blur; > 4 starts to look like a portrait lens.
|
||
|
||
A common pitfall: setting the focus so close that the camera's own near plane is also inside the focus, producing a confusing "all-blur" frame. Verify with a screenshot.
|
||
|
||
## Exposure and HDR
|
||
|
||
- `Camera.allowHDR` should be `true` for the laparoscope camera. The URP render pipeline asset must have HDR enabled (it does by default in URP 14).
|
||
- Use `ColorAdjustments.postExposure` in stops for any ± adjustment. Range ± 1.0 is plenty; outside that range, fix the lighting instead.
|
||
- A "too dark" laparoscope usually means: Volume profile is missing `ColorAdjustments`, or the post-processing chain is being skipped because the URP asset has it disabled. Verify by reading the active Volume profile (`manage_graphics(action="volume_get_info")`) before touching the camera.
|
||
|
||
## Adding a secondary / overview camera (bounded change)
|
||
|
||
When a Scene Director or QA agent needs a setup view that is **not** the preserved stereo rig:
|
||
|
||
1. Create the camera as a child of `SurgeryBenchmark/Shared/_Cameras` (use the underscore convention so it is obviously editor scaffolding).
|
||
2. Name it `OverviewCamera_<Tag>` (e.g., `OverviewCamera_Cavity`).
|
||
3. Set `clearFlags = Solid Color` with a neutral mid-grey, or `Skybox` if the cavity is enclosed.
|
||
4. Do **not** disable the stereo rig or any preserved camera.
|
||
5. Tag the GameObject for easy removal later (`_Editor` convention is enough; a tag is optional).
|
||
|
||
## Composition rules (avoid overfitting to one angle)
|
||
|
||
- The cavity should be readable from at least three viewpoints: looking down the scope (default), looking from the side (setup), and looking from a 30–45° angle (verification). If only the scope view is composed, the moment the camera moves, the scene falls apart.
|
||
- For any verification screenshot, take **two**: one from the scope, one from a 30–45° offset. The second one catches stretching, lighting falloff, and proportion problems the first one hides.
|
||
- Avoid dead-on symmetry. A scope is not a portrait lens; if a composition is too symmetric, the cavity looks like a diorama.
|
||
|
||
## Common operations and the right MCP call
|
||
|
||
| Intent | MCP call | Notes |
|
||
|---|---|---|
|
||
| Read camera state | `manage_components(action="get" via the components resource)` — `mcpforunity://scene/gameobject/{id}/component/Camera` | Always re-read first |
|
||
| Set FOV | `manage_components(action="set_property", target="...", component_type="Camera", property="fieldOfView", value=45)` | Or `manage_camera(action="set_lens", target="...", properties={"fieldOfView":45, "nearClipPlane":0.03, "farClipPlane":15})` |
|
||
| Add DoF | `manage_graphics(action="volume_add_effect", profile_path="...", effect="DepthOfField")` then `volume_set_effect` | DoF in URP 14 lives on the Volume, not the camera |
|
||
| Take a verification screenshot | `manage_camera(action="screenshot", include_image=true, max_resolution=800, output_folder="Assets/Screenshots/LaparoscopicBenchmark")` | Two angles; the second is from a 30–45° offset |
|
||
| Frame the scene view on a target | `manage_scene(action="scene_view_frame", scene_view_target="CavitySlot")` | Editor-side framing only |
|
||
| Take a multiview contact sheet | `manage_camera(action="screenshot_multiview", include_image=true, view_target="CavitySlot")` | Six-angle surround; useful for spot-checking the whole cavity |
|
||
|
||
## Reversibility checklist
|
||
|
||
1. Did the change touch the preserved stereo rig? If yes, **revert** and call it out in the handoff.
|
||
2. Is the FOV inside 30–80? Outside this range it no longer reads as a scope.
|
||
3. Are the clip planes set so that the entire visible cavity is inside the depth range, with a small margin? Outside the depth range, geometry pops.
|
||
4. Did you take at least two verification screenshots (scope + offset)? If only one, the result is not verified.
|
||
5. Is the `Vignette.intensity` and `LensDistortion.intensity` modest? Over-cooked optical effects are a tell that an agent is compensating for missing realism elsewhere.
|
||
|
||
## Anti-patterns to refuse
|
||
|
||
- Moving, renaming, or retargeting the preserved stereo rig or any `MainScene` camera.
|
||
- Setting FOV > 80 or < 25 (no longer reads as a scope).
|
||
- Disabling post-processing globally to "fix" a too-dark frame.
|
||
- Adding a `CinemachineCamera` if Cinemachine is not in `Packages/manifest.json` (it is not in this project). Use plain `Camera` components.
|
||
- Setting `clearFlags = Don't Care` or leaving the camera with the default skybox visible inside the cavity — this is the most common "looks like an editor" failure.
|
||
- Overcooking `Bloom` or `LensDistortion` to compensate for a flat cavity.
|