PricingDeep DiveLevel 1 - Process Deep Dives

Large Format FDM

How to adapt the time-based FDM pricing model for large format pellet extrusion, gantry, and SCARA systems, including adjusted constants and a complete algorithm.

Why this process is unique

Large format FDM (pellet extrusion, gantry systems, SCARA robots) differs from desktop FDM in three key ways:

  1. Nozzle diameter is much larger (2-10mm vs 0.4mm) - faster deposition, lower resolution
  2. Layer height is proportionally larger (1-5mm) - print times can still be long but fewer layers
  3. Material is sold by the kg or tonne (pellets), not by the spool - far cheaper per kg

The time-based FDM model still applies, but constants change significantly. Shell layer count is typically 2-3, infill is often 15-25%, and support fraction from the hull gap may need a higher estimate for complex geometries (sparse supports, large overhangs).


Core methodology

Same as standard FDM:

  • Shell + infill + support volume split
  • Print time = volume ÷ volumetric flow rate, summed by region
  • Machine cost = time × cost per hour
  • Material cost = mass × cost per kg

Key differences in the constants:

ParameterDesktop FDMLarge Format FDM
Nozzle diameter0.4 mm5-10 mm
Layer height0.1-0.3 mm2-5 mm
Wall speed factor0.4-0.60.5-0.7
Material cost per kg€20-80€3-20 (pellets)
Machine cost per hour€5-15€40-150

Numerical example

Part: 600 × 400 × 300 mm enclosure panel, volume = 4,800,000 mm³ (hollow walls)

ParameterValue
Nozzle diameter8 mm
Layer height4 mm
Wall count2
Base speed120 mm/s
Wall speed factor0.6
Infill (15%)0.15
Machine cost per hour€80
Material cost per kg€8 (ABS pellets), density 1.04 g/cm³

Shell volume: min(4.8M, area × 8 × 2) - area depends on geometry Print time estimate: ~6 hours (large nozzle deposits fast) Machine cost: 6 × 80 = €480 Material cost: ~5 kg × 8 = €40 Unit price: ~€520 + overhead


Complete algorithm

const { material, width, height, length, volume, area, convexHullVolume, infill, precision } = specification
const { quantity } = requisition

// Large format machine — adjust to your system
const MACHINE_BED_L = 2000
const MACHINE_BED_W = 1500
const MACHINE_BED_H = 1000

const NOZZLE_DIAMETER_MM  = material.variables['nozzleDiameterMm']  // e.g. 8
const NUMBER_OF_WALLS     = 2
const SUPPORT_INFILL      = 0.15
const PRINT_TIME_OVERHEAD = 1.25

const layerHeight = precision?.value ?? 4.0
const partInfill  = infill?.value ?? 0.15

const shellVolume   = Math.min(volume, area * NOZZLE_DIAMETER_MM * NUMBER_OF_WALLS)
const infillVolume  = (volume - shellVolume) * partInfill
const hullGap       = convexHullVolume - volume
const supportVolume = variable('supportVolume', round(hullGap * 0.15, 0))

const materialDensity   = material.variables['materialDensity']
const materialCostPerKg = material.variables['materialCostPerKg']
const totalVolumeMm3    = shellVolume + infillVolume + supportVolume * SUPPORT_INFILL
const massKg = (totalVolumeMm3 / 1_000_000) * materialDensity
const materialCost = round(massKg * materialCostPerKg, 2)

const baseSpeed          = material.variables['baseSpeedNozzle']
const wallSpeedFactor    = material.variables['wallSpeedFactor']
const infillSpeedFactor  = material.variables['infillSpeedFactor']
const supportSpeedFactor = material.variables['supportSpeedFactor']
const machineCostPerHour = material.variables['machineCostPerHour']

const wallTime    = shellVolume  / (NOZZLE_DIAMETER_MM * layerHeight * baseSpeed * wallSpeedFactor)
const infillTime  = infillVolume / (NOZZLE_DIAMETER_MM * layerHeight * baseSpeed * infillSpeedFactor)
const supportTime = (supportVolume * SUPPORT_INFILL) / (NOZZLE_DIAMETER_MM * layerHeight * baseSpeed * supportSpeedFactor)
const shellPenalty = 1 + 0.3 * Math.pow(shellVolume / (shellVolume + infillVolume + 1), 2)
const printTimeHours = variable('printTime', round(
  (wallTime + infillTime + supportTime) * PRINT_TIME_OVERHEAD * shellPenalty / 3600, 2
))

const machineCost = round(printTimeHours * machineCostPerHour, 2)
const baseCost    = materialCost + machineCost
const unitPrice   = variable('unitPrice', round(baseCost, 2))

const oversized = length > MACHINE_BED_L || width > MACHINE_BED_W || height > MACHINE_BED_H
done(unitPrice, printTimeHours, oversized)

Material variables: nozzleDiameterMm, materialDensity, materialCostPerKg, baseSpeedNozzle, wallSpeedFactor, infillSpeedFactor, supportSpeedFactor, machineCostPerHour


When to use this

Pellet extrusion systems printing parts larger than ~400mm. Parts are typically structural, prototypes, tooling, moulds, or formwork - where surface finish is secondary to speed and size.

Last updated on

On this page