12 February 2022

Retro Telephone – Prop Breakdown – Vitaliy Ivanov




Hello readers!

My name is Vitaliy Ivanov and I come from Russia however I now live in Ukraine. I am self-taught, I used to do modding (modification for GTA VC).
When I was 15 years old, I started creating my own scripts for GTA Vice City. Since 2019 I have been doing 3D  graphics, and I have been involved in programming for more than 10 years. I am fond of developing various props, and in the near future, I plan to start creating modular environments.
I am inspired by different games. I plan to develop my own game eventually. All this drives me to become a better developer. I didn’t plan to work in studios, but I have released my assets to stores. I am both a sponsor and my own employer. Even if you take away all the money in the world – it would not stop me. I would still do 3D graphics, programming and everything related to computer games development.




As mentioned above, I am a self-taught artist. Step by step. I read articles, watch videos, but I have never created a full game asset according to tutorials, I have only taken tips and techniques that I’ve needed.
Over time, I began to develop my own approaches, because I like to experiment and discover new things.



I usually look for references (auxiliary images) in Google, Yandex or picclick, I use various sites for searching.

References are very important! The more information you have about prop, the better you can develop it.


I divide my references into two groups:

  • shape references;
  • texture references.



My working process starts from the moment I do my blockout in Blender. At this stage, I make the simplest shape, whilst carefully studying the reference, and comparing all the shapes as realistically as possible. The beginning looks like this:


At first, I adjust the general shapes and also match the elements. For example, a telephone receiver. Temporary cutout for numbers or, in other words, a kind of draft, over which I can slowly create more information and topology on.


The second draft stage is making detailed shapes. At this stage, I do not think much about the topology, I can use freely Boolean operations and ngons. Please also pay attention to the fact that I have a triangulation modifier set on each element. It will prevent the shape from deformation and only in some cases, I triangulate in my own way.

When creating the telephone receiver, I simply used the simplest shape with the Subdivision modifier and marked the edges with the Crease function, whilst using symmetry – the Mirror modifier.


This makes it easy to create streamlined shapes and manage them easily.



The fewer vertices, the easier it is to manage the shape.

Identical model sections are a possible “candidate” for symmetry and workflow acceleration.

I can tell you in general terms about the creation of a telephone cable, that is, what I was guided by. Firstly, I created a regular circle of edges:


Then, I rotated the hexangular circle 90 degrees and shifted along the X-axis, got the needed radius, added the Screw modifier:


After I selected the edge in such a way:


And created it as a separate object, then converted it to a curve and got the following result:


Here I have complete control, so I can adjust the thickness, sections’ number and among other things, this technique does not change the radius.

Now we have a variety of warp modifiers, or we can bind to another curve.

I use a variety of techniques, but I will clearly show what result we can achieve using Mesh Deform:


To do this, I created a box with several sections and turned on the Display As: Bounds setting. Also, I set the curves’ radius. Here is our result:


Using various methods, I got the telephone cable as I wanted.




I do a large stage of asset development in the early stages.

At the modeling stage, I work on finalizing the shapes and also think about the future textures I will make. In addition, I adapt the camera for the mesh, add and delete polygons where needed. I also set suffixes for the future low poly model _LP.

Amongst other things, I used sharp edges in advance, then selected them and quickly made UV seams, and in some cases added seams manually. For example, for cutting cylindrical shapes.



To make a clear model, just start thinking in terms of vertices – if a vertex does not give shape, it does not help with shading or UV mapping, do we need that vertex?

High Poly creation does not take long, I polish it in Zbrush by just duplicating the Low Poly and naming the suffixes _HP, and some elements I do not polish in Zbrush. For example, cable. After I do the UV mapping for the polygroups like this:


At first glance, it may seem that the UV looks wrong here, but it is not. We need it in order to maintain the silhouette during polishing, this is necessary for Zbrush. And before polishing, I move the low poly and high poly elements, but only those that should not give shading when Ambient Occlusion baking. In our case, this is a telephone receiver.


Where there is a chamfer, there is a seam on UV for polygroups.


I also use a custom UI to focus on polishing and speed up the process.

My sequence of actions.

First, I select the element in the subtool and then click on Auto Groups With UV. Then, I use DynaMesh and adjust the approximate density. Unfortunately, there is no universal way here. The topology should not be too dense, and not low. It is important to choose something in between. After that, I use Polish by Features only for those elements where there are faces, for example, to smooth spheres, cylinders, and so on.

My options look like this:


And the last step is where I use Polish. Thus, I create chamfers.

I do not create details in High Poly, we will talk about them later.

After I have finished polishing, I can sometimes use the Decimation Master, which makes it easier to lighten the size of the model.


UV Mapping


For UV mapping I use RizomUV, UVPackmaster аddon for blender, and RizomUV bridge.

My sequence is as follows:
After I did the UV mapping in the blender, I sent the model to RizomUV, now I can work with some islands. For example, straightening and optimizing them. In the next step, I return to Blender, select all the islands and use the Average Islands Scale. This is in order to evenly locate them over texel density.

Some parts I can scale down by hand. For example, the bottom of the phone is 30% lower than the main islands. Such savings can increase texel density for other islands.


I made the telephone cord with a very small square:


As a result, it takes up very little space. We can give it one color and general roughness. However, in this way, we lose the history in texturing.


I use Substance Painter for baking, and if necessary, Marmoset can also be used. Before baking, I check the low poly model for mapping, test the most different moments.

Here I check texel density:


And here I look over the checker map:


In addition, I can install random smart materials to ensure the quality of future textures. And if I don’t like something, I just change the UV again. To tell the truth, such cases in my practice happened rarely.

Before baking and texturing, I do a control test.

Before baking, I usually make settings like this:

Even if I work with an asset that has a 2048×2048 texture, I still bake at 4096×4096.


Ambient Occlusion and Curvature – I set the maximum rays. And for normal maps, I set baking by suffixes to avoid intersections.

For this, I set the suffixes _LP, _HP, which were mentioned earlier.


In this iteration, I bake all maps except for Position.


Now I am loading the Low Poly, which should be the final. And I start making edits.

I just transfer maps to layers that have white masks. I add paint to the mask and select part of the mesh, filling in the problem areas with black.

And finally, I bake the Position map:


This map can be very useful for generators. Now, I can either save textures and attach them to slots, or continue like this.

Finally, the baking process is over.



The texturing process is one of the most creative processes, and, in my opinion, it is especially important in creating assets. I prepared a duplicated LP model for texturing. Its difference is that the handset is turned upside down on the second model and there is space for texturing under the handset.


In my opinion, this is very convenient, since we cannot rotate the model or turn the HDRI map.

Before I start texturing, I go through the project settings.

First, I set the HDRI quality, like this and higher. In order to avoid errors in visualization:


If the value is too low, then the assets may look more matte.

Second, I am looking for HDRI. For example, on the HDRI Haven website. I select and choose the necessary HDRI, similar to the environment in the reference, which allows me to develop assets more accurately. So, I think the selection of HDRI is extremely important.

I chose something like this:


After carefully studying the reference we talked about above, I created basic colors for each element and assigned a roughness level, visually similar to plastic:


Then, I started creating the screen using different shapes, working with blur and levels, as well as Height, using green, metallicity and noise.

I created such a dial element:


Black slots I usually create using black albedo that is equal to 0 and metallicity 1 and roughness 1. Due to this, I achieve slots that are more realistic. The frame of the dial is also slightly changed in albedo, it is darker. That is why I intentionally fail to comply with PBR in order to achieve a better look. It is important to remember that PBR is an extremely cheap shader, so you have to over color.

Then I wanted to insert the text by stages. I used Substance Designer and found a suitable font:

Then, I copied the settings and exported them to Substance Painter as a procedure texture.

The peculiarity was that I could enter various characters and easily place elements in the mask.

The light elements are the usual metallic, dark albedo. For the lower gray body I used the Planar Projection, a notebook, colored lines and added a noise Height to slightly crumple:

I created all the details in Substance Painter. Holes, slots, stripes and so on.

The anchor point is my main tool and I often use it. For example, if I painted the bottom part using Planar Projection, I can easily get the edges thanks to the anchor and fill them with a black stripe, making deepenings in the Height.

Next, I did a trick for generators:


I collected the anchor data from the Height layer in Passthrough mode. Provided that all the created parts were below.

The last step is to create history to the texture.

I apply a light roughness without changing the color. I use the grunge maps that are in Substance Painter and combine them to achieve a variety of results.


I noticed yellowness in the reference and decided to recreate it:


I am using the Metal Edge Wear generator and loading the details information from my HEIGHT_MAIN anchor to grab the edges and details. To do this I changed its parameters, and ended up using this combination:


Paint was used for manual edits, and Subtract modification for the basic color, this gives an interesting yellowing effect. This gives the effect that the phone is old.

Using various combinations, I created the effect of dust, spots and other important details:


Later, I created the shapes around the buttons using black albedo and metallic. In order to give the impression that there is space under the buttons:


I then created layers for the basic color and separated them for the roughness, which allowed me to adjust the texture sharpness:


Finally, we get this look for the asset:



There are no perfect textures – there is always a measure. If you want to create interesting assets, try to interpret the reference as accurately as possible.

Match the colors, the spots, the roughness as accurately as possible.

In my opinion, the basic color and roughness are the most important textures. Also, never rush. If you are tired, have a rest, and then go back to texturing. The more accurately you create an asset according to reference, the better your work will be. In some cases, you can overcolor in order to raise the “readability”, but moderately.



I use the Marmoset Toolbag for rendering. I usually use the same HDRI I used in Substance Painter.


When I am working with the light, I imagine that I am texturing again, only with light. I try to catch the lighting level, the angle, to create the appropriate atmosphere. In other words, creating light is the “sibling of texturing”.

My settings look like this:


Please note that I rarely use post effects.

I use the Use Ray Tracing option just to get shadows and reflections. Without this option, my asset would look like this:



Creating light is like painting with light. I advise you to use exactly the same technique as with texturing. This gives the opportunity to match the light as realistically as possible with the reference, and at the same time convey all the details. In my opinion, studio light is artificial light, and real light is when there is a feeling that our props are in a real room.




In conclusion, creating an asset is not only creative work but also a mental one. An example, if you created the most accurate work (when compared with the reference), but few people know about this prop, such an asset will most likely not arouse increased interest. If you create something that people have seen before in real life, in films, in games, and you have created a product of good quality, then such an asset can delight viewers.

All credibility is based on our personal experience, what we have seen in life, in films, computer games and so on, it is stored somewhere in our subconscious.

Thus, you can always follow this in your work.

Practice as often as possible, create different approaches, develop new techniques, experiment with each new work, and thoughtfully create amazing works of art. Then your skills will only progress, improve and move forward.

I wish you lots of success and luck!


I sincerely thank the Games Artist team for reaching out to me and wanting to learn more about my working process.


You can see my works or contact me with questions on the links below: