Working with Blender and 3ds Max

Greetings, good blender folks! I created this thread to share what I can come up with about using Blender and 3ds Max together. Hopefully there will be some usefull feedback, and I’ll try to sum up the essential information in the first post, editing it as it goes.

FIRST SUMMARY

  • OBJ is very well supported from both sides:
    Just make sure you check quads (for subdiv work) anywhere you can chose between tris, quads and Ngons (in both software at export & import time)
    No need to rotate the model at ANYTIME (the coordinate systems are the same) no real need to change the scale either, if a choice gets necessary, chose meter as it seems to be the most usual use of BU (Blender Units)
    Are Blender shape keys supposed to be exported? because I didn’t find them yet in Max.
    since max 2009, .OBJ has a preset to export (and import?) with the right options for Blender

-FBX has the same kind of options in Max 2009 too, but testing is needed to see if the results are any better than the method linked to in the next post.

-EXR COMPOSITE LAYERS are not handled the same way. I also tried rendering to elements in max, but they do not have the same options available (no speed vector). too bad because compositing is one of the points were Blender could complement max pretty well. ( And Autodesk guys, don’t you worry, it would not be too much of a competition for combustion and the likes… At least not yet :stuck_out_tongue: ) EDIT: trying to change the attribute titles at render time right now to see if I can get them accepted by blender…
EDIT: Here is an interesting thread to help solve this problem:
http://community.aqsis.org/2009/08/openexr-display-and-blender-support-multilayer.html

-3ds Max can render Yafray pictures if needed for consistency/flexibility or whatever… with the YAMAX plugin. Old, but pretty robust since it still works with max 2008. It’ does not suit Yaf(a)ray though.

-Blender shortcuts can be modified to better emulate Max’s or the opposite even now, before 2.5, thanks to Autohotkey
Here is the version of the script I’m bringing together, I’m pretty new to scripting in general as well as with autohotkey, but here it is anyway, let’s try to improve it and I’ll Update it:

BEFORE USING IT SOME CONFIGURATION MUST BE CHANGED IN BENDER PREFERENCES:
Turntable = ON
Select with left click = ON
Pan view: Middle Mouse Button = ON

;
;
; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win9x/NT
; Author:         Maurice Raybaud <[email protected]>
;
; Script Function:
;    Use 3DS MAX Default hotkeys in Blender !
;
;Help tip:
;BYPASS MODIFIER KEY TO MAKE IT NORMAL!
;How can a prefix key be made to perform its native function rather than doing nothing?
;Consider the following example, which makes Numpad0 into a prefix key:
;Numpad0 & Numpad1::MsgBox, You pressed Numpad1 while holding down Numpad0.
;Now, to make Numpad0 send a real Numpad0 keystroke whenever it wasn't used to launch a hotkey such as the above, add the following hotkey:
;$Numpad0::Send, {Numpad0}
;The $ prefix is needed to prevent a warning dialog about an infinite loop (since the hotkey "sends itself"). In addition, the above action occurs at the time the key is released.

wintitle := "Blender" 
#IfWinActive Blender


#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

;PANIC KEY TO STOP AUTOHOTKEY
+Esc::
; Shift+Escape
ExitApp

/*
;QUAD MENU BAD IDEA For SCULPT MODE COMPATIBILITY
RButton::
Send,{RButton}{Space down} ; rbutton sent to make use of cursor. then space bar. Would w key be more contextual?
Send,{Space Up}{Alt Up} ;Release the ALT key.
return
*/


;SINGLE VIEW TOGGLE (clear location remains alt+g)
!w::
Send, ^{Up}
return


/*
;CLONE right clicks in edit mode does nothing in object mode
^v::
Send, +{d}{RButton down}
Send,{RButton up}
return
*/


;^z::^z ; restores the undo destroyed by the z key to center selection does not work :(
^y::^+z ; redo
^b::Tab
w::g ;Move
e::r ;Rotate
r::s ; Scale
z::NumpadDot ;Center selection

/*
MERGE:^!c::!m
+x::EDGE constraint, slide
*/

;TRANSFORM TYPE-IN
F12::n ;Transform Properties

;QUICK RENDER
+q::
Send, {F12}

;MATERIAL EDITOR
m::F5

;ENVIRONMENT
_::F8

;(DE)SELECT ALL: KEEP THE a key cycle for now (better workflow anyway)
;^a::a NO, solve the cycle
;^d::a NO, solve the cycle

;CYCLE SELECTION METHOD
q::b

/*
;LOOP SELECT switches layer
!l::
Send, ^e
Send, è
return

;RING SELECT does nothing
!r::
Send, ^e
Send, _
return
*/

/*Les deux suivants ne semblent plus marcher: lien avec la touche CTRL?
;CHAMFER
^+c::
Send, w
Send, !é ;le é envoie en mode de sélection é (2:Edge)> vérifier toutes les commandes de 
;ce type (qui décomptent les menus)
return

;CONNECT
+^e::
Send, w
Send, &
return
*/

;CUT
!c::
Send, {k}
return

;LAYER SWITCH
;::m NOTHING YET


;WIRE MODE
F3::z ;works but redundant with F7 z axis constraint (context needed)

;AXIS CONSTRAINTS work ok
F5::x
F6::y
F7::z



;ALIGN TOOL
!a::
Send, +s
return


;DIRECT SELECTION MODES, works but clarify simultaneous snapping issue 
;Introduce some timing/keywaiting...?
 
;VERTEX MODE
&::
Send, ^{Tab}{&}
return

;EDGE MODE
é::
Send, ^{Tab}{é}
return

;BORDER MODE
"::MsgBox No border mode in Blender > use alt key to loop select instead

;FACE MODE
'::
Send, ^{Tab}{"}
return

;ELEMENT MODE
(::MsgBox No element mode in blender > use L key instead to select linked vertices

;OTHER LAYER KEYS (DISABLED)
-::MsgBox Layer keys deactivated from edit mode Tab out first
è::MsgBox Layer keys deactivated from edit mode Tab out first
ç::MsgBox Layer keys deactivated from edit mode Tab out first
à::MsgBox Layer keys deactivated from edit mode Tab out first
)::MsgBox Layer keys deactivated from edit mode Tab out first
=::MsgBox Layer keys deactivated from edit mode Tab out first

/*
;ADD TO SELECTION works acceptably well. but messes up the rest? right clicks (see clone tool)
$^LButton::
Send {SHIFT Down}{LButton Downtemp}
    KeyWait,CTRL,U
    Send {SHIFT up}
return    
*/

 
;GROW/SHRINK SELECTION
^PgUp::^NumpadAdd
^PgDn::^NumpadSub



;MAIN NAVIGATION WORKS, but probably at te expense of the rest. 
~!MButton::
~MButton & ALT::
Send, {SHIFT Down}{MButton Down}
Loop
{
   Sleep, 10
   GetKeyState, state, ALT, P
   GetKeyState, stateA, MButton, P
   if state = U  ; The key has been released, so break out of the loop.
      break
   else if stateA = U  ; The MButton has been released, so break out of the loop.
      break
}
Send, {SHIFT Up}{MButton Up}
return


;SOFT ZOOM
;!^MButton::
;    Send, ^{MButton}
;return

;GRID SNAPPING->
;CTRL::
;Send, {j down} this was for maya. Make a cycle. 
;return
;CTRL Up::
;Send, {j Up}
;return




;PLAY/STOP ANIMATION WITH : KEY
;CYCLE with same key from alt+a to Esc

:::
; Above: $ is supposed to be necessary before ::: to force the hook to be used, which prevents an
; infinite loop since this subroutine itself sends :, which
; should result in a recursive call to itself. But it seems to do what I want (except for the need of an extra hit on :) 
; only without $
SetBatchLines, 100 
if A_PriorHotkey != %A_ThisHotkey%
{    
    Send,!{a}
    CalledReentrantly = y
    return
}

if CalledReentrantly = y
{
    Send, {Esc} ;This is the action for the zz key
    CalledReentrantly = n
    return
}
if CalledReentrantly = n
{    
    Send,!{a}
    CalledReentrantly = y
    return
}



;NEXT AND PREVIOUS FRAME
,::Left 
`;::Right

;FIRST AND LAST FRAME
Home::+Left
End::+Right 


A lot of it is presently commented out or even just stated, for the sake of making it work or as a kind of todo list.

As a starting point, did you notice that 3DS max 2009 FBX import now has a preset to import from Blender among other software options. I saw this HERE. I’m currently working with max 2008 so if anybody can try it on 2009, we could start by detailing how well it’s really working.

From 3ds Max 2008, I managed to import the Ludwig character by following THIS TUTORIAL

BUT:
-All its materials are set to some low opacity
-The bones do not seem to really deform my geometry
Of course, I should try with a simpler rig but Ludwig is already one of the simplest efficient rigs around…

Yes, I’m using 2009, .obj export from 2009 has blender preset also.

Have exported fbx, no rigs or anything yet but not yet imported into blender.

Okay, thanks, adding this to the summary: OBJ export has preset for Blender… some testing would be very welcome if possible. What is kept… the creases? I don’t see what could be any better than the former export I’m using from Max 2008.

EDIT: About EXR, Very little progress, but still here’s what I came up with today:
From Max, when you setup the EXR options you can change some layer tags and attributes after you have added the right kind of layer. Enter the tags in red outlined fields on the picture below and they appear in the yellow outlined fields.



By activating Max version attribute and giving it a tag “BlenderMultiChannel” together with changing default VelX (for Velocity) tag with “RenderLayer.Vector.X” for instance (I found these tags by opening a real blender render layer with a text editor), I managed to actually change something in the blender nodes when importing afterwards:


…see the Speed slot in place of the ordinary Z one?

Probably some documentation exists on the headers of Blender rendered files that would allow making all this actually useable… But as I said I’m pretty new to all this, I can’t handle anything that is not human readable and just searching for my way in the dark here.

heh. You spilled your tea. Welcome to the world of exploring undocumented features. That sounds neat that someone at Autodesk has at least acknowledged the Blender multilayer format. I will give them a nod in my book. Thanks for hunting this down!

Cool info …Thanks for it. BTW, seems max obj import seems to be working many times better than it used to.

Extremely interested in experiences with FBX imported into max 2008/2009 if exported from Blender. (many dudes and companies actually need and can only handle Max, so it opens a big door if one can export an averagely solid *.fbx file (specially if rigged and animated). )

UV layers are perfectly kept in the OBJ of 2008 too… worked with blender for unwrap (smart projection) and mixing some materials with a “blend” material in max today, which by the way has absolutely nothing to do with Blender nor with the kind of blend textures we’re used to in Blender… :slight_smile: (instead it mixes two shaders through a mask that can be a texture, vertex colors or whatever… less tedious than Blender noddes for that precise task and less buggy/twisted in some aspects too…

:slight_smile: yes, I burnt myself all red…

Maybe I wasn’t clear enough about the EXR tweak: it’s all a result of my trial and error with a text editor and both software, in no way pointed out by any autodesk developer. (but maybe we made things harder all by ourselves in the way the header of the Blender layers are, or maybe I’m just completely out of some unknown ordinary way of doing things) One thing they can be given a nod for is offering blender presets in OBJ and FBX formats if it does bring any real improvement indeed (to be tested yet).

The BlenderFluid2Max script by Mark Theriault (downloadable in the script section of his blog) still works in max 2008. As usual, some testing is required for max 2009. It brings me a rollout error at startup and when it happens the “Create animation” rollout doesn’t show. Just run it againf if this happens.
HOW IT WORKS:
-Export your fluids from Blender to a specific folder of your choice as OBJ and check the Animation button of the export dialog, this will create a sequence of OBJ files with one for each frame.
-In 3ds max, go to the MAXScript menu > Run Script, choose the BlenderFluid2Max script. If you get the rollout error, just close it and run it again.
-From the script’s interface, choose Import and point at your OBJ specific folder.
-Hit the Pick All Objects button and select all your objects form first to last: ORDER IS IMPORTANT you have to click the first then shift click the last, otherwise animation order will be reversed.
-Hit the Create button to make an animation out of these.
That’s all!

I used to spend time trying to get things in and out of Max, but now I just use Blender for everything.

Sure, all kinds of workflows are possible…
Here is a file to make a max-like UI in Blender to keep a similar layout when you do want to use both applications. It was based on the work of Daniel Martinez Lara from PepeSchoolLand, Meta Androcto and Jendrzych icon themes, thanks to all of you, I included an on load script link to execute my above autohotkey script automatically at startup.


HOW IT WORKS:
All you have to do to use it is to unzip into your Blender Install folder, this will overwrite you default file. Then start blender and laugh at the weird familiar look it now has :slight_smile:
WHAT IT DOES:
Again see the script above, it mainly implements Max like navigation and main hotkeys.
GET IT

Edit: In case you want to render, make sure you uncheck the do sequence option activated in the file if you don’t use it. .

3ds max smoothing groups can be kept thanks to the OBJ support:
HOW:
The Blender OBJ importer uses sharp edges to mark the limits of the groups. You just have to put an edgeplit modifier and specify it to work only using these sharp edges.

plus you can manually add some sharp edges, while keeping clicked the button that tells it to consider those as well… Very often an angle threshold is not enough, tho saves a lot of time.

I failed tho in keeping the hard edges saved in Wings 3d, a pitty…but wasnt terribly painful to rebuild at Blender…

ctrl+e , and then Mark as sharp, or Clear sharp. And of course, have the modifier with From marked as sharp pressed.

oh, you refered to import into blender…

hmm…you sure it did keep those? wouldnt it be that you applied edgesplit with same threshold angle number than you did autosmooth in max groups area? Or that visually ended similar…to me that it does not import them, you are just rebuilding…if am wrong, somebody tell me …From wings no matter the tests, OBJs are not keeping hard edges…
…what is more, not seing any format supporting that in import…unless collada does, tho not having anything installed to try, and fbx import seems not to be yet in releases…
maybe ms3d format, but would be far from my workflow…

I meant to say that by exporting from 3ds max with some smoothing groups manually set. and importing into blender with the smooth groups option you then just have to apply an edgesplit modifier by sharp edges. And you have the exact same smoothing result than you had in Max: smoothing groups get imported fine in the form of sharp edges that surrounded them, without any need to attribute or clear any other sharp edge.

I made a much more compromising version of the autohotkey script in order to get the best of both worlds and a better ergonomy than the blender defaults. Be aware that it’s made for a french keyboard (azerty)
I added a macro to make a radial cap: select a border edgeloop around a hole and hit backspace.
here is the new AHK script:


;
; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win9x/NT
; Author:         Maurice Raybaud <[email protected]>
;
; Script Function:
;    Use some more ergonomic hotkeys in Blender than its defaults and creates a radial cap by pressing the backspace key with a 
;border loop selected.

wintitle := "Blender" 
#IfWinActive Blender


#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

;PANIC KEY TO STOP AUTOHOTKEY
+Esc::
; Shift+Escape
ExitApp


;;;;;;;;;;;;;;;;;;;;;;MAIN MACRO VIA BACKSPACE KEY;;;;;;;;;;;;;;;;;;;;;;;
BS::
Send, {E}
Sleep, 50
Send, {S}
Sleep, 50
Send, {0}
Sleep, 50
Send, {Return}
Sleep, 50
Send, {w}
Sleep, 50
Send, {6}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Put ring selection in a more comfortable place for french keyboards
^!::<^>!



;DIRECT SELECTION MODES, works but facemode also changes snapping mode  
;Introduce some timing/keywaiting...?

;VERTEX MODE
<::
Send, ^{Tab}{&}

return

;EDGE MODE
~^<::
~< & ^::
Send, ^{Tab}{é}
return
 
;FACE MODE
~+<::
~< & +::
KeyWait, Shift ; This keywaiting prevents the snapping mode to be switched too often because of a call to shift TAB
Send, ^{Tab}{"}
return

;MERGE:
;^!c::!m commented out because it does nothing


;SINGLE VIEW TOGGLE
!w::
Send, ^{Up}
return

;TRANSFORM TYPE-IN
F12::n ;Transform Properties

;QUICK RENDER
+q::
Send, {F12}

;CYCLE SELECTION METHOD Encourages to use much more paint selection instead of multiple select with shift key.
q::b


;CUT> comment it out to keep the center view to cursor shortcut of object mode but it's still in the menus...
c::k




;DIRECT SELECTION MODES, experiment Multiselection with Shift+icons in your defaults and forget
;about the CTRL TAB twist!

;GROW/SHRINK SELECTION (Working on a laptop, I prefer the maya hotkeys for that:
^PgUp::^NumpadAdd
^PgDn::^NumpadSub


/*;For those even more into 3ds max,
;MAIN NAVIGATION WORKS, but probably at the expense of the rest. 
~!MButton::
~MButton & ALT::
Send, {SHIFT Down}{MButton Down}
Loop
{
   Sleep, 10
   GetKeyState, state, ALT, P
   GetKeyState, stateA, MButton, P
   if state = U  ; The key has been released, so break out of the loop.
      break
   else if stateA = U  ; The MButton has been released, so break out of the loop.
      break
}
Send, {SHIFT Up}{MButton Up}
return


;PLAY/STOP ANIMATION WITH : KEY
;CYCLE with same key from alt+a to Esc

:::
; Above: $ is supposed to be necessary before ::: to force the hook to be used, which prevents an
; infinite loop since this subroutine itself sends :, which
; should result in a recursive call to itself. But it seems to do what I want (except for the need of an extra hit on :) 
; only without $
SetBatchLines, 100 
if A_PriorHotkey != %A_ThisHotkey%
{    
    Send,!{a}
    CalledReentrantly = y
    return
}

if CalledReentrantly = y
{
    Send, {Esc} ;This is the action for the zz key
    CalledReentrantly = n
    return
}
if CalledReentrantly = n
{    
    Send,!{a}
    CalledReentrantly = y
    return
}



;NEXT AND PREVIOUS FRAME
,::Left 
`;::Right

;FIRST AND LAST FRAME
Home::+Left
End::+Right
*/

I just tested the 2010 Importer plugin for 3DS max 2008 (using the 2010 converter before to transform blender output FBX to autodesk FBX) all with defaults options and my bender animation of a rigged mesh imported just fine with all deafaults options !

EDIT: Since Ideasman 42 PM Box is full here is the message I was trying to send to him (linking to this thread):

Hi,

Thanks for your FBX export script.
Maybe the Wiki ought to be changed :slight_smile:
I never edited a wiki before, I think. This could be a good time to start, but not right now since I have to go back to my struggle for making the blender fluids import for 3ds max by Mark Theriault work… It seems Blender’s sequential OBJ export python script has some difficulties since files are all 1Ko and carry only eight vertices or so. (I currently use Blender 2.48.2 from Graphicall)

Thanks again for anything you do :slight_smile:

Could you provide more details on that? From what I understood you managed to exchange a rigged model between max and blender?

You can only go one way as of Blender 2.48a.

FBX output from Blender to FBX input into 3DSMax.

There is no Blender FBX importer at this time.