CMOD models and normal maps

All about models for Celestia. How-to, programs, work in progres ...
Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

CMOD models and normal maps

Post #1by FarGetaNik » 09.09.2016, 09:16

I know Celestia supports normalmaps on cmod models, which until now worked fine for my spacecraft models. But another possibility would be to use a high-resolution normal map onto a med-resolution mesh. In my vast resources of textures, I only found one good example, where I have a height texture in higher quality than a 3D-model: Dione. But doing the same procedure as with my spacecraft didn't work, maybe that's because the spacecraft originated from .blend files where normalmaps were already applied? Or does Celestia need them to be in this special .dxt5nm format? I have no idea how to create that.

For Dione (the file was a blanc obj: http://space.frieger.com/asteroids/moons/S4-Dione) I applied just a diffuse texture in anim8or, exported it to cmod and edited it in cmodview as always, with generate normals... uniquify vertives. Then I selected the normalmap, which resulted in pretty strange lighting conditions:
dione-mesh-normal.png

and of course no normal effect visible in Celestia besides the shading of the mesh.

I created the normalmap by high-passing the bump-map of Dione, I tried to find the resolution of the mesh, but could only guess. The asteroid catalogue says it is a 50k mesh, cmodview says it is roughly 50k triangles and 25k vertices. How to calcutate the resolution of the mesh, so to speak the resolution of a 2D texture as we use for Celestia? Here is my normalmap for Dione, it is based on a bump map John Van Vliet posted on CelestialMatters. Contrast might be to high, but I will have to see how it looks like on the mesh to correct that:
2k.DoineDEM.0.5Meter-mesh-normal.png

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #2by Fenerit » 09.09.2016, 16:40

The issue could be:
1) 3D model is lacking of UV maps;
2) 3D model's normals points inward.

The point 1) is unclear whereas obj->Anim8or->apply texture->cmod DO make UV maps, and you have the texture displayed within the cmodview, but then you are referring of just "shading" within Celestia, that is, the model without texture.
For the point 2) the "invert normals" operation must be accomplished through the Anim8or's options.
Never at rest.
Massimo

Avatar
John Van Vliet
Posts: 2710
Joined: 28.08.2002
With us: 16 years 10 months

Post #3by John Van Vliet » 09.09.2016, 21:22

give me a bit

later on tonight i can post a walk through for what i do
using the pds " dione_ver512q.tab" file

this can be used for a high polly mesh that a ""height map" can be made from
and a low polly mesh to put a normal on

mostly in blender but using also one tool from the nms tools and G'Mic ( also runs on apple and Microsoft ) to make a normal from a 32bit exr image exported from blender ( baked displacement map )
( or a 16 bit NORMALIZED tiff )
Image

i do have a 200 MiB .blend of this screenshot for baking the obj to a "displacement map"

Added after 4 hours 15 minutes:
you might as well start with the best data
http://sbn.psi.edu/pds/resource/dioneshape.html

grab the " dione_ver512q.tab"
http://sbn.psi.edu/pds/asteroid/CO_SA_ISSNA_ISSWA ... PE_V1_0/data/dione_ver512q.tab

these tab files are basically a wavefront "obj" text based mesh
and there are TWO types ( the newer and older - mostly )
the very first line will have one or two numbers ,for the 512 vertex it is

Code: Select all

 1579014 
         1     -325.37079      325.45285      322.09992
         2     -324.02035      326.05320      322.71109
         3     -322.62283      326.60401      323.27094


that is the vertex count ( the older one has a space and the face count )

Code: Select all

 1579014  3145728
         1     -325.37079      325.45285      322.09992
         2     -324.02035      326.05320      322.71109
         3     -322.62283      326.60401      323.27094


this is the newer
so go to line 1579014 plus 2 and grab the face count and REMOVE the blank line
and paste it as above

this old script needs updating
-- save as "pdsVertexTAB2obj.py"

Code: Select all

#!/usr/bin/env python

