PCD Point Cloud Viewer
Open and inspect PCD point clouds directly inside VS Code, including semantic labels, RGB colors, intensity and height coloring. No ROS, RViz, PCL, Python or Open3D runtime is required.
A screenshot asset is included in the extension package as media/screenshot.png. Add it back to this README after the extension has a public repository URL.
Features
- Double-click a
.pcd file to open the custom 3D viewer.
- Supports
DATA ascii, DATA binary and DATA binary_compressed (LZF).
- Reads
x, y, z, rgb/rgba, r/g/b, intensity and label.
- Displays label values such as
0, 1, 2, 3, 4 and 255 with a configurable semantic color palette.
- Filter individual labels and choose how label
255 is handled: ignore color, hidden, or normal category.
- Color by label, RGB, intensity or height.
- Adjust point size, choose Z-up or Y-up, reset the camera and switch to top view.
- Shows point count, fields, encoding, parsing time and coordinate bounds.
- Uses one
THREE.Points object with BufferGeometry, not one scene object per point.
Quick Start
- Install the extension from the VS Code Marketplace, or install a local VSIX with Extensions: Install from VSIX….
- Open a workspace that contains a
.pcd file.
- Double-click the file. If another editor is configured for
.pcd, use Open With… → PCD Point Cloud Viewer.
Sample files for all three PCD encodings are available under samples/ in the extension package.
Controls
| Action |
Input |
| Rotate |
Left-drag |
| Pan |
Right-drag |
| Zoom |
Mouse wheel / trackpad |
| Fit cloud |
Reset view |
| Top-down view |
Top view |
Label Colors
The default palette is:
| Label |
Color |
| 0 |
#8b949e |
| 1 |
#30c46c |
| 2 |
#e5b83f |
| 3 |
#e25a57 |
| 4 |
#438eea |
| 255 |
#414750 |
Edit colors from the label list. Unknown labels receive deterministic generated colors. Palette and viewer preferences are saved to VS Code user settings and can be reset with PCD: Reset Viewer Settings.
The following settings are available under pcdViewer.*:
pcdViewer.pointSize
pcdViewer.colorMode
pcdViewer.upAxis
pcdViewer.labelColors
pcdViewer.label255Mode
PCD Notes
- PCD binary data is interpreted as little-endian, which is the common PCL/ROS convention.
- PCD field
COUNT > 1 is parsed, but only the first component of a field is used for visualization.
- Label field aliases
labels, class_id and semantic_label are also recognized.
binary_compressed payloads are decompressed with an integrated LZF implementation.
- Very large files are parsed on the Webview thread in this first release. The renderer itself is GPU-oriented and does not allocate a Three.js object per point.
Development
Requirements: Node.js 20+ and VS Code 1.85+.
npm install
npm run check-types
npm test
npm run compile
Press F5 in VS Code to launch the Extension Development Host. Open one of the files in samples/.
Regenerate the demo PCD files in ASCII, binary and binary_compressed form:
npm run generate:samples
Build a .vsix package:
npm run vsix
Publishing to the VS Code Marketplace
- Create an Azure DevOps organization and a Marketplace publisher at https://marketplace.visualstudio.com/manage.
- Create a Personal Access Token with Marketplace → Manage scope.
- Authenticate and publish:
npx vsce login <publisher-id>
npm run vsix
npx vsce publish --no-dependencies
For later releases, update version in package.json and CHANGELOG.md, then run:
npx vsce publish patch --no-dependencies
The publisher is configured as tianjk. If a public GitHub/GitLab repository is added later, restore the screenshot reference in README.md and add repository metadata to package.json so relative images resolve on the Marketplace.
Roadmap
- PLY and generic binary point cloud support
- Background parsing in a Web Worker
- Downsampling and point budget controls
- Custom per-file label names
- Label editing and annotation are intentionally out of scope for the first release