# Split Screen two players in one 3D world, each with their own RenderView. ```{raw} html ▶ Run in browser ``` **Tags:** `3d` `renderview` `render-to-texture` `split-screen` `camera` `multiplayer` Two players drive around a single shared world. Each has a ChaseCamera trailing it and a RenderView capturing the main scene through that camera, and each RenderView is shown by a half-screen Sprite2D, with a thin divider between them. Neither half is a viewport of the window: both are full offscreen renders of the one world, composited by two sprites. Drive either player past the other and it appears in the other's half, because there is only one world. This is render-to-texture split screen. The cost is one complete scene render per view (plus the main pass), which is what buys the freedom: the halves can be any size or shape, they can overlap, and a third player is a third RenderView rather than a change to the renderer. A RenderView captures the 3D world only. Its capture re-submits the main tree with the 2D overlays off, since those already drew for the main pass and are screen-space rather than part of the world a second camera would see. That is why the labels and the divider sit on top of both halves rather than inside them, and it is also why a sprite showing a view can never feed back into it. RenderView capture is deferred entirely under the pipelined render mode (``App(render_thread=True)``), exactly like reflection-probe capture: the texture slots stay valid but stop updating, so both halves freeze. Run this on the default synchronous path. ## What it demonstrates - `Sprite2D(texture=render_view)`: an offscreen 3D capture drawn as a 2D quad, the screen-space counterpart of `Material(albedo_map=render_view)`. - One RenderView per player, each pointed at its own ChaseCamera by node path. - Compositing several views into one frame: two half-screen panels and a divider. - Two players sharing one scene tree, each visible in the other's half. Controls: W / S - Player 1 forward / back A / D - Player 1 turn left / right Up / Down - Player 2 forward / back Left/ Right - Player 2 turn left / right ESC - Quit Run: uv run python examples/features/3d/split_screen.py Headless self-check: uv run python examples/features/3d/split_screen.py --test ## Source ```{literalinclude} ../../examples/features/3d/split_screen.py :language: python :linenos: ```