import sys, os
def Usage():
    print '''
    To convert a older shapemodel Plate-Vertex to Wavefront OBJ
    Usage: %s <input.tab> <output.obj>
    '''%sys.argv[0]
   
if len(sys.argv) < 3:
    Usage()
    sys.exit(0)

#Create the output datasource
try:
    output = sys.argv[2]
except:
    Usage()
    sys.exit(1)

#Open the PDS tab file to read
try:
    input = sys.argv[1]
except:
    Usage()
    sys.exit(1)

infile = open(input, 'r')

#Create an empty file
outfile = open(output, 'w')

#Loop through the input
i = 0
for line in infile:
    if (i == 0):
        nVerts, nFaces = line.split()
        nVerts = int(nVerts)+1
        nFaces = int(nFaces)
        print line
    else:
        l1, l2, l3, l4 =  line.split()
        if i < int(nVerts):
            outfile.write('v ' + l2 + ' ' + l3 + ' ' + l4 + '\n')
        else:
            outfile.write('f ' + l2 + ' ' + l3 + ' ' + l4 + '\n')
    i = i + 1

print " Obj  created - done . "


to use cd into the folder with the tab file and in the terminal ( this will work in the windows cmd.exe and there new "expert shell" thingy

Code: Select all

./pdsVertexTAB2obj.py dione_ver512q.tab dione_ver512q.obj

---- or ----

python pdsVertexTAB2obj.py dione_ver512q.tab dione_ver512q.obj

.


now you have a 121.3 MiB mesh that can be imported into blender

from there USE!!! "blender render " and DO NOT use "cycles render " the tools ARE DIFFERENT

the old way of baking a "displacement map" to a uv mapped mesh works just fine

you can use a low poly count mesh or a sphere ( the sphere works best most of the time BUT not always)

there are many many youtube vids on this

bake a hires mesh to a low res one
blender 2.77 supports the output of a 32 bit float exr format image from baking
( or a normalized 16 bit tiff - if you place a check in the "normalize" check box ) and save as a 16 bit tiff

now your issue in the first post is that the mesh you DL'ed is NOT UV mapped and needs to be rotated 90 degrees ( i think ) from the website you linked to -z is UP in blender it needs to be front ( the #1 key on the keypad)
#1 = 0 long/360 long ( 0 lat)
#3 = +90 long ( 0 lat)
<control> + #1= -180/+180
<control> + #3 = -90 long
#7 = NorthPole
<control> + #7 = SouthPole

and a simple "uv map" in "spherical projection" and resave the mesh

then you can import the obj in "cmodview"


here is a 8k 16 bit unsigned tiff ( every tone is 0.5 Meters above the Minimum radius )
-- 48.8 MiB zip
https://drive.google.com/file/d/0B6ZYAd08tZL-VWlEWU5vMlpRRk0/view?usp=sharing

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #4by FarGetaNik » 10.09.2016, 07:10

Fenerit wrote:1) 3D model is lacking of UV maps;
no that's not it, I UV mapped it as always, Celestia is able to render a texture on it, after I checked that I told Celestia not to render the texture to see the effects of the normal map better.

Fenerit wrote:3D model's normals points inward.
Ok I'll try that. But I don't have to prepare the model in any other way in Anim8or for rendering a normalmap onto it? I mean the step which makes it able to display normals is done in cmodview.

John Van Vliet, thanks for your tutorial, I'm trying to follow it step by step, but I have some problems:
John Van Vliet wrote:mostly in blender but using also one tool from the nms tools and G'Mic
Oh no not nm tools again :sad: I was so happy to find a tool for gimp that does that for me, of course gimp can only handle 8bit (waiting for gimp 2.10 impatiently)

John Van Vliet wrote:to use cd into the folder with the tab file and in the terminal ( this will work in the windows cmd.exe and there new "expert shell" thingy
What am I supposed to do with this skript exactly? Run it with the console? Just adding the face count and renaming it to obj of couse doesn't work. How do I run this skript?

John Van Vliet wrote:you can use a low poly count mesh or a sphere ( the sphere works best most of the time BUT not always)

there are many many youtube vids on this
Ok I will need to search more, I found tutorials that seemed to work only for flat projection (not spheres)

John Van Vliet wrote:now your issue in the first post is that the mesh you DL'ed is NOT UV mapped and needs to be rotated 90 degrees
As stated, I UV mapped the mesh, or at least I guess so. Yes the models on this site are all rotated, but that's the smallest problem. I usally load the object in Celestia and let it render body axes, so I can see how it is supposed to be rotated.

Added after 18 minutes 19 seconds:
Fenerit wrote:"invert normals" operation must be accomplished through the Anim8or's options.
I tried edit/flip normals. The result is a psychadelic mesh that still has no normalmap displayed :weirdface: What operation did you mean? I haven't found something similar.

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #5by Fenerit » 10.09.2016, 09:25

Sorry, I read just now that: "I applied just a diffuse texture in anim8or". This is a bit misleading: what do you mean with "diffuse texture"? Whether you in Anim8or did apply material color for then texturing the cmod through .ssc the model still doesn't have UVmap. Instead, whether you did apply material color + texture (the Dione's one), then the cmod do have UVmap.
Please, do clarify this point to me at least. For what concern the normals, the "psychedelic" effect mean that point 2) wasn't the case and the normals were right.

a final question: how do you export the original mesh? If you still use .obj like swap file you do lost UVmap.
Last edited by Fenerit on 10.09.2016, 09:40, edited 1 time in total.
Never at rest.
Massimo

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #6by FarGetaNik » 10.09.2016, 09:39

Fenerit wrote:Sorry, I read just now that: "I applied just a diffuse texture in anim8or". This is a bit misleading: what do you mean with "diffuse texture"? Whether you in Anim8or did apply material color for then texturing the cmod through .ssc the model still doesn't have UVmap. Instead, whether you did apply material color + texture (the Dione's one), then the cmod do have UVmap.

I mean that I opened the materials, created a new one, loaded a diffuse texture (it is called that way in anim8or) then I hit the UV and selected spherical projection. If that's not clear enough, here is the mesh rendered in Celestia:
dione-mesh.jpg

Seems about right to me

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #7by Fenerit » 10.09.2016, 09:46

Please, do look at further my question in the previous post.
The image does clarify to me, thanks. Then another thing do can do is to check whether the original model is made of triangles o quads. If triangles, then do convert it in quads (I don know how the Anim8or's options behaves).
Never at rest.
Massimo

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #8by FarGetaNik » 10.09.2016, 10:08

Oh you mean it does make a difference if the texture is applied via cmod or ssc? When stitching the cmod together I usually erase the texture parameter, so Celestia doesn't tryhard to apply a texture on the mesh I don't want (even if that's not of any concern in this particular case).

The model is made of triangles. What do you mean by quads? squares? I don't know what you suggest to do :insane:

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #9by Fenerit » 10.09.2016, 11:40

Well, I do not want to make the things confused, so I apologize whether they seems a bit messy. Yes, quads = quadrangles or quadrilaters. In Blender you can do the job in selecting Edit Mode->Mesh-> Faces->Tris to Quads to "join triangles into quads".
Never at rest.
Massimo

Avatar
John Van Vliet
Posts: 2710
Joined: 28.08.2002
With us: 16 years 10 months

Post #10by John Van Vliet » 10.09.2016, 18:26

there has been a "problem" microsoft directx dds format
a prime example id Eros from Cosmographia
Image Image
the first is using the DirectX dds and the second is a png

the normal map also needs the "tangents" made as well as "generate normals" in CmodView

I was so happy to find a tool for gimp
you DO know that the 8 bit gimp normalmap plugin ( from 2010--2012 era ) messes up the latitudes from 45 n to 90n and 45 s to 90s
and you need a rgb 8 bit bumpmap


as to the python script it is a normal everyday python script
it replaces the vertex line count with a "v" and the face count with a "f"
( microsoft office can do this in excel )
the tab files are almost a obj file

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #11by FarGetaNik » 11.09.2016, 10:07

Fenerit wrote:Well, I do not want to make the things confused, so I apologize whether they seems a bit messy. Yes, quads = quadrangles or quadrilaters. In Blender you can do the job in selecting Edit Mode->Mesh-> Faces->Tris to Quads to "join triangles into quads".
Sorry, my confusion was more due to the fact that I'm pretty much a noob when it comes to blender. I managed to join triangles to quads, but still no normal effect visible. I have no idea what this should do, since there still remain some triangles and this reduces resolution. And cmodview proves that model after converted to cmod is again made completely from triangles.

John Van Vliet wrote:there has been a "problem" microsoft directx dds format
Well I was using a jpg normalmap. The first image seems somewhat similar to what I get in cmodview, but not quite.

I got a little bit of success, here is what I've done: Converting to a mesh made of quads, UV mapping in Anim8or, convert to cmod, open with cmodview, generate normals, generate tangents, uniquify vertices and select the png normalmap. This is what I got:
dione-normal.jpg


Cmodview shows the normalmap, but Celestia doesn't no matter what I do. Should I tell Celestia to use the normalmap via cmod or ssc? Both does not work for now. The contrast is to high, as I guessed, I lowered it by a factor of 2 and now I got the result I wanted. Now I need to tell Celestia to do what I want :think:

John Van Vliet wrote:you DO know that the 8 bit gimp normalmap plugin ( from 2010--2012 era ) messes up the latitudes from 45 n to 90n and 45 s to 90s
and you need a rgb 8 bit bumpmap
What does this plugin mess up? The polar areas seem just fine, the normalmap I posted was made from this plugin. I havn’t noticed any polar artifacts yet, and most normalmaps I use troughout Celestia are made with this plugin. And well, you can’t really blame this plugin for being limited by gimp’s constraints, a normalmap needs to be rgb, so you have to convert the image to a rgb first. I don’t think a plugin can change the mode of an image…

John Van Vliet wrote:as to the python script it is a normal everyday python script
it replaces the vertex line count with a "v" and the face count with a "f"
( microsoft office can do this in excel )
the tab files are almost a obj file
Well I don’t know anything about python scripts. The cmd.exe just spits back out the script itself… If Microsoft office can do this I will do some research about how and try.

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #12by Fenerit » 11.09.2016, 18:43

So far so good... and so early suspected. The mesh doesn't have the material. The main texture, like the Dione map itself, is not the material. Do try to change the mesh color within cmodview: it will not change. Then in Blender or Anim8or you must apply the material (phong, blinn, etc., phong is raccomanded).

P.S.
Python scripts need Python to be installed in your system; in Win it is not shipped by default OS installation.
Never at rest.
Massimo

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #13by FarGetaNik » 11.09.2016, 21:02

Fenerit wrote:So far so good... and so early suspected. The mesh doesn't have the material. The main texture, like the Dione map itself, is not the material. Do try to change the mesh color within cmodview: it will not change. Then in Blender or Anim8or you must apply the material (phong, blinn, etc., phong is raccomanded).

But is it even possible to have a mesh without material? When creating the cmod the acsi version always has at least one material. When in cmodview, I can change the color of the mesh:
dione-normal-color.jpg


Again, I'm not sure what you suggest, I thought I applied the material, otherwise the texture would not even appear in Celestia? What is phong and blinn or what to do?

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #14by Fenerit » 11.09.2016, 22:01

Yes, it is possible, it would work in Celestia with a color texture applied on it through .ssc but not if assigned within the cmod. but evidently wasn't this the case. The conversion in cmod through Anim8or did have applied the material; sorry, my fault. Then the thing is more intriguin. Possibly:
1) the normalmap isn't a flat background image;
2) the normalmap isn't 8bit 24k resolution image.

