How to have less faces in 3DS Max

D2X-XL - Descent II update for modern systems with many new features and enhanced graphics. Home Page

Moderators: Grendel, Aus-RED-5

Locked
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

How to have less faces in 3DS Max

Post by jshaner » Sat Feb 23, 2008 4:22 pm

Hello. I currently model various things in my spare time in 3D Studio Max, and i have been having some issues. I know that there are some people here who do this kind of thing, whether it be for Descent or whatever. Whenever i make my models, they always come out with 1000's of faces or more. What i use them for does not like that, and i need to know hiw to reduce them (if possibly there is a way to do it without redoing the entire thing). Help would be greatly appreciated!
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

Post by Diedel » Sat Feb 23, 2008 6:13 pm

Well, once I've given my current ISP the boot and moved to a better one you can join the D2X-XL forum and ask our main modeler MetalBeast for help.

As far as I know he isn't too fond of face removal tools and does everything by hand.
VladR
DBB Ace
DBB Ace
Posts: 23
Joined: Tue Jan 24, 2006 11:15 am
Contact:

Post by VladR » Sun Feb 24, 2008 11:37 am

There are plenty modifiers that let you do just that. I`m a programmer (not an artist), but from the top of my head there should be modifiers named like Optimize, Multires. One of them lets you freely choose the vertex count by percentage in a range of 0%-100%. That`s the one I always use to decimate the polygons since you can freely rotate the mesh and decide whether it`s still too much detailed or it could handle another reduction.

You`ll notice though that the texturing may break while reducing polys. That`s normal. Thus, it`s prefered to texture the mesh only after you have the final mesh.


Just one more thing to remember - it`s the VERTEX COUNT that counts,not TRIANGLE COUNT.

So, the important thing is to reduce the amount of vertices, not triangles - which is especially important under 3dsmax, because you can start manually retriangulating the mesh and you could end up with a mesh that has less polys but it`ll still have same amount of vertices.
Ever heard the term \"Vertex Shader\" ? It`s a little program that is executed upon each vertex of the mesh (to transform/light/texture (coords) it) by your gfx card.
www.avenger.sk
VladR Games
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Sun Feb 24, 2008 1:24 pm

ok, thanks, will have to try
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 2:15 pm

Hi,

if you want to have really good low- or mid-poly meshes you have to make them yourself.

Using any kind of poly-reducing tools, make the mesh unclean. the polygon structures are going to be bad.

So all kind of such tools are only good, if you are using the meshes for renderings only.

If you want the meshes for games or other application, you have to make them yourself, using the highpoly mesh as reference only.

There are many tutorials on the net how to start and lern low-poly modelling.

Examples:
http://www.3dtotal.com/team/Tutorials/b ... this_1.asp
http://www.techtut.com/Tutorial/3D-stud ... house.html


Hope this helps,
MetalBeast.
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Sun Feb 24, 2008 2:59 pm

I have found that when using techniques like extruding, as suggested in the tutorials, that i always get a (d)i(e)i(g)i(e)i(n)i(e)i(r)i(a)i(t)i(e) (exclude i's) triangle error when put the model through to be processed by the game engine i am using. That error is really getting on my nerves, and i don't know exactly what i am doing that is causing it.

For example, when i use a model of a pyro from wherever, whether it be extracted from some game/mod, i make sure it is in 3ds max and looking good. I then export it to X (x being whatever) format and process through my game tool (makes tags and such), it always comes up with that error, and it is not due to open faces (can be though), but it is in fact due to two or more triangles sharing the same side. And this is tru for almost any slightly comples model that i make or download. Being a rookie at modeling, i am not sure what the problem is or what to do.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 3:31 pm

It is difficult to say anything, if we don't know what format or engine you are using.

Anyway, if you want some model to check for bugs, just sent it to me in max format, I can check it for you.

I think your problem can be engine related.
Some engines don't like, if meshes have vertices at same places, belong to different faces, but you need it for planar UVW-Mapping.
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Sun Feb 24, 2008 3:47 pm

For example, I can extract the Pyro GL from the main D3 Hog File. K, now i have it in .oof format. I downloaded a program to convert it to .3DS. Now it is in 3DS format. I open it up (import, rather) in Max and on the right side from the drop down bar do an SDL check. When i do that, a whole bunch of faces get highlighted red, because they are in error. This is because (i'm pretty sure) two or more triangles share the same side(there are no open faces or oher errors i don't think). When i export and process it i will get errors, and the model won't work, whereas if i do the same thing with a box, no faces are selected and it works ok.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 3:55 pm

Ok, now we get closer ;)

The tool you are talking about is 3DSgen?,
so I have to say you, this tool is crap, sorry.
I used it few times, but the meshes which were produced are useless.

