3D-Coat development process

I am Andrew Shpagin, the developer of 3D-Coat. This is my personal blog devoted to the development of 3D-Coat. This blog is created to give fast and non-official information about 3D-Coat. I will post there daily news, what I am doing now, what features are under development this moment. It could be really interesting for everyone who is interested in 3D-Coat.

Thursday, May 29, 2008

Development progress

Last week I was working over making 3D-Coat cross-platform. My friend Sergey Krizhanovsky has made cross platfirm engine and last week I was busy by replacing old graphical engine with new one. It was very hard work, only 5 days was spent to compile and link program with new engine. New engine will give improved speed, OpenGL/DirectX render, very nice handlerd like in Maya. I hope to finish my part of work this week. Then Sergey should make some final changes in 3D-Coat to make it cross platorm. It is possible that Mac version will be done until the end of june (official deadline - 9 of july). So, from next week I will continue to improve functionality. At first, I plan to make retopo tool. Also, I can't wait to start volumetric tools. I was impressed by recent post of Frankie It seems to be more impressive then hard to do feature. You can read interesting thread there.

Monday, May 26, 2008

Do you want to see 3D-Coat on your native language?

Recently I have written about web project that makes possible online translation of 3D-Coat hints on native languages. It is done! So, if you want to see 3D-Coat on your language, please visit the page


It requires login/password from forum. If you want to see more languages, please write me directly. Also, you can ask questions in our forum


Thank you for participation!

Saturday, May 17, 2008

MacOS porting progress

3D-Coat 2.09 is done, now next step - combine 3DC with new graphical engine (that is partially used now). With this engine 3DC will support OpenGL/DirectX render and will be cross-platform. It will be big step to make 3DC compartible with MacOS. I hope we will make all in term that I have told in our forum.

Friday, May 16, 2008

3D-Coat 2.09!

3D-Coat 2.09 released! More info is placed there:


3D-Coat SDK

I have published 3D-Coat SDK. It allows to create plugins for export/import of different 3D-files. To start you should download and unpack


Then you shoud open soluton ExportImport.sln. It requires at least MS VisualStudio 2008 Standart Edition to be properly compiled. Compile project. It is better to use “Release” configuration. You will get Odj.DLL file on output. This simple plugin is a sample for importing OBJ files. Obj.DLL should be copied to


To understand how plugins work open files cMeshObj.h. You will see there class that is derived from cMeshCodec (It is defined in cIO.h).

class cMeshCodec {


cMeshCodec() {}

       virtual ~cMeshCodec() {}

       virtual cRawMesh * Decode(const cData &Fm) = 0;

       virtual void Encode(const cRawMesh &Mesh, cData *To) = 0;

       virtual bool CanEncode(){return true;}

       virtual bool CanDecode(){return true;}


To create new codec you should derive your class from cMeshCodec and re-define functions Encode and Decode. Decode should return filled object cRawMesh and Encode should fill Data structure cData using cRawMesh. You can look and discover objects cData and cRawMesh. After redefining functions you should change class name in ExportImport.cpp. I think it is very easy. The only not so easy task is filling/reading structure cRawMesh. It is mesh that consists of:

uv-sets (see GetUVSets() )

Matrials(surfaces) (see GetMaterials() )

Objects (see GetObjects() )

PositionVertices (see GetPositions() )

UV-vertices (see GetTexCoords() )

Normals (see GetNormals() )

Faces (see GetRaw() )

To understand how it works it is better to discover how cMeshObj.cpp encodes/decodes obj – files. I will explain slightly how Faces list is organised.

Faces are array of cVec3i – 3 integer values

Count, - amount of polygones in face

idMtl = MaterialIndex + (UV-set index<<16) – index of material and uv-set

idObj - index of object

Next “Count” values are 3-indices of vertices that are part of face

PositionIndex (index in array of position vertices)

TexturevertexIndex (index in array of texture vertices, can be -1)

NormalIndex (index in array of normals, can be -1)

The best method to learn is to ask in forum and discover how cMeshObj is done.

Thursday, May 8, 2008

Translating to many languages

I have interesting idea about translating 3D-Coat to very many languages. I know that many peoples want to help to translate 3DC to native language but it seems too difficult because

1) Too many texts for one man

2) It is not so easy to find where texts are stored

2) There is some xml-file - it is not convenuent to translate

Also, using translation agencies is not effective because they usually don't know CG terminology well.

So we started new web project - you will be able to help to translate even if you have 5 free minutes! There will be web page where you can get string that is not still translated and translate it on native language. There will be small screenshot where this string is used and text. You will be able to type the translated text.

Vector displacement

Now I am making support of export/import of vector displacement. What is vector displacement? You have subdivided mesh and texture for displacement. It is not grey, every channel represents shift in space in corresponding direction (XYZ). Vector displacement is important for sculpting because it allowd to displace sphere into something non-trivial like face. Using vector displacement will make export for render engines much mere easy and precise. There is two types of vector displacement

1) World space vector displacement - RGB in picture mean XYZ shift in space. It is most precise method, but it is not good for animation.

2) Tangent space (local space) displacement - RGB mean shift in TBN - space, N- normal, T,B - directions of U,V gradient. This kind of displacement is good for animation but less precise because tangent space calculation can be made using many methods, it even can be non - orthonormal.

I have almost done this stuff, but I have a problem with method of calculation of tangent space in LW or Modo. If someone knows how to do that in Modo/LW, please send me the info.

You can download and test this feature by the link


I have created the new topic in forum


Please help in testing vector displacement.

Also, if you have examples of EXR files with vector displacement to transform sphere of some other simple surface into something non-trivial, please send me to support. It will be great help.

Saturday, May 3, 2008

2.09 is coming soon!

3D-Coat 2.09 is almost done. There will be many new features. It will be essentially useful for LW users. The approximalte list of upcoming features:

1) Merging new objects is possible now! You can add new sub objects like eyes on your WIP.
2) Different uv-sets are placed on different textures, it allows you to use display memory more efficiently and get better quality.
3) You can choose resolution of every uv-set during import and change it any time. Also, you can change resolution of mesh separately for every uv-set.


4) Now you can group several materials (surfaces) into single uv-set


5) Select and move now supports symmetry.
6) Gradient select in sculpt mode works better with symmetry and works much better now.
7) Image picker has got navigation controls to scale/move/fit image

8) Wacom pen has got better support: opacity jitter is add for pen and every jitter can depend on pressure if you want.


9) All textures (color/normals/specular) and all uv-sets could be viewed in single window
10) New option in fill tool using gradient - filling with opacity fading


11) ... and filling with spherical gradient


12) New menu item - View->Browse to understand the structure of 3DC folders better


13) Move along motion in pen settings now works with symmetry
14) Stability improvements

15) It is possible to tweak uv-set in View texture mode. You can do it using RMB in wireframe mode.
16) Now you can edit not only in 3D, but in UV-plane! It is really complex change. Almost all tools support work in 2D and 3D. Just open View->View color texture and see how it works.
17) You can make seamless plane texturing in uv-plane! 3D-Coat now can be used very easily to tile textures and make relief. Just import plane and come to View->View color texture.
18) Hide/unhide/Fill can be applied to texture island (cluster)
19) Additional view mode for texture in UV - layout: shaded model

20) texture editor/viewer is in different movable/resizable window
21) shift - constrains for horisontal/verlical/diaginal movements of the pen. Click on surface and then press SHIFT
23) grids and snap to grid work in 2D - mode also
24) more correct export of texture with multiple uv-sets
25) new nice preview of pens and smart hints
26) it is possible to edit/export/import pens as 16 bit tiffs with 7 cannels - RGBA, Depth, Specular, Erase mask
27) small icons over materials to indicate what layers is in material (depth/color/specular)
28) 2D/3D grid are now in View menu

29) Smudge/collapse/expand tool in paint mode

I hope it will be most powerful update.

Welcome to beta-testing forum at