Fragment Shader Solution
If we multiply the normalized polar angle by some number representing the number of strips and take its modulo with 1, it will give us a number of sub-normalized polar angle spaces.
If I get the fragment that is less than some scalar ranging between zero and one representing the thickness, we will get sharp strips.
If I get the fragment that is less that some value representing one minus center hole radius and the fragments that is larger than some value representing one minus outer hole radius. And take both values and add them to the strips we get sharp hollow strips.
To better understand the previous step, notice that the addition of both values gives a mask as follows:
Now, notice that the final result is deformed somehow, this deformation is resulted from rotating the space such that the amount of rotation of each fragment is proportional to its distance from the center. The equation of rotation is as follows:
x^\prime &= x\cos \theta -y\sin \theta \\
y^\prime &= x\sin \theta +y\cos \theta
Where $\theta$ is the amount of rotation which is proportional to the distance to the center. So, by rotating the space using the previous equations, we get:
Notice, that by rotating the space, I mean the space used to compute the strips. So, from all of this, we get the shader that you were hopping to get:
Animation Nodes Solution
If you want the output shape as a mesh, then Animation Nodes can be used. The circle node can be used to easily make sharp strips, this can be done using such a simple node tree:
Same as before, we should rotate the vertices of the mesh such that the rotation factor is proportional to the distance to the center of the space. There are multiple ways to do this in Animation Nodes, one way is to use matrices just like the code above uses, another is to use the equations we used above, a third is to use the high level nodes in AN like falloffs and such. In this answer, I shall I use matrices.
Simply compose a matrix composed of the mesh vertices and multiply it by a z-rotation matrix its value is proportional to the distance to the center. Then extract the new vertices locations and compose a mesh from them. Also, make sure to increase the amount of inner loops in the circle node, ensuring there is enough geometry to create the desired effect.
This gives the final result:
By duplicating the mesh and mirroring it, we get the pattern you are after. Same goes for the fragment solution.