Back to blog.

Game of Life a Webcam and Shadertoy

Cover Image for Game of Life a Webcam and Shadertoy
Soof Golan
Soof Golan

๐Ÿ‘พ Try it Live! ๐Ÿ‘พ

ืžื™ืฆื‘ื™ื ืœื‘ืจื ื™ื ๐Ÿ”ฅ

ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื™ (ื•ืœื ืชื™) ื™ืฉ ื‘ืงืœื•ื’ ืื™ื ืกื•ืคื™ ืฉืœ ืจืขื™ื•ื ื•ืช ืœืžื™ืฆื‘ื™ื ืื– ื—ืฉื‘ื ื• ืœืฉื ืฉื™ื ื•ื™ ืœืœื›ืช ืขืœ ืžืฉื”ื• ืงืœ ืœื”ืฉื’ื”: ืœื”ืจื™ืฅ ืืช ืžืฉื—ืง ื”ื—ื™ื™ื ืฉืœ ืงื•ื ื•ื•ื™ (Conway's Game of Life) .

ืžืฉื—ืง ื”ื—ื™ื™ื - ื”ื—ื•ืงื™ื

ืžืฉื—ืง ื”ื—ื™ื™ื ื”ื•ื ืžืฉื—ืง ืขื ืžืขื˜ ืžืื•ื“ ื—ื•ืงื™ื, ื•ืœื›ืŸ ืงืœ ืœืžืžืฉ ืืช ื”ืœื™ื‘ื” ืฉืœื•:

  • ๐Ÿจ ื›ืœ ืžืฉื‘ืฆืช ืžื•ืงืคืช ื‘-8 ืžืฉื‘ืฆื•ืช, ืœื›ืŸ ืœื›ืœ ืชื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืขื“ 8 ืฉื›ื ื™ื.
  • โฌœโฌ…โฌ› ืื ื”ืชื ื—ื™, ื•ื™ืฉ ืœื• ืฉื›ืŸ ืื—ื“ ืื• ืฉืื™ืŸ ืœื• ืฉื›ื ื™ื ื›ืœืœ, ื”ื•ื ืžืช ืžื‘ื“ื™ื“ื•ืช.
  • โฌœโฌ…โฌ› ืื ื™ืฉ ืœืชื ื™ื•ืชืจ ืžืฉืœื•ืฉื” ืฉื›ื ื™ื, ื”ื•ื ืžืช ืžืฆืคื™ืคื•ืช.
  • โฌ›โฌ…โฌœ ืื ื”ืชื ืžืช, ื•ื™ืฉ ืœื• ื‘ื“ื™ื•ืง ืฉืœื•ืฉื” ืฉื›ื ื™ื, ื”ื•ื ื”ื•ืคืš ืœื”ื™ื•ืช ื—ื™ ("ื ื•ืœื“").
  • โฌœโฌ…โฌœ ืื—ืจืช (ืฉื ื™ ืฉื›ื ื™ื, ืื• ืฉืœื•ืฉื” ืฉื›ื ื™ื ื•ื”ืชื ื—ื™) ืžืฆื‘ื• ืœื ืžืฉืชื ื”.

ื”ืžื™ืžื•ืฉ ื”ืงืœืืกื™ ื”ื•ื ืขื ืงื•ื ื‘ื•ืœื•ืฆื™ื” ืขื ื’ืจืขื™ืŸ (kernel) ื‘ื’ื•ื“ืœ 3X3:

ืงื•ื ื‘ื•ืœื•ืฆื™ื” ืขื ื”ืงืจื ืœ ืกื•ื›ืžืช ืืช ื”ืฉื›ื ื™ื, ื•ืื– ื ื•ืชืจ ืจืง ืœืžืžืฉ ืืช ื”ื—ื•ืงื™ื ืฉืœ ืœื™ื“ื” ื•ื”ืฉืจื“ื•ืช, ื”ืžื•ื•ืช ื–ื• ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื›ืœ ืฉืืจ ื”ืชืื™ื. ืื ื™ ืžืžืฉ ืื”ื‘ืชื™ ืืช ืคืฉื˜ื•ืช ื”ืžื™ืžื•ืฉ ืฉืœ ArrayFire.

ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื•ืช

ื•ืื–, ื›ืžื•ื‘ืŸ ืฉื”ืชื—ืœื ื• ืœืžืจื›ื‘ ืืช ื”ืจืขื™ื•ืŸ, ืจืฆื™ื ื• ืื™ื ื˜ืจืงืื˜ื™ื‘ื™ื•ืช, ื•ื”ืชื—ืœื ื• ืœื—ืฉื•ื‘ ืขืœ ืžืžืฉืง ืขื ื’'ื•ื™ืกื˜ื™ืง ื•ื›ืคืชื•ืจื™ื, ื•ื ื™ืกื™ื ื• ืœื”ื‘ื™ืŸ ืื™ืš ื‘ื›ืœืœ ืคื•ืจืกื™ื ื›ื–ื” ืžืฉื—ืง ื‘ืฉื˜ื—. ื”ื’ื“ืจื ื• stretch goal - ืื ืกื™ื™ืžื ื• ืขื ื”ื›ืคืชื•ืจื™ื, ืขื•ืฉื™ื ืื™ื ื˜ื’ืจืฆื™ื” ืœืžืฆืœืžื”. ื™ืฉื‘ื ื• ื›ืžื” ืฉืขื•ืช ืœืชื›ื ืช ื•ืœื ื”ืฆืœื—ื ื• ืœื”ืชืงื“ื ืœืฉื•ื ืžืงื•ื ืžืฉืžืขื•ืชื™ ื”ืฉืขื” ื”ื™ื™ืชื” 1 ื‘ืœื™ืœื” ื•ื”ื™ื™ื ื• ืงืฆืช ืื‘ื•ื“ื™ื...

ื™ื•ืชืจ ืžื–ืœ ืžืฉื›ืœ

ื‘ืจื’ืข ืฉืœ ืžื–ืœ ืžื•ื—ืœื˜, ื ื–ื›ืจืชื™ ื‘ื›ืœื™ ืžื’ื ื™ื‘ ืฉื ืงืจื Shadertoy. ื‘ืืชืจ ืฉืœื”ื ื ื™ืชืŸ ืœื™ืฆื•ืจ ืฉื™ื™ื“ืจื™ื (ืขื•ื“ ืคืจื˜ื™ื ื‘ื”ืžืฉืš) ืขื ืกื‘ื™ื‘ืช ืคื™ืชื•ื— ืžื™ื ื™ืžืœื™ืช, ื•ืื™ื ื˜ื’ืจืฆื™ื” ืขื ื›ืœ ืงืœื˜ ืฉืชืจืฆื•: ืžืฆืœืžื”, ืžื™ืงืจื•ืคื•ืŸ, ืฉืขื•ืŸ ื•ืขื•ื“. ื”ื™ื™ื ื• ื›ืœ ื›ืš ืชืงื•ืขื™ื ืขื ื”ืžื™ืžื•ืฉ ืฉืœื ื•, ืฉืคืฉื•ื˜ ืืžืจื ื• fuck it, ื•ืฉื‘ืจื ื• ืืช ื”ืจืืฉ ืื™ืš ื›ื•ืชื‘ื™ื ืืช GLSL.

ืื– ืžื” ืœืขื–ืื–ืœ ื–ื” ืฉื™ื™ื“ืจ ? WTF Is A Shader

ื‘ื”ืคืฉื˜ื” ื•ื—ืกืจ ื“ื™ื•ืง ืžืฉื•ื•ืข, ืฉื™ื™ื“ืจ ื“ื• ืžื™ืžื“ื™ ื–ื” ืฉื ืœื—ืชื™ื›ืช ืงื•ื“ ืฉื™ื•ื“ืขืช ืœื—ืฉื‘ ืฆื‘ืข ืฉืœ ืคื™ืงืกืœ. ื”ืฉื™ื™ื“ืจ ืžืงื‘ืœ ื›ืžื” ืื™ื ืคื•ื˜ื™ื, ืงื•ืจื“ื™ื ื˜ื•ืช, ื‘ืืคืจื™ื, ื–ืžืŸ, ื•ืขื•ื“ ื›ืžื” ื“ื‘ืจื™ื, ื•ืžื—ืฉื‘ ืืช ื”ืขืจืš ืฉืœ ืคื™ืงืกืœ ื‘ื•ื“ื“. ืœืžื” ื–ื” ื˜ื•ื‘? ื›ื™ ื‘ืžืงื•ื ืœื›ืชื•ื‘ ืชื•ื›ื ื” ืฉื‘ื” ืื ื—ื ื• ืžื—ืฉื‘ื™ื ืืช ื›ืœ ื”ืคื™ืงืกืœื™ื ืื—ื“ ืื—ืจื™ ื”ืฉื ื™, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืชืช ืœืžืขื‘ื“ ื”ื’ืจืคื™ ืฉืœื ื• ืœื”ืจื™ืฅ ืืช ื”ืฉื™ื™ื“ืจ ืขืœ ืžืœื ืคื™ืงืกืœื™ื ื‘ืžืงื‘ื™ืœ. ื›ืœ ืขื•ื“ ื›ืชื‘ื ื• ืฉื™ื™ื“ืจ ืฉืคื•ื™, ืื™ืŸ ื—ืฉื™ื‘ื•ืช ืœืื™ื–ื” ืคื™ืงืกืœ ืžืขื•ื‘ื“ ืงื•ื“ื, ื•ื–ื” ื ื•ืชืŸ ืœื ื• ื”ืจื‘ื” ื—ื•ืคืฉ, ื•ื™ื™ืชืจื•ื ื•ืช ื‘ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืชื•ื›ื ื” ืฉืœื ื•. ื‘ืขื™ืงืจ, ื‘ืจื’ืข ืฉืžืชืจื’ืœื™ื ืœื›ืชื•ื‘ ืงื•ื“ ืฉื ื•ื’ืข ืจืง ื‘ืคื™ืงืกืœ ื‘ื•ื“ื“ ื›ืœ ืคืขื, ืื ื—ื ื• ื ื•ืชื ื™ื ืœruntime ืœื”ื—ืœื™ื˜ ื‘ืฉื‘ื™ืœื ื• ืื™ืš ืœืขืฉื•ืช ืืช ื”ืฉืืจ ื ื›ื•ืŸ.

"Never bet against the compiler." -- Someone on the Internet

ืื™ืš ืžื—ื‘ืจื™ื ืชืžื•ื ื” ืœืžืฉื—ืง ื”ื—ื™ื™ื

ืืž;ืœืง - ืืœื’ื•ืจื™ืชื ืกืฃ (Threshold) - ื”ื•ืคื›ื™ื ืืช ื”ืชืžื•ื ื” ืœื‘ื™ื ืืจื™ืช. ืื—ืจื™ ืฉื”ื™ื ื‘ื™ื ืืจื™ืช, ื›ืœ ืคื™ืงืกืœ ืžื”ื•ื•ื” ืชื ื—ื™ ืื• ืžืช ื‘ืžืฉื—ืง ื”ื—ื™ื™ื

image thresholding

ืื– ื›ื–ื”, ืจืง ื‘ืฉื™ื™ื“ืจ, ื•ื›ื“ื™ ืœืชืคื•ืก ืงืฆื•ื•ืช ื™ื•ืชืจ ืืคืฉืจ ืœืขืฉื•ืช ืขื™ื‘ื•ื“ ืชืžื•ื ื” ื ื•ืกืฃ ื›ื“ื™ ืœื—ื“ื“

ื ื•, ืื– ืžื” ื ืกื’ืจ ืขื ื–ื”?

ื ื›ื•ืŸ, ื ื›ื•ืŸ, ื”ื™ื” ื›ืืŸ ืื™ืคืฉื”ื• ืžื™ืฆื‘, ืœืงื— ืœื ื• ื‘ืขืจืš ืฉืขื” ืœื›ืชื•ื‘ ื”ื›ืœ, shadertoy ืขืฉื• ืื™ื ื˜ื’ืจืฆื™ื” ืžื“ื”ื™ืžื” ื•ื”ื›ืœ ืขื‘ื“ ื‘ืœื™ ื—ื™ื›ื•ืš. ื‘ืฉื˜ื— ืœืงื—ื ื• ืืช blink64 (ืžื—ืฉื‘ ื”ืฉื˜ื— ืฉืœื™, ืฉืื•ืœื™ ื™ืงื‘ืœ ื›ืืŸ ืคื•ืกื˜ ืžืชื™ืฉื”ื•), ื—ื™ื‘ืจื ื• ืœืžืงืจืŸ ื•ืžืฆืœืžืช ืจืฉืช, ื•ื”ืžื™ืฆื‘ ืจืฅ ื‘ืžืฉืš ื™ื•ืžื™ื™ื ื‘ืืžืฆืข ื”ืžื“ื‘ืจ.

ื”ื™ื” ืžื’ื ื™ื‘ ืžืžืฉ, ืื ืฉื™ื ื ื”ื ื•, ื•ืื ื—ื ื• ืงืฆืช ืคื™ืฉืœื ื• ื•ืœื ืฆื™ืœืžื ื• ื›ืœื•ื ื‘ืฉื˜ื—

ยฏ\_(ใƒ„)_/ยฏ