P.S.
You can try by yourself to open the .obj within the cmodview. Because the utility doesn't manage the .obj material, the mesh cannot be neither texturized nor colored. None the less once applied just normals and saved as cmod, it can be shown in Celestia by assigning a texture through .ssc. But if you do convert such cmod in ASCII and do set as material the texture and then follows the usual add-ons' procedure, you will get an unexpected, strange result.

P.P.S.
As a check out on normalmap you could do this. Because the mesh seem in low resolution and below the 65k limit of the 3DS format, you could try to convert the quads .obj into 3DS format with Anim8or and then to work on this latter format in the way you've hiterto done.
Never at rest.
Massimo

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #15by FarGetaNik » 12.09.2016, 05:41

Fenerit wrote:it would work in Celestia with a color texture applied on it through .ssc but not if assigned within the cmod

But if I don't UV map the mesh, then Celestia refuses to assign a texture on it. By doing so, I thought a material must be created.

Fenerit wrote:1) the normalmap isn't a flat background image;

What does that mean?

Fenerit wrote:the normalmap isn't 8bit 24k resolution image.

If you mean 8bit RBG ("24bit") it is.PNG, no Alpha channel present.

Fenerit wrote:You can try by yourself to open the .obj within the cmodview. Because the utility doesn't manage the .obj material, the mesh cannot be neither texturized nor colored. None the less once applied just normals and saved as cmod, it can be shown in Celestia by assigning a texture through .ssc. But if you do convert such cmod in ASCII and do set as material the texture and then follows the usual add-ons' procedure, you will get an unexpected, strange result.

I never know cmodview could do that :eek: I can still change color, but changing texture does nothing. When trying to generate tangents the mesh disappears...

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #16by Fenerit » 12.09.2016, 08:35

FarGetaNik wrote:When trying to generate tangents the mesh disappears...

This issue might derives because triangles do not ensure continuity along the so-called "edge-loops" and therefore needs quads.

FarGetaNik wrote:If you mean 8bit RBG ("24bit") it is.PNG, no Alpha channel present.

This doesn't ensure that png is flattened as background image and it can be a layer into its canvas. In this case the png must be "fuse down" as background image and saved with all the png's option checkboxes unchecked.

Just to picture the discourses so far...
This is GASKELL Toutatis in triangular .obj format loaded within the cmodview with normals applied on it. Note how it looks white shaded but not red shaded like I've choose; in this case whichtever textures is unapplicable.
tout_1.png

Here how the above mesh looks in Celestia once converted in cmod and texturized through .ssc. (every normalmap will not work in this case).
tout_2.png

Here how the same mesh looks in Celestia being texturized within the same cmod in ASCII format and set-up as an add-on (..extras\... etc., etc.)
tout_3.png


Something had not been coerent between the two methods either.
Never at rest.
Massimo

Avatar
John Van Vliet
Posts: 2710
Joined: 28.08.2002
With us: 16 years 10 months

Post #17by John Van Vliet » 12.09.2016, 09:28

What does this plugin mess up? The polar areas seem just fine, the normalmap I posted was made from this plugin. I havn’t noticed any polar artifacts yet, and most normalmaps I use troughout Celestia are made with this plugin. And well, you can’t really blame this plugin for being limited by gimp’s constraints, a normalmap needs to be rgb, so you have to convert the image to a rgb first. I don’t think a plugin can change the mode of an image…

a example

a normal map created from a 16 bit image using the nmtools
and one made from a 8bit png in gimp ( 4x4 setting-the first one in the menu and height 20 )

the first is the equator ( vertical in the center )
(gimp then nms )
Image Image

then the north pole
(gimp then nms )
Image Image

notice the difference at the pole

Each at the equator is fairly close to each other , but NOT the pole

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

CMOD models and normal maps

Post #18by FarGetaNik » 12.09.2016, 13:33

