Populate People 3DS Max to Rhino with Mapped Materials

Hello,
3DS Max has a lovely “populate” function that allows one to quickly create a crowd of people doing various things. I would like to import these people into Rhino with textures but have been unsuccessful after many attempts in many file formats.

I would upload but am not allowed with the .3DS or .OBJ file path.

Any help would be appreciated.

Andrew

@andrewmcc, you might try to zip one obj with texture, then upload it. The population could be done using small a script.

c.

I don’t know about the textures generated by populate specifically, but I have had success importing fully textured 3ds max models into rhino via FBX format. HOWEVER - it is critical that these materials be simple, standard materials - materials dependent on a plugin or special Autodesk materials will not transfer.

Thank you for your responses. I uploaded the files.
PeopleCrowdTest.zip (19.1 MB)

Per this autodesk thread I switched over the populate materials to more defulat arch/design mental ray materials. Link here

Still no luck though with either the FBX export or the obj. export.

Rhino Import with only 5 materials.

I prefer staying in Rhino when possible but may need to use Max for this.

I´ve been able to import the geometry as shown in your last picture but the zip archive above does not contain any image textures. The material (*.mtl) file also does not reference textures. If you open it in a texteditor like Notepad you see some material properties for the obj file. Not all properties can be read by rhino, only color, glossiness, gloss color and ambient color. Textures are usually readable but there must be a reference to them in the mtl file. So the problem seems not Rhino related or related to obj or fbx file format.

Usually if an obj has textures assigned, the mtl file contains information about the texture name and path. Are you sure that the people are textured eg. have you set the characters to “Textured Skin” as explained in the linked autodesk page before exporting the obj ?

Btw. you are exporting the skeleton as well (the IK joints). Rhino justs imports them as meshes as there is nothing you can do with them. You might disable exporting the joints to save some bytes.

c.

I think the reason being 3dsmax uses Multi/Subobject Material for the texture, that is not supported by Rhino. U might want to break the subobject material with scripting. or spend sometime to switch Multisubobject with Standard Material Node.

another way is to take the texture path of 3dsmax Populate Mesh, copy the path and paste it on Rhino texture path (use GH to do this task if u have hundreds of meshes on the scene.)

1 Like

@Runnie,

i´m almost sure that no textures where assigned even in 3ds max. The meshes in the obj do not have texture coordinates. It should not matter if multi material is enabled or not. As long as there are no texture references in the mtl file, no texture file in the archive and no texture coordinates in the meshes, there is nothing to display after import.

c.

Populate meshes in 3dsmax already Have UVMap taken care of by default.
Please see image below, without UVMap, there is no way skin texture can even be displayed correctly on the viewport. (unless it is Ptex, in this case it didnt use Ptex)

The reason why OP failed to get Texture to Rhino is because 3dsmax Multi/SubObject Material applied to it by default in Populate function. which is not supported in Rhino. = (see image below on Slate Editor)

to solve this, I rewire the texture path to Standard Max Material(see image below). u can do this via scripting if u have thousands of meshes.

after you have done with that, export the model via OBJ and it will export nicely to Rhino with texture already applied (make sure u go to export setting and set the folder path where the texture image will be exported, and choose any format u like, Jpg, etc). dont forget to make sure “texture coordinate” box checked

this is what it looks like after I import the OBJ in Rhino =

UV also brought in nicely

so that’s the process. the main task is actually converting 3dsmax multi/subobject material to Standard Max material and u will have no problem exporting texture to Rhino.

Cheers

1 Like

@Runnie,

if you unwrap one figure of the obj posted by the OP, you should see that the meshes do not have any texture coordinates. Therefore i think the problem is not in Rhino.

Yes. Therefore it is pointless to search for an error in Rhino. The obj has to be exported out of max with UV coordinates and a texture map, then Rhino is be able to read and assign it. btw. Rhino supports a single map for multiple objects too if the UVs are set up correctly.

c.

yes, without texture path in Max, it is not possible to locate where the texture is in Rhino.

as far as I know, currently Rhino does not support Subobject Material (texture). there is no way I can assign Material perSubobject basis unless it is a separate object.

but I would love to know if it is actually possible to do subobject material in Rhino.

Cheers.

edit* I just came across this post in 2013
http://v5.rhino3d.com/forum/topics/how-to-apply-multi-sub-object-materials-in-rhino-3d

Pascal said you cannot assign subobject material in Rhino. but there is a test command in which u can apply colorperface. but it is not supported yet.

however, 2 years have passed, maybe someone has come up with script for this?

