Hi all, I wanted to show some snippets of a project I'm working on. Something I'm calling GuitarNodes, a Geometry Nodes setup for making a procedurally customizable guitar that's easy to animate in Blender.
Here's a brief showcase of the features I've put into it:
Modular Parts
With Menu Switch nodes, it's easy to have swappable parts for the guitar. I've only (crudely) modeled one set at the time, but it's easy to see how a user could keep individual parts in separate collections to switch through. I also plan to make a second (crude) set to alternate between
Body
- Simply choose what body mesh you want
- Can be translated and rotated with gizmos
Headstock
- Choose desired headstock
- Origin for object is at the nut so that it attaches directly to fretboard
Tuning Pegs
- Note that there is a difference between L and R pegs
- Follows an adjustable guide mesh to stick to headstock
- Guide mesh can have individual rows of points(pegs) spaced apart more/less in X direction with gizmos
- Can switch between a guide mesh and curve, where the curve is for in-line pegs
- I don't have the line nodes done yet but it'll behave similarly
- String ends can be adjusted in normal Z direction to match custom peg height
- Can switch between a guide mesh and curve, where the curve is for in-line pegs
- Guide mesh can have individual rows of points(pegs) spaced apart more/less in X direction with gizmos
Output Jack
- Can be rotated, follows a guide empty and faces the normal of the guitar body
- Could also be modular if that's a detail you want to have
Tone Knobs
- Follows a guide curve that resamples to fit number of knobs
- You can edit this curve shape in order to arrange the knobs to your liking
- Will also be modular, such that you can change all of the knobs
Bridge
- Also modular
- Bridge can be moved in Y direction across the body with gizmo
- String ends can be adjusted in Z direction to match custom bridge height with gizmo
Saddle
- Automatically connects strings to bridge
- Also modular
- Can be rotated with gizmo
Neck and Fretboard
- Uses profile curves at nut, 12th fret, and end of fretboard
- Adjustable fret count
- Frets are spaced formulaically
- Minimal UI
- Shows measurement of string scale and the fretboard
Strings
- Adjustable count
- Adjustable gauges
- Tuning-based frequency oscillation in X direction (menu switch)
- Flip string order for left/right handed
- Adjustable oscillation intensity for varied strumming
- Adjustable fretted note values per string
- As the fretted note gets higher, the center of string oscillation moves accordingly
- As the fretted note gets higher, the oscillation frequency increases accordingly
Next plans (v0.8ish - 1.0):
- Adding Z-dimension to oscillation for more realism
- Add per-fret string translation that slightly increases string frequency for bending
- Custom guitar body, drawn with grease pencil (shoutout to Joey C for the inspiration!)
- I need help getting the points which the Tone Knobs instance at: they currently do not rotate to point the Z in the normal direction of the body. Instead, they all seem to match the first point's Z direction only. I want each point to recognize the normal of the nearest faces it's stuck to
- Adding a moveable pickguard whose Z-axis points in the body's normal direction
- Probably going to use a guide empty
- Might also implement custom designs with grease pencil
- Adjustable Z-direction with gizmo
- Player UI
- Shows chord chart for finger placements based on the current lowest fretted note
- Outlier high fretted notes will be shown next to the chart
- Shows chord chart for finger placements based on the current lowest fretted note
Further out plans
- Simulation nodes for strings, so that you can have oscillation decay over time
- Simulation nodes that interact with a plectrum object, so they can be literally strummed (probably gonna need a bit of help, too!)
- Better procedural materials
- Is it possible to use a For Each Element zone to change string material based on its position/diameter (i.e. thicker strings are wound)
- How much of this requires knowledge of handling UVs through geo nodes?
- Simulation nodes for painting custom materials on guitar (or just a good setup for other users to vertex paint it)
- Possible driver UI that changes a lot of these values, so that you don't have to go into the nodes to change things
- Want to implement a tablature-style tracker
- Automatically keys the string fret values to match the song's rhythm, accounting for framerate
- Implement a whammy bar that affects strings
- Any other feedback that I like enough to implement myself