Hacker News new | past | comments | ask | show | jobs | submit login
3D engine implemented in DNA code (github.com/pallada-92)
178 points by pallada92 5 months ago | hide | past | favorite | 26 comments

Jesus fuck is that a raymarcher implemented in dna?! Super impressive.

For the naysayers: they've implemented a raytracer in chemical reactions that are executed by dna. Very cool conceptual piece. See linked images, eg (sorry for pasting this horrible url)


(Edit nevermind that, check the link posted by dkural for some more details)

I don't get it. What do they mean by "3D engine implemented in DNA code"?

> Synthesize the oligonucleotides from the cube3d.dna file.

OK, so you get a long list of oligonucleotides ordered and shipped. Sounds prohibitively expensive, I guess this is a thought experiment or simulation exercise?

> Arrange the test tubes as shown in the diagram below.

OK, Get a microplate with 384 wells (== test tubes).

> Don't forget to provide the initial concentrations according to the table below.

Dump an oligonucleotide solution into each well? According to what table? There is no "table below". Which oligonucleotide in which well?

> Use a pipette to encode the position (row and column) of each tube to start the computation.

A pipette is used to dispense fluid. How does a pipette "encode position"?? Start what computation?

Is this a joke for biology PHD's?

Yes, this is more like a thought experiment and it will require lots of efforts and money to realize it smoothly in a wet lab.

However, it is far more realizable than some other DNA implementations described in papers.

The idea to publish DNA code on GitHub with CI, tests, linters, badges etc. is obviously a form of joke, but the project itself was done like a serious applied maths research.

I love that you do actual research in ObservableHQ!

Awesome visualisations and super interesting work! Looking forward to more :D

>OK, Get a microplate with 384 wells (== test tubes).

Why 384? You could get any amount you want, you'd just have to modify the coefficients for row and column accordingly (linear increase with decrease of number per axis).

Imagine if you'd skip every other row and column, the image would still be the same, just lower resolution.

> According to what table? There is no "table below".

CTRL-F environment variables. Click on that.

>A pipette is used to dispense fluid. How does a pipette "encode position"?? Start what computation?


The concentrations are determined by row and column, thus encode position.

384 well plates (16x24) are one of the “standard” sizes and the densest that a typical lab is likely to have on-hand. The next size up/down (fewer, bigger wells) is probably 96 wells in an 8x12 grid.

Someone should price this out on transcript aka https://strateos.com/ cloud lab...

There was a lot of interest in this field in the late '90s over fears of Moore's Law eventually hitting a brick wall


> A pipette is used to dispense fluid. How does a pipette "encode position"??

The illustration shows this relatively clearly: at row N column M, you put N drops of solution A and M drops of solution B.

> A pipette is used to dispense fluid. How does a pipette "encode position"?? Start what computation?

This is shown in the picture; you put X drops of one fluid and Y drops of a different fluid, where (X, Y) is the position of a given test tube.

This is totally indecipherable to someone who doesn't know the first thing about DNA. However I have some questions:

1) Is DNA "computation" turing-complete?

2) Can DNA make the basic digital logic gates, AND, NOT, NOR, etc.?

If neither of those are true, then this is an incredibly silly article and I'm really impressed.

1) The answer is both yes and no. Any particular digital circuit can be implemented, but not universal Turing machine, simply because there is no way to deal with arrays.

There is mind-blowing paper, that gives exhaustive anwser to this question: https://hal.inria.fr/hal-01519828/document

This paper is about chemical reaction networks, but in 2010 it was shown, that any chemical reaction network is realizable in DNA: https://www.pnas.org/content/pnas/107/12/5393.full.pdf

2) Yes, it was figured out in 2006, how to do logic gates in DNA: https://science.sciencemag.org/content/314/5805/1585

> simply because there is no way to deal with arrays.

I wouldn't be so quick to make that call. That we don't know how to do it does not mean it can't be done and there is some weak evidence (innate knowledge) that nature has indeed found a way to do this, just that we don't understand it.

This is exactly the feeling I got when reading (Adelman's?) paper on finding Euler paths in graphs using DNA.

I still feel this way although after a lot of googling it's a little better, I wish I had a good book or other resource on it.

Reading a machine translated version of the Russian article linked from GitHub (that seems far more complete) the author mentions RNA can behave like NOR gates, so all other gates must be possible as well

yes, DNA is turing complete. all of the basic circuits can be implemented.Unfortunately, practically speaking it's hard to scale these up to be "useful" (competitive with modern CPUs or hard drives).

I see you also made a 3d engine in SQL too. Absolute madlad. https://observablehq.com/@pallada-92/sql-3d-engine


Waiting for Doom on DNA.

Reminds me of CRN++, the molecular programming language. https://arxiv.org/abs/1809.07430

Yes, I've made CRN++ version as well (in this pull request: https://github.com/marko-vasic/crnPlusPlus/pull/1), but it required much more reactions and was less stable. So I decided to make it from scratch by using different approach.

No Doom... going back to sleep

This is a lot of fluff for making a static picture from DNA fluorescence. There is nothing being rendered here in the tubes, it's just adding varying amounts of DNA to tubes arranged in a grid.

That's not how this works. The computation is done in tubes via chemical reactions. The inputs (column and row) are specified by providing a variable concentration of two input solutions to the same base solution which encodes the ray marching algorithm. The scene is static, but you can theoretically sample it at arbitrary points and resolutions by varying the inputs.

Isn't this how fragment shaders work? These also run computation per pixel and here one pixel corresponds to one tube.

Each tube renders/computes a "pixel". The concentrations are not proportional to brightness, but instead linearly correspond to x / y position of the pipettes.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact