A Cinema 4D plugin that connects to Plasticity via WebSocket, enabling live mesh synchronization between the two applications. Model in Plasticity's NURBS environment, see the tessellated result in Cinema 4D in real time.
- Live Link — Subscribe to Plasticity's WebSocket server and receive geometry updates in real time
- Handshake — Capability negotiation with the Plasticity server on connect
- In-Place Updates — Geometry is replaced without destroying the C4D object; materials, tags, animation, and constraints survive every update
- Tri & N-gon Modes — Pure-triangle output or reconstructed N-gon topology via ear-clipping and
MCOMMAND_MELT - Custom Normals — Per-corner normals written to a managed
NormalTagwith accurate shading in both modes - Refacet — Re-tessellate selected objects with full control over tolerance, angle, width, and chord parameters
- Auto-Refacet Tag — Custom tag that persists refacet settings per object; geometry is automatically re-tessellated after every refresh or live-link update
- Inbox / Outbox — Objects from Plasticity land in the Inbox; user-created SDS objects in the Outbox can be uploaded back to Plasticity via
PUT_SOME - Store Faces — Creates one
PolygonSelectionTagper CAD face group, ready for per-face material assignment - Store Edges — Creates an
EdgeSelectionTagcontaining all CAD boundary edges - Select Faces — Expands current polygon selection to whole CAD face groups
- Select Edges — Selects perimeter edges of the current face-group selection and switches to edge mode
- Select Sharp Edges — Selects all Plasticity boundary edges with an adjustable angle threshold and switches to edge mode
- Unit Scale — Lives on the root null's scale transform, adjustable at any time without reimporting
┌────────────────────┐ WebSocket ┌──────────────────────┐
│ Plasticity │◄────────────►│ PlasticityClient │
│ (CAD modeler) │ binary │ (background thread) │
└────────────────────┘ protocol └──────────┬───────────┘
│ thread-safe
│ event queue
┌──────────▼───────────┐
│ ThreadingBridge │
│ (Queue + callbacks) │
└──────────┬───────────┘
│ Timer() @ 60fps
┌──────────▼───────────┐
│ SceneHandler │
│ (C4D main thread) │
└──────────────────────┘
Cinema 4D's API is not thread-safe. The plugin runs the WebSocket client in a background thread and passes parsed messages to the main thread via a lock-protected queue. The dialog's Timer() callback (16ms interval) drains the queue and dispatches events to registered handlers.
On connect, the client sends a HANDSHAKE_1 message. The server responds with the set of message types it supports, enabling feature detection (e.g. whether PUT_SOME_1 is available for Outbox uploads).
The binary protocol uses little-endian encoding with 4-byte aligned strings. All message types and layouts match the Plasticity Blender Bridge addon exactly.
Plasticity is Z-up; Cinema 4D is Y-up. The plugin swaps axes on import:
| Plasticity | Cinema 4D |
|---|---|
| X | X |
| Y | Z |
| Z | Y |
Vertex positions are scaled by 100× (Plasticity uses metres, C4D uses centimetres). Winding order is reversed (CPolygon(a, c, b)) to match C4D's counter-clockwise front-face convention.
Plasticity: <filename> ← root null (unit scale lives here)
├── Outbox ← user-created SDS objects for upload
└── Inbox ← objects received from Plasticity
├── Group A ← Plasticity group → C4D null
│ ├── Solid 1 ← Plasticity solid → C4D polygon object
│ └── Solid 2
└── Sheet 1
Objects in the Outbox are protected from incoming updates and can be uploaded to Plasticity via the PUT_SOME_1 protocol message when the server supports it.
- Download the latest release from GitHub Releases
- Extract the archive
- Copy the entire plugin folder to your Cinema 4D plugins directory:
- Windows:
%APPDATA%\Maxon\Cinema 4D\plugins\ - macOS:
~/Library/Application Support/Maxon/Cinema 4D/plugins/
- Windows:
- Restart Cinema 4D
- The plugin appears under Extensions → Plasticity Bridge
- Clone the project:
git clone https://github.com/ninsent/plasticity-c4d-plugin.git- Install the plugin by symlinking or copying to your C4D plugins directory:
# macOS / Linux
ln -s "$(pwd)/plasticity-c4d-plugin" ~/Library/Application\ Support/Maxon/Cinema\ 4D/plugins/
# Windows (PowerShell, run as admin)
New-Item -ItemType SymbolicLink -Path "$env:APPDATA\Maxon\Cinema 4D\plugins\plasticity-c4d-plugin" -Target "$(Get-Location)\plasticity-c4d-plugin"- Restart Cinema 4D. The plugin will appear under Extensions → Plasticity Bridge
No build step or pip install needed — the websockets library is bundled in libs/.
-
Connect
- Open Extensions → Plasticity Bridge
- Enter the server address (default:
localhost:8980) - Click Connect
-
Import geometry
- Click Refresh to import all objects, or toggle Only Visible first
- Objects appear under a root null named
Plasticity: <filename>
-
Enable Live Link
- Toggle Live Link to receive real-time updates
- Every change in Plasticity is reflected in Cinema 4D within a frame
-
Adjust settings
- Unit Scale (0.0001–100): Scale factor applied to the root null
- Topology: Switch between Tris and Ngons
- Refacet Options: Simple (Tolerance + Angle) or Advanced (all six parameters)
-
Auto-Refacet
- Check Auto-Refacet before clicking Refacet Selected
- A custom tag is stamped on each selected object with the current refacet settings
- On every subsequent refresh or live-link update, tagged objects are automatically re-tessellated
- Edit the tag's attributes directly in the Attribute Manager to fine-tune per-object settings
- Delete the tag to stop auto-refaceting an object
-
Outbox (upload to Plasticity)
- Place Subdivision Surface objects in the Outbox null under the root
- On Refresh, outbox meshes are uploaded to Plasticity via
PUT_SOME(if the server supports it)
-
Use utilities
- Select one or more Plasticity objects in the viewport
- Use the Utilities tab to store face/edge selections, select groups, or select sharp edges
The Plasticity Auto-Refacet tag can be attached to any Plasticity mesh object. It appears in the Tags menu and can also be created automatically via the Auto-Refacet checkbox. The tag's Attribute Manager panel mirrors the plugin's refacet controls:
- Topology — Tris / Ngons
- Refacet Options — Simple / Advanced (toggles which parameter group is visible)
- Simple: Tolerance, Angle (with sliders)
- Advanced: Min Width, Max Width, Edge Chord Tol, Edge Chord Angle, Face Plane Tol, Face Angle Tol (with sliders)
All tags created by the plugin are prefixed or named with internal identifiers:
__plasticity_normals__— NormalTag (custom normals)Plasticity Face <n>— PolygonSelectionTag (per-face selections)__plasticity_edges__— EdgeSelectionTag (boundary edges)
These are automatically stripped and recreated on every geometry update. User-created tags are never touched.
Contributions are welcome! Please read our Contributing Guide for details on commit conventions, code style, and the process for submitting pull requests.
- Plasticity Official Website
- Plasticity Manual — Blender Bridge Setup
- Plasticity Blender Bridge (original addon)
- Cinema 4D Python SDK Documentation
- Auto-Refacet tag, Select Sharp Edges, Inbox/Outbox hierarchy, Handshake protocol, PutSome upload
- Initial release with WebSocket connection, Live Link, tri/N-gon modes, refacet, and full utility suite
Check the CHANGELOG.md for a detailed history of changes.
- Plasticity by Nick Kallen — the CAD modeler this plugin connects to
- Plasticity Blender Bridge by Nick Kallen — the original addon whose protocol and architecture this port is based on
- Ferdinand (Maxon Developer Forum) — polygon-identity hashing technique used for N-gon melt tracking
Nursultan Akim
- Portfolio: behance.net/ninsent
- Report Bug: GitHub Issues
- Request Feature: GitHub Issues
- Contact: akim.off.nur@gmail.com
MIT © 2026 Nursultan Akim