Damn, now I'm at a point I really have no idea what to do. I still don't get what the conversion to quads should do. Well I converted to mesh to quads and exported it. When opening it with blender, it is still made out of quads, but when importing the same obj into cmodview it shows triangles... if it converts it back to triangles there is no point in wasting quality:

dione-quads-tris.png


I really appreaciate your help, but is it possible someone tries to get it to work in Celestia? The link to the mesh is in my first post. The normalmap is derived from John's bump map. Regarding the normalmap, ok there is evidently a difference. But I never really noticed it when using them in Celestia, they seemed just fine. Here the bumpmap I'm using and the normalmap derived from it. John, could you try if the normalmap made by nmtools is really that drasticly different? Well I probably will stick to that plugin. As a Windows user it is just a pan to use nmtools properly, I have no sufficient computer skills to get it to work and I wasted far to much time trying for nothing.

https://drive.google.com/file/d/0B14NSu0PnA5xRTNNUnd3QllTM2c/view?usp=sharing
https://drive.google.com/file/d/0B14NSu0PnA5xUUdFT2h0dXJPSkU/view?usp=sharing
Last edited by FarGetaNik on 13.09.2016, 12:10, edited 1 time in total.

Avatar
Fenerit M
Posts: 1880
Joined: 26.03.2007
Age: 12
With us: 12 years 3 months
Location: Thyrrenian sea

Post #19by Fenerit » 12.09.2016, 15:27

FarGetaNik wrote:When opening it with blender, it is still made out of quads, but when importing the same obj into cmodview it shows triangles...

Don't care about that: cmodview always shows the least tassellation within its status bar.

Here my workaround upon the mesh and bumps you posted, normalmap only, no main texture. The normalmap has been drawn from your bumps in Wilbur, not on GIMP. Elevation = 3. The normalmap will not work if set within .ssc; it must be set within the cmod.
dione_gaskell.png


zip with ASCII cmod including normalmap line:
dione_gaskell.zip
(1.38 MiB) Downloaded 47 times

try to map it with your png and notice the difference. Important note: this model is as it is, I've overlooked the mesh's orientation and texture as well.
Never at rest.
Massimo

Avatar
Topic author
FarGetaNik M
Posts: 432
Joined: 05.06.2012
With us: 7 years 1 month
Location: Germany

Post #20by FarGetaNik » 12.09.2016, 16:43

Fenerit wrote:try to map it with your png and notice the difference. Important note: this model is as it is, I've overlooked the mesh's orientation and texture as well.

Well that's interesting. Using just your mesh does nothing besides messing up the texture orientation, the mesh doesn't align with the texture. But when I deactivate the texture for Dione, it showed the mormalmap! Unfortunately the normalmap also doesn't align with the model, so there is no real point in using it. But thank you anyways.

So could it be that surface texture is not compatible with normalmapping on cmods in Celestia? That would not surprise me since I encountered multiple bugs when trying to use to many textures on one object. Also the format of the textures seems to have an effect, the Earth texture in default is in png for a reason. If that's the case, I have to give up. I'd rather use a highres normalmap on a textured sphere than on a blanc mesh. But well... cmodview could do that... :think:

dione-textured-cmodview.jpg


That gave me an idea, I just have to do exactly what I did in cmodview to display it correctly: Using all png. Now all I have to do is let Celestia have fun loading a 86 MB png and watch it crash or not load it at all :zombie: yay :toothless: well that kind of defeats the purpose of using a normalmap on a mesh in the first place but hey... it looks cool? And I still can't read the high-resolution mesh :sad:

dione-normal-mesh.jpg


Added after 38 minutes 24 seconds:
Oh the problem is that Celestia only reads what is in medres folder, not highres. Or so it seems when using texture definition in cmod... yet another bug is that this kind of rendering conflicts with lunar lambert:

Code: Select all

   LunarLambert   0.6

Which gave Dione a nice touch of realism.


Return to “Modelling”

Who is online

Users browsing this forum: 1 guest