Users browsing this thread: 1 Guest(s)
[Tutorial] How to Rip N64 Models the Right Way
#1
[Tutorial] How to Rip N64 Models the Right Way

What you will need:

1964 Emulator: http://1964emu.emulation64.com/download.htm
Lemmy's Ripping Video Plugin: http://www.emutalk.net/showpost.php?p=20...ostcount=7
Blender: http://www.blender.org/download/get-blender/
Milkshape 3Very Sad http://chumbalum.swissquake.ch/ms3d/download.html
MS Paint or Gimp: http://www.gimp.org/downloads/
Automatic Clicker (Optional): http://www.mediafire.com/file/qt4z9cjd3l...rSetup.exe

And of course a ROM for a game you want models from. Find this on your own.

All these programs come are free with the exception of Milkshape 3D which has a free 30 day trial and then cost a one time fee of $20 dollars to register. MS Paint is the default "Paint" program that comes pre-installed on any Windows computer it works for most models but if you have a texture that needs transparency you'll need Gimp. But we'll get to that later.

-----------------------------------------------------------------------

So after downloading everything and installing everything your almost ready to go, extract Lemmy's plug-in's dlls to the plugin folder of 1964, and go to your C:\ drive's root directory and make a folder named "VRML" without the quotes.

Now open 1964 and set change your plug in before going in game to be Nemu64 Graphics (combine debug. Plug-ins>Change Plug-ins... Ctrl+P

Now run the game you want to rip models from. To rip models from an N64 game you have to be where the model is visible on-screen. When ripping models it will rip the entire room your in, including all the textures used through-out the room. So you may get extra unwanted stuff unless the level is what you want to rip.

So once you have the model you want to rip on-screen and press F3 to pause the game. Now go to Plug-ins>Video Settings... Ctrl+V Check the Export VRML box.

Now click okay and now you'll be back at your game which should still be paused. Press F3 again to unpause the game, as soon as you see a new frame of motion press F3 again to repause the game. If done correctly you should now have a bunch of .bmp textures and output.wrl which is your model. I recommend creating a new folder, name it the name of the model you were ripping, and move all the files of this dump into that folder so you know what it is, besides if you try ripping another model it will replace the old one. Now go back to 1964 and disable the Export VRML box to resume normal game play.



Stop! Before you go any further make sure to save your game in to a save state at the point where the model you want to rip is, occasionally the .wrl model will be bugged and won't convert so you will need to re-rip the model. This is a lot harder to do if you have to go back to the location you were at. So I recommend saving your game to a state with the model you want so you can easily return back to it later if you need to.


So now you've successfully got the model from the game. But that was the easy part. You can now close 1964 as we don't need it anymore unless you intend to rip a couple more models.

Now open Blender (make sure you installed Python like it recommended in the install otherwise Blender won't work properly). Press A to unselect everything, then press A again to select everything (this is necessary to select everything as it isn't all selected by default) press the Delete key and then choose the option to "Erase selected objects". Now you shouldn't have anything on screen as far as models are concerned.

Go to File>Import>X3D & VRML97 (.x3d/wrl)...; Navigate to your VRML folder and then to the folder you moved your rip to inside it. Select your output.wrl file and click import (then OK).

You should now see the model of the area you were in on your Blender screen. Now keep everything selected and go to File>Export>Wavefront (.obj)...; Click the drop down box in the export window and choose the folder where you had your model moved to. Name your .obj file to a name you want (I personally name the file Export.obj but it doesn't matter) and then click EXPORT WAVEFRONT OBJ and then Export in the window that follows.


There you go you've now converted the model to .obj that's one big step down. So now open Milkshape 3D and import your exported .obj file.

Sect everything and scale the model by 40 on all axises twice around the origin. Then rotate the model around the origin by 90 degrees on the X axis.

So now you'll have a lot of extra mesh data you probably don't want. So go to "Select" and choose Select by Group. Now select everything you don't want and do so carefully so you don't delete anything you wanted. So now if you reset your view on each of the windows you should be able to see your model pretty well. This can be done by right clicking the view and then selecting the reset view option.

So you may see that your model has some textures assigned but not all of them, that and they have odd colors. So it may seem counter-intuitive but we want to go to the Materials tab and delete all the existing material layers. Don't worry all the mesh groups have the proper texture name they belong to already on them so we won't lose any vital information.

I personally recommend using Auto Clicker which I had a link to up above to delete the useless material layers. You can do this by finding the co-ordinates of the Delete button and then enter the co-ordinates and add them as a left click with 0 delay. Loop it for 1000 times and hit start. This will usually wipe out all the materials and when you move your mouse it will end it's clicking cycle. I find it much more convenient this way but it isn't required. Here's a picture of my settings to get it to work:

[Image: Automatic_Clicker_Settings.jpg]

So anyway now that you've deleted all the useless and bugged materials it's time to get our mesh groups/geosets that use the same texture regrouped into one group that uses the same texture. Looking at my image below for an example, you will see that there each group has the names of the texture in them. What you need to do is go through the entire list of groups and double click each one with the same texture name in them. Make sure you don't have anything selected before you do this. Now after you've selected each group with the same texture name in them go to the rename box. You'll see the groups name has "Material.###_(texturename.bmp)" We need the name of the texture all these use so highlight everything after the underscore to get the texture name and copy it with Ctrl+C. After this hit the Regroup button that is just above the Rename button. This will put all those groups together.

[Image: Regrouping_by_texture.jpg]

Now scroll to the bottom of the groups and you'll see your regrouped geoset/mesh group with a name like "Regroup##" but that doesn't help us know what texture should go with it so select it and then delete everything in the rename box for the geoset. Paste (Ctrl+V) the texture name into it and click the Rename button.

Now go to the Material tab and create a new material layer. You'll now see two buttons with "<none>" in them. These are the textures assigned to the material layer. So click the top box with "<none>" on it and then navigate the the folder that contains your model dump. Then just paste (Ctrl+V) the name into the box that appears and hit the open button. This will get the proper texture for you. After doing this make sure that only your geoset that will be using this texture is selected and then double click the material layer to assign it to the geoset. If done successfully you will now see the texture appear on the model.

You may notice it appears a bit dark, this is because Milkshape's default lighting settings are quite dark, so to fix this go to the material tab and click the "Emissive" button and select the darker shade of grey on the bottom and hit okay.

[Image: MaterialLightFix.jpg]

So now your texture should look correct. Repeat this same process of regrouping, renaming and assigning the texture to each part of the model until all of them have the proper texture assigned and are grouped into one geoset/mesh group for each texture.


Congratulations your nearly finished! There's only one major step left and that is to merge all the textures used together properly so that the model displays correctly in all 3D programs. You may have noticed your model has problems with the texture and looks like this:

[Image: MutuantGoron.png]

Well we obviously don't want our model to look like that so now I'm going to tell you how you can fix that.

The first problem you'll often come across is having a texture that should be mirrored across so that the texture looks correct. Here's an example of a texture that is requiring this sort of fix:

[Image: MirrorThisTexture.jpg]

Since we're going to be combing the textures we're going to need to make a new image to place the textures on. So let's start with a 256x256 texture image, we can adjust it later if we need to but this should give us plenty of room to work and fit every texture properly in most cases.

But before I mirror this texture and put it into the new texture I'm going to fix the UV map just a bit. See how there are vertices in the UV map that extend just barely beyond the outside of the texture? This is because the N64 only extended the last pixel of the texture through the rest of the UV map that extended beyond the texture. But we want everything to fit inside the texture when we put it together so we're going to drag those vertices that extend beyond the texture just a bit to fit inside the texture like they should.

We are going to want to be able to see everything well so we can be precise so I recommend that before you move the texture to where you can see it all that you set the scale to 10 on the right and press the Scale button. Now after that we want to be able to see the whole UV map so we are going to move the texture to the middle of the window. To do this hold the CTRL key and drag the texture out to the middle of the window so you can see the whole UV map.

Now to fix the vertices that are just beyond the edge select the move option on the right and then just click (don't drag) the edge of the texture we're pulling the vertices in to. Now after this click the "Lock X" or "Lock Y" box depending on which direction your trying to move them. If your moving them up or down select "Lock X". If your moving vertices left or right select "Lock Y". Now after you've done that choose the select option and select the vertices on the edge that you want to pull in. Now select the scale option and drag them until they line up together on the edge of the texture.

Repeat this for any other edge as necessary. Remember position the yellow cursor with the Move option. Then select the vertices you want to fix. Then drag them in with the scale option making sure the proper direction is locked.

So now your texture should look something like this:

[Image: FixedTextureAlmost.jpg]

Now we're ready to place the texture into our new texture with it mirrored as needed. So using paint I'm going to copy and paste the texture into the new 256x256 texture. I'm then going to flip it (before I click anywhere that would anchor it as I don't want to flip the whole image) using Image>Flip/Rotate... CTRL+R. Now for the first texture it won't matter but on future textures your going to need to move it into place. I recommend zooming into the x8 mode so you make sure you line it up just perfectly.

Paste the texture into paint a second time and then drag it so it lines up with our flipped version without covering any pixels of the other pasted in textures, again I recommend doing this with the x8 zoom enabled. So after you've done this you should now have something like this in your new 256x256 texture:

[Image: FlippedInTexture8x.jpg]

So now we want to assign our new texture to the regrouped geoset. So create a new material layer and assign your new texture to it. Save your texture to a .PNG Save it in the same folder as your other textures so your uncombined textures still have their location properly set.

After you have assigned your new texture to a material double click your combined group to select it (make sure nothing else was selected before hand) and then double click the new material with your new texture to assign it to the combined group. So now you'll probably see that the texture appeared to turn all white with the texture portion you want it on really small inside it. We need to rescale our UV map to fit the texture portion it belongs to.

To do this properly we need to know how big our starting texture was. In my case the original texture had a width of 32 and a height of 16. The height is only half of the width so I need to make this so again. Before I start scaling things I want to have the yellow cross-hair back at the origin of the texture so I'm going to press the "Reset" button in the Texture Coordinate Editor window to put it back there. Now with all the vertices selected in the UV map I'm going to scale the Y-axis by .5 to make it so the height is half as much as the width again. Then after that I'm going to scale both the X and Y axises by .5 until it matches the texture on the combined texture. You may need to move the vertices to their proper location after reaching the correct size.

So after doing this this group should now display properly on the model like this:

[Image: FixedMirrorTexture.jpg]

So this is the first issue you'll have with N64 models that happens often. The next most common issue is where you have a part of the model that is supposed to cut off at the edge of the texture and then only have the solid color at the end of the texture flow through the rest of the model. An example of a group that uses this looks like this:

[Image: OutsideColorOnly.jpg]

There are two things that you can tell from this. The first is that you can see that there are a lot of pieces that extend beyond the texture. To make these display properly we're going to take the edge color and use that as an extension in our combined texture. We will want the dark blue dot in the center where it is still though as it's important to the shading of the model. We're only going to color outside the original texture block to be the outlying blue.

The second thing you can notice is that there are some faces that don't even cross over the dark blue in the center and are outside the texture altogether. These faces should all be one solid color of the outlying edge. So really with these faces you could scale them extremely small so they just fit on the light blue on the edge (as in scale them to just a single vertex) and then they will display correctly. They should all be one color.

You will want an estimate of how much of your edge color, in this case it's light blue, should be on the outside edge. So I'm going to take a screenshot of my scaled UV map window with everything in view and then paste it into a separate paint window. Now select only the actual texture part of the screenshot and copy and paste it lining up it's edges with the texture in the screenshot so you can estimate how much space you will need around the texture of the outside edge color. Like this:

[Image: RepeatedOutsideColor.jpg]

So comparing this with the previous screenshot you can see I'm going to need 4 columns going across, and 3 going rows going down. So I'm going to open the texture used in this group in a new paint window. Now that I have that open I'm going to get the color selector and right click the outside edge color. Now select everything and press delete. The whole texture should be the outside edge color now. Now paste these according to your reference screenshot image. Be careful to line them up accordingly, don't overlap them and leave an empty space where the real texture should go. Like this:

[Image: EmptySpace4Texture.jpg]

So now go back to the paint window you opened the original texture in and undo everything until you have the original texture again. "Ctrl+Z" Or just close it and reopen the texture again. Now select everything in the original texture and then paste it into your new texture. Place it into the empty space you left from when you were pasting the edge color.

Now looking back at the screenshot I had of the texture pasted over the UV map you may notice there was still a few faces outside them on the edge. So I'm going to grab the square shaped painting tool and paint a little bit extra on that edge so it properly covers that face. The faces on the bottom don't matter as those were the faces that were supposed to all be the edge color without any shading so they can just be moved up into the rest of the outside edge color we already did. My texture now looks like this:

[Image: ReadyToPlace.jpg]

Now I'm going to assign the group to the texture. The problem is that the texture doesn't auto update. So in the main Milkshape window go to Edit>Refresh Textures to update the texture inside the program so you can place your group properly. Alternatively you could just go to the material tab and assign the texture to the material layer again.

So now scale the texture by .5 on both sides until you reach it's original size in comparison to the texture. In my case the original texture was 16x16, so because my new texture is 256x256 I'm going to want to scale it by .5 until it reaches that same original size: 256x256 -> 128x128 -> 64x64 -> 32x32 -> 16x16. So looking at that I want to scale each it on both the X and Y axises 4 times. Then after doing this line the texture up where it should go based on either a second earlier save open in a new Milkshape window or compare it to a screenshot of the old UV map.

After you get it set it should not display naturally as seen here:

[Image: FixedOutsideEdgeTexture.jpg]


These are the two main problems you will encounter while ripping N64 models when it comes to their textures. Rarely some textures will need transparency to display correctly so I'll show how you can fix this to work correctly with Gimp. I personally recommend saving the textures that need transparency for last so you can do the rest in Paint instead of Gimp. You can find more on finding out if the textures have transparency in the Tips and Tricks section at the end of the tutorial.

Now repeat these two processes until all the textures are combined into your new texture. If your lucky you may even get some textures that fit inside the texture from the beginning, in which case you won't have to repeat anything, though this is rarely the case.



After you've Done all this it's time to finish up and clean up the model so it looks nice.

For starters you can now regroup all your geosets into 1 group so we can fix the smoothing on them. After regrouping them all (the name of the regroup isn't important anymore) select everything and go to "Vertex>Weld Together Ctrl+W" this will correct the shading on the model and redo the smoothing groups.

Now that our model is all combined into 1 texture we don't need all the useless material layers with the old separated textures so go to the material tab and delete all the old material layers until you only have your combined texture left.

Now save your model if you haven't already and your done. You may now export it to any format you want, or do whatever else you wish to do with the model.

Congratulations! You just ripped and fixed your first N64 model!



-----------------------------------------------------------------------
Tips and Tricks:
-----------------------------------------------------------------------

1. Finding the Textures Your Model Uses:

So you probably noticed that there are easily 100+ textures dumped with your model and that your model uses typically around 9-15 textures (sometimes more on more detailed models) you don't want to have to search through all those textures by hand to find the ones you need so I'll show you how you can get them separate from the rest with ease.

First navigate to the folder with your model dump and textures in it. Create a new folder inside the folder with all the textures and the model, you can name it whatever you want but I recommend naming it something like "Used Textures" or something of the sort so you can tell what it is. Now open that folder and then in a second window open back up to the folder with all the textures and the model in it.

Now if you renamed the regrouped geosets to the texture name that they use this will be much easier than looking at the material assigned to them and then finding the material in the material tab and finding the texture name. So in the second window that you have open click the search button, then choose "All Files and Folders" and then enter part of the texture's name and search. Two textures should now show up, you'll notice that they are the same name except one has a "_a.bmp" and one has a "_c.bmp". Copy both into your "Used Textures" folder. Repeat this with all the other texture names of the one's used on t he model. Note: You can simply click [i]"Change file name or keywords"
to save some time with restarting the whole search.

2. Transparency in Textures:

So now that we have isolated our textures we want to make sure none of them have transparency.

The difference between the textures is that "_c.bmp" are the colored textures you will always use. "_a.bmp" are what was used by the game to know what should be alphaed out, in other words it's where we are going to find what should be transparent.

After copy and pasting all our textures into our "Used Textures" folder right click inside it and select "View>Thumbnails" I recommend resizing the window so there are only 4 columns of thumbnails like this:

[Image: TextureSearchingForAlpha.jpg]

Now you have the alpha texture side by side with the color texture. If all the alpha textures are solid black, no worries your model doesn't have any transparent textures and you can just create your whole combined texture in paint. So in this case you can click and drag and select all the black _a.bmp textures and delete them all, they're totally useless to us in this case.

But if you get two textures like this:

[Image: TextureThatNeedsAlpha.jpg]

Then you have a texture that requires transparency. See how the "_a.bmp" alpha texture isn't solid black? This means that everything in the alpha texture that isn't black should be transparent on the colored texture. So all the white in the alpha texture should be transparent on the colored texture.

So open both textures in Gimp. On the colored texture go to "Layer>Transparency>Add Alpha Channel"[/b] so the texture can support transparency. Then copy and paste the alpha texture onto the colored texture. Before anchoring the alpha texture you just pasted onto the colored one look at the layers window/tab on the right side. You'll see a new layer called [i]"Floating Selection (Pasted Layer)". Right click that layer and choose "New Layer" so now you'll have it as a second layer named "Pasted Layer". With the magic wand tool select all the white on the alpha layer, then you can click the eye in the materials window/tab to turn off the visibility of the pasted alpha layer. Now click the colored layer and with your selection still active press the delete key to remove all the part of the texture that should be transparent. Now after this you can now save the texture as a .png so you have a new original texture with the transparency just in case you need it still.

After doing this you can now do the same thing you did with the normal textures and repeat it as necessary, make sure you add a alpha channel to your combined texture and delete the area your going to paste these into on your combined texture so you preserve the necessary transparency.

Note: Upon zooming in you can easily tell what should be selected and what shouldn't:

[Image: MakeTransprency.jpg]

3. What To Do With Geoset Groups That Don't Have textures In Their Names :

Sometimes while combining the geoset/mesh groups you may come across some geosets that don't have any material layer assigned or any texture in their name. This is nothing to worry about it just means that this portion of the model was all one solid color so the game instructed that geoset group to render as all 1 color. Most often the case with these is that it should be all black.

So if you do come across this you can either add a small solid black section to your combined texture, or just find a black portion of a pre-existing texture and then just move the single vertex that represents the faces of this geoset group to that black section on the texture. This is all that is required to fix these material-less groups.

Keep in mind this is just to my knowledge of how they work so far. It may be that they require a different color other than black or something else. I have just found this to be true with every case I have found so far.

4. How to Quickly Delete the Useless Materials:

When it comes to deleting all the useless material layers in earlier stages of fixing the model I personally recommend using Auto Clicker which I had a link to up above. You can do this by finding the co-ordinates of the Delete button and then enter the co-ordinates and add them as a left click with 0 delay. Loop it for 1000 times and hit start. This will usually wipe out all the materials and when you move your mouse it will end it's clicking cycle. I find it much more convenient this way but it isn't required. Here's a picture of my settings to get it to work:

[Image: Automatic_Clicker_Settings.jpg]

5. How to Easily Combine Textures With Blender:

Import your model into Blender after you've combined the geosets/mesh groups that use the same texture. Make sure you already flipped the textures that needed it as necessary. I recommend exporting your model to .OBJ model or something easy for Blender to read, Adding something like "Uncombined" to your .OBJ model you export is recommended so you don't get mixed up.

Once you've imported the model press "A" to select everything. Then press "A" again to unselect everything.

Now scroll out until the model is really small in your view. Right click it and scroll in to make sure everything now has a pink outline around it to confirm you've selected everything. (It must be selected this way for us to be able to combine textures the normal pressing of "A" to select everything doesn't work for this.)

Now on the very far left you'll see a grid like image (upon clicking it you'll find it's name is 3D View) with two up and down arrows on a button next to it. Click that and instead of 3D View change to UV/Image Editor.

Off to the right a little but still on the left side there is an option called "Image" click that and then go up to "Consolidate into one image." Set the texture size you want, 1024x1024 is the default size, but for most 64 models 512x512 should be fine.

Then hit okay and it'll make your new combined texture. Click Image and then click Save As and save the texture somewhere you can find it.

Now you could switch back to the 3D View if you wanted to but it's not required. At the top go to [i]"File>Export"[/b] and export it as a .obj again, I recommend giving it a new name such as "Combined". Then you can re-import it into any program you want and the textures will all be combined into 1 texture instead.

This method will auto combine the textures and adjust the UV map as necessary. This method repeats the texture as necessary to cover the needed room on the UV map. And for things that should repeat this is great. But often with N64 models the texture is supposed to just extend the last color at the edge of the texture to the rest of the outlying UV portion. So you'll need to open your texture up in Gimp or Photoshop and then carefully paint over the repeated textures such as the eyes would be on this goron:

[Image: MutuantGoronLink.png]

When combing textures this way the model will appear just as it did before with it's repeating errors but it will all be in one texture so you have to edit the texture afterwards to make it look correct. I recommend checking what part of the texture the UV map actually uses so you don't erase a piece the texture actually uses.


-----------------------------------------------------------------------


If you have any questions or comments just post them and I'll get back to you as soon as I can. I hope that you find this tutorial to be useful as I tried to be as thorough as I could.

Keep in mind there are more methods to rip and fix N64 models, this is just how I do it to get the nice end results I do. You may use other programs if you know how to use them but keep in mind I won't be writing about how to use other programs to do this as I don't know how to do it with other programs myself.
#2
thats pretty much the way i rip models exept i do pretty much all of the modeling in blender
Thanked by: renatoboucas
#3
Only problem I see is the picture you showed to be the final result after you fixed that blue texture for Zora link.
[Image: FixedOutsideEdgeTexture.jpg]
It looks like the part in the Zora's abs should be mirrored to me, but if that's another texture completely that would make a lot of sense.

But other than I really think you did a great job with this. I think that deserves a sticky.
Thanked by:
#4
Stickying it so it could be found by all would be nice. And yes the lower torso is a separate texture that needs mirrored like the belt texture.
Thanked by:
#5
After I deleted the old textures in Milkshape and re-added them after regrouping everything, the models still look like this:
[Image: 26959098.png]
By null at 2010-12-18
Notice that some of the meshes are still missing. To see if the missing meshes would make a difference, I exported a test .3ds file and opened it up in accutrans and this is what I got:
[Image: 96019515.png]
By null at 2010-12-18
I've tried ripping this way before, but I've never gotten it to work successfully. There were still missing meshes in blender as well, so I think the plugin is to blame.
Thanked by:
#6
Redownload it from the link I provided there was an older bugged version that didn't work correctly. It's pokemon stadium 2 your having problems with?
Thanked by:
#7
No I have the right plugin. I've been trying to rip Suicune from Pokemon Stadium 2 and or colloseum for close to four years now, and I've never had any success. This method has never worked for me when ripping from this game, because of the missing meshes.
Thanked by:
#8
It looks to me like your models have flipped normals, causing them to appear to have holes in them. Following my method with the tools provided doesn't do this and I can confirm that because I successfully ripped Suicune:

[Image: suicunefine.png]

http://www.mediafire.com/file/9ht47f6ib2...uicune.zip

It still needs some UV\texture fix ups which is to be expected with N64 models. But something in what your doing is incorrect and not the game itself.

Make sure your emulator is up to date, perhaps its a bad rom try a new one of the same game, or it may even be something else but I can assure you that Pokemon Stadium 2 and Suicune work just fine.
Thanked by: AllenSword
#9
Okay I figured it out, it's the version of 1964 i was using, you have to use the very latest version i guess. I cant get the textures to show up on my models in milkshape, i hit the texture refresh button, made sure the materials had textures assigned to them, and still nothing.
Thanked by:
#10
Again I may know the answer. Right click your 3D view window, its probably marked as "Smooth Shaded" what you need to do is change it to "Textured".
Thanked by:
#11
Just posting to alert people that I added a new part to the tips and tricks section telling you how you can combine textures with Blender instead.
Thanked by:
#12
you dont even need lemmy's plugin, that was like 6 years ago.

just use the latest dx9 plugin, and 3dr.. thats the easiest way.
sorry english bad....
-> GIVE ME MODELS !! <- Cry
Thanked by:
#13
(03-12-2011, 11:57 AM)mariokart64n Wrote: you dont even need lemmy's plugin, that was like 6 years ago.

just use the latest dx9 plugin, and 3dr.. thats the easiest way.
It's not all that unheard of for that tool to get messed up FoV. This at least makes sure you get undistorted geometry. Besisdes it's mostly like Print Screen anyway.
Thanked by:
#14
3dvia, gameassassin, do not have FOV problems. your not always limited to 3dr.. i know of even more dx debuggers then 3dr and 3dvia.. those are just common
sorry english bad....
-> GIVE ME MODELS !! <- Cry
Thanked by:
#15
How exactly do I resize these models to correct scale with Milkshape?... I don't understand resizing by 40 on all sides.
Thanked by:


Forum Jump: