Home
Have you ever heard some old-timer say "back in my days we punched holes in cards to write programs" ?
Insert the obligatory "old_man_yells_at_IDE.png" here.
I certainly did and this sent me down a rabbit hole of "why the hell did people do this?!"
TL;DR Jacquard looms are awesome and were the first machines that people wrote shaders on by punching holes in paper.
To better understand these clunky pieces of steel I wrote a simulator in rust.
You can check it out here
Ok now what are Jacquard looms ? To answer that question we need to do a primer on looms first.
A loom is basically just a construction which holds multiple threads that are then to be woven together to create a fabric. And if one is feeling fancy to do the weaving in a certain order to create nice looking pattern.
To do that you could just put two parallel rows of nails in a piece of wood attach some threads vertically between them like in a harp (lets call them warp threads)
and take a different colored thread and run that horizontally between the other threads (lets call this one weft thread).
First weave: color orange
Second weave: color green
Rest of the row alternating in color
Depending on if you throw the weft above the warp threads or below them you either see the weft thread color or the warp color in the resulting fabric.
In the example above its from left to right alternating between green and orange.
Voila you are now weaving manually.
Manual weaving is fine but you have to fiddle the weft thread around and decide if it should go above or below the warp, this can get quite tedious.
So how about we introduce a thing that can raise each warp thread for us so we can make our lives a bit easier.
Lets take a piece of wood the width of our loom and cut a notch in it evenly spaced out for each of our warp threads and call it a heddle.
Now we wiggle the heddle in between all the warp threads on our board and put the ones we want lifted above the heddle in the notch and the ones we don't want lifted stay below the heddle.
Top view
If you look at it from the side it creates a nice triangle the shed where we can just pass our weft thru.
Side view
But we still have to manually get our weft in between all the warp threads which takes time and is error prone.
As the theme dictates... lets add another piece of wood called the shuttle! On this piece of wood we wind our weft so that we can then use it to easily pass the wound up weft in the newly created triangle.
Shuttle with weft
Voila you are still weaving manually but with a bit more efficiency.
As you can see this is a bit more practical but to create multiple patterns in one fabric you would either need to put each warp on and of the heddle for each row or you would need multiple heddles.
Both ways have been used and can fulfill a certain need for simple patterns.
If you want to see a loom with manually worked heddles in detail there is an excellent video from Jette Wandermeiden on youtube.
But we want complete freedom to render whatever pattern we want.
Lets mark down which manual steps we would need to automate:
How do we take the next step and get rid of the manual setting of warp and weft threads on each row ?
Imagine you have a loom as wide as a piano and you need to get the shuttle with the weft across all warp threads. If you wanted to change the pattern you would need to rethread all warp threads and put them on or off the heddle.
This would take ages and is cumbersome so how about we split the heddle into multiple pieces that can each act as a "one heddle per warp" mechanism.
Instead of forcing each warp thread on or off the heddle we can take a long piece of wire and bend it so that it has a loop in the middle thru which we guide the warp thread.
Hook with warp hole (hehe) I mean loop
Now we are able to manipulate the warp thread but we need to somehow attach it back to the heddle.
To keep things simple we can just use little hook on top.
Shuttle with weft
Once the heedle bar moves all hooks are moving with it.
heddle lifts -> catches hook -> hook lifts warp thread
Now we could raise each thread on their own but they are constantly attached to the hook...
To stop the needle and with it the warp thread from moving with the heddle we need to push it of the heddle.
So lets introduce another piece of wire which has a loop to wrap around the hook.
same principle as the hook just horizontal
Now we can move the needle back and the hook gets bend and thus it wont get lifted by the heddle.
Needle manipulating the hook
This moves the hook off...
or on the heddle.
When the heddle is raised and the hook is pushed back by the needle it won't be catched and thus not get lifted. If the needle does not push the hook back the hook will be catched and get lifted.
Two states... so we got two states on and off or 0, 1 you can guess where this leads.
But once the needle is pushed back how is it supposed to get back so that the hook will be catched by the heddle again ?
Lets introduce even more bent wire!!! This time in the form of a spring!
First lets bend our needle at the end so that it forms an elongated loop and a small tight pin like end that we can put a spring on.
needle with pin like loop
Ok now we can put a spring on the end of our needle to push it back out after it has been pushed in.
But a spring needs to push against something so lets put a piece of wood at the back with a conveniently placed hole for the needle end to go thru.
board to push against
The needle is somewhat floating in the air so lets add another board in front of the needle same as we did for the spring.
Needle with board
Nothing stops our spring from expanding and just pushing the needle out of the spring board.
And thats the reason we made a loop at the end of the needle.
pin acts as a needle movement limiter
Once we put a pin thru the loop the needle will be limited how far it can move back and forth. And will also be stopped from being pushed out by the spring.
Since the pin needs to be held on top somehow we can add another piece of wood and call it a springbox. (Note: I'll exclude it from the other drawings just to keep things clearer)
springbox
Now we got a full needle assembly which allows the needle to go back and forth. Yay!
full needle assembly
Lets bring the hook back into the picture:
Needle with board
With this assembly we can now check of the two first points on our checklist.
for the other two we'll need to introduce another piece...
Remember the needles need to be pushed in to lower the warp. We could to this by hand for each needle, given we have enough fingers but this is where the punchcard comes in ha.
Imagine a piece of cardboard which we press against the needleboard and depending on if there is a hole punched into the card the needles get push inward or stay where they are.
Punchard in front of the needle
Lets say we have a loom with 8 warp threads to keep things somewhat simple we will go with a card layout of one row and 8 holes. but for learning purposes we go with 4 columns and 2 rows.
All we need is a way to index which hole goes to which needle. Since we are doing things our way we can just come up with an indexing order of our own.
Lets use a column first layout like this:
Top to bottom first, then left to right
Mapping of holes to warp threads
Ok we got holes now but what to they mean?
Remember we got a green warp and yellow weft. So if the warp is not raised we get an all yellow row in our fabric and if any warp is raised the according weave ( or pixel haha ) will result in the green thread being on top.
The warp is getting raised when the needle is NOT pushed in aka there is a hole in the punchcard and the hook stays on the heddle.
Here is a handy reminder flowchart
Lets apply this logic and make an alternating green yellow pattern.
With these "instructions" on the punchard we can tell every odd warp to stay down and every even warp to get lifted.
But all we did is talk about one needle&hook assembly how do we get 8 ?
The needle and hook assembly is carefully designed to be a simply copy&pasteable on the horizontal axis.
Single mechanism
So nothing keeps us from just adding more assemblies in one row.
Here we have a single row of 4 needle and hook pairs which can "read" the top row of the punchcard.
Top row
To be able to read the other row of the punchcard we need to add the same mechanism but with a little tweak. Since two stacked needle and hook pairs would collide and the needle would try to work the same hook.
But there is a simple solution. We adjust the position of loop on the needle a bit back like this and move the hooks back onto another heddle bar.
This allows us to have a complete separate row in the back.
Now lets put this all in one big frame
and check off our last two points.
Lets recap what we have put together step by step.
We've got:
Thats a hole lot of pieces.
But in the end we are now able to use them to create any pattern we want on a fabric.
I hope you learned something today and many thanks to