Object2VR script for 3dsMax

Object2VR produces interactive 360 degree movies. The content for these movies can be photographic or 3d. The content consists of a spherical sequence of images. Creating the images within 3dsMax means you need to render your object from all angles. To make it easier to do this, I wrote this script. This is an instruction to create such frames. the package is being made with the program “object2VR” by gardengnome software.
I’ve written the script, but give no guarantees whatsoever. Keep in mind that Object2VR is not free software. I’m in no way linked to object2VR. I’ve only written this maxscript to ease the use of object2VR.

The result is an interactive flashmovie like this. Drag the mouse to turn the model.

 

VR sphere render script

The program object2VR uses columns and rows to describe the amount of images used for a single viewer. These can be compared to a globe. The columns are the meridians and the rows are parallels. The poles have to be at the top and at the bottom, otherwise object2VR doesn’t create a correct viewer. It’s a pain to create these rows and columns easily, so I’ve written a script to do it for you.  The script creates an animated camera along an imaginary sphere. You can specify the amount of columns and rows.To get an even distribution use: rows = (columns/2)+1 where columns is an even number. You can also specify a radius. That’s the distance of the camera to the origin. For small objects, use a small distance, for large objects use a large distance.
The script creates a standard camera and animates it. The script could be edited easily to create other types of cameras. Or you could link other cameras to the created standardcamera and leave the script alone.
When the frames have been rendered, you need to rename them so object2VR recognizes the columns and rows. Use the rename-section of the script. Pick the folder with the rendered images, specify the amount of columns and rows, test the settings (with the test-button) and then hit “Rename”.

This is half of a sphere with the different terms explained

 

This is a full sphere with 34 columns and 19 rows

Renaming

After renaming the renders you can load them in the object2VR program. Make sure you use the same renaming scheme in object2VR as in the script. By default the maxscript produces this pattern: ‘Row_’+ (rownumber) + ‘Column_’ + (columnnumber) + ‘.jpg’. But you can specify your own naming pattern in the script. Please make sure you use exactly two %-characters. Use the same pattern in object2VR. Remember when using 10 rows, object2VR expects row0-row9. The more images, the heavier the flash-movie will be. The example posted in this article is about 10MB.

This is the maxscript

 

This is the main interface of object2VR.

 

This is the input-dialog. Pick the location of the image-sequence and provide the columns, rows and name-pattern

 

There are too many options to list here, just try out a few.The basics are covered.

41 comments

This tool is great and practical. Congratulations!

Koen

Thanks. Will give it a try!

Stanley

File row_0 column_0 >>> will not work with object2VR
File row_0column_0 >>> This will work with object2VR

How do i solve this problem???

grabjacket

Hey Stanley, I’ve updated the script. Now you can specify your own naming-scheme. The default I’ve provided has no spaces. Maybe that solves your problem.
Please download the new script at the top of the post.

Great script!

If you’re going to develop this even further – here’s an idea: For some models, like cars, buildings, it would be great to be able to lock the camera to a hemisphere instead of a full sphere, because you really don’t need the “underground rows” in those. But what a fantastic time saver this is already!

grabjacket

Hey Vasco, thanks. The object2vr-program does support displaying a single row of images. I don’t know if it supports hemispheres. It might get confused. I could however add an option to only create a single row. That’s a great idea.
Klaas

Hi Klaas,

I meant that the images would be taken from a hemisphere rather than a full sphere. This would be awesome for objects standing on a ground plane, etc. See this screenshot: http://i31.tinypic.com/maca41.jpg

Cheers,
Vasco

MUX

Hi Klass. Firstly, I want to congratulate you for the great plugin and tutorial.
About necessity of upper hemisphere camera/frames, I found this configuration in the menu(Light Table) on OBJECT2VR software, see in this link. >> http://yfrog.com/epobjectvrset1j
It´s necessary to tell him the number of columns and rows, using only the upper frames generated by your script
So now comes my doubt. I would like to ask you if there is a way to generate your script only those upper frames?

Hope that helps.
bye
MUX

Mux

Hi Klass! Yesterday I have posted a comment about a way to make OBJECT2VR using only the frames of the upper hemisphere. Apparently this post has been removed. If necessary I explain again. bye

Mux

oops! Sorry, my browser does not updated the page, now my post is there. Please delete the last posts

Thanks for this great script.
i try to render my file then use the renaming section. but i have problem (3ds max 2011 64bit)
when i choose the folder there is nothing files found ( i run the 3dsmax as administrator)

is this script valid for max 2011 ?

grabjacket

Hey Osama,
This script doesn’t take care of the rendering, only the animation. If you’ve created the animation, then you should render the enitre frame-range yourself and store those frames somewhere on disk. The thing is: only jpg-files are renamed. Maybe you’ve rendered to another filetype?
The script has been tested in max2010 but it should work in max2011.
I hope this helps you.

