How to Import VRMs & PMXs [MMD] to Roblox

Today, I spent a couple hours messing around with vrms and roblox and finally was able to figure out how to import them.

(Remember to delete the default cube [Select it, press delete or x + enter])
IMPORTANT NOTICE: Before importing this model into your roblox game, please check to make sure the original creator permits porting.

Importing VRMS and MMD model:
The Addon for Blender:

  1. Install the Addon

Go to Edit → Preferences → Add-ons → Install → Then select the zip file of the extension → Press the checkmark next to it in the list of Addons.
It should look something like this:

  1. Importing Models

Go to File → Import → Pmd/Pmx
Select the model if it isn’t already
Go to File → Import → Vmd
Go to viewport shading to ensure all the textures are there and not missing.

There’s a chance that your model will not have the textures assigned,
In that scenario, expand the following section

Messed up textures
  • Select the mesh, it should have a little upside down triangle icon

  • Open the materials tab, it should be right above the checkerboard icon on the right properties panel

  • Select a material that is missing (or pink)

  • The surface property should be selected to MMDShaderDev, expand BaseTex

  • Hit ‘X’ next to the texture if there is one.

  • Hit ‘Open’ in the textures

  • Find the location of the texture and select it
    It should be fixed now!

Converting to FBX

  1. Exporting

Go to File → Export → Fbx
Save it wherever you like, just remember where.

  1. Fixing up the model

Go to File → New → General
You can also hit undo and revert it to the default scene.

If you did not delete your previous light and camera before exporting, you will have to delete them.

Now you’ll notice that the joints and rigid bodies are visible.
You can hide them by clicking on the eye.
IMPORTANT: To minimize effort, you can click, hold and drag over multiple eye icons, making them all non-visible.
image

Also you will notice the bones are visible, to hide them, got to ‘[Model Name]_arm’ and click the eye.
If you hit render right now, you’ll notice that all the textures are now white.

You’ll have to manually assign them.

  • Select the mesh, it should have a little upside down triangle icon

  • Open the materials tab, it should be right above the checkerboard icon on the right properties panel

  • Select a material that is white/blank

  • The surface property should be selected to ‘PrincipledBSDF’

  • Press the small circle next to BaseColor and select Image Texture.

  • The material will now turn black

  • Press ‘Open’ and select your texture

  • It will now appear!

If your model has a lot of arbitrary materials for hands, gloves, shirt, pants, etc, but the texture is the same, DO NOT manually import them all. Simply hit the minus sign when you select a texture, and remove all the extra ones.

  • Repeat above steps to assign texture images to all materials

  • You may notice that your eye texture is gone! When you assign the face texture to the eye material, it doesn’t show! Don’t worry! Your texture for the eye is part of your hair texture instead. (NOTE: this is only the case in certain scenarios)

I previously had around 30 textures btw
image

If you head over to viewport shading, you’ll see that the textures are in place.

There’s a very large chance that your surface is really shiny/glossy right now. In that scenario, follow the steps below:

  • Select a material from the materials panel

  • Edit the materials roughness and change it to 1.

Before:


After:

Properties:
image

You’re pretty much done now, (in blender at least). Go to the timeline at the bottom of the screen, it should have a play button.
Try pressing the play button and make sure your animation works.

Splitting the meshes:
Select the mesh, it should have a upside down triangle icon. You’ll find it under: [Model name] → [Model name]_arm. It’ll be named as [Model name]_mesh. You can also search for it if you can’t find it.

  • Hit ‘TAB’, you’ll enter into edit mode.
  • Hit ‘P’ and press ‘Material’
    This’ll split your mesh based on materials, you will now have different meshes with a material each, INSTEAD of multiple materials in 1 mesh, this allows you to not need to bake the textures and spend time.
  • You’ll now notice that the hair is separated from the head, and possibly the eye.
  • In order to fix this, exit edit mode by pressing ‘TAB’ once again.

Exporting!:
Export your file once again as a fbx. Be sure to name it something different so you don’t get it mixed up with the old file.
It’s also recommended to save your project as a .blend file so you can revisit it in case you need to change something.

Depending on how powerful your computer is, blender may or may not stop responding. Usually, it stops responding for around 2 seconds on a fast pc, and about 10 on a fairly new laptop. Up to a minute on an older laptop or pc.

IMPORTING THE MODEL TO STUDIO:

  • Open studio and whatever game/place you’d like.

  • Go to the plugins tab and hit ‘Avatar Importer’

  • Press custom, and find your FBX file.

  • Once imported, you’ll notice that the Rigid Bodies/Joints are now visible (whatever they were again)

  • Find all of them, select them, and delete them.

DO NOT DELETE THE MESHES CALLED [Model name]_mesh or anything starting with that.

  • Hit Animation Editor, then select the model/rig.

  • Name it whatever you’d like, it doesn’t matter.

  • Hit the 3 dots next to the name of the animation on the top left of the animation editor window.

  • Hit Import → From FBX Animation then find your FBX file you just imported and select it. (This’ll probably make roblox studio crash for a bit(

  • It should now be done! Hit the Play button in the animation editor to check out the animation!

FINAL RESULT:

(Btw, credits for this model: MiHoYo)

QUESTIONS:

If you have any questions or need clarification, please reply, I’ll try my best to help :slight_smile:

32 Likes

:slight_smile: im about to commit import stuff from https://mmd.hololive.tv LMFAO :TowaWRYYYYY:

It’s quite interesting that this is possible in Roblox to be honest, good tutorial.

Edit: where is the materials tab? solved

5 Likes

Thanks, it works well
only problem is that roblox refuses to import the textures that has Chinese characters in the name.
I had to rename them just to make them import

1 Like

For me, Vroid only exports a VRM file. How do I get a PMX or PMD file? I would just try importing the VRM, but the option is greyed out in blender.

1 Like

I followed all of the steps but when I import the model into Roblox only the hair texture is visible. All of the other parts are invisible and will not show up. My textures do not have any Chinese characters in their name.

1 Like

How do i add facial animation to it?

1 Like

Anyone recommend the best methods now? I made a character in Vroid Studio and want to set it up as a Roblox Rig.

Recently, I have been trying to do this too:

My current tedious method is:

  1. Import the Vroid Studio file(.vroid) into VRM file(.vrm) through Vroid Studio’s official export near the end of the creation of a character
  2. Import the VRM file into Blender through a Blender add-on, instead of using the one OP mentioned, use “VRM Format” instead, it’s free on Blender’s built-in add-on section
  3. Export that file as FBX(.fbx) format, if you don’t have it, it’s another built-in add-on too
  4. In Roblox, at the toolbar, on top of “File”, you should see “Import 3D”, then import the FBX file
  5. With those grey meshes, for each of the meshes, add SurfaceAppearance, then fix the respective textures through UV wrapping it again(Yourself) and making a big image containing all the content you need
  6. Crash out as you realize you may have wasted 6+ hours of time implementing a simple feature every other game engines support
    image

:3 Enjoy

2 Likes

Hello, I am back to elaborate on how to deal with steps 5 & 6.

  1. You want to go to your directory to find the original model’s files. You will get these files once you finish step 2, where you can open the texture files through Blender. The file directory may differ depending on whether you install it independently or use the digital distribution service Steam, like me.
  2. Hide bones,(The rig) and collisions, for instance, in Blender, your character should look something like this.
  3. Screenshot your current face, also get the reference from the image titled “Thumbnail” if you have to. Then start editing an image containing all the data(I’ll say use anything like Gimp or Pixlr Editor E, or any other image editing software). First, there should be a face image that looks like this.

    Next, I want you to duplicate that and fill the whole square with the face’s color, then get the red image and set it as overlay over the square. It should look like this.

    Next, select the files that represents the eyes, and paste all of them onto another square of normal skin color.
    image


    The layers should also go in the order I sent, and the third one should be set as an overlay also, something like this would be created.

    Finally, get another square of skin color, then paste all the files about the eyebrows and any details around the eyes into that. You also need to edit the image with two brows, as one represents the one on top and the other represents the bottom details.
    image
  4. Hence, you should have a image like this.
  5. Select the face, the face should have a yellow highlight.
  6. Set your panel to “UV Editing” from “Layout”, it should look something like the following.
    image
  7. Next, on the “UV Editing” area, click the A key to select all of the vertices. I suggest also opening another window, where that one is set to “UV Editor” and the one you see from the images as “3D Viewport”.
  8. Remove all the materials in the model, then add a new material, and set the base colors to Image Texture, and set it to the image you made.
  9. Unwarp the model, choose any methods that work for you, then start fixing the model 1 by 1 until it’s finished.

I am currently experimenting with other methods, to no avail, I’ll message more here once I find quicker methods.