After covering CNC machining pricing and HP Multi Jet Fusion pricing, it’s time to tackle another manufacturing method: Stereolithography (SLA) 3D printing.
SLA pricing presents its own unique challenges. Unlike MJF where you’re optimizing build volume utilization, or CNC where you’re calculating material removal time, SLA pricing revolves around two core factors: material consumption and layer-based print time. The result is a pricing model that’s more predictable than MJF but has its own quirks around support structures and print orientation.
Why SLA Pricing is Different
SLA printers cure liquid resin layer by layer using a laser or LED array. This creates several pricing dynamics that set it apart from other manufacturing methods:
Layer-based timing: Print time is primarily determined by part height and the number of layers, not complexity. A solid cube and an intricate lattice structure of the same height take nearly the same time to print.
Support dependency: Unlike FDM printing where supports are optional, SLA almost always requires support structures for overhangs. These supports consume material and add post-processing time.
Material waste: There’s always some resin waste from failed prints, supports that can’t be reused, and cleaning processes. This needs to be factored into your cost calculations.
Batch efficiency limitations: While you can print multiple parts simultaneously, they all need to fit within the same layer height, limiting batch efficiency compared to MJF.
The Core SLA Pricing Methodology
Our SLA pricing algorithm breaks costs into four main components:
- Material cost: Based on part volume plus support and waste estimates
- Print time cost: Calculated from layer count and machine hourly rates
- Quantity discounts: Reflecting batch printing efficiencies
- Precision adjustments: For high-accuracy requirements
Let’s walk through each component.
Material Cost Calculation
Material cost is straightforward—it’s the volume of resin consumed multiplied by the cost per liter. But determining the total volume consumed requires some estimation:
Part Volume: This is your actual part geometry volume in mm³.
Support Volume: We estimate this as roughly 10% of the difference between the convex hull volume and part volume. This accounts for the fact that supports are typically sparse structures, not solid material.
Waste Volume: Estimated as 5% of the part’s surface area (in mm²), representing resin lost to cleaning, failed prints, and unusable support material.
function supportVolume(): number {
return (specification.convexHullVolume - volume) * 0.1
}
function wasteVolume(): number {
return area * 0.05
}
function materialCost(supportVol: number, wasteVol: number): number {
const totalVolumeMm3 = volume + supportVol + wasteVol
const totalVolumeLiters = (totalVolumeMm3 / 1000) / 1000
return totalVolumeLiters * resinCostPerLiter
}
Print Time Estimation
Here’s where SLA gets interesting. Print time is almost entirely dependent on the number of layers, not part complexity. We calculate this based on the part’s height when optimally oriented:
function printTime(): number {
const layerHeight = 0.06 // standard layer height in mm
const timePerLayer = 25 // seconds per layer (configurable)
// Calculate height at 45-degree orientation (optimal for most parts)
const maxDimension = Math.max(width, Math.max(height, length))
const heightAt45Deg = maxDimension * Math.cos(45 * (Math.PI / 180))
const numberOfLayers = Math.ceil(heightAt45Deg / layerHeight)
return numberOfLayers * timePerLayer
}
The 45-degree orientation assumption is important here. Most SLA parts print optimally at a 45-degree angle, which minimizes both support material and layer count while maintaining good surface quality.
Quantity Discounts
Unlike MJF where discounts are tied to build volume utilization, SLA discounts reflect the efficiency of batch printing and reduced setup costs per part:
function quantityDiscount(): number {
if (quantity < 5) return 1
if (quantity >= 5 && quantity < 10) return 0.95
if (quantity >= 10 && quantity < 20) return 0.9
if (quantity >= 20 && quantity < 40) return 0.875
if (quantity >= 40 && quantity < 80) return 0.85
if (quantity >= 80) return 0.825
return 1
}
The discount structure is more conservative than MJF because SLA batch efficiency gains are limited by the build platform size and the requirement for all parts to fit within the same layer height.
A Working Example
Let’s price a typical SLA part to see how this all comes together. Imagine a customer wants 25 units of a detailed miniature figure that’s 40mm × 30mm × 60mm with a volume of 35,000 mm³ and surface area of 8,500 mm².
Step 1: Calculate material requirements
Support volume: Let’s assume the convex hull volume is 45,000 mm³
- Support volume = (45,000 - 35,000) × 0.1 = 1,000 mm³
Waste volume:
- Waste volume = 8,500 × 0.05 = 425 mm³
Total material needed:
- Total volume = 35,000 + 1,000 + 425 = 36,425 mm³
- In liters = 36,425 ÷ 1,000,000 = 0.036425 L
Material cost (assuming $150/L resin):
- Material cost = 0.036425 × $150 = $5.46
Step 2: Calculate print time
For a 40×30×60mm part oriented at 45 degrees:
- Maximum dimension = 60mm
- Height at 45° = 60 × cos(45°) = 42.4mm
- Number of layers = 42.4 ÷ 0.06 = 707 layers
- Print time = 707 × 25 seconds = 17,675 seconds = 4.9 hours
Print time cost (assuming $15/hour machine cost):
- Print time cost = 4.9 × $15 = $73.50
Step 3: Apply quantity discount
Base cost per part:
- Base cost = ($5.46 + $73.50) ÷ 25 parts = $3.16 per part
Quantity discount for 25 parts:
- Discount factor = 0.875 (from our discount table)
- Final cost = $3.16 × 0.875 = $2.77 per part
Comparing Across Manufacturing Methods
Having now covered three manufacturing pricing methods available on Phasio, it’s worth noting how their pricing characteristics differ:
CNC machining prices scale primarily with part complexity and material removal time. Quantity discounts are modest because each part still requires individual machine time.
MJF printing has dramatic quantity discounts due to build volume optimization. Unit costs can drop 10x or more as quantities increase toward full build utilization.
SLA printing sits somewhere in between. Material costs scale linearly with part volume, while print time costs are shared across batch quantities. This creates moderate quantity discounts that reflect batch efficiency without the extreme curves seen in MJF.
When to Choose SLA
Based on our pricing models, SLA typically wins in these scenarios:
- Small quantities (1-50 parts) where MJF’s build optimization can’t achieve efficiency
- High-detail parts where the layer-based pricing doesn’t penalize complexity
- Transparent or flexible materials where MJF isn’t available
- Rapid prototyping where setup time matters more than unit cost
The Complete SLA Pricing Algorithm
Here’s the full algorithm you can implement directly in Phasio or adapt for your own SLA pricing:
// SLA Pricing Algorithm
// Estimates cost based on material usage and print time
// Extract commonly used values
const { material, width, height, length, volume, area, infill, precision } = specification
const { quantity } = requisition
// Material variables (converted to camelCase)
const resinCostPerLiter = material.variables['resinCostPerLiter']
const machineCostPerH = material.variables['machineCostPerH']
// Helper functions
function supportVolume(): number {
// Support volume estimation - estimated support volume in mm3
return (specification.convexHullVolume - volume) * 0.1
}
function wasteVolume(): number {
// Waste volume estimation in mm3
return area * 0.05
}
function printTime(): number {
// Print time estimation in seconds
// time = #layers * time_per_layer
const layerHeight = 0.06 // layer height in mm
const timePerLayer = variable('timePerLayer', 25) // time per layer in seconds
// #layers = height / layer height at 45 degree angle
const maxDimension = Math.max(width, Math.max(height, length))
const heightAt45Deg = maxDimension * Math.cos(45 * (Math.PI / 180))
const numberOfLayers = Math.ceil(heightAt45Deg / layerHeight)
return numberOfLayers * timePerLayer
}
function quantityDiscount(): number {
// Step-wise discount for SLA based on quantity
if (quantity < 5) return 1
if (quantity >= 5 && quantity < 10) return 0.95
if (quantity >= 10 && quantity < 20) return 0.9
if (quantity >= 20 && quantity < 40) return 0.875
if (quantity >= 40 && quantity < 80) return 0.85
if (quantity >= 80) return 0.825
return 1
}
function materialCost(supportVol: number, wasteVol: number): number {
// Calculates material cost based on total volume required
// Convert mm3 → cm3 → L
const totalVolumeMm3 = volume + supportVol + wasteVol
const totalVolumeLiters = (totalVolumeMm3 / 1000) / 1000
return totalVolumeLiters * resinCostPerLiter
}
// Main calculation
const materialCostTotal = materialCost(supportVolume(), wasteVolume())
const printTimeHours = variable('printTime', printTime() / 3600) // convert seconds to hours
const printTimeCost = printTimeHours * machineCostPerH
const baseCost = materialCostTotal + printTimeCost
const finalCostWithDiscount = baseCost * quantityDiscount()
// Set the final unit price as a configurable variable
const finalUnitPrice = variable('unitPrice', finalCostWithDiscount)
done(finalUnitPrice)
Key Insights for SLA Pricing
Layer height matters: Reducing layer height from 0.1mm to 0.05mm can double your print time and costs. Choose layer heights based on required surface quality, not just because you can go finer.
Orientation is critical: The 45-degree orientation assumption in our algorithm works well for most parts, but complex geometries might benefit from custom orientation analysis. A part that prints in 200 layers vs. 400 layers represents a significant cost difference.
Support optimization pays: Since support volume is estimated at 10% of negative space, parts designed to minimize supports can see substantial cost savings. Consider design modifications that reduce overhang angles.
Material waste is real: Our 5% waste factor might seem high, but it accounts for cleaning solutions, failed prints, and post-processing losses. Factor this into your margins rather than hoping it will disappear.
Summary
SLA pricing strikes a balance between the complexity-based costs of CNC machining and the volume-optimization economics of MJF printing. The key is understanding that you’re primarily paying for print time (driven by layer count) and material consumption (driven by part and support volume).
The methodology we’ve outlined gives you a systematic approach to SLA quoting that accounts for the technology’s unique characteristics while remaining simple enough for your business development team to use confidently.
As with our CNC and MJF methodologies, this isn’t meant to be a perfect pricing model—it’s meant to be a good starting point that you can refine based on your actual costs and market positioning.
What topics would you like me to cover in future posts? Feel free to reach out on LinkedIn with your suggestions!