How to add a little more texture to your renderings.
This week's article is a significant departure from my last few. When thinking up things to write about, I thought it was about time I did something that tipped the scales away from psychology and consulting. They do take a bit more time to prepare though, so not sure how many I'll manage with my current workload.
In 2024, very few devices touched by Industrial Designers don't have some kind of digital display. Or at the very least, some level of electronics inside. So much so many Industrial Design studios are adding Electrical Engineering capabilities. Or more often because the overhead is much lower, Electrical Engineering consultancies are adding Industrial Designers.
One thing I see quite often however is poorly represented on-screen visuals in product visualisations. Keyshot, being the weapon of choice for most Industrial Designers, makes it easy to slap on a label and make it look like a screen. And generally this isn't an issue if the display is very high resolution, which I'm sure every designer wants, but often reality gets in the way.
When reality does bite, and a low-resolution screen needs to be implemented, then the product visuals should reflect that. Low resolution screens can look pretty nice when done well. In fact, I think the screen on the new Hasselblad X2D is gorgeous.
The Basics
Consider this a tutorial. One that assumes you can use Keyshot and have a working knowledge of the material graph.
For this exercise I'm using the model and render set up from my Why Everything Looks Like an iPhone article. I've just zoomed in a bit so you can [eventually] see the pixels.

The model is very basic and you can set up all screens the same way. It's essentially a sandwich with a black-coloured backing (I've used black glass material here, but ideally you use black paint), a glass front panel, and a plane which is your screen.
The screen plane, and specifically the screen material, is where the magic happens. Because modern device screens are usually LED, you want to have the screen material itself illuminating in the colours of your UI. Create an emissive material and insert a texture map which represents your UI. Position your map how you want it, and plug it into the colour socket.

It's important to note that presently the texture map image is 4000x6000 pixels, this will be important later. Another thing worth noting is that this whole process works equally well with video maps if you want an animated UI.
Low-Resing
There's two ways we can believably reduce the pixel density of the screen. First is by procedurally creating the pixels on our screen plane. Second, is by reducing the image resolution to match.
Making Pixels
This is done by adding a mesh node that controls opacity of the screen plane. The two important settings to change is to swap the colour to white and background to black (you could also use an invert colour node if you wanted), and set your mesh type and size.
The mesh shape diameter and pattern spacing can be fairly easily calculated to represent the screen you're using. If you're using a 100 PPI screen, which I'll use in this example, would make each pixel 0.254mm in size. Calculated as follows:
(1 inch x 25.4)mm/[PPI]=[pixel size in mm]
So set your pattern spacing to 0.254.
If you don't know the PPI, but know the physical dimensions and number of pixels, you can work it out like this:
[long side in mm]/[long side pixels]=[pixel size in mm]
If all you know is the diagonal physical dimension and the pixels in both dimensions, the maths gets too complicated for an industrial design blog and there are loads of online calculators to do it for you.

Making the shape diameter the same can be reasonably effective if you're not looking too close, but sometimes you get a little too much visual merging of the adjacent pixels. This is easily solved by making the shape diameter slightly smaller than the pattern spacing. This gives a small amount of black between each pixel. In the below examples the shape diameter is 0.254mm followed by 0.24mm.


Matching Image Resolution
Blocking out the pixels on the screen plane goes only half the way to making a believable low resolution screen. However, in the above renders you can see that each pixel still shows several colours. This is because the texture map is not matched to the pixels, and is of much higher resolution.
The way to solve this is to not-so-simply reduce the resolution of the image to match. This can be done in most image editors. I use Affinity Photo. The screen on my model is 153x71mm so the easiest way to do this is set the document units to mm, then set the image height or length to match (whichever is smallest, Keyshot will overflow the rest).

It's worth noting that the method you use to resample the image matters. I use Nearest Neighbour to give the crispest image. The other options can significantly blur the resulting image. On top of that, if your UI is made up of layers, I would scale your background image first, then manually place and resize your UI elements on top. Ideally, you want nice sharp transitions between your new pixels, and resizing the UI elements in this way will achieve this without losing detail. Working natively in the resolution you want to end up with is the best option.
Once you're done resizing, swap out the old texture map image with the reduced resolution version. You'll also need to take extra care that the mesh used to set the transparency for your pixels aligns with your resized UI. Tweaking the X and Y position of the mesh mapping is the way to go so you're not repositioning your UI. Ideally you're aiming for each pixel to include a single colour.

Depending on how close you're looking at your rendering, the reduced resolution image can still show some artifacts if it's being scaled down a long way, then stretched to fit on the screen model. Affinity photo has a great feature where you can Resize Pixel Art Document, which increases the resolution but doesn't try and resample the image. This can help will to give the crispest separation between pixels. Make sure you use the HQX method.

This is the result. Note how must clearer the swirls are on the background.

Bonus Tip
If you really want to go further with your pixels, you can also add some texture to them by adding a bump and/or displacement map. You can do this by duplicating your mesh and plugging into the displacement/bump sockets. Make sure to uncheck sync, and adjust the falloff so you can get some curvature to each pixel.

Be warned though, if your front glass is hard up against your screen, you might not see this bump. You could tweak this by creating a small airgap between the screen and front glass. Because of the lazy way I've modelling this, I can't separate the screen plane from the front glass (the front glass is the whole body).

Here it is, taking a closer look without the front glass.

As with everything, feel free to tune the settings to suit your intentions.
Have fun.
