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

90 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` 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.