Artur Mukhamadiev c51e6d1369 feat(models) added models/textures and Agents related stuff
: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
2026-06-22 16:57:48 +03:00

7.4 KiB
Raw Permalink Blame History

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 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 3555 is a good starting range for "looks like a scope"; 6075 is "looks like a wide scope"; > 80 starts to look like a generic game camera.
  • A very close near clip: 0.010.05 m. Far clip can be short too — 520 m is enough for a cavity scene.
  • A barrel of wet optics: mild LensDistortion (intensity 0.050.15) and a tight Vignette (intensity 0.250.4, smoothness 0.30.5).
  • Optical highlights: a narrow Bloom with low intensity (0.10.3) and a threshold above 1.0 so it only catches the brightest specular hits.
  • Color grading: ColorAdjustments.contrast slightly positive (0.050.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.02.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 3045° 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 3045° 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 3045° 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 3080? 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.