Hey guys,
I want do address the developers of PG with a somewhat technical issue.
I play and enjoy the game very much but there's one thing that bugs me very much, and that is the ship LODs.
I seems to me that PD dev team has used the "Optimize" modifier in 3Ds max (or something similar) to create most of the LODs. This is not recommendable at all for 3 reasons:
First - the UV coordinates of ships are all bugged and textures are smeared all around, so even on LOD1 ships look awful.
Second - The "Optimize" modifiers (if you're using this) does not preserve mesh silhouettes very well
Third - It is known to create errors in meshes (Like irregular faces, open edges and faces with 0 area). Another thing is that meshes produced by this method are not very optimized for use in realtime 3D, since they are not properly striptified.
The solution is very simple. Instead of using "Optimize" use the "Multi-Res" modifier. It preserves UV coordinates (even when there are multiple channels) It is much better at preserving silhouettes and it does not create irregular faces that often.
I know that the ship assets in PG are quite many, but creating of those LODs can be easily done with a simple maxscript. Moreover all the ships are rigid bodies and no skin transfer is required which makes the task even easier.
Here's a generic maxscript that should work with most versions of 3DS MAX:
What this will do is create LODs using Multi-Res and name them. Each LOD will be half the polygons of the previous one. It should also preserve UV coordinates and silhouettes much better than "Optimize" modifier.
If there's something more specific that you need, like preserving hierarchies, specific naming conventions or any other requirements you can edit the script. Also if you provide mi with some details of what your pipeline requires it will be not a problem to make a scrip specifically for your needs.
Please bring this to the attention of the PG dev team.
Best regards.
I want do address the developers of PG with a somewhat technical issue.
I play and enjoy the game very much but there's one thing that bugs me very much, and that is the ship LODs.
I seems to me that PD dev team has used the "Optimize" modifier in 3Ds max (or something similar) to create most of the LODs. This is not recommendable at all for 3 reasons:
First - the UV coordinates of ships are all bugged and textures are smeared all around, so even on LOD1 ships look awful.
Second - The "Optimize" modifiers (if you're using this) does not preserve mesh silhouettes very well
Third - It is known to create errors in meshes (Like irregular faces, open edges and faces with 0 area). Another thing is that meshes produced by this method are not very optimized for use in realtime 3D, since they are not properly striptified.
The solution is very simple. Instead of using "Optimize" use the "Multi-Res" modifier. It preserves UV coordinates (even when there are multiple channels) It is much better at preserving silhouettes and it does not create irregular faces that often.
I know that the ship assets in PG are quite many, but creating of those LODs can be easily done with a simple maxscript. Moreover all the ships are rigid bodies and no skin transfer is required which makes the task even easier.
Here's a generic maxscript that should work with most versions of 3DS MAX:
Code:
--Automatic LOD setup for static objects
global LODFloater
rollout AutoLOD_Rollout "Automatic LODs" width:200 height:300
(
button ok_btn "Make LODs for Selection" pos:[15,35] width:160 height:21
button cancel_btn "Close" pos:[60,65] width:65 height:21
spinner lod_spinner "Number of LODs" pos:[80,10] width:72 height:16 range:[1,4,3] type:#integer
on ok_btn pressed do
(
obj_list = getCurrentSelection()
clearSelection()
MultiRes_percentage = 100/(lod_spinner.value+1)
for i = 1 to obj_list.count do
(
temp_obj = obj_list[i]
for i = 1 to lod_spinner.value do
(
lod_copy = maxOps.cloneNodes temp_obj cloneType:#copy newNodes:&temp_lod
select temp_lod[1]
-- If you want to change the naming convention edit the line below
temp_lod[1].name = "$lod" +(i as string)
temp_lod[1].parent = temp_obj
addModifier temp_lod (MultiRes())
modPanel.setCurrentObject temp_lod[1].modifiers[#MultiRes]
temp_lod[1].modifiers[#MultiRes].reqGenerate = off
temp_lod[1].modifiers[#MultiRes].vertexPercent = 100/(2^i)
)
)
)
on cancel_btn pressed do closeRolloutFloater(LODFloater)
)
if LODFloater != undefined do (closeRolloutFloater(LODFloater))
LODFloater = newRolloutFloater "Automatic LODs" 200 150
addRollout AutoLOD_Rollout LODFloater
If there's something more specific that you need, like preserving hierarchies, specific naming conventions or any other requirements you can edit the script. Also if you provide mi with some details of what your pipeline requires it will be not a problem to make a scrip specifically for your needs.
Please bring this to the attention of the PG dev team.
Best regards.