Summary
This experiment investigates studio portrait lighting. Central composite design to maximize skin tone accuracy and minimize harsh shadows by tuning key light power, fill ratio, and modifier size.
The design varies 3 factors: key power ws (Ws), ranging from 100 to 500, fill ratio (ratio), ranging from 2 to 8, and modifier cm (cm), ranging from 60 to 150. The goal is to optimize 2 responses: skin accuracy (pts) (maximize) and shadow harshness (pts) (minimize). Fixed conditions held constant across all runs include background = grey, distance m = 2.
A Central Composite Design (CCD) was selected to fit a full quadratic response surface model, including curvature and interaction effects. With 3 factors this produces 22 runs including center points and axial (star) points that extend beyond the factorial range.
Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.
Key Findings
For skin accuracy, the most influential factors were fill ratio (41.0%), key power ws (37.1%), modifier cm (22.0%). The best observed value was 8.2 (at key power ws = 100, fill ratio = 8, modifier cm = 60).
For shadow harshness, the most influential factors were fill ratio (66.9%), key power ws (20.8%), modifier cm (12.3%). The best observed value was 2.4 (at key power ws = 300, fill ratio = 5, modifier cm = 105).
Recommended Next Steps
- Run confirmation experiments at the predicted optimal settings to validate the model.
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
key_power_ws | 100 | 500 | Ws |
fill_ratio | 2 | 8 | ratio |
modifier_cm | 60 | 150 | cm |
Fixed: background = grey, distance_m = 2
Responses
| Response | Direction | Unit |
skin_accuracy | ↑ maximize | pts |
shadow_harshness | ↓ minimize | pts |
Configuration
{
"metadata": {
"name": "Studio Portrait Lighting",
"description": "Central composite design to maximize skin tone accuracy and minimize harsh shadows by tuning key light power, fill ratio, and modifier size"
},
"factors": [
{
"name": "key_power_ws",
"levels": [
"100",
"500"
],
"type": "continuous",
"unit": "Ws"
},
{
"name": "fill_ratio",
"levels": [
"2",
"8"
],
"type": "continuous",
"unit": "ratio"
},
{
"name": "modifier_cm",
"levels": [
"60",
"150"
],
"type": "continuous",
"unit": "cm"
}
],
"fixed_factors": {
"background": "grey",
"distance_m": "2"
},
"responses": [
{
"name": "skin_accuracy",
"optimize": "maximize",
"unit": "pts"
},
{
"name": "shadow_harshness",
"optimize": "minimize",
"unit": "pts"
}
],
"settings": {
"operation": "central_composite",
"test_script": "use_cases/148_studio_lighting/sim.sh"
}
}
Experimental Matrix
The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.
| Run | key_power_ws | fill_ratio | modifier_cm |
| 1 | 300 | 5 | 105 |
| 2 | 500 | 2 | 150 |
| 3 | 100 | 8 | 60 |
| 4 | 300 | 10.4772 | 105 |
| 5 | 300 | 5 | 105 |
| 6 | -65.1484 | 5 | 105 |
| 7 | 300 | 5 | 22.8416 |
| 8 | 300 | 5 | 105 |
| 9 | 500 | 8 | 60 |
| 10 | 665.148 | 5 | 105 |
| 11 | 300 | 5 | 105 |
| 12 | 300 | -0.477226 | 105 |
| 13 | 300 | 5 | 105 |
| 14 | 100 | 2 | 150 |
| 15 | 300 | 5 | 105 |
| 16 | 500 | 2 | 60 |
| 17 | 300 | 5 | 187.158 |
| 18 | 500 | 8 | 150 |
| 19 | 300 | 5 | 105 |
| 20 | 100 | 2 | 60 |
| 21 | 100 | 8 | 150 |
| 22 | 300 | 5 | 105 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/148_studio_lighting/config.json
2
Generate the runner script
$ doe generate --config use_cases/148_studio_lighting/config.json \
--output use_cases/148_studio_lighting/results/run.sh --seed 42
3
Execute the experiments
$ bash use_cases/148_studio_lighting/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/148_studio_lighting/config.json
5
Get optimization recommendations
$ doe optimize --config use_cases/148_studio_lighting/config.json
6
Multi-objective optimization
With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.
$ doe optimize --config use_cases/148_studio_lighting/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/148_studio_lighting/config.json \
--output use_cases/148_studio_lighting/results/report.html
Features Exercised
| Feature | Value |
| Design type | central_composite |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (skin_accuracy ↑, shadow_harshness ↓) |
| Total runs | 22 |
Analysis Results
Generated from actual experiment runs using the DOE Helper Tool.
Response: skin_accuracy
Top factors: fill_ratio (41.0%), key_power_ws (37.1%), modifier_cm (22.0%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| key_power_ws | 4 | 3.2027 | 0.8007 | 0.418 | 0.7918 |
| fill_ratio | 4 | 6.0886 | 1.5221 | 0.795 | 0.5572 |
| modifier_cm | 4 | 4.1752 | 1.0438 | 0.545 | 0.7072 |
| Lack | of | Fit | 2 | 0.2275 | 0.1137 |
| Pure | Error | 7 | 13.3987 | | |
| Error | 9 | 13.6262 | 1.9141 | | |
| Total | 21 | 27.0927 | 1.2901 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: shadow_harshness
Top factors: fill_ratio (66.9%), key_power_ws (20.8%), modifier_cm (12.3%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| Source | DF | SS | MS | F | p-value |
| key_power_ws | 4 | 6.0145 | 1.5036 | 0.423 | 0.7885 |
| fill_ratio | 4 | 17.8404 | 4.4601 | 1.255 | 0.3552 |
| modifier_cm | 4 | 2.7879 | 0.6970 | 0.196 | 0.9342 |
| Lack | of | Fit | 2 | 12.7567 | 6.3784 |
| Pure | Error | 7 | 24.8750 | | |
| Error | 9 | 37.6317 | 3.5536 | | |
| Total | 21 | 64.2745 | 3.0607 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
shadow harshness fill ratio vs modifier cm
shadow harshness key power ws vs fill ratio
shadow harshness key power ws vs modifier cm
skin accuracy fill ratio vs modifier cm
skin accuracy key power ws vs fill ratio
skin accuracy key power ws vs modifier cm
Multi-Objective Optimization
When responses compete, Derringer–Suich desirability finds the best compromise.
Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.
Overall Desirability
D = 0.9408
Per-Response Desirability
| Response | Weight | Desirability | Predicted | Dir |
skin_accuracy |
1.5 |
|
8.10 0.9318 8.10 pts |
↑ |
shadow_harshness |
1.0 |
|
2.40 0.9545 2.40 pts |
↓ |
Recommended Settings
| Factor | Value |
key_power_ws | 300 Ws |
fill_ratio | 5 ratio |
modifier_cm | 105 cm |
Source: from observed run #17
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
shadow_harshness | 2.40 | 2.40 | +0.00 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #2 | 0.9268 | key_power_ws=500, fill_ratio=8, modifier_cm=60 |
| #14 | 0.7864 | key_power_ws=300, fill_ratio=10.4772, modifier_cm=105 |
Model Quality
| Response | R² | Type |
shadow_harshness | 0.1504 | linear |
Full Multi-Objective Output
============================================================
MULTI-OBJECTIVE OPTIMIZATION
Method: Derringer-Suich Desirability Function
============================================================
Overall desirability: D = 0.9408
Response Weight Desirability Predicted Direction
---------------------------------------------------------------------
skin_accuracy 1.5 0.9318 8.10 pts ↑
shadow_harshness 1.0 0.9545 2.40 pts ↓
Recommended settings:
key_power_ws = 300 Ws
fill_ratio = 5 ratio
modifier_cm = 105 cm
(from observed run #17)
Trade-off summary:
skin_accuracy: 8.10 (best observed: 8.20, sacrifice: +0.10)
shadow_harshness: 2.40 (best observed: 2.40, sacrifice: +0.00)
Model quality:
skin_accuracy: R² = 0.2833 (linear)
shadow_harshness: R² = 0.1504 (linear)
Top 3 observed runs by overall desirability:
1. Run #17 (D=0.9408): key_power_ws=300, fill_ratio=5, modifier_cm=105
2. Run #2 (D=0.9268): key_power_ws=500, fill_ratio=8, modifier_cm=60
3. Run #14 (D=0.7864): key_power_ws=300, fill_ratio=10.4772, modifier_cm=105
Full Analysis Output
=== Main Effects: skin_accuracy ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
fill_ratio 2.1000 0.2422 41.0%
key_power_ws 1.9000 0.2422 37.1%
modifier_cm 1.1250 0.2422 22.0%
=== ANOVA Table: skin_accuracy ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
key_power_ws 4 3.2027 0.8007 0.418 0.7918
fill_ratio 4 6.0886 1.5221 0.795 0.5572
modifier_cm 4 4.1752 1.0438 0.545 0.7072
Lack of Fit 2 0.2275 0.1137 0.059 0.9428
Pure Error 7 13.3987 1.9141
Error 9 13.6262 1.9141
Total 21 27.0927 1.2901
=== Summary Statistics: skin_accuracy ===
key_power_ws:
Level N Mean Std Min Max
------------------------------------------------------------
-65.1484 1 5.0000 0.0000 5.0000 5.0000
100 4 6.9000 0.6055 6.0000 7.3000
300 12 6.3250 1.2800 4.2000 8.2000
500 4 6.4750 1.2606 4.6000 7.3000
665.148 1 6.8000 0.0000 6.8000 6.8000
fill_ratio:
Level N Mean Std Min Max
------------------------------------------------------------
-0.477226 1 6.0000 0.0000 6.0000 6.0000
10.4772 1 8.1000 0.0000 8.1000 8.1000
2 4 7.1250 0.1708 6.9000 7.3000
5 12 6.1333 1.2175 4.2000 8.2000
8 4 6.2500 1.2396 4.6000 7.3000
modifier_cm:
Level N Mean Std Min Max
------------------------------------------------------------
105 12 6.2000 1.3143 4.2000 8.2000
150 4 6.1500 1.1387 4.6000 7.1000
187.158 1 7.2000 0.0000 7.2000 7.2000
22.8416 1 6.1000 0.0000 6.1000 6.1000
60 4 7.2250 0.0957 7.1000 7.3000
=== Main Effects: shadow_harshness ===
Factor Effect Std Error % Contribution
--------------------------------------------------------------
fill_ratio 5.3000 0.3730 66.9%
key_power_ws 1.6500 0.3730 20.8%
modifier_cm 0.9750 0.3730 12.3%
=== ANOVA Table: shadow_harshness ===
Source DF SS MS F p-value
-----------------------------------------------------------------------------
key_power_ws 4 6.0145 1.5036 0.423 0.7885
fill_ratio 4 17.8404 4.4601 1.255 0.3552
modifier_cm 4 2.7879 0.6970 0.196 0.9342
Lack of Fit 2 12.7567 6.3784 1.795 0.2348
Pure Error 7 24.8750 3.5536
Error 9 37.6317 3.5536
Total 21 64.2745 3.0607
=== Summary Statistics: shadow_harshness ===
key_power_ws:
Level N Mean Std Min Max
------------------------------------------------------------
-65.1484 1 4.2000 0.0000 4.2000 4.2000
100 4 4.4750 1.8998 2.6000 6.8000
300 12 5.5750 1.9212 2.4000 9.1000
500 4 5.8500 1.5089 4.9000 8.1000
665.148 1 5.2000 0.0000 5.2000 5.2000
fill_ratio:
Level N Mean Std Min Max
------------------------------------------------------------
-0.477226 1 7.7000 0.0000 7.7000 7.7000
10.4772 1 2.4000 0.0000 2.4000 2.4000
2 4 4.5500 1.3026 2.6000 5.3000
5 12 5.5167 1.5954 2.9000 9.1000
8 4 5.7750 2.1093 3.3000 8.1000
modifier_cm:
Level N Mean Std Min Max
------------------------------------------------------------
105 12 5.5083 1.9528 2.4000 9.1000
150 4 5.6500 2.3756 2.6000 8.1000
187.158 1 4.8000 0.0000 4.8000 4.8000
22.8416 1 5.4000 0.0000 5.4000 5.4000
60 4 4.6750 0.9323 3.3000 5.3000
Optimization Recommendations
=== Optimization: skin_accuracy ===
Direction: maximize
Best observed run: #2
key_power_ws = 100
fill_ratio = 8
modifier_cm = 60
Value: 8.2
RSM Model (linear, R² = 0.0147, Adj R² = -0.1495):
Coefficients:
intercept +6.4182
key_power_ws -0.1248
fill_ratio +0.0910
modifier_cm -0.0572
RSM Model (quadratic, R² = 0.4790, Adj R² = 0.0882):
Coefficients:
intercept +5.9590
key_power_ws -0.1248
fill_ratio +0.0910
modifier_cm -0.0572
key_power_ws*fill_ratio -0.7875
key_power_ws*modifier_cm -0.4375
fill_ratio*modifier_cm -0.5875
key_power_ws^2 +0.2096
fill_ratio^2 +0.3596
modifier_cm^2 +0.1196
Curvature analysis:
fill_ratio coef=+0.3596 convex (has a minimum)
key_power_ws coef=+0.2096 convex (has a minimum)
modifier_cm coef=+0.1196 convex (has a minimum)
Notable interactions:
key_power_ws*fill_ratio coef=-0.7875 (antagonistic)
fill_ratio*modifier_cm coef=-0.5875 (antagonistic)
key_power_ws*modifier_cm coef=-0.4375 (antagonistic)
Predicted optimum (from quadratic model, at observed points):
key_power_ws = 100
fill_ratio = 8
modifier_cm = 60
Predicted value: 7.8583
Surface optimum (via L-BFGS-B, quadratic model):
key_power_ws = 100
fill_ratio = 8
modifier_cm = 60
Predicted value: 7.8583
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. fill_ratio (effect: 1.1, contribution: 42.3%)
2. modifier_cm (effect: 0.9, contribution: 33.3%)
3. key_power_ws (effect: 0.7, contribution: 24.4%)
=== Optimization: shadow_harshness ===
Direction: minimize
Best observed run: #17
key_power_ws = 300
fill_ratio = 5
modifier_cm = 105
Value: 2.4
RSM Model (linear, R² = 0.0862, Adj R² = -0.0661):
Coefficients:
intercept +5.3455
key_power_ws +0.6062
fill_ratio -0.0975
modifier_cm -0.0281
RSM Model (quadratic, R² = 0.2111, Adj R² = -0.3805):
Coefficients:
intercept +5.5757
key_power_ws +0.6062
fill_ratio -0.0975
modifier_cm -0.0281
key_power_ws*fill_ratio +0.8375
key_power_ws*modifier_cm +0.1125
fill_ratio*modifier_cm +0.1375
key_power_ws^2 -0.1551
fill_ratio^2 -0.2751
modifier_cm^2 +0.0849
Curvature analysis:
fill_ratio coef=-0.2751 concave (has a maximum)
key_power_ws coef=-0.1551 concave (has a maximum)
modifier_cm coef=+0.0849 negligible curvature
Notable interactions:
key_power_ws*fill_ratio coef=+0.8375 (synergistic)
Predicted optimum (from linear model, at observed points):
key_power_ws = 665.148
fill_ratio = 5
modifier_cm = 105
Predicted value: 6.4522
Surface optimum (via L-BFGS-B, linear model):
key_power_ws = 100
fill_ratio = 8
modifier_cm = 150
Predicted value: 4.6136
Model quality: Weak fit — consider adding center points or using a different design.
Factor importance:
1. modifier_cm (effect: 3.4, contribution: 53.2%)
2. key_power_ws (effect: 2.1, contribution: 32.3%)
3. fill_ratio (effect: 0.9, contribution: 14.5%)