I am using Blender 3.6.0. Apologies if my question wasn't clear. I am using Geometry Nodes to model and animate DNA and have figured out a great node setup thanks to Brady Johnston's wonderful tutorials for procedurally modeling DNA. This essentially involves procedurally generating two helical curves around a parent curve. I will include an image of that node setup.

Procedurally generated DNA with properly aligned instances using Geometry Nodes using a single curve. Node tree for the DNA depicted above.

Now, I want to be able to unwind and unzip DNA in two directions. I have achieved this in the past by using stacked Curve Deform modifiers, allowing me to create a transcription bubble that opens in two directions. I have been able to animate this before on one axis by creating two helical curves (the curves that will be the DNA strands) that I deform using three Curve modifiers: two twisted curves that "pull" the DNA open, and one that deforms the DNA based on a "template: curve. When I animate the pulling curves moving away from each other, the DNA unwinds from the middle, opening in two directions. I was once able to use this method to create an animation I was satisfied with. I have not figured out a way to replicate this effect in geometry nodes because doing so usually involves only one curve meaning that I can only move the DNA in one direction.

My animation test: https://www.youtube.com/watch?v=EUgEo50dtY0

This method seemingly worked in my video because the helix was on a single axis. However, I run into trouble if I try to do this with a curve that isn't a straight line - the instances do not align as desired. If I use the same node tree I used in the first image, I can align the instances to the tangent of the deformed curves, but I cannot align the instances to rotate inward along the "template" curve like that of the first image. I cannot figure out the combination of vector, normal, position, and/or curve tangent nodes needed to get it to work and I cannot predict the behavior of the instances or why they aren't aligning like I want to. I will include an image of the Curve Modifier stack I used.

DNA with improperly aligned instances using Geometry Nodes and a Curve Modifier stack. This setup allows me to unwind DNA in two directions but I cannot align the instances. I can align the instances to the tangent of the curve and that's it. Curve Modifier stack used in the above image.

Is there any way I can achieve the effect depicted in my video with non-linear curves either using Curve Modifiers + Geometry Nodes or just Geometry Nodes alone? I would like to be able to have fully controllable DNA that I can unwind and unzipe using randomly-shaped curves to get a natural, dynamic look in animations. It would also be great if I could add "noise" or "randomness" to the single-stranded regions of the unwound DNA so I can animate DNA strands being threaded through enzymes as with DNA replication, transcription, etc. I will include the blend files of the correctly aligned DNA and the DNA that is giving me problems. My apologies if my question or the format of my post is unclear or messy, it's my first time and I'll do my best to clarify anything. Thank you!

DNA with properly aligned instances using just Geometry Nodes and a single curve

"Wrong" DNA using Curve Modifier Stack + Geometry Nodes


1 Answer 1


enter image description here

The geometry node settings:

enter image description here

Make two helix around the initial curve, with opposite default angles (-pi / pi).

Join them and set the arrows as instances, oriented to their tangent.

The helix part:

enter image description here

The curves are resampled at some scale.

Then we use normal to go to the helix diameter and rotate it around its tangent at some speed, depending on the curve length.

The unwind part is defined by a position and some size around it. In this interval the angle stay the same.

On the other parts, the angle is relative to the curve length.

(Blender 4.0)

Update, in order to make the arrow both align to the curve and point inward to the original curve:

It uses a stored attribute to remember the direction to the original curve, then align a second vector to this direction.

enter image description here

  • $\begingroup$ Hi lemon. Thank you for your response! What a great approach! I am impressed by how your math node setup - the rotation between the unwound portion and the wound portions are seamless! The instances are now tangent aligned. Is there a way to align the instances such that the Y or Z axis face inwards - like in the first image in my post? I would want one of the axes to form the inner "rungs." In my first image, the Z axes are connected inwards and the X axes are also connected to each other but perpendicular to the Z axes. Thank you so much for your help! $\endgroup$
    – Ivan Perez
    Commented Jan 16 at 10:19
  • $\begingroup$ @IvanPerez, I've updated the end of the answer. Does that respond about the axis aspects you ask just above? $\endgroup$
    – lemon
    Commented Jan 16 at 17:11
  • $\begingroup$ Or do you mean that for instance Y of one helix points to the other helix? $\endgroup$
    – lemon
    Commented Jan 16 at 17:39
  • 1
    $\begingroup$ something like that, so? i.sstatic.net/t6FT0.png $\endgroup$
    – lemon
    Commented Jan 17 at 10:07
  • 1
    $\begingroup$ Thank you very much! Marked as answer :) $\endgroup$
    – Ivan Perez
    Commented Jan 19 at 18:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .