A comprehensive guide for designing and simulating solar panel arrays on vehicle bodies.
- Getting Started
- Interface Overview
- Step 1: Importing a Mesh
- Step 2: Selecting Solar Cell Presets
- Step 3: Placing Solar Cells
- Step 4: Auto-Layout System
- Step 5: Wiring Cells into Strings
- Step 6: Bypass Diodes
- Step 7: Running Simulations
- Working with Modules
- Camera Controls
- Keyboard Shortcuts
- Auto-Updates
- Troubleshooting
Shellpower++ is a cross-platform desktop application for designing and simulating solar panel arrays on vehicle surfaces. It allows you to:
- Import 3D vehicle models (OBJ or STL format)
- Place solar cells on the surface manually or automatically
- Wire cells into series strings
- Simulate power generation at different times and orientations
- Optimize array layouts for maximum efficiency
| Format | Description |
|---|---|
.obj |
Wavefront OBJ files (standard 3D format) |
.stl |
STL files (both ASCII and binary supported) |
Note: If your CAD software exports STEP or IGES files, convert them to OBJ first.
Run the compiled executable for your platform:
- Linux:
./shellpower - macOS:
./shellpoweror double-click the app bundle - Windows:
shellpower.exe
The application window is divided into two main areas:
+------------------+----------------------------------------+
| | |
| SIDEBAR | 3D VIEWPORT |
| (Controls) | (Mesh View) |
| [Scrollable] | |
| | |
| [Mode Tabs] | |
| - Import | |
| - Cells | |
| - Wire | |
| - Sim | |
| | |
| [Panel | |
| Controls] | |
| | |
+------------------+----------------------------------------+
| STATUS BAR |
+-----------------------------------------------------------+
Note: The sidebar is scrollable. Use the mouse wheel when hovering over the sidebar to scroll if content extends beyond the visible area.
| Mode | Purpose |
|---|---|
| Import | Load and transform 3D mesh files |
| Cells | Place solar cells manually or with auto-layout |
| Wire | Create wiring strings between cells |
| Sim | Configure and run power simulations |
- Click the Import tab in the sidebar
- Click Load Mesh File button
- Navigate to your OBJ or STL file
- Click Open
The mesh will appear in the 3D viewport.
IMPORTANT: Most CAD software exports models in millimeters. You must set the correct scale.
| Original Units | Scale Value |
|---|---|
| Millimeters (mm) | 0.001 |
| Centimeters (cm) | 0.01 |
| Meters (m) | 1.0 |
| Inches | 0.0254 |
To set scale:
- Locate the Scale text box in the Import panel
- Enter the appropriate value (e.g.,
0.001for mm to meters) - The mesh will update in real-time
If your mesh is oriented incorrectly:
- Use the X, Y, Z rotation sliders to adjust orientation
- Use the -90 and +90 buttons for quick 90-degree rotations
- The rotation is applied around the mesh center
Common adjustments:
- If the car is upside-down: Rotate X by 180
- If the car is facing sideways: Rotate Z by 90 or -90
After importing, check the mesh info display:
- Filename shown in panel
- Dimensions (X, Y, Z in meters)
- Visually confirm the mesh looks correct
Before placing cells, select the solar cell type you'll be using.
| Preset | Dimensions | Efficiency |
|---|---|---|
| Maxeon Gen 3 | 125 x 125 mm | 22.7% |
| Maxeon Gen 5 | 125 x 125 mm | 24.0% |
| Generic Silicon | 156 x 156 mm | 20.0% |
- Locate the Cell Preset dropdown in the sidebar (below the mode-specific panel)
- Click the dropdown and select your cell type
- The cell info panel will display the selected cell's specifications
Note: All cells placed after changing the preset will use the new cell type. Existing cells retain their original type.
- Click the Cells tab in the sidebar
- Left-click on any surface of the mesh to place a cell
- The cell will automatically orient to match the surface normal
- Repeat to place additional cells
Placement Rules:
- Cells cannot overlap (minimum spacing is enforced)
- Cells only place on upward-facing surfaces
- A small offset (2mm) keeps cells above the mesh surface
See Step 4: Auto-Layout System for automated placement.
To remove all placed cells:
- Click the Cells tab
- Click Clear All Cells button
- All cells will be removed from the mesh
The auto-layout system intelligently places cells to maximize coverage while respecting surface constraints.
| Setting | Description | Default |
|---|---|---|
| Target Area | Total cell area to place (m) | 6.0 |
| Min Angle | Minimum surface angle from horizontal | 62 |
| Max Angle | Maximum surface angle from horizontal | 90 |
| Surface Threshold | Max angle between adjacent triangles | 30 |
| Optimize Occlusion | Consider shading during placement | On |
| Use Grid Layout | Use grid pattern instead of mesh-based | On |
The height constraint prevents cells from being placed on certain areas (like the canopy):
- Auto-Detect: Check "Auto-detect shell top" to automatically determine optimal height range
- Manual Sliders: Use the min/max height sliders to set bounds numerically
- Visual Editor: Click Set Bounds Visually to open an interactive side-view editor:
- Drag the MIN handle (blue) to set the lower bound
- Drag the MAX handle (orange) to set the upper bound
- The 3D view shows the mesh with height planes
- Press ESC or click Done to confirm
- Click the Cells tab
- Configure the auto-layout settings
- (Optional) Check Preview valid surfaces to see where cells can be placed
- Click Run Auto-Layout
- A progress bar will show completion status
- Cells will appear on valid surfaces
Surface Normal
^
|
| (angle measured from horizontal)
_____|_____
/ | \
/ | \
/ | \
/_________|_______\
Surface
- 90 = perfectly horizontal (facing up)
- 0 = vertical (facing sideways)
- 62-90 = typical range for solar panels (captures mostly upward surfaces)
Cells must be wired into series strings to simulate realistic electrical behavior.
- A string is a group of cells connected in series
- Maximum of 50 strings supported
- Each cell can belong to only one string
- Cells are color-coded by string assignment
Method 1: Click Individual Cells
- Click the Wire tab
- Click New String (or press N) to start a new string
- Click on cells to add them to the current string
- Click End String (or press E / Right-click) when finished
Method 2: Group Select (Recommended for Many Cells)
- Click the Wire tab
- Click Group Select Cells button
- Click and drag to draw a rectangle around the cells you want to select
- Release to add all unwired cells in the rectangle to the current string
- Cells are automatically wired in a snake pattern (left-to-right, then right-to-left on next row)
- Repeat as needed, then end the string
The snake pattern ensures efficient series wiring by minimizing wire lengths between adjacent cells.
Before simulation: Cells show their assigned string in distinct colors (green, blue, purple, etc.)
After simulation: In String Power mode (default), cells are colored by their string's power output:
| Color | Meaning |
|---|---|
| Green | String producing near maximum power |
| Yellow | String producing partial power |
| Red | String producing little or no power |
| Gray | Shaded cells |
| Blue | Unwired cells |
To remove all wiring:
- Click Wire tab
- Click Clear All Wiring
- All cells will be un-assigned from strings
Bypass diodes protect strings from power loss when individual cells are shaded.
In a series string, a shaded cell limits the current of the entire string. Bypass diodes allow current to flow around shaded cells, preventing them from dragging down the whole string.
- A bypass diode spans a segment of cells (from cell A to cell B)
- When any cell in the segment can't provide enough current, the entire segment is bypassed
- You can have multiple bypass diodes on a single string, including nested segments
- Click the Wire tab
- Scroll down to the BYPASS DIODES section
- Click Place Bypass Diode to enter placement mode (button shows "[Active]")
- Click on the first cell of the segment you want to bypass
- Click on the last cell of the segment
- The bypass diode is created and shown as a purple arc between the cells
You can create bypass diodes within other bypass diodes for finer-grained control:
Example: Cells 1-10 in a string
- Large bypass diode: cells 1-10 (safety net for entire section)
- Small bypass diode: cells 4-6 (targeted protection)
If cell 5 is shaded, only cells 4-6 are bypassed (the smallest segment covering the shaded cell). Cells 1-3 and 7-10 remain active.
- Click Wire tab
- Click Clear All Bypass Diodes
- All bypass diodes will be removed
- Bypass diodes appear as purple arcs connecting the start and end cells
- After simulation, use Bypass Status visualization mode to see which cells are being bypassed (red = bypassed, green = active)
- Click the Sim tab
- Configure location:
- Latitude: Enter decimal degrees (-90 to +90)
- Longitude: Enter decimal degrees (-180 to +180)
- Configure date:
- Month: Use spinner (1-12)
- Day: Use spinner (1-31)
- Set Irradiance (typically 1000 W/m for standard testing)
Use this for quick analysis at a specific time:
- Adjust the Hour slider (0-24, where 12 = solar noon)
- Click Run Instant Simulation
- View results:
- Total Power (W): Power output at this instant
- Shading %: Percentage of cells in shadow
- Sun Altitude: Angle of sun above horizon
- Sun Azimuth: Compass direction of sun
Use this for comprehensive analysis:
- Configure simulation parameters:
- Time Samples: Number of time points (12-96, more = higher accuracy)
- Heading Samples: Number of vehicle orientations (4-36)
- Click Run Daily Simulation
- Wait for progress bar to complete
- View results:
| Result | Description |
|---|---|
| Daily Energy (Wh) | Total energy generated over the day |
| Average Power (W) | Mean power output |
| Peak Power (W) | Maximum instantaneous power |
| Average Shading % | Mean shading across all times |
| Capture Efficiency | Actual vs. ideal tracking performance |
After running a daily simulation, view the energy breakdown by string:
- Each string's contribution to total energy is displayed
- Helps identify underperforming strings
After running a simulation, use the Cell Color Mode dropdown to visualize different aspects:
| Mode | Description |
|---|---|
| String Power | Colors cells by their string's power output (green = max, red = low) |
| Cell Flux | Colors cells by irradiance flux based on angle to sun (green = facing sun, red = facing away) |
| Cell Current | Colors cells by photo-generated current (blue = low, yellow = high) |
| Shading | Shows shaded (dark gray) vs sunlit (yellow) cells |
| Bypass Status | Shows bypassed cells (red) vs active cells (green) |
The simulation uses a full IV trace model for accurate string power calculation:
- Sun Position: Calculated from date, time, latitude, and longitude
- Cell IV Curves: Each cell generates a current-voltage curve based on:
- Irradiance level
- Angle of incidence (cosine of angle between sun and cell normal)
- Single-diode model with series resistance
- Shading: Ray-casting detects which cells are blocked by the vehicle body
- String Simulation: Series-connected cells are simulated together:
- The string's IV curve is computed by summing cell voltages at each current
- Maximum Power Point (MPP) is found by sweeping the IV curve
- Mismatched cells (shaded or poorly angled) limit the string current
- Bypass Diodes: When a cell can't provide the string current:
- The smallest bypass diode segment covering that cell activates
- All cells in that segment are bypassed together
- String current is set by the remaining active cells
Modules let you save and reuse cell layout patterns.
- Place cells in the desired pattern
- Click the Cells tab
- Enter a name in the Module Name text box
- Click Create Module
- The module is saved to the
modules/directory
- Click the Cells tab
- Find your module in the Saved Modules list
- Click on the module name to select it
- Click Place Module button
- Click on the mesh to place the module
- Click the X button next to the module name
- The module file will be deleted
Modules are stored as JSON files in:
shellpower/modules/<module_name>.json
| Action | Result |
|---|---|
| Left-click + Drag | Rotate view (orbit around mesh) |
| Scroll Wheel | Zoom in/out |
| Middle-click + Drag | Pan view |
| Mode | Description | Best For |
|---|---|---|
| Perspective | 3D view with depth | General viewing |
| Orthographic | Top-down flat view | Precise cell placement |
Toggle between modes:
- Click the Top-Down View checkbox in the sidebar
- Or press T on the keyboard
To reset the camera to fit the entire mesh:
- Click Reset Camera button
- Or press R on the keyboard
| Key | Action |
|---|---|
| N | Start new wiring string |
| E | End current wiring string |
| T | Toggle perspective/orthographic camera |
| R | Reset camera to fit mesh |
| ESC | Cancel bypass diode placement (in Wire mode) |
| Right-click | End current wiring string (in Wire mode) |
Shellpower++ automatically checks for updates on startup.
When a new version is available:
- A dialog will appear showing the new version number
- Click Yes to open the GitHub releases page
- Download the appropriate version for your platform
- Replace the old executable with the new one
If you don't have an internet connection:
- The update check runs in the background and won't block the application
- You can continue using the current version without interruption
Problem: Loaded mesh doesn't appear in viewport
Solutions:
- Check the scale value (if too small, mesh may be invisible)
- Press R to reset camera
- Try scale values like
1.0,0.1,0.01,0.001
Problem: Clicking on mesh doesn't place cells
Solutions:
- Ensure you're in Cells mode
- Click on upward-facing surfaces only
- Check if maximum cell count (1000) is reached
- Ensure you're not clicking too close to existing cells
Problem: Simulation returns 0W output
Solutions:
- Verify cells are placed on the mesh
- Check that simulation hour is during daylight (roughly 6-18)
- Verify latitude/longitude are reasonable values
- Check date settings (month 1-12, day 1-31)
Problem: Error when loading STL file
Solutions:
- Verify file is valid STL format
- Try re-exporting from CAD software
- Check file permissions
- Try OBJ format instead
Problem: Auto-layout completes but no cells appear
Solutions:
- Increase target area
- Widen angle constraints (try 30-90)
- Disable height constraint or adjust bounds
- Check that mesh has valid upward-facing surfaces
- Check Preview valid surfaces to verify placement areas
| Parameter | Default Value |
|---|---|
| Scale | 0.001 (mm to m) |
| Latitude | 37.4 |
| Longitude | -122.2 |
| Irradiance | 1000 W/m |
| Simulation Month | June (6) |
| Simulation Day | 21 |
| Hour | 12.0 |
| Target Area | 6.0 m |
| Min Normal Angle | 62 |
| Max Normal Angle | 90 |
| Surface Threshold | 30 |
| Time Samples | 48 |
| Heading Samples | 12 |
| Limit | Value |
|---|---|
| Maximum Cells | 1000 |
| Maximum Strings | 50 |
| Cells per String | 500 |
| Maximum Bypass Diodes | 100 |
| Maximum Modules | 50 |
| Cells per Module | 100 |
- Dimensions: 125 x 125 mm
- Area: 0.015625 m
- Efficiency: 22.7%
- Peak Power (1000 W/m): ~3.55 W
- Dimensions: 125 x 125 mm
- Area: 0.015625 m
- Efficiency: 24.0%
- Peak Power (1000 W/m): ~3.75 W
- Dimensions: 156 x 156 mm
- Area: 0.024336 m
- Efficiency: 20.0%
- Peak Power (1000 W/m): ~4.87 W
1. IMPORT 2. CONFIGURE 3. PLACE 4. WIRE 5. BYPASS 6. SIMULATE
Mesh --> Scale --> Cells --> Strings --> Diodes --> Power
Rotate (Manual or (Series) (Optional) (Instant or
Auto) Daily)
Typical Workflow:
- Load your vehicle mesh (OBJ/STL)
- Set correct scale (usually 0.001 for mm)
- Rotate if needed to orient correctly
- Select cell preset (Maxeon Gen 5 recommended)
- Use auto-layout or manually place cells
- Wire cells into strings (use Group Select for snake pattern)
- Add bypass diodes to protect against shading (optional)
- Set location and date
- Run daily simulation
- Iterate on layout to optimize results
Shellpower++ - A C port of the original C# Shellpower project with additional features