Apple Music, and presumably the others, are good about recommending stuff in this genre. I started with Emil Rottmayer's 'Descend'. Timecop1983 is another good artist to launch from.
Strong agree for something to work to. I was into vaporwave a few years ago but really love the whole outrun, synthwave, %wave stuff for working. Darksynth if I am really having to get after it!
Thats’s awesome. Kind of reminds me of this vector-y 80s game I had as a little kid - the Tomy Turbo [1]. I’ve been trying to make something similar myself but keep pushing it aside. Anyways, nice work - it looks great!
Weirdly I had the idea to do the same thing, including doing it in js, a year or so ago. This is much nicer than what I'd pictured. Mine would've been set to Kamasi Washington's Clair de Lune.
Well it is a new movie, at least by period standards.
Broadly speaking you've got the B&W era until the 70s, the "old classics" recorded in colour on actual film up till the 90s, then the period of questionable CGI and campiness up till somewhere like 2005 when what we feel like is new/recent cinema starts. The ongoing era of decent invisible CGI, quality digital cameras, and post-9/11 hopelessness.
It's why I still watch a lot of 90s/early 2000s movies, there's just something different about that era that feels nice.
Having grown up with the crappy "Jurassic Park somehow pulled off what no other movie of the time did" CGI of the 90s, the effects in the Marvel movies look pretty seamless up to the point where people's fingers start shooting green lightning or whatever. The nature of their plot holes and overall dumbness feels different, also. Much more polish, to the extent that I can almost ignore how stupid the whole thing is when I'm watching one. Almost.
I think we get that "goddamn years are going by" feeling with movies especially because they are connected to a specific year yet are disconnected from other memories (unless you brought your crush to one of them maybe)
I can't tell you what originated the aesthetic, but it's not Drive because some songs on its soundtrack were already part of the established aesthetic.
It's definitely one of the major works in that world, however.
I was thinking of this song exactly before I turned on the music; thought it might even be the same song for a second. I wonder why the (visual) aesthetic is evocative of this song?
I remember Alt-J performing a cover of "A Real Hero", another song from the Drive soundtrack, at Glastonbury festival years ago. The film and soundtrack were really cool.
One key difference: this guy built his demo from scratch, whereas mine's a port of someone else's work. It's great to see another implementation, with its own techniques and features.
Good question. The honest answer is that I don't know and that's the problem.
A compiler would tell me what all the types should be and if they are being respected. I'd also write a lot of unit tests to make sure that the code is doing what it is expected to as well as enable refactoring more easily. The code isn't formatted consistently, so that also makes it hard for me to read, I'm kind of OCD about that and having tools like eslint/prettier, which do it automatically, makes this super easy to fix. Linting the code would also point out other issues that the compiler misses. Putting it into CI would ensure that all changes get checked and builds would fail, if there are issues.
So I guess that is what I mean when I say 'clean it up'.
Update: Getting a lot of downvotes (yes, I know against HN 'rules' to comment about that), but I don't get why people dislike my response so much and would love feedback on that (similar to how the OP asked for honest feedback).
What I did was pull the source code, load it up in IDEA, convert the .js files to .ts files. Then looked at the errors. Most of what stood out was that the author included a copy of threejs directly and used parts that TS can't infer types on. Not a huge deal, but makes following the code more difficult for sure. I don't think it would take too much time to update it at all.
If you compiled me, you'd know that you are a type who I respect ;)
I think you're right on many counts, and I appreciate the effort you took to see what TS could do for this kind of project.
If you create an issue on the repo, I can notify you if I make an attempt at using TypeScript to maintain it, in a branch at least. No guarantees, but I've considered it before, and it'd be worth my time once I have some to allocate.
That's really neat! I like the tunnels under the giant trapezoids, they make me think of those enormous trapezoid buildings in Blade Runner.
I can't take credit for Drivey's aesthetics, I'm just honored to have carried it to HTML5 ;) Somewhere out in Australia is the original programmer who I'm sure would love to see this, but who also loves avoiding the spotlight.
I just did a quick scroll of your Twitter feed and jeez you're prolific, this stuff is really cool. I'll try Hexpress this weekend.
Oh, I think I remember the original Drivey and was following the dev blog for a while back then. But I think in the end, it didn't go anywhere (no pun intended).
Through the nineties, Microsoft software engineers carried on a tradition of writing clever and distinctive software projects alongside the software they were primarily tasked with writing— this is where Solitaire and Minesweeper came from, for instance. These engineers also wrote "easter eggs" into their primary software, such as the beautiful flight simulator hidden in Excel 97.
Amazed by reading the above. I'm a sucker to read and learn from that clerverness.
That's really cool, but I wonder why on my machine is maxes out all the cores on my CPU and still runs at something like 1 FPS on high
If I turn it to Low it runs okay but looks.. not great.
But I don't see anyone else having issues so, is it just me?
Same here. I've also experienced it with other JavaScript simulations. I suspect it has something to do with Chrome's hardware acceleration because it works smooth as butter on Firefox.
The original was written in "JujuScript", with strong types and novel operators. I pretended it was Haxe, and ran around fixing compiler errors it till it compiled to JavaScript. I built out a small Three.js project to hook it to, built up the features, then refactored it into something I felt was maintainable. I tried preserving the organization of the original script as best as I could.
Sidenote: I belong to the "port it" school of software preservation. My friend who runs the BlastEm project belongs to the "emulate it" school. I've seen both approaches have been employed to preserve Glider, which I think implies how important that game is to people. :)
interesting that this is running very slow (like 1 frame per second) on Chrome, but runs very smooth on Firefox. I'm on the latest version of both for Mac.
Some people are making a strong case (I think) for calling these types of projects "demos", but also, I think the inability to fit them in the arbitrary structure of existing nomenclature is a good quality for a project to have. :D
Have you considered using a small bokeh image in place of circles in your renderer? Their size is based on the (usually unchanging) optical properties of the eye, rather than the eye's distance to the light, so you'd fade them rather than resize them, and if you round their position to the nearest pixel you might be able to draw them with 2D canvas context speedily.
Well, that's beautiful. I remember a procedurally generated night city skyline demo that was on HN years and years ago, this is a somewhat similar endeavor.
Why do people like to buy skins on Fortnite or Call of Duty? People like to own things to show status, taste or just express themselves.
If the question rather is, "Is owning an NFT the same as owning a physical item?". It's not exactly the same, but it's close enough to feel the same emotionally (you and only you can decide whether you want to transfer, sell or even destroy it). And it's strictly better than owning any other digital license because it's on a neutral platform with deterministic rules.
With respect to generative art in particular, it's a great fit because it allows a someone to own a unique instantiation of the algorithm. e.g. take a look at this collection: https://www.fxhash.xyz/generative/slug/take-wing you can create infinite variations on the same theme, but the artist has determined that they only want 250 pieces in total to exist. So when someone "buys" the art work for the first time, a completely unique piece of work is generated based on the random transaction hash. The algorithm still exists as a whole and anyone is free to view and enjoy it, but people still buy and trade the unique pieces because they enjoy it.
In fact, there's an upcoming project that really leans into the idea: https://twitter.com/tylerxhobbs/status/1571908670929133568?s... Anyone is free to create any number of outputs they like and share them. But only 999 NFTs will exist, some people people want to pay for the right to have their selection immortalized as one of the 999.
I don't understand the visceral hate (not from you, just in general). People who want to just look at it are free to do so, people who want to pay and own it do so, and the artists are paid directly (and get perpetual royalties). Who's losing out?
Anyway, my original comment was not even about NFTs, just wanted to bring attention to the fact that this is generative art, and other artists have similar posts about their work and how they use JS to replicate similar real world phenomena.
edit: I didn't realize you were the post author. Your work is amazing. I'm sure it will be appreciated by generative art collectors should you choose to publish it. Feel free to reach out to my username at gmail.com if you have any questions. I'm a serious gen art collector, and there's nothing I would love more than to introduce new folks to the space.
Some people run their browsers with JavaScript turned off. Some folks disable CSS. Some even browse via Lynx, a text web browser. It seems like the author's met some of these folks.
It would be awesome to do this with a bladerunner theme. Like, sitting in a spinner going somewhere, with all the different cars, spinners and maybe buildings passing by.
> The biggest flaw is that the cars are totally transparent,
This seems easily fixable, no? Just make cars opaque black and assign progressively decreasing z-index to each spawning light. (Unlikely anyone will leave page open long enough to reach min value, and you could just reset at that point.)
Someone with your level of optimism has an advantage.
The tricky thing is, this project's renderer is currently a queue of circles to draw to a canvas. It's under 100 lines of JavaScript. So any increase in complexity will require substantial changes, like abstracting over types of drawables.
Exactly. Whenever drawing a pair of red circles for tailights, draw ~10 overlapping black circles between them. Bam. Done. I don't think this requires naive optimism, just 5 minutes of additional effort. Maybe less.
I'm not the previous poster but thought this would be a fun challenge. No way it was 5 min though; took me at least 20 min to understand what to change.
Anyways, run this in your browser inspector to hot-patch the live demo so that each car has an opaque black circle as its body/chassis:
for (let i = 0; i < cars.length; i++) { console.log(i);
cars[i].headlights = cars[i].headlights.concat([ {xy: new V2d(0,0), z: cars[i].headlights[0].z, r:cars[i].headlights[1].xy.x, col: "black"} ]);
cars[i].rearlights = cars[i].rearlights.concat([ {xy: new V2d(0,0), z: cars[i].rearlights[0].z, r:cars[i].rearlights[1].xy.x, col: "black"} ]);
}
Well done, nice job rising to the challenge! I definitely did not care enough to do it myself, so I applaud you. I just tried it out and it's perfect.
To be clear, since of course this is the internet and one must be precise or else get nit-picked and "outplayed," I obviously meant 5 minutes for the author who already knows the layout of the code. Obviously. Any charitable interpretation would have taken that as a given. 25-40 minutes sounds more appropriate for a newcomer examining it for the first time.
Oh yeah I totally get you, I just added the disclaimer about it taking me 20 min because I didn't want people to think I was trying to brag/flex about doing it in 5 min, which I didn't do and don't want to try to claim any credit for.
> What game can we make where the premise is that you're a passenger on the motorway at night time? It shouldn't be a particularly taxing game, I think the main experience should still be that you're just enjoying watching the lights, but it would be cool if there was some interactivity and some sort of goal.
If you wanted to make it interactive, maybe a Pokemon Snap like functionality where you try to capture photos of random environment features or creatures.
A man running alongside your car window, jumping over obstacles. Technically this game already exists, but it would be interesting to combine with this demo.
255 comments
[ 2.4 ms ] story [ 341 ms ] threadhttps://en.wikipedia.org/wiki/Synthwave
https://synthwave.fandom.com/wiki/Synthwave_Wiki
Apple Music, and presumably the others, are good about recommending stuff in this genre. I started with Emil Rottmayer's 'Descend'. Timecop1983 is another good artist to launch from.
https://music.apple.com/au/album/descend/1369485374
Fun!
[1] https://m.youtube.com/watch?v=1aCeg-EbOAI
https://youtube.com/watch?v=l0nkMGyfYO8
https://youtu.be/KqJJ-2cRR0M
https://youtu.be/MV_3Dpw-BRY
Broadly speaking you've got the B&W era until the 70s, the "old classics" recorded in colour on actual film up till the 90s, then the period of questionable CGI and campiness up till somewhere like 2005 when what we feel like is new/recent cinema starts. The ongoing era of decent invisible CGI, quality digital cameras, and post-9/11 hopelessness.
It's why I still watch a lot of 90s/early 2000s movies, there's just something different about that era that feels nice.
I wonder if Drive originated this aesthetic or if it's just coincidence.
It's definitely one of the major works in that world, however.
https://youtu.be/wkF9w86XXKU
That's the cover by band London Grammar and TIL about the original one. Didn't know about the movie which now is on my todo list, thanks.
That guy is a real hero, and apparently a real human bean.
https://www.youtube.com/watch?v=RtpAVTPJaJQ
One key difference: this guy built his demo from scratch, whereas mine's a port of someone else's work. It's great to see another implementation, with its own techniques and features.
https://github.com/rezmason/drivey/
A compiler would tell me what all the types should be and if they are being respected. I'd also write a lot of unit tests to make sure that the code is doing what it is expected to as well as enable refactoring more easily. The code isn't formatted consistently, so that also makes it hard for me to read, I'm kind of OCD about that and having tools like eslint/prettier, which do it automatically, makes this super easy to fix. Linting the code would also point out other issues that the compiler misses. Putting it into CI would ensure that all changes get checked and builds would fail, if there are issues.
So I guess that is what I mean when I say 'clean it up'.
What I did was pull the source code, load it up in IDEA, convert the .js files to .ts files. Then looked at the errors. Most of what stood out was that the author included a copy of threejs directly and used parts that TS can't infer types on. Not a huge deal, but makes following the code more difficult for sure. I don't think it would take too much time to update it at all.
I think you're right on many counts, and I appreciate the effort you took to see what TS could do for this kind of project.
If you create an issue on the repo, I can notify you if I make an attempt at using TypeScript to maintain it, in a branch at least. No guarantees, but I've considered it before, and it'd be worth my time once I have some to allocate.
aesthetic 可ぷき
P.S. It's a joke. This is a really well executed demo.
I like to joke that Australia (where Drivey originally comes from) has a low enough population that the pedestrians are in no real danger ;)
The video didn't generate much interest so unfortunately I didn't release anything playable.
I can't take credit for Drivey's aesthetics, I'm just honored to have carried it to HTML5 ;) Somewhere out in Australia is the original programmer who I'm sure would love to see this, but who also loves avoiding the spotlight.
I just did a quick scroll of your Twitter feed and jeez you're prolific, this stuff is really cool. I'll try Hexpress this weekend.
Through the nineties, Microsoft software engineers carried on a tradition of writing clever and distinctive software projects alongside the software they were primarily tasked with writing— this is where Solitaire and Minesweeper came from, for instance. These engineers also wrote "easter eggs" into their primary software, such as the beautiful flight simulator hidden in Excel 97.
Amazed by reading the above. I'm a sucker to read and learn from that clerverness.
But I don't see anyone else having issues so, is it just me?
EDIT: never mind, it looks like it was, very cool.
The original was written in "JujuScript", with strong types and novel operators. I pretended it was Haxe, and ran around fixing compiler errors it till it compiled to JavaScript. I built out a small Three.js project to hook it to, built up the features, then refactored it into something I felt was maintainable. I tried preserving the organization of the original script as best as I could.
Sidenote: I belong to the "port it" school of software preservation. My friend who runs the BlastEm project belongs to the "emulate it" school. I've seen both approaches have been employed to preserve Glider, which I think implies how important that game is to people. :)
If you create an issue on the repo, I'll try and figure it out when I have the bandwidth.
Drivey shows objects as their silhouettes on top of a light background, whereas Nightdrive shows objects as their lights on top of a dark background.
Some people are making a strong case (I think) for calling these types of projects "demos", but also, I think the inability to fit them in the arbitrary structure of existing nomenclature is a good quality for a project to have. :D
Have you considered using a small bokeh image in place of circles in your renderer? Their size is based on the (usually unchanging) optical properties of the eye, rather than the eye's distance to the light, so you'd fade them rather than resize them, and if you round their position to the nearest pixel you might be able to draw them with 2D canvas context speedily.
It's beautiful art. The code too. Great work.
Can you please explain what anyone would get out of buying an NFT as opposed to just looking at the web page for free whenever they want?
Not trying to be dismissive, just trying to understand.
If the question rather is, "Is owning an NFT the same as owning a physical item?". It's not exactly the same, but it's close enough to feel the same emotionally (you and only you can decide whether you want to transfer, sell or even destroy it). And it's strictly better than owning any other digital license because it's on a neutral platform with deterministic rules.
With respect to generative art in particular, it's a great fit because it allows a someone to own a unique instantiation of the algorithm. e.g. take a look at this collection: https://www.fxhash.xyz/generative/slug/take-wing you can create infinite variations on the same theme, but the artist has determined that they only want 250 pieces in total to exist. So when someone "buys" the art work for the first time, a completely unique piece of work is generated based on the random transaction hash. The algorithm still exists as a whole and anyone is free to view and enjoy it, but people still buy and trade the unique pieces because they enjoy it.
In fact, there's an upcoming project that really leans into the idea: https://twitter.com/tylerxhobbs/status/1571908670929133568?s... Anyone is free to create any number of outputs they like and share them. But only 999 NFTs will exist, some people people want to pay for the right to have their selection immortalized as one of the 999.
I don't understand the visceral hate (not from you, just in general). People who want to just look at it are free to do so, people who want to pay and own it do so, and the artists are paid directly (and get perpetual royalties). Who's losing out?
Anyway, my original comment was not even about NFTs, just wanted to bring attention to the fact that this is generative art, and other artists have similar posts about their work and how they use JS to replicate similar real world phenomena.
edit: I didn't realize you were the post author. Your work is amazing. I'm sure it will be appreciated by generative art collectors should you choose to publish it. Feel free to reach out to my username at gmail.com if you have any questions. I'm a serious gen art collector, and there's nothing I would love more than to introduce new folks to the space.
https://incoherency.co.uk/nightdrive/
I don't understand this remark. What browsers do people use that don't have javascript?
It would be awesome to do this with a bladerunner theme. Like, sitting in a spinner going somewhere, with all the different cars, spinners and maybe buildings passing by.
This seems easily fixable, no? Just make cars opaque black and assign progressively decreasing z-index to each spawning light. (Unlikely anyone will leave page open long enough to reach min value, and you could just reset at that point.)
The tricky thing is, this project's renderer is currently a queue of circles to draw to a canvas. It's under 100 lines of JavaScript. So any increase in complexity will require substantial changes, like abstracting over types of drawables.
Anyways, run this in your browser inspector to hot-patch the live demo so that each car has an opaque black circle as its body/chassis:
To be clear, since of course this is the internet and one must be precise or else get nit-picked and "outplayed," I obviously meant 5 minutes for the author who already knows the layout of the code. Obviously. Any charitable interpretation would have taken that as a given. 25-40 minutes sounds more appropriate for a newcomer examining it for the first time.
If you wanted to make it interactive, maybe a Pokemon Snap like functionality where you try to capture photos of random environment features or creatures.