Readme work (still missing some links and copy) to test table rendering of stats.

This commit is contained in:
mmcwilliams 2020-08-19 15:09:17 -04:00
parent 895b7596ab
commit b89205614e
1 changed files with 110 additions and 39 deletions

149
README.md
View File

@ -1,5 +1,8 @@
# GNAL
Free and open source processing system for 16mm and Super8 film
IMAGE_PLACEHOLDER
Want to buy one?
@ -11,7 +14,7 @@ Want to buy one?
GNAL stands for Gnal's Not A Lomo because it isn't. While inspired by a certain motion picture development tank the goal of this project is to create an open source, modification-friendly processing system for small format movie film with the added constraint that it be 3D printable or otherwise able to be fabricated on a small scale. All source code and STL files for printing will be made available in this repository.
GNAL is built using [OpenSCAD](https://www.openscad.org/). OpenSCAD is a free, open source CAD program that uses scripts to generate objects. Building this project in OpenSCAD serves two purposes: it uses only free and open source software to create the GNAL processing spirals and it future-proofs the design by preserving its dimensions in human readable text format. Even if OpenSCAD were to disappear tomorrow (sincerely hope it doesn't) it would still be possible to recreate the GNAL models in another CAD program just by reading the code and reproducing the measurements.
GNAL is built using [OpenSCAD](https://www.openscad.org/). OpenSCAD is a free, open source CAD program that uses scripts to generate objects. Building this project in OpenSCAD serves two purposes: it uses only free and open source software to create the GNAL processing spirals and it future-proofs the design by preserving its dimensions in human-readable text format. Even if OpenSCAD were to disappear tomorrow (sincerely hope it doesn't) it would still be possible to recreate the GNAL models in another CAD program just by reading the code and reproducing the measurements.
## Where's the tank?
@ -19,23 +22,63 @@ Good question!
----
## V2 STL Files For 3D Printing
## V3 STL Files
**50ft/15m**
* [Spiral]()
* [Top]()
* [Top Spacer]()
* [Bottom Spiral Insert S8]()
* [Bottom Spiral Insert 16mm]()
* [Bottom Spacer 16mm]()
IMAGE_PLACEHOLDER
[All 50ft v3 STL files in a .zip]()
* [Spiral](stl/50ft_v3/gnal_50ft_spiral.stl)
* [Top](stl/50ft_v3/gnal_50ft_top.stl)
* [Top Spacer](stl/50ft_v3/gnal_50ft_spacer.stl)
* [Bottom Spiral Insert S8](stl/50ft_v3/gnal_50ft_insert_s8.stl)
* [Bottom Spiral Insert 16mm]((stl/50ft_v3/gnal_50ft_insert_16.stl)
* [Bottom Spacer 16mm](stl/50ft_v3/gnal_50ft_spacer_16.stl)
* [Spindle Top](stl/50ft_v3/gnal_50ft_spindle_top.stl)
* [Spindle Bottom](stl/50ft_v3/gnal_50ft_spindle_bottom.stl)
**100ft/30m**
* [Spiral]()
* [Top]()
* [Top Spacer]()
* [Bottom Spiral Insert S8]()
IMAGE_PLACEHOLDER
[All 100ft v3 STL files in a .zip]()
* [Spiral](stl/100ft_v3/gnal_100ft_spiral.stl)
* [Top](stl/100ft_v3/gnal_100ft_top.stl)
* [Top Spacer](stl/100ft_v3/gnal_100ft_spacer.stl)
* [Bottom Spiral Insert S8](stl/100ft_v3/gnal_100ft_insert_s8.stl)
* [Bottom Spiral Insert 16mm](stl/100ft_v3/gnal_100ft_insert_16.stl)
* [Bottom Spacer 16mm](stl/100ft_v3/gnal_100ft_spiral.stl)
* [Spindle Top](stl/100ft_v3/gnal_100ft_spindle_top.stl)
* [Spindle Bottom](stl/100ft_v3/gnal_100ft_spindle_bottom.stl)
## V2 STL Files
**50ft/15m**
IMAGE_PLACEHOLDER
[All 50ft v2 STL files in a .zip]()
* [Spiral](stl/50ft_v2/gnal_50ft_spiral.stl)
* [Top](stl/50ft_v2/gnal_50ft_top.stl)
* [Top Spacer](stl/50ft_v2/gnal_50ft_spacer.stl)
* [Bottom Spiral Insert S8](stl/50ft_v2/gnal_50ft_insert_s8.stl)
* [Bottom Spiral Insert 16mm](stl/50ft_v2/gnal_50ft_insert_16.stl)
* [Bottom Spacer 16mm](stl/50ft_v2/gnal_50ft_spacer_16.stl)
**100ft/30m**
IMAGE_PLACEHOLDER
[All 100ft v2 STL files in a .zip]()
* [Spiral](stl/100ft_v2/gnal_100ft_spiral.stl)
* [Top](stl/100ft_v2/gnal_100ft_top.stl)
* [Top Spacer](stl/100ft_v2/gnal_100ft_spacer.stl)
* [Bottom Spiral Insert S8](stl/100ft_v2/gnal_100ft_spiral.stl)
* [Bottom Spiral Insert 16mm]()
* [Bottom Spacer 16mm]()
@ -44,17 +87,24 @@ Good question!
**50ft/15m**
* [Bottom Spiral](dist/50ft_v1/gnal_50ft_bottom_spiral.stl)
* [Top Spiral](dist/50ft_v1/gnal_50ft_top_spiral.stl)
* [Top](dist/50ft_v1/gnal_50ft_top.stl)
* [Spacer](dist/50ft_v1/gnal_50ft_spacer.stl)
IMAGE_PLACEHOLDER
[All 50ft v1 STL files in a .zip]()
* [Bottom Spiral](stl/50ft_v1/gnal_50ft_bottom_spiral.stl)
* [Top Spiral](stl/50ft_v1/gnal_50ft_top_spiral.stl)
* [Top](stl/50ft_v1/gnal_50ft_top.stl)
* [Spacer](stl/50ft_v1/gnal_50ft_spacer.stl)
**100ft/30m**
* [Bottom Spiral](dist/100ft_v1/gnal_100ft_bottom_spiral.stl)
* [Top Spiral](dist/100ft_v1/gnal_100ft_top_spiral.stl)
* [Top](dist/100ft_v1/gnal_100ft_top.stl)
* [Spacer](dist/100ft_v1/gnal_100ft_spacer.stl)
[All 100ft v1 STL files in a .zip]()
* [Bottom Spiral](stl/100ft_v1/gnal_100ft_bottom_spiral.stl)
* [Top Spiral](stl/100ft_v1/gnal_100ft_top_spiral.stl)
* [Top](stl/100ft_v1/gnal_100ft_top.stl)
* [Spacer](stl/100ft_v1/gnal_100ft_spacer.stl)
-----
@ -62,34 +112,34 @@ Good question!
The diameter of these spiral reels limit the number of printers that are capable of printing this design. The 50ft/15m model is 225.71mm (8.88in) wide at the base and the 100ft/30m model is 299mm (11.77in) wide.
**50ft/15m Capable**
**50ft/15m Capable Printers**
[aniwaa.com Search: Printers with print bed > 225mm x 225mm](https://www.aniwaa.com/comparison/3d-printers/?sort=price&order=asc&filter_search&filter_price_minimum&filter_price_maximum&filter_build_size_width=225&filter_build_size_height=225&filter_build_size_depth)
* [aniwaa.com Search: Printers with print bed > 225mm x 225mm](https://www.aniwaa.com/comparison/3d-printers/?sort=price&order=asc&filter_search&filter_price_minimum&filter_price_maximum&filter_build_size_width=225&filter_build_size_height=225&filter_build_size_depth)
**100ft/30m Capable**
**100ft/30m Capable Printers**
* [Creality Ender 5 Plus](https://www.creality3d.shop/collections/3d-printer/products/creality3d-ender-5-plus-3d-printer) ***Tested***
* []()
* [aniwaa.com Search: Printers with print bed > 300mm x 300mm](https://www.aniwaa.com/comparison/3d-printers/?filter_search&filter_price_minimum&filter_price_maximum&filter_build_size_width=300&filter_build_size_height=300&filter_build_size_depth)
[aniwaa.com Search: Printers with print bed > 300mm x 300mm](https://www.aniwaa.com/comparison/3d-printers/?filter_search&filter_price_minimum&filter_price_maximum&filter_build_size_width=300&filter_build_size_height=300&filter_build_size_depth)
There are people printing spirals in sections on smaller printers, but that is not a recommended use of these files as it requires extreme precision to reconstruct the parts into a reel that will load smoothly. Another thing to consider is the longevity of the bond made by the adhesive you choose. Don't let that stop you, though. A multi-part printed reel is just not a priority for *this* particular project.
There are people printing spirals in sections on smaller printers, but that is not a *recommended* use of these files as it requires extreme precision to reconstruct the parts into a reel that will load smoothly. Another thing to consider is the longevity of the bond made by the adhesive you choose. Don't let that stop you, though. A multi-part printed reel is just not a priority for *this* particular project. An enterprising spirit might notice the `gnal_50ft_spiral_quarter()` and `gnal_100ft_spiral_quarter()` modules in the v3 OpenSCAD script and begin to wonder what is possible.
-----
## Material
PETG is the recommended plastic for printing the GNAL. Since this is a piece of darkroom equipment its exposure to water and photochemistry is inevitable and should be considered first. PETG (Polyethylene terephthalate glycol) is a copolymer of PET, which is a plastic that's typically encountered in plastic bottles and food containers. By prioritizing the material
PETG is the recommended plastic for printing the GNAL. Since this is a piece of darkroom processing equipment its exposure to water and photochemistry is inevitable and should be considered primarily. PETG (Polyethylene terephthalate glycol) is a copolymer of PET, which is a plastic that's typically encountered in plastic bottles and food containers. This is not a scientific evalution and may stand to be corrected.
ABS is a viable option but has more tendency to warp on larger prints without proper temperature control around the print bed. Since this model needs to be consistently flat across the bottom of the reel,
PLA is not recommended but this doesn't mean you can't get an acceptable results with it. The lack of endorsement comes from mostly anecdotal experience witnessing the wear and tear of water on PLA. Biodegradable and porous, PLA prints will wear down in the weakest parts first and on this model that would be the spiral. If you do not need your processing equipment to last a long time
PLA is not recommended but this doesn't mean you can't get an acceptable results with it. The lack of endorsement comes from mostly anecdotal experience witnessing the wear and tear of water on PLA. Biodegradable and porous, PLA prints will wear down in the weakest parts first and on this model that would be the spiral. If you do not need your processing equipment to last a long time, you may find it acceptable. PLA stands for polylactic acid
-----
## Development
This project can be edited with only OpenSCAD and the source files in the `v1` or `v2` directories which make reference to files from `libraries`. If you wish to run the development scripts you should install the following dependencies.
This project can be edited with only OpenSCAD and the source files in the `*_v1`, `*_v2` or `*_v3` directories which make reference to files from `libraries`. If you wish to run the development scripts you should install the following dependencies.
With just OpenSCAD, you can use scripts such as `50ft_v3/gnal_50ft.scad` and export the different modules in [OFF](https://en.wikipedia.org/wiki/OFF_(file_format)), [AMF](https://en.wikipedia.org/wiki/Additive_manufacturing_file_format), [3MF](https://en.wikipedia.org/wiki/3D_Manufacturing_Format), [DXF](https://en.wikipedia.org/wiki/AutoCAD_DXF) or SVG (drawing) format. The CSG models can be [imported](https://wiki.freecadweb.org/OpenSCAD_CSG) into [FreeCAD](https://www.freecadweb.org/) and DXF models should be readable by AutoCAD and [QCAD](https://www.qcad.org/en/).
### Dependencies
@ -99,9 +149,9 @@ This project can be edited with only OpenSCAD and the source files in the `v1` o
### Build Scripts
Running either of the two scripts, either `scripts/v1.sh` or `scripts/v2.sh`, will start an OpenSCAD build process of all components and will log stats about the resulting files and render times to `notes/v1.csv` or `notes/v2.csv`.
Running any of the build scripts scripts--`scripts/v1.sh`, `scripts/v2.sh` or `scripts/v3.sh`--will start an OpenSCAD build process of all components and will log stats about the resulting files and render times to `notes/v1.csv`, `notes/v2.csv` or `notes/v3.csv`.
Keep in mind that V1 compile times are extremely long and all scripts will use an entire CPU core at 100% utilization while rendering. It's best to run these scripts in the background on a powerful machine or better yet, not at all. See the `dist` folder for pre-compiled STL files for 3D printing.
Keep in mind that V1 and V2 compile times are extremely long and all scripts will use an entire CPU core at 100% utilization while rendering. It's best to run these scripts in the background on a powerful machine or better yet, not at all. See the `stl` folder for pre-compiled STL files for 3D printing or the [releases page](/releases/latest) for .zip archives of all versions.
These scripts will render STL files, PNG images of the files and then
@ -112,16 +162,16 @@ The `scripts/benchmark.sh` script will run various tests on the different approa
-----
## Version notes
<a name="v1"></a>
### V1
Intended to be mostly compatible with existing processing spirals with some caveats. The spacer that is typically threaded has been replaced by a friction fit spacer so they are not interchangeable.
Intended to be mostly compatible with existing processing spirals with some caveats. A spacer that is typically threaded has been replaced by a friction fit part so they are not interchangeable.
This version is designed to fit in existing tanks and use the same spindle screws.
In the process of building this first version several approaches were evaluated to generate the spiral shape. The first is what's best described as a brute force approach laying out an excessive amount of rectangular facets and unioning them together in such a way that the result would be a single continuous spiral. This took hours to days to render depending on the machine used.
Besides the exhausting render times this approach bugged me for one reason: all facets of the spiral were the same size, meaning that the small diameter inner parts of the spiral were packing in millions of unnecessary polygons to allow for the large diameter parts of the spiral to be smooth. This didn't sit well. How many CPU hours are being burned by adding detail to a place that doesn't matter. Answer: a lot.
Besides the exhausting render times this approach bugged me for one reason: all facets of the spiral were the same size, meaning that the small diameter inner parts of the spiral were packing in millions of unnecessary polygons to allow for the large diameter parts of the spiral to be smooth. This didn't sit well with me. How many CPU hours are being burned by adding detail to a place that doesn't matter? Answer: a lot.
Finally an external library called [`path_extrude.scad`](https://github.com/gringer/bioinfscripts/blob/master/path_extrude.scad) by [@gringer](https://github.com/gringer) was brought in to handle the complicated spiral extrusion step. A simple function that plots a spiral in Cartesian coordinates is used to draw the path and a 2D triangle is extruded along it by the library. This allowed for the path to be drawn at a consistent "resolution" throughout the entire spiral, so the facets of the outermost and innermost parts were the same or extremely similar.
@ -133,12 +183,26 @@ spiralPath = [ for(t = [0 : $fn + 1]) [((d / 2) + (t * increment)) * cos(t * ang
The experimentation in this version predate this particular git repo and so will not be found in the git history, but you can find the vestigial functions in the `spiral` directory used for benchmarking different approaches.
#### Render Stats
#### Beware
This version of the spiral must be printed with supports. The spirals themselves are suspended over voids and this particular feature is addressed in the later versions.
#### Benchmarks
Rendered using OpenSCAD version 2019.05 on a 2.2 GHz Core i7 (I7-4770HQ) chip running macOS 10.14.
| Model | Size (bytes) | Facets | Volume (mm<sup>3</sup>) | Render Time (sec) |
|-------|--------------|--------|-------------------------|-------------------|
|gnal_50ft_spacer.stl|991452|5736|2888.155029|68|
|gnal_50ft_top.stl|2132181|12624|57936.746094|233|
|gnal_50ft_spiral_top.stl|36509561|214404|120299.773438|12249|
|gnal_50ft_spiral_bottom.stl|36606204|214970|121519.937500|13698|
|gnal_100ft_spacer.stl|991452|5736|2888.149658|74|
|gnal_100ft_top.stl|3302563|19552|102590.546875|477|
|gnal_100ft_spiral_top.stl|92423369|542836|223602.078125|89137|
-----
<a name="v2"></a>
### V2
This version aims to improve printability over the V1 model and reducing render time of the spiral. The biggest change to the physical structure of the design is the removal of overhangs from beneath the spiral film guide.
@ -157,20 +221,27 @@ A secondary benefit of reducing the spiral to a single model was to immediately
Les was right. This reduced the several hours render time to 1-2 hours, which worked for this version. Ideally this will be improved further in future versions. Beyond some explorations into OpenSCAD hacks (rendering each complete rotation of the spiral and stitching all resulting STLs) the next version will incorporate other languages and platforms to find the fastest render time for a GNAL spiral. All previous approaches are being compiled into a suite of tests to benchmark render times.
#### Build Stats
#### Benchmarks
Rendered using OpenSCAD version 2019.05 on a 2.2 GHz Core i7 (I7-4770HQ) chip running macOS 10.14.
-----
<a name="v3"></a>
### V3
The goals of V3 are to **greatly** optimize the spiral generation code for speed and to restore the feature of the V1 spiral which maintains a consistent size of individual facets throughout the spiral even as the diameter changes. This will be considered a stable release.
This version will also contain a 4x reel stacking feature so that all models can be stacked with 3 spiral reels and a top piece. That will give 200ft capacity to the 50ft model and 400ft capacity to the 100ft model.
<a name="benchmarks"></a>
## Benchmarks
In the process of publishing this repository I started questioning claims I was making in this Readme. Throughout the development of this processing reel I've been plagued by long render times.
In the process of publishing this repository I started questioning claims I was making in this readme. Throughout the development of this processing reel I've been plagued by long render times. As a sanity check, I went through my personal development history on this project and produced 7 distinct spiral generation scripts that I ran through a series of tests to benchmark the render performance, total volume generated and number of facets produced. Render time was the primary metric that concerned me, but I considered the other important in comparing these different approaches.
In the `spiral` directory you will find each individual script in a `spiral_#.scad` format. The `scripts/benchmark.sh` script will render spirals at various resolutions and rotation counts and records the results in `notes/benchmark.csv`.
## License