XYZ

Hi
Thanks for at great script. I have used it a few times with great succes.

However, this time there is a problem in renaming the files. It does not put the images in the right sequence for Object2VR – it is all messed up.

I have rendered from 3ds Max using Backburner. I suspect the problem might be that the timestamp of the range of jpg’s is not cronological corresponding to the filenames of the jpg’s.

My question is: does the renaming script use the timestamp to rename the range of images? Then I will try not to make this mistake again.

Hi xyz,
the script actually uses the 4 digits at the end of the filename to identify. So rendering with backburner shouldn’t cause any problems. You definitely will run into problems if the number of columns and rows is different between the animation bit and the renaming bit. So if you use 10 rows and 8 columns for creating the animation, you should use those same numbers for renaming the files. The script also needs all rendered files to be present. It can’t really cope with a file or two missing. There isn’t really any error handling there. It might happen with backburner sometimes that a file is skipped or lost somehow.
I’d love to see an example. You could also send me a file to test your problem if needed.
Klaas

btw xyz, I’ve updated the script to make it a bit easier to work with. Check my latest post, or find it on scriptspot. Cheers!

Jeroen

Hey Klaas bedankt voor het script!! wat een timesaver!
Is het ook lastig om het script ipv .jpg ook .png te ondersteunen?
grts

Jeroen, thanks for the idea. I’ve edited the script to accept all types of images. Watch out that you keep the folder with images clean. That prevents the script from trying to rename other files.
Klaas

caillan

Hi Klaas, the script looks really usedfull, but I am afraid I don not understand the naming, Do the rendered files need a specific name when outputed and then do you need to alter the naming pattern field in your script. When I do it it says ‘please fix the renaming first’. Thanks

You should render the active frames as a normal framerange. The naming of the rendered frames doesn’t matter. Let’s say you have 10 rows and 5 columns, this means you’ll render 50 frames. After they’ve been rendered you need to rename them so object2Vr will recognize them. For this you need a namingpattern which is compatible with object2Vr. This namingpattern contains a reference to the column and row of the frame. These references are indicated with the “%” sign. Whatever the namingpattern, it’ll need two of these percentage signs. As long as you have these, object2Vr can be set up to read the information from the names.
Alternatively you could omit the renaming and just tell object2Vr how many rows and columns you have. I think this should also be possible. I haven’t used the program for a while now.
Please let me know if you need any more assistance.

caillan

Thanks for the reply Klaas, I think I have got it now. I used Row_%%Column_%%, I believe this worked okay.

Preston

Good day Klaas Nienhuis!

Thanks for your work on this awesome script, extremely handy for use with a program like 2VR. I had one quick question though. I am essentially trying to get a smoother turntable in the final product (the output from 2vr). So, in essence, its sort of like a framerate issue. My first attempt was to simply add more columns and rows when creating the cam in the VR sphere, however that simply extends the overall framecount as I’m sure you know. Perhaps this isn’t doable with your script and needs to be done in some other post app, but I just thought I’d ask if this could be resolved in VR Sphere. Thanks again!

Hi Preston,
as I understand your question, you need more frames to get smoother interaction. Just like you said, you need to increase the amount of rows and columns for that. This results in more frames being rendered. These frames still cover a single “globe” so the angle between single frames decreases. This should create a smoother experience.
You could also try a realtime 3D service, like sketchfab. Check out my articles on sketchfab on this blog.

Using your script with autodesk 3ds max, I could only render hemispherical images of the product even after selecting sphere radiobutton from script UI.
For example, suppose the product is a car. Using your script, I placing the camera on top of the car. Upon rendering, I got full horizontal rotation images(i.e the car can rotate horizontally) but only half of the vertical rotation images(i.e the facing side of car).

I can see this problem in the teapot example on this page too. But, I want fill spherical images. Any suggestions?

Hello Pappu,
I’m not sure I understand correctly. What you’re saying is that you cannot render a spherical animation? Could you show me a screenshot of your animated camera with the trajectory turned on? Or maybe send me the maxfile. You can contact me through the form at the bottom of the site.
The teapot at the top of this page is a full spherical pano. I can see the top as well the bottom of the teapots. Can you see the same?
Full vertical rotation isn’t supported by object2VR as I remember correctly. So you can only rotate from the north pole to the south pole. If you want to rotate the object so that it shows upside down, you could check out the javascriptobject which also is supported by my script: http://wp.me/p25JVJ-4d

Joe

Hi Klaas,
Thanks for this script, it seems to be exactly what I was looking for.

I’m getting a syntax error:Parse error when using the naming pattern you supplied:

Row_’ + (fill(row,3,0)) + ‘Column_’ + (fill(column,3,0)) + ‘.jpg

My project has 32 columns and 5 rows. The files were renamed using your renaming script…for example Row_000Column_000.jpg

Any ideas? Thanks again for your work on this!

Hello Joe,
Thanks for pointing that out. In my tutorial I’ve made a mistake. The naming pattern for object2VR should be:
‘Row_’ + (fill(row,3,0)) + ‘Column_’ + (fill(column,3,0)) + ‘.jpg’
Notice the line begins and ends with a single quote. These two were omitted in my tutorial by mistake.
I’ve updated the tutorial: http://www.klaasnienhuis.nl/WordPress/2012/08/object2vr-tutorial-for-3ds-max/

If you’ve got any results to share, I’d be very interested to see them. Just out of curiosity.
Klaas

Joe

Hi Klaas,
Thanks for your help. I’ll definitely post some samples of what I’m working on once I address some issues.

The new naming pattern works fine for single states. Can you confirm that your renaming script does not work with multiple viewstates? My projects will require multiple viewstates.

It would look something like this right?
‘Row_’ + (fill(row,3,0)) + ‘Column_’ + (fill(column,3,0)) + ‘State_’ + (state,0) + ‘.jpg’

I’m not sure if the above syntax is correct. There doesn’t seem to be much documentation on object2vr in this case.

Please let me know if there is a work around.

Much Thanks!
Joe

Joe,
my script doesn’t support viewstates as a feature, but there’s definitely a workaround. To create the states, you need to render each state of the object to a different folder. Keep in mind to keep the same amount of rows and columns of course. Rename each state with my script. This should give you a folder for each state where each folder contains the same amount of images which are named identically.
Now you add a state-string to the images in each folder, such as “state_001”, “state_002” and so on. You see I like leading zeros!
Now you can put all images together in one single folder. There should be no overlap in filename. The naming pattern in object2VR should be something like this:
‘Row_’ + (fill(row,3,0)) + ‘Column_’ + (fill(column,3,0)) + ‘State_’ + (fill(state,3,0)) + ‘.jpg’
The (fill(state,3,0)) means object2VR creates numbers with three digits and fills up any blanks with zeros. Check out their documentation on that.

I haven’t tested this, but it sounds about right. I’ve got no experience with states however.
Good luck,
Klaas

Joe

Thanks Klaas, that worked great. If anyone need to know…

“Now you add a state-string to the images in each folder, such as “state_001″, “state_002″ and so on”

You need to start with state_000 otherwise object2vr won’t recognize the pattern.

Thanks again Klaas, you rock!

gonzo

Hi Klaas,

many thanks for this nice script.
I have problems whith the rename-funktion for java (and for object2vr). 000_001.jpg is not the next picture to 000_000.jpg. The names of the pinctures are in the right order, but the content of the pictures look like random. Any idea?
I’m using max 2009…

hey gonzo,
it’s hard for me to judge without more to go on. Maybe you can send me the original frames or max-file and the amount of columns and rows you’ve used. The renaming functions of the java and object2vr parts are not compatible however. maybe you’ve mixed these up.
Klaas

gonzo

Hi Klaas,
hmm, how can i send you 2 screenshots of both sequences (max & js-renaming)?
i don´t think i mixed java and object2vr. i tried both in differend max-scenes and folders.

you can post a link here to images on a dropbox or a filetransfer link from wetransfer or yousendit for instance

Anwar Ben Tanfous

isn’t better to use geosphere so the distance from each view angle is the same?

Hi Anwar,
The script uses a constant radius so the distance between camera and the object is actually always the same. Although it appears a sphere is being used it’s only a spherical pattern.

sergo

Hello. I can not figure out how to rename files. The script writes “Please fix renaming first”

Klaas Nienhuis

Hi Sergo, if you open the maxscript listener (press F11) right after you get that message there should be a message which tells you why renaming fails. Generally there are two reasons: the amount of renders in the folder you’ve specified doesn’t correspond to the columns and rows you’ve set or there are no renders at all in the folder.

sergo

Thank you very much for help. The problem was in a hidden file in the folder with the image. I thought the script sees only jpg ))).

Mike L

Hey Klass!

I’m very excited about this plugin but am having an issue where the camera appears to be gradually shifting position throughout the animation. It is unnoticeable at a low step rate of 10 columns, but when I output an animation with 72 columns/rows, it is very apparent. The first and last columns of each row do not line up properly.

I’d love to know if anyone else has encountered this issue and discovered a solution.

Thanks!

Klaas Nienhuis

Hi Mike, I’ve made a ticket for you in my helpdesk and I’m following up there.

Leave a Reply

* Will not be published