Any idea how to animate digital clock faces? like the display for the DeLorean Time Circuts?

this is a screenshot i took, the way i want it to work is that if i move a bone on an armature it makes
the different digits change. ive tried the UV Warp modifier, only thing is, i cant put in enough UV maps for all the digits i want to control. if i cant find any other ways to do this, ill just use shapekeys and LOTS of mesh. but if i do, it would prob break my pc trying to compute the thing. so any ideas for what i can do instead?

im not a master at blender so if anything ive asked has an extremely obvious answer, please point it out.

I don’t remember how the animation looked like in the movie, was it something special?

I have not used it myself but animation nodes can animate text, here is a video for countdown it looks promising.

You don’t need anything expensive. No need for any addon. You only need one UV map, no modifiers. You need four verts, a couple of tiny textures, a driver, and a handful of nodes. This is actually something I use to demonstrate a very important principle: textures are not images, they are just arrays of data.

I’m using two images here. The first, “7keyIndex”, is a lookup index, so that I can look on a plane and identify which segment we’re looking at. It’s non-color, and organized very simply: the background is 0.0 black, the top segment is 0.1 gray, the clockwise segment is 0.2 gray, etc, until the center segment is 0.7 gray. This can be made from a render-- I did that at first but I forgot to turn off bloom, so I just fixed it up in GIMP instead.

The second image is a little harder to understand. It’s actually an array. See how the leftmost column is all black? That first column is what our background is going to do when we send it a particular number-- which is exactly nothing, it’s going to always stay dark. And then the second column is what our first segment is going to do when we send it a particular number.

What about the rows? Those are the numbers. See how the bottommost row is white except at the first column (background) and last column (7th segment)? That’s zero. Zero lights up all of the segments except the background and the central segment. The second from the bottom is 1.

Now, the nodes. My coordinates go from 0-1, but my indices only go from 0-0.7, so I remap. My decimals go from 1-10, so I remap those as well (but using modulo and divide here, I want the numbers to wrap around for the next step, powers of 10 lol.) I add a half texel offset so that I’m sampling the center of the appropriate texel. How big is half a texel? We’re eight texels wide, so half a texel is half of one-eighth. That is, one-sixteenth.

(edit: I didn’t do that right. The relevant axis here is 10 texels, so I want 1/20th. But honestly, as long as it’s bigger than 0 and smaller than 0.1, it’s fine. The main thing is, we don’t want it sampling from the exact edge between two texels. Note that I really ought to be doing this for my other axis as well-- what I should be doing is mapping from 0+1/16 to 1-1/16 rather than 0 to 1. Or something, I’m not sure, texel math hurts my head :P)

After I do that, I have an output that tells me simply, given an input, whether a particular segment is lighted or not. By giving my value a driver (here, I’m driving from the z position of an empty, but you can use a bone if you want).

I already made this texture. For your numbers, it won’t be any different, so feel free to use it (CC0 lol):

7keyg

Kinda small and sad looking. You’ll need to make your own version for the months, if you want to change those.

4 Likes

@JotaroKujo279, have you tried Text FX?

@bandages, That is INSANE!!! :exploding_head: Tell me, do your read QR Codes and UPCs like some people read music? :laughing:

In any case, that (almost) works as advertised – I had to set the Map Range to 0.8 instead of 0.7 and the digits don’t change after Value hits 1.0. Honestly, I’m not quite understanding the logic behind “7keyg.png”, but who cares?! Thanks for this nifty trick. :heart:

One last question: forgive my ignorance but would multiple instances of the material need to be created for each readout digit (otherwise all the digits are identical)?

Technically, you should be mapping to 0-0.7 and then adding half a texel or something, but I didn’t do it because it worked for me. Really, I didn’t realize I needed half a texel for the other axis until it didn’t work and then I was like, oh, yeah. (Constant pain in the butt when doing HLSL stuff in the past.) So that makes sense.

But that one should work. It happens because of the modulo 10 node. (Of course, you could do that in your driver instead if you wanted.)

Each digit needs to be driven by something unique, so yes.

There are alternatives-- I was hinting that you could do this from a 2 digit number, with more node math, and you can, although you need an indicator for which power-of-ten each space uses. Which can be via another texture, or via data encoded some other way, like in a UV map.

Example: imagine if we had two of 7keyIndex next to each other, in a single texture. Then if UV.x < 0.5, we don’t want our actual number, we want our number divided by ten and floored.

You could do this for as many displays as you want, wherever you want, involving as many driven values as you want, but realistically, it’s just going to get unnecessarily complicated for unrelated values, and you might as well make a new copy of the mat.

2 Likes

thats exactly what i would have done if i used uv maps but i couldnt put in enough uv maps.

nope never even heard of it. ill try it out tho

no it was just flipping from one number to the next. like one frame it says OCT 15 1995 12:00 and next frame it says DEC 01 2015 5:00

i saw that video and i have not been able to get it working(prob cause i didnt get the right source for it XD)

u just done wrinkled my brain with this. i dont think im smart enough to fully understand this. you may need to show me a video of how to do it XD

I get the concept, but I am also scratching my brain!

Yes I tried to install animation nodes as well and got a build error, I think the version is for 2.83 only and does not work in 2.9

Edit: I have just found this script


It works for hours seconds minutes in 2.9, I have no idea how to make it do days and years but it must be possible.

You are going to like this :slight_smile:


I managed to install animation nodes, the reason for my build error was because of the python version. I downloaded animation nodes from the animation node website (not Git Hub), on that site there are different versions for different python versions.
The version that worked for me was: animation_nodes_v2_1_linux_py37 I am on 2.91 now.
It took me a while to do the setup but I had no knowledge beforehand of the process. In the end I decided to do a different node setup for each portion (Years Days Hours Minutes) I did not do seconds as there are loads of them in 2 years!
I drove the input for the nodes with a custom property (one in each object Y D H M) then I key-framed the animation with 2 key-frames for each value 2 years 24 months 730 days 17520 hours 1051200 minutes. It is not exact but good enough. The setup can be easily tweaked changing the values and the key-frames.

ANIMATION NODES ROCK! It was well worth looking into them.

Here is the blend file so you have no excuse to not get them installed!
Timer2.blend (1.1 MB)

Edit 2 I just realized I did not sync it properly I have updated!
I had to add a couple of key-frames at the end of the year to sync the change of year, maybe because of f curves, I tied to set the to linea but it did not work so i I just added a couple for the year an month change at frames 1000,1001.

2 Likes