After enabling TestEnableSubFaceMaterialAssignment you might try to first create a subselection, then right click on a rhino material (with texture) and choose “assign to selection”. This works from the MaterialEditor not properties and renders in the Rhino Renderer. Note that what Pascal wrote applies here too, the command is not supported, use at your own risk.

c.

yup you are right. since it is not fully supported, there no way to import 3dsmax Multi/subobject material to Rhino. I have tried countless ways with no success.

one more Q, any way to assign Material ID to subobject selection in Rhino?

perhaps Rhino 6 will address this nicely.

Cheers

What do you mean with Material ID ? In Rhino, every material as an index in the material table. I´ve never tried to access an object using subobject (subface) materials using scripting. It may fail as it is officially not supported.

c.

Maybe my english is a little bit confusing, sorry for that,
to make it simple, I ll just sum it up in few sentences,

  1. The main goal in this post is how to import 3dsmax Populate Function successfully to Rhino with all its Texture information applied correctly.

  2. The problem lies in 3dsmax Populate Function.
    by default it assigns Multi/subobject Material on meshes, Multi/subobject Material in Max works with Material ID Assigned per subobject (Face). this is unique to 3dsmax that is why exporting to Rhino with this type of material assigned is always a fail

  3. The solution I came up with was to switch Multi/subobject Material on 3dsmax Populate Meshes to Standard Material in which rhino can read it without problem.as shown on my previous post.

  4. however that would require one to find Maxscript. (or doing tedious work by rewiring manually if u have 1000 people on the scene)

  5. after hearing that Rhino does have Subobject material function (but not supported yet and to be honest I have never used that function before) perhaps there is another secret command that I dont know to modify material ID on the selected Faces.

  6. in which the answer is No. Subobject in Rhino works not with Material ID, but a simple material selection on material table. (after enabling The test command).

so this clears out all the confusion.
Hope my english can still be understood.

Cheers.

@Runny,

i do not know how the materials are set up in max. But in Rhino and the particular case of this thread, you would not have to create 120 different materials for all 120 characters. You can if you have the time to do it manually or write a script to import it though. Materials are useful if you need different properties for every object. But with 120 characters, i do not see why the material properties should be different for every character. The only difference required would be the texture coordinates, then all characters can read from different UV coordinates of the same single texture file. This file has all character textures placed side by side, similar as various body parts are placed in the last image you’ve posted.

Lets say you have 4 characters, all share the same material using the same texture. The texture is a square, divided into 4 sub squares. In every subsquare one texture is placed, one for every character. Then the texture coordinates are just set up differently for every character mesh. Since crowds are usually shown from a distance and are made using low poly meshes as the ones shown above, such texture maps are usually small, sometimes only 256px per character. I`ve seen crowd maps for more than 50 people all mapped from a single 4K texture. The coloring variation was done using UV randomisation into different areas of the texture. So this can either be done efficient, or if you want to have individual control over other material properties using a texture and material for every character. I would prefer the first if the amount of characters is getting larger.

c.

I definetly agree with that and thats the profesional way of doing it. I would do the same if i was to work on the scene in max or maya.

However. The original poster was asking for a quick way to Just import people and procedural texture generated from populate function in 3dsmax. And use it as jpeg texture in rhino and work mainly in rhino. Populate feature actually randomly generate texture asigned to crowd. They hv percentage on how many version u want to be applied in the crowd. U can hv 10 texture assigned to 1000 people if u want it. It is a quick way to get the work done in a single click without hving to construct 4k map texture.

If i was to tell him to find the texture path in 3dsmax temp folder, construct multi uv space based from that texture and deal with mapping id for the crowd. It would defeat the purpose of using populate default texture in 3dsmax.

Populate is used fr quick simple preview and simple animation. To generate crowd. In a single click, without hving to deal with mapping and id’s. I think thats what the original poster want to get from max and simply bring it to rhino.

But for professional work. As what hv stated by clements. It is the right thing to do.

Thank you for this helpful discussion. Runnie is correct that I wanted to quickly generate a crowd in Rhino without having to deal with tons of mapping and id’s. My models are landscape oriented and I need simple lo-poly scale figures.

I suspected this issue had something to do with how 3DS Max generates textures for the populate function. Per Runnie’s advice I rewired the texture path in 3DS to Standard Max Material and exported via OBJ. It imported to Rhino with the textures applied. If you have a script you would be willing to share for rewiring a crowd that would be wonderful. Hopefully Rhino 6 addresses this sub object material issue. Thanks again.

1 Like