: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
7.4 KiB
7.4 KiB
name, description
| name | description |
|---|---|
| cinematic-laparoscope-camera | 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
MainSceneis 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/Sharedis 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
fieldOfView35–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 tightVignette(intensity 0.25–0.4, smoothness 0.3–0.5). - Optical highlights: a narrow
Bloomwith lowintensity(0.1–0.3) and athresholdabove 1.0 so it only catches the brightest specular hits. - Color grading:
ColorAdjustments.contrastslightly positive (0.05–0.15),ColorAdjustments.postExposurenear 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.gaussianStartnear the closest tissue you want sharp;DepthOfField.gaussianEndjust past the farthest tissue you want sharp.DepthOfField.gaussianMaxRadius1.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.allowHDRshould betruefor the laparoscope camera. The URP render pipeline asset must have HDR enabled (it does by default in URP 14).- Use
ColorAdjustments.postExposurein 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:
- Create the camera as a child of
SurgeryBenchmark/Shared/_Cameras(use the underscore convention so it is obviously editor scaffolding). - Name it
OverviewCamera_<Tag>(e.g.,OverviewCamera_Cavity). - Set
clearFlags = Solid Colorwith a neutral mid-grey, orSkyboxif the cavity is enclosed. - Do not disable the stereo rig or any preserved camera.
- Tag the GameObject for easy removal later (
_Editorconvention 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
- Did the change touch the preserved stereo rig? If yes, revert and call it out in the handoff.
- Is the FOV inside 30–80? Outside this range it no longer reads as a scope.
- 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.
- Did you take at least two verification screenshots (scope + offset)? If only one, the result is not verified.
- Is the
Vignette.intensityandLensDistortion.intensitymodest? 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
MainScenecamera. - Setting FOV > 80 or < 25 (no longer reads as a scope).
- Disabling post-processing globally to "fix" a too-dark frame.
- Adding a
CinemachineCameraif Cinemachine is not inPackages/manifest.json(it is not in this project). Use plainCameracomponents. - Setting
clearFlags = Don't Careor leaving the camera with the default skybox visible inside the cavity — this is the most common "looks like an editor" failure. - Overcooking
BloomorLensDistortionto compensate for a flat cavity.