You can fix it, but it is full load of work.

You have to find the right vertices-radius and select the whole model. Then select all vertices and choose \"weld selected\", this will clenup all the useless vertices in mesh and delete most of doubled faces, but not all. So depend of mesh complexity you have to correct the rest manually.

What I made was using the converted meshe as reference and made completly new one.
It is better and cleaner, than fixing bad meshes.
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Sun Feb 24, 2008 4:45 pm

OOF to 3DS 1.0 With this program you can convert the geometry information stored in OOF-files (Outrage Object Files) to 3DS-files (3D-Studio). 44.7 KB DF | FP
http://www.planetdescent.com/site/files ... opment.asp

Taken straight from PD, this is what i have been using after awhile ago i discovered that 3dsgen was crap.

So are you saying that this will get rid of the error?
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Sun Feb 24, 2008 5:19 pm

zombie999 wrote:Ok, now we get closer ;)

The tool you are talking about is 3DSgen?,
so I have to say you, this tool is crap, sorry.
I used it few times, but the meshes which were produced are useless.

You can fix it, but it is full load of work.

You have to find the right vertices-radius and select the whole model. Then select all vertices and choose "weld selected", this will clenup all the useless vertices in mesh and delete most of doubled faces, but not all. So depend of mesh complexity you have to correct the rest manually.

What I made was using the converted meshe as reference and made completly new one.
It is better and cleaner, than fixing bad meshes.
Sorry, 3dsgen is not crap. It was written to be used in conjunction with Max OOF Utility not by itself. That is where you had your problems.

3dsgen does that on purpose because it is not possible to preserve textures correctly when exporting to the 3ds format, I had to break down the faces into sections in order to preserve them.

Here's the description straight from MaxOOFUtility readme...
Description
-----------
Max OOF Utility is the companion program for 3dsGen. After you convert your
OOF file to 3DS and import into 3dsMax. This utility will help you in finding
and creating materials, colorizing the model, welding the redundant vertices
created by 3dsgen and assigning special properties to sub-models.
And the usage...
Usage
-----
The program has several functions. All of which rely on a model being loaded,
and collapsed to Editable Mesh(s).

Weld Redundant Verts: This welds all of the redundant vertices that are created
by 3dsgen as a kludge to preserve texture mapping. This function operates on
all Meshes in the scene.

Colorize, B/W Colorize: Colorizes each sub-model(object) randomly. This operates
on all Meshes in the scene.

Create Materials: Attempts to locate textures of type TGA used by the model and
create materials in the Material slot chosen. It will also remove textures from
those submodels that are of type GPNT,GRND,ATCH,SPCL and glows. This function
operates on the currently selected Mesh(s).

Wildcard Material Search: Uses <filename>*.tga search name when searching for
textures and can save you from having to manually locate the file.

Set Property: This will set the Custom Propety attribute of the Mesh(s) to the
desired property.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 5:27 pm

The problem is, that OOF format is crap, So 3dsgen is just doing what it can do, I think supersheep did his best, but OOF is using non-standard modeling convetions. It is bad documented and without usable tools.

So converting meshes from OOF to any standard format is not possible without losses. And in other direction it is not better.

It is the reason, why we stopped to support OOF in d2x-xl and changed to ASE.

Like just wrote, you have to weld all vertices in the mesh in order to become usable model.

But all UVW mappings are than gone, so you must do new work on UVW-mappings and texturing.

Is is so big amount of work, so I think it is better to make the model new from scratch, using converted model as reference.

EDIT: supersheep was first ;)
Anyway, using 3dsgen or other tool converted meshes from OOF, means many work for you :D
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Sun Feb 24, 2008 5:40 pm

zombie999 wrote:The problem is, that OOF format is crap, So 3dsgen is just doing what it can do, I think supersheep did his best, but OOF is using non-standard modeling convetions. It is bad documented and without usable tools.

So converting meshes from OOF to any standard format is not possible without losses. And in other direction it is not better.

It is the reason, why we stopped to support OOF in d2x-xl and changed to ASE.

Like just wrote, you have to weld all vertices in the mesh in order to become usable model.

But all UVW mappings are than gone, so you must do new work on UVW-mappings and texturing.

Is is so big amount of work, so I think it is better to make the model new from scratch, using converted model as reference.

EDIT: supersheep was first ;)
Anyway, using 3dsgen converted meshes means many work for you :D
That is not what I said and you still seem to misunderstand. Max OOF Utility welds the verts for you. The UVW mapping is not lost. It would be if the model were not broken apart by 3dsgen.

I took the Hellion and converted it from an OOF to 3DS, imported into 3dsmax, and had a fully textured, exportable model with all keyframes in under 5 minutes. How is that a lot of work?
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 5:47 pm

Ok, if this way works and the mesh is clean with proper UVW maps, than it may be a solution for you jshaner.

But anyway I'm lucky,
I haven't to work with OOF models anymore :D

And I don't like converted models, I prefer to build them myself :D
User avatar
BUBBALOU
DBB Benefactor
DBB Benefactor
Posts: 4193
Joined: Tue Aug 24, 1999 2:01 am
Location: Dallas Texas USA
Contact:

Post by BUBBALOU » Sun Feb 24, 2008 7:55 pm

wow - sounds like someone who never used Super Sheep's tool in the first place, has alot to say about nothing

bad form

bad attitude

zombie999

I seem to have a better workout dodging your stupidity than attempting to grasp the weight of your intelligence.
User avatar
d3jake
DBB Admiral
DBB Admiral
Posts: 1074
Joined: Tue Dec 21, 2004 10:08 am
Location: Minnesota, USA

Post by d3jake » Sun Feb 24, 2008 7:56 pm

I dunno how to get the keyframes (due to my version of 3ds Max not being compatible with the OOF utility (I assume), but I converted over the GX model from the D4 section of PD and it textured perfectly, no issues.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Re:

Post by MetalBeast » Sun Feb 24, 2008 8:03 pm

BUBBALOU wrote:wow - sounds like someone who never used Super Sheep's tool in the first place, has alot to say about nothing

bad form

bad attitude

zombie999
I used it, just don't like it,
the Max OOF Utility did'nt work for me.

And I don't like your comment.
Is just your evidence of incapacity.
Go and spam to another thread.
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Re:

Post by SuperSheep » Sun Feb 24, 2008 9:12 pm

d3jake wrote:I dunno how to get the keyframes (due to my version of 3ds Max not being compatible with the OOF utility (I assume), but I converted over the GX model from the D4 section of PD and it textured perfectly, no issues.
I wrote the utility for 3dsmax 3.0. I don't have more recent versions of 3dsmax so I cannot attest to it's working in later versions.
zombie999 wrote:I used it, just don't like it,
the Max OOF Utility did'nt work for me.
I can understand the reason you don't like it however it does indeed work, just not on your version of 3dsmax. I do not have time to do updates and can not afford to get later versions of max, but the "source code" is included.

Your view of the software is similar to thinking software is a POS because it won't work on later versions of windows. I think that is why Bubba was coming down on you.

You are free to use it or not as you see fit, but the utility does work on the versions of max that it was written for, and I stand by my software.
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Post by SuperSheep » Sun Feb 24, 2008 9:14 pm

btw...for anyone interested in making OOF Utility compatible with later versions of max, the .ms file includes the source.

For those who don't have it, I will post it here as well.

Code: Select all

-- Max OOF Utility
-- by Robert 'SuperSheep' Piontek

global myImage  = \"selfloat.bmp\"
global myImageA = \"selfloat_a.bmp\"
global myLogo   = \"maxooflogo.bmp\"
global curPath  = \"C:\\\\\"
global wildSearch = true
global bwcolor = 0
global props    = #(\"None\", \                    \"Facing\", \                    \"Rotate\", \                    \"Turret/FOV\", \                    \"Glow/Thruster\", \                    \"Custom(Logo)\", \                    \"Shell\", \                    \"FrontFace\", \                    \"Jitter\", \                    \"Viewer\", \                    \"Monitor(01-08)\", \                    \"Layer\")
global monitors = #(\"Monitor01 - Left HUD Display\", \                    \"Monitor02 - Ship Strength\", \                    \"Monitor03 - Right HUD Display\", \                    \"Monitor04 - Left Energy Indicator\", \                    \"Monitor05 - Right Energy Indicator\", \                    \"Monitor06 - Shields\", \                    \"Monitor07 - Afterburn Indicator\", \                    \"Monitor08 - Unknown\")
global curPropShown = 1
global winSize = [250,440]
global mtlSlot = 1
-- Property initial/save states
struct s_fov  (fov,spr,rt)
struct s_glow (color,radius)
global prop_rotate  = 1.0
global prop_monitor = 1
global prop_fov     = s_fov  fov:90.0 spr:1.0 rt:0.0
global prop_glow    = s_glow color:blue radius:1.0

-- Takes a string with single \\'s and returns one with \\\\'s
fn doubleSlash str = (for i = str.count to 1 by -1 do (if str[i] == \"\\\\\" then str = replace str i 1 \"\\\\\\\\\"); return str)
-- Takes a string with \\\\'s and returns one with \\'s
fn singleSlash str = (for i = str.count-1 to 1 by -1 do (if str[i] == \"\\\\\" and str[i+1] == \"\\\\\" then str = replace str i 1 \"\"); return str)
-- Removes file extension from str
fn removeExt str = (for i = str.count-1 to 1 by -1 do (if str[i] == \".\" then (str = replace str i 4 \"\"; exit));	return str)

-- Rename diffuse texture to long name
fn renameDiffuse mat =
(
	dif_map = mat.diffuseMap

	-- Have we already got a fully qualified path name and file exists?
	f = getFilenamePath(dif_map.filename)
	if matchPattern f pattern:\"*\\\\*\" then (f = getFiles(dif_map.filename); if f.count == 1 then return 0)

	-- Store as much of the file name as we can
	search_name = curPath + mat.name

	-- Can we find this name?
	if mat.name.count<17 then
	(
		f = getFiles(search_name + \".tga\")
		if f.count == 1 then (dif_map.name = mat.name; dif_map.filename = singleSlash(f[1]); return 0)
	)

	-- Can we find the name with a wildcard search?
	if wildSearch == true then
	(
		f = getFiles(search_name + \"*.tga\")
		if f.count == 1 then
		(
			-- We found it, so exit
			mat.name         = removeExt(filenameFromPath(f[1]))
			dif_map.name     = mat.name
			dif_map.filename = singleSlash(f[1])
			return 0
		)
	)

	-- We now need to prompt user to find texture
	f = getOpenFileName filename:(search_name + \".tga\") caption:(\"Missing texture: \" + mat.name) types:\"TGA Files(*.TGA)|*.tga|All files(*.*)|*.*|\"
	if f != undefined then
	(
		-- Store new map and material name and update Current Path
		mat.name         = removeExt(filenameFromPath(f))
		dif_map.name     = mat.name
		dif_map.filename = singleSlash(f)
		curPath          = getFileNamePath(f)
	)
)

-- Renames all bitmaps on materials
fn renameMaterials =
(
	if ClassOf meditMaterials[mtlSlot] == Standard then
		if ClassOf meditMaterials[mtlSlot].diffuseMap == BitmapTexture then
			renameDiffuse meditMaterials[mtlSlot]
	if ClassOf meditMaterials[mtlSlot] == MultiMaterial then
	(
		for i = 1 to meditMaterials[mtlSlot].material.count do
		(
			if ClassOf meditMaterials[mtlSlot].material[i] == Standard then
				if ClassOf meditMaterials[mtlSlot].material[i].diffuseMap == BitmapTexture then
					renameDiffuse meditMaterials[mtlSlot].material[i]
		)
	)
)

-- Create Material Editor materials from objects in scene
fn createMaterialsFromObjects =
(
	if selection.count == 0 then (messageBox \"No objects selected!\"; return 0)
	curMatId = 0
	matnames = #()
	materials = #()
	-- Create a material list from objects
	for i = 1 to selection.count do
	(
		o = selection[i]
		if ClassOf o == Editable_Mesh then
		(
			mat = o.material
			if mat == undefined then continue
			if ClassOf mat == Standard then
			(
				if ClassOf mat.diffuseMap != BitmapTexture then (o.material = undefined; continue)
			)
			for curFace = 1 to o.numFaces do
			(
				matId = getFaceMatId o curFace
				local submat = mat
				if (ClassOf mat==MultiMaterial) and (matId>0) and (matid<=mat.material.count) then submat = mat.material[matId]
				local index = finditem matnames submat.name
				if index == 0 then
				(
					append matnames submat.name
					append materials submat
					curMatId += 1
					setFaceMatId o curFace curMatId
				)
				else setFaceMatId o curFace index
			)
		)
		update o
	)
	-- Create materials
	if curMatId == 1 then
	(
		setMeditMaterial (mtlSlot) materials[1]
		-- Show texture in viewport
		if ClassOf meditMaterials[mtlSlot].diffuseMap == BitmapTexture then
			showTextureMap meditMaterials[mtlSlot] meditMaterials[mtlSlot].diffuseMap on
	)
	else if curMatId > 1 then
	(
		mat = multiMaterial numsubs:curMatId name:(\"Material #\" + (mtlSlot as string))
		mat.materialList = materials
		mat.names = matnames
		if mat != undefined then
		(
			setMeditMaterial (mtlSlot) mat
			-- Show texture in viewport
			for i = 1 to curMatId do
			(
				if ClassOf meditMaterials[mtlSlot].material[i].diffuseMap == BitmapTexture then
					showTextureMap meditMaterials[mtlSlot].material[i] meditMaterials[mtlSlot].material[i].diffuseMap on
			)
		)
	)
	-- Rename the materials
	renameMaterials()
)

-- Assign material to selected objects
fn assignMaterials =
(
	-- Assign material to all objects
	for i = 1 to selection.count do
	(
		o = selection[i]
		if ClassOf o == Editable_Mesh and o.material != undefined then
		(
			o.material = undefined
			update o
			if ((findString o.name \"$attach\")==1) or ((findString o.name \"$normal\")==1) or \			   ((findString o.name \"$gun\")   ==1) or ((findString o.name \"$ground\")==1) or \			   ((findString o.name \"$dummy\")==1)  or ((findString (GetUserPropBuffer o) \"$glow\")==1) then continue
			o.material = meditMaterials[mtlSlot];
			update o
		)
	)
	redrawViews()
)

-- Welds all redundant vertices
fn weldAllVerts o=
(
	j = o.numVerts
	k = j
	tmppos = o.verts[j].pos
	do
	(
		if o.verts[j].pos!=tmppos then
		(
			if k>(j+1) then (setVertSelection o #{(j+1)..(k)}; meshOps.weld o; deselect o.selectedVerts)
			tmppos = o.verts[j].pos
			k = j
		)
	) while (j-=1) > 0
	-- Do last set of vertices
	if k>(j+1) then (setVertSelection o #{1..(k)}; meshOps.weld o; deselect o.selectedVerts)
)

-- Colorize Model
fn colorize style =
(
	for i = 1 to objects.count do
	(
		o = objects[i]
		if ClassOf o == Editable_Mesh then
		(
			if      (findString o.name \"$attach\") == 1 then o.wirecolor = orange
			else if (findString o.name \"$normal\") == 1 then o.wirecolor = color 255 0 255
			else if	(findString o.name \"$gun\")    == 1 then o.wirecolor = red
			else if (findString o.name \"$ground\") == 1 then o.wirecolor = green
			else if (findString o.name \"$dummy\")  == 1 then o.wirecolor = yellow
			else if ((findString (GetUserPropBuffer o) \"$glow\")==1) then continue
			else if (style == 2) then
			(
				vpcolor = getVPortBGColor()
				vpgray  = (vpcolor.r + vpcolor.g + vpcolor.b)/3
				if (bwcolor += 16) > 255 then bwcolor = 0
				if (bwcolor > vpgray-25) and (bwcolor < vpgray+25) then bwcolor = vpgray+25
				if bwcolor>255 then bwcolor = 255
				o.wireColor = color bwcolor bwcolor bwcolor
			)
			else
			(
				vpcolor = getVPortBGColor()
				mycolor = color (random 0 196) (random 0 196) (random 0 196)
				if (mycolor.r>vpcolor.r-25) and (mycolor.r<vpcolor.r+25) then mycolor.r = vpcolor.r-25
				if (mycolor.g>vpcolor.g-25) and (mycolor.g<vpcolor.g+25) then mycolor.g = vpcolor.g-25
				if (mycolor.b>vpcolor.b-25) and (mycolor.b<vpcolor.b+25) then mycolor.b = vpcolor.b-25
				if mycolor.r<0 then mycolor.r=0
				if mycolor.g<0 then mycolor.g=0
				if mycolor.b<0 then mycolor.b=0
				o.wirecolor = mycolor
			)
		)
		update o
	)
)

-- Set Custom property
fn SetCustomProperty type =
(
	numProps = 0
	prop = \"None\"
	if selection.count == 0 then return 0
	for i = 1 to selection.count do
	(
		o = selection[i]
		if ClassOf o == Editable_Mesh then
		(
			sfov  = stringStream \"\"
			sglow = stringStream \"\"
			format \"%, %, %\" prop_fov.fov prop_fov.spr prop_fov.rt to:sfov
			format \"%, %, %, %\" (prop_glow.color.red/255) (prop_glow.color.green/255) (prop_glow.color.blue/255) prop_glow.radius to:sglow
			SetUserPropBuffer o \"\"
			if ((findString o.name \"$attach\")==1) or ((findString o.name \"$normal\")==1) or \			   ((findString o.name \"$gun\")   ==1) or ((findString o.name \"$ground\")==1) or \			   ((findString o.name \"$dummy\")==1) then continue
			case type of
			(
				2:  SetUserPropBuffer o \"$facing\"
				3:  SetUserProp       o \"$rotate\" prop_rotate
				4:  SetUserProp       o \"$fov\"    (sfov as string)
				5: (SetUserProp       o \"$glow\"   (sglow as string); o.wirecolor = prop_glow.color)
				6:  SetUserPropBuffer o \"$custom\"
				7:  SetUserPropBuffer o \"$shell\"
				8:  SetUserPropBuffer o \"$frontface\"
				9:  SetUserPropBuffer o \"$jitter\"
				10: SetUserPropBuffer o \"$viewer\"
				11: SetUserPropBuffer o (\"$monitor0\" + prop_monitor as string)
				12: SetUserPropBuffer o \"$layer\"
			)
			prop = GetUserPropBuffer o
			if prop == \"\" then prop = \"None\"
			numProps += 1
		)
	)
	if numProps>0 then messageBox (\"Property \"+prop+\" set for \"+ numProps as string + \" object(s)\")
)


-- ******************** Floating Rollout window ********************
--

-- ********** Sub-Object(s) Property rollouts **********
--
rollout Prop1 \"None\"   (label lab01 \"Sub-Object(s) has No properties.\"   align:#left)
rollout Prop2 \"Facing\" (label lab02 \"Sub-Object(s) always Faces player.\" align:#left)
rollout Prop3 \"Rotate\"
(
	label   lab03     \"Sub-Object(s) is a Rotator.\" align:#left
	spinner spnrotate \"Rotates once every: \"        align:#left across:2 fieldWidth:40 range:[0.1,999,prop_rotate]
	label   lab04     \" seconds\"                    align:#right
	on spnrotate changed val do (prop_rotate = val)
)
rollout Prop4 \"Turret/FOV\"
(
	label   lab05    \"Sub-Object(s) is a Turret.\" align:#left
	spinner spnfov   \"Field of View: \"            align:#right offset:[-30,2]  fieldWidth:40 range:[0.0,360.0,prop_fov.fov]
	spinner spnspr   \"Seconds per Rotation: \"     align:#right offset:[-30,-3] fieldWidth:40 range:[0.1,60.0,prop_fov.spr]
	spinner spnrt    \"Reaction Time: \"            align:#right offset:[-30,-3] fieldWidth:40 range:[0.0,10.0,prop_fov.rt]
	on spnfov changed val do (prop_fov.fov = val)
	on spnspr changed val do (prop_fov.spr = val)
	on spnrt  changed val do (prop_fov.rt  = val)
)
rollout Prop5 \"Glow/Thruster\"
(
	label       lab06         \"Sub-Object(s) is a Glow/Thruster.\"  align:#left
	colorpicker cpglowcolor   \"Glow Color: \"                       align:#left  across:2 color:prop_glow.color
	spinner     spnglowradius \"Radius: \"                           align:#right offset:[0,4] range:[0.0,999.9,prop_glow.radius]
	on cpglowcolor   changed val do (prop_glow.color  = val)
	on spnglowradius changed val do (prop_glow.radius = val)
)
rollout Prop6  \"Custom\"    (label lab07 \"Sub-Object(s) has Custom texture/color.\" align:#left)
rollout Prop7  \"Shell\"     (label lab08 \"Sub-Object(s) is a Door Shell.\"          align:#left)
rollout Prop8  \"FrontFace\" (label lab09 \"Sub-Object(s) is a Door Front.\"          align:#left)
rollout Prop9  \"Jitter\"    (label lab10 \"Sub-Object(s) Jitters.\"                  align:#left)
rollout Prop10 \"Viewer\"    (label lab11 \"Sub-Object(s) is Viewer.\"                align:#left)
rollout Prop11 \"Monitor(01-08)\"
(
	label        lab12 \"Sub-Object(s) is a Monitor.\" align:#left
	dropdownlist dlMonitor                           align:#left width:(winSize.x-54) items:monitors selection:prop_monitor
	on dlMonitor selected sel do (prop_monitor = sel)
)
rollout Prop12 \"Layer\" (label lab13 \"Sub-Object(s) is drawn after model.\" align:#left)


-- ********** Main Rollout(s) **********
--
-- About rollout
rollout main \"About\"
(
	label  label01 \"Max OOF Utility v1.0\"
	bitmap logo width:132 height:68 fileName:myLogo
	label  label02 \"by Rob 'SuperSheep' Piontek\"
	label  label03 \"See Readme.txt for instructions\"
)
-- Object rollout
rollout model \"Model\"
(
	group \"Mesh\"
	(
		button       btnWeldVerts  \"Weld Redundant Verts\" align:#left  width:(winSize.x-54)
		progressbar  pbProgress                           align:#left  width:(winSize.x-54) height:8 value:0 color:red
		button       btnColorize   \"Colorize\"             align:#left  width:((winSize.x-59)/2) across:2
		button       btnColorizeBW \"B/W Colorize\"         align:#right width:((winSize.x-59)/2)
	)
	group \"Materials\"
	(
		button   btnSelFloater \"+\"                       align:#left  width:20 height:20 across:3 toolTip:\"Select object(s)\" images:#(myImage,myImageA,2,1,1,2,2)
		button   btnCreateMat \"Create Materials\"         align:#left  pos:[(btnSelFloater.pos.x+30),(btnSelFloater.pos.y)] width:((winSize.x-70)*.5)
		spinner  spnMatSlot   \"Slot: \"                   align:#right fieldWidth:30 range:[1,24,(mtlSlot)] type:#integer offset:[0,4]
		checkBox cbWildSearch \"Wildcard Material Search\" align:#left  checked:wildSearch
	)
	-- Fix 3DS file button pressed
	on btnWeldVerts pressed do
	(
		setCommandPanelTaskMode mode:#modify
		try
		(
			disableSceneRedraw()
			undo off
			(
				for i = 1 to objects.count do
				(
					pbProgress.value = 100*i/objects.count
					obj = objects[i]
					if ClassOf obj == Editable_Mesh then
					(
						modPanel.setCurrentObject obj
						subObjectLevel = 1
						weldAllVerts(obj)
						subObjectLevel = 0
						update obj
						clearSelection()
					)
				)
			)
			enableSceneRedraw()
			pbProgress.value = 0
		)
		catch
		(
			enableSceneRedraw()
			pbProgress.value = 0
			throw()
		)
		redrawViews()
	)
	on btnColorize   pressed          do (colorize 1)
	on btnColorizeBW pressed          do (colorize 2)
	on btnSelFloater pressed          do (max selection floater)
	on btnCreateMat  pressed          do (createMaterialsFromObjects(); assignMaterials())
	on spnMatSlot    changed val      do (mtlSlot = val)
	on cbWildcard    changed theState do (wildSearch = theState)
)

-- Sub-Object rollout
rollout submodel \"Sub Model\"
(
	button       btnSelFloater \"+\"             align:#left  width:20 height:20 across:3 toolTip:\"Select object(s)\" images:#(myImage,myImageA,2,1,1,2,2)
	button       btnSetProp    \"Set Property:\" align:#left  pos:[(btnSelFloater.pos.x+30),(btnSelFloater.pos.y)] width:((winSize.x-100)*.5)
	dropdownlist dlProperty                    align:#right width:((winSize.x-75)*.5) height:13 items:props selection:1

	on dlProperty selected sel do
	(
		if sel!=curPropShown then
		(
			cp = (curPropShown as string)
			execute(\"removerollout Prop\"+cp+\" MaxOOFUtility\")
			execute(\"addrollout Prop\"+(sel as string)+\" MaxOOFUtility\")
			curPropShown = sel
		)
	)
	on btnSetProp    pressed do (SetCustomProperty curPropShown)
	on btnSelFloater pressed do (max selection floater)
)

-- Create Floating Rollout
file = getFiles(myImage);  if file.count == 1 then myImage  = file[1]
file = getFiles(myImageA); if file.count == 1 then myImageA = file[1]
file = getFiles(myLogo);   if file.count == 1 then myLogo   = file[1]
MaxOOFUtility = newrolloutfloater \"MaxOOFUtility\" (winSize.x) (winSize.y)
addrollout main     MaxOOFUtility
addrollout model    MaxOOFUtility
addrollout submodel MaxOOFUtility
addrollout Prop1    MaxOOFUtility
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Sun Feb 24, 2008 9:16 pm

Well, i do agree that the OOF format is painful and outdated, but it is something i must bear with nonetheless. It isn't that bad, it just needs more attention than a more common format. Maybe my example was poor, i don't know. Even then, i could use another example with dif. formats involved and get the same error. I can take the ASE pyro from Diedel's site and get the same thing if i do an SDL check and export it to my game engine. Not to say it is a crappy model, (it is beautiful and fits what it was intended for) but i don't know where to go. So i guess ignore what i had to say about .OOF and see this: I get the same errors with any model, whether it be downloaded or hand made (Yes, i also prefer to hand make things). So really, what is causeing my problems? My game engine being nit picky?


-and textures aren't a major concern right now. I am trying to get a decent model working (not to say the ones i have tried are not, they just don't suit my uses). So any help on dif. formats and such would be appreciated!
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Post by MetalBeast » Sun Feb 24, 2008 9:24 pm

If you have problems with any models, than it's problem of your engine, which probably needs a special kind of models.

So you should read in the engine-documentation, what kind of models are supported.
VladR
DBB Ace
DBB Ace
Posts: 23
Joined: Tue Jan 24, 2006 11:15 am
Contact:

Post by VladR » Mon Feb 25, 2008 1:50 am

Sorry for OT, but is there a way how to get the level geometry imported into 3dsmax ? Or at least into ASE format so I could import it into my engine/editor (and put Radiosity lights there).
www.avenger.sk
VladR Games
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

Post by Diedel » Mon Feb 25, 2008 1:57 am

I will write an ASE exporter for Descent models and levels, but that will take a while. We will need it for the port to the new engine anyway - I want the entire D1+D2 level base available for it. ;)
VladR
DBB Ace
DBB Ace
Posts: 23
Joined: Tue Jan 24, 2006 11:15 am
Contact:

Post by VladR » Mon Feb 25, 2008 2:09 am

Yeah, that would be definitely great. But I can understand that not being a priority right now.
I believe some long time ago I`ve found some docs about the internal format of the level geometry, there was just some issue with extracting the level.

Writing an importer shouldn`t be a matter of more than 4 hrs at most, i.e. one evening, as long as the documentation is full and format doesn`t contain last-minute hacks.

Any quick pointers ?
www.avenger.sk
VladR Games
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

Post by Diedel » Mon Feb 25, 2008 5:23 am

Supersheep,

FYI: OOF tool seems to mess up face normals, at least that's MetalBeast's experience with it. Not that we'd need it since introduction of ASE support in D2X-XL, but maybe you want to look into it.
User avatar
BUBBALOU
DBB Benefactor
DBB Benefactor
Posts: 4193
Joined: Tue Aug 24, 1999 2:01 am
Location: Dallas Texas USA
Contact:

Re:

Post by BUBBALOU » Mon Feb 25, 2008 7:18 am

zombie999 wrote:I used it, just don't like it,
the Max OOF Utility did'nt work for me.

And I don't like your comment.
Is just your evidence of incapacity.
Go and spam to another thread.
I have no issues modeling for any engine or with any program and or plugin!

Your lack of knowledge and experience is showing...

Back On Topic
-------------------

You can Use Intel Multires© to at least reduce your model to and acceptable level but the finishing touches will have to be done by hand

I seem to have a better workout dodging your stupidity than attempting to grasp the weight of your intelligence.
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

Re:

Post by Diedel » Mon Feb 25, 2008 7:30 am

BUBBALOU wrote:wow - sounds like someone who never used Super Sheep's tool in the first place, has alot to say about nothing

bad form

bad attitude

zombie999
Bubbalou,

until you showed up here, Zombie and S-Sheep were having a well behaved and conducted conversation - no insults or hard feelings involved as far as I can see.

But apparently it is your nature to crap into every thread you come across.

If this was my forum, you'd have gotten the boot already.
User avatar
MetalBeast
DBB Ace
DBB Ace
Posts: 151
Joined: Wed Sep 05, 2007 6:03 am
Location: http://3d-get.de/metalbeast
Contact:

Re:

Post by MetalBeast » Mon Feb 25, 2008 8:38 am

BUBBALOU wrote:
I have no issues modeling for any engine or with any program and or plugin!

Your lack of knowledge and experience is showing...
Dude, you are just poor spammer, nothing more.
Big mouth nothing behind. ;)
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Mon Feb 25, 2008 9:21 am

You know, i have to admit that i am a rookie at modeling and things involved with that.

I will make a video of what i am doing on rapidshare, so you all can see what i am facing, so there is no more of this controversy. (poor spelling, i know)

it (the game engine) basically supports any format that 3ds max can read, but it just has to be clean. EDIT:has to be exported, but that is not important. I only started Max a couple months ago. I know i am not too good at it, and that is why i am asking for help.

Everybody's models i have tried are very detailed and good, i just can't use them for what i am doing.

I would consider the ASE format, but i can't find a good free importer for max.

i have to go, so help would be appreciated.
i will inform you all about my rapidshare video later sometime.
User avatar
Aus-RED-5
DBB Friend
DBB Friend
Posts: 1604
Joined: Fri Apr 23, 2004 7:27 am
Location: Adelaide, South Australia
Contact:

Post by Aus-RED-5 » Mon Feb 25, 2008 3:16 pm

People, don't feed the trolls!

Ignore the comments and move on or I will start editing and removing posts.

So far the comments aren't that bad, so keep it civil please. ;)
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner » Mon Feb 25, 2008 7:19 pm

I don't mean to cause controversy...i just need assistance.

I have been very busy lately, i will get my video up asap. :idea:
User avatar
BUBBALOU
DBB Benefactor
DBB Benefactor
Posts: 4193
Joined: Tue Aug 24, 1999 2:01 am
Location: Dallas Texas USA
Contact:

Post by BUBBALOU » Mon Feb 25, 2008 7:27 pm

jshaner just p/m me if you need any assistance without biased opinions or bad attitudes from the peanut gallery

you should of posted this in the ptmc gallery anyways

EDIT By MOD
Link removed.
We could link to some of your own bad attitude as well, but no need to continue the trolling in here.

I seem to have a better workout dodging your stupidity than attempting to grasp the weight of your intelligence.
User avatar
Aus-RED-5
DBB Friend
DBB Friend
Posts: 1604
Joined: Fri Apr 23, 2004 7:27 am
Location: Adelaide, South Australia
Contact:

Post by Aus-RED-5 » Mon Feb 25, 2008 8:05 pm

Ok.

Lets leave it at that. :roll:
Locked