- RenderStreamOutput 을 URP 17 RenderGraph API 로 마이그레이션
(옛 Execute() 도 Compatibility Mode 호환용으로 유지)
- 알파 합성 셰이더 신규: Pre/Post 비교(블룸/글로우) + NiloToon Prepass G + 가우시안 블러
- 알파 채널 별도 Spout 송신 추가 ("Streamingle Spout Alpha Output")
- 그레이스케일 RGB 마스크, A=1
- spout_ndi_normalizer.exe 외부 프로세스 자동 실행/종료 (SpoutNdiLauncher 병합)
- Display 드롭다운 / Vsync / AlwaysOnTop / HideCursor / Realtime / NoActivate 옵션
- exe 가 있으면 강제 종료 후 단일 인스턴스 보장
- 내부 옵션(exe 경로, window size 등)은 [HideInInspector]
- ScreenshotManager 가 RenderStreamOutput 의 합성 결과를 그대로 PNG 저장
- 자체 카메라 렌더/셰이더 관리 제거 → 알파 품질 라이브 출력과 동일
- captureWidth/Height 지정 시 한 프레임 임시 고해상도 렌더 후 원복
- spout_ndi_normalizer.exe 위치: Resources → StreamingAssets/SpoutNdiNormalizer
- URP Asset: Allow Post Process Alpha Output 활성화
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spout-to-NDI Normalizer — Unity integration
This drop folder contains:
spout_ndi_normalizer.exe— the normalizerSpoutNdiLauncher.cs— Unity launcher componentREADME.md— this file
Quick start
-
Copy
spout_ndi_normalizer.exeinto your Unity project underAssets/StreamingAssets/SpoutNdiNormalizer/spout_ndi_normalizer.exe. (StreamingAssets is preserved verbatim into builds, so the same path works in Editor and in standalone Player.) -
Drop
SpoutNdiLauncher.csanywhere underAssets/. -
Add a GameObject (e.g. an empty "SpoutNdiLauncher" object) and attach the
SpoutNdiLaunchercomponent. Inspector fields:Field Default Notes Exe Relative Path SpoutNdiNormalizer/spout_ndi_normalizer.exeRelative to StreamingAssets/Sender Name Streamingle Spout OutputMust match Unity's KlakSpout / Spout sender exactly Target Fps 60Output cadence Monitor Index 10-based; -1 = start windowed Window Width/Height 1280 / 720Used only when monitorIndex < 0Vsync trueToggleable at runtime via VkeySkip If Already Running trueAvoid duplicates on PlayMode reload -
Press Play. The exe spawns automatically and quits when Unity quits or crashes (uses
--parent-pid <unity-pid>watchdog).
Runtime hotkeys (in the normalizer window)
| Key | Action |
|---|---|
| F11 | Toggle borderless fullscreen |
| F12 | Cycle target monitor |
| V | Toggle vsync |
| T | Toggle always-on-top |
| C | Toggle cursor hide |
| P | Dump pace_log.csv next to the exe |
| ESC | Exit fullscreen, or close window |
The window title bar reports live pacing telemetry: pace fps, wake jitter percentiles, tick interval distribution, callback duration, hold ratio, sender format, GPU adapter, and source name.
CLI args (advanced)
The launcher composes these for you, but the exe accepts them directly:
--sender <name> Spout sender name (default: Streamingle Spout Output)
--fps <hz> Target output cadence (default: 60)
--width <px> Initial windowed width
--height <px> Initial windowed height
--monitor <index> Borderless fullscreen on this 0-based monitor index
--no-vsync Free-run present (default: vsync on)
--topmost Keep window above all other windows
--hide-cursor Hide cursor while over the render area
--realtime Aggressive scheduling (TIME_CRITICAL + Pro Audio MMCSS).
Default off — only enable for headless render-farm use.
Will starve Unity when our window is foreground.
--no-activate Window cannot take focus on click. Recommended when
running alongside Unity Editor — clicks pass through and
Unity stays foreground. Disables our runtime hotkeys.
--parent-pid <pid> Auto-exit if this process dies
Troubleshooting
- Title shows
NO SOURCE: Unity's Spout sender component hasn't started yet, or its sender name doesn't match. Set the same name in both places. - Title shows wrong GPU: launcher chose the iGPU. Force-pick the dGPU in Windows Graphics Settings → Browse → spout_ndi_normalizer.exe → High performance.
- Window doesn't appear: launcher crashed before window creation. Run the
exe manually from a console to see
stderrmessages. - Auto-exit didn't fire: Unity's PID changed mid-session (very unusual). Just kill the orphan from Task Manager; next Unity Play will respawn it.
Build provenance
This binary was produced from spout-ndi-normalizer source, MSVC /MD x64
Release, statically linked against Spout2 SDK. No external DLLs required —
the exe is self-contained on Windows 10 1803+ (high-resolution waitable
timer requirement).