An important aspect of 3D modeling software is its ability to apply affine transformations. So far we have supported three affine transformations - Translation (Moving the geometry), Rotation, Reflection (Flipping the geometry). Today we are adding two more to that list - Scaling and Shearing.
With scaling you can resize a geometry or a group of geometries - uniformly or non-uniformly. This gives you the ability to resize different components of your model relative to other components. Non-uniform scaling gives you ability to create more interesting shapes than were possible before - e.g. Ellipses and Ellipsoids.
Shearing is another useful transform. It comes handy when you want to skew an object sideways while still keeping the surfaces in perpendicular direction flat.
A demo can explain much better than the prose can, so here you go.
We are very excited to introduce a Grouping workflow in 3DTin. It is going to play important role in enabling you to make more complex models with 3DTin.
Last month - out of the blue - I felt like modeling the vertical takeoff chopper from Avatar. The one with two fans on either side that can rotate and point upward or forward depending upon which direction the chopper wants to go. When I started to assemble the fans, I realized how hard it was to do it with 3DTin, even though it should have been very simple. There were two major drawbacks.
1. Placing geometries at exact location w.r.t. other geometries was very difficult.
2. There were so many repetitive parts which should have been copy-pastable, but were not. (All blades of a fan are same. Also the twin fans of the chopper are mirror images of each other. Why draw each one separately)
The reason behind first limitation lies in the history of 3DTin. Since it started as a voxel editor tool, everything is aligned to the boundaries of grid cells. That is why after geometries are rotated they shift a little to align with the invisible grid structure and when geometries are moved they snap to grid lines. The second limitation called for a grouping mechanism that will allow aggregating arbitrary number of geometries together and performing operations on them as single unit, including group cloning.
After nearly a month we are glad that we have solved both of these problems.
To fix the first problem, we had to reorganize some code. It wasn't that difficult to implement continuous movement, but it took much work to ensure that it won't break existing sketches. In the new implementation, the rotated geometries won't snap to nearest boundaries. They will remain exactly where their preview predicts they will be. As for continuous motion of geometries, we have added a "Snap to Grid" toggle button to the bottom left toolbar.
When it's ON, the geometries will snap to grid-lines as you move them around (just like before). But when you turn it OFF, you will be able to move the geometries in continuous trajectory, without any jumps. To help you judge the exact location of geometry's edges we have added a position readout panel at the bottom, which continuously displays the location of the geometry.
You will see what I mean in the demo video below.
Let's talk about grouping before that. You will see a new button added in upper left toolbar - that we call "Select" tool.
You click on the "Select" icon and draw a rectangle over your sketch, trying to capture all the geometries of interest. You will see them getting highlighted as you do this. Once you have selected them, a bar will appear on the top, which will let you perform several operations on this group of geometries. We call this temporary grouping. One of the options in this bar is named "Group". When you press it, all the selected geometries will become part of a single group geometry, that you can treat as a single unit. You can move it, rotate it, flip it and even clone it to create multiple copies of it. This technique lets you create hierarchy of geometries, which makes big modeling projects very manageable.
To demonstrate what I mean, I created a video as I was creating the Twin fans of the vertical takeoff chopper I mentioned above. Take a look.
If someone wants to complete the entire chopper before me, this is where you go.
Besides these two major improvements, we took the opportunity to fix many other small things too. The Axis dial in bottom right is one example. Also, gone are those wireframe boxes that showed geometry focus, instead we now use geometry outline to do that job elegantly. All the controls are now properly documented with snappy tooltips (thanks to tipsy)
I am glad to announce this year's first feature-set today.
Now you can use a search box to discover sketches on 3DTin. Here is an example.
To improve the search experince and categorize the sketches efficiently we have also implemented tagging. You can add tags while saving a new sketch. You can update them later by pressing 'more' button in titlebox. Moreover, tags are managed in wiki-style, i.e. anyone can add/remove tags from anyone else's sketches. We hope that collaboratively all of us can build a more structured library of 3D models in future.
In order to make the search results safe, we have implemented a flagging mechanism too. For sketches with offensive content, you can just click on the flag icon in the titlebox and we will filter those sketches out from the search results.
Although search box is currently only useful to search for sketches and users, it is going to play a vital role in the overall 3D modeling workflow. Stay tuned to this blog to hear more on that.
And yes. You no longer have to have Google login in order to login to 3DTin. We now support OpenID login for Twitter and Facebook identities too.
Hope you are having wonderful holidays. It has been an eventful year for us at 3DTin. In 2011 we converted our browser based humble voxel editing program into something that can create 3D models comparable to desktop CAD tools.
Before 2011 ends though, we want to release one more enhancement to 3DTin.
As you can tell, 3DTin's workspace is primarily discrete. That is, the geometries are aligned at discrete edges of the grid. They cannot be moved continuously. This restriction is helpful (although sometimes annoying), because you don't have to worry about accurate placement of geometries. When we introduced geometry rotation, we followed the same philosophy and allowed rotations in multiples of 90º. Besides, there wasn't much point in allowing arbitrary rotations, when you could not merge geometries into each other. But that has changed. Now you can merge geometries. Therefore it makes lot of sense to allow continuous rotations.
Now when you select a geometry, you will see a new context window as below.
When you click on the rotation icon (red circle), you will see the rotation controls appear. They contain a slider at the bottom of the context window (green rectangle). You can move the slider to rotate the geometry through any angle you want. There are also two icons if you quickly want to rotate through 90º, just like old days. As you change the angle the geometry will rotate. Moreover the degree callout window (green rectangle) will show the actual number of degrees being applied. In case you want to give specific number of degrees and slider's resolution falls short, then you can click on the degree callout window and it will prompt you to enter the degrees with text entry.
The continuous rotation combined with geometry merging gives ample opportunity to create interesting models.
Check out these couple of examples that demonstrate what you can do with continuous rotation.
The first one shows a fan whose blades are rotated 45º and then merged with the central arms. The second one is an abstract sculpture with the Tapered pipe geometry rotated at 60º angle.
Note that, the continuous rotation cannot be applied to cube-groups. If you want brick shaped structures to be rotated through arbitrary angles, you should make them from the Box template instead of cubes.
The new design of the context window uses a new set of icons for actions like clone, flip, 2x, edit, etc. All the functionality is unchanged though.
Since the beginning of time we have maintained a restriction that prevents you from overlapping multiple geometries in 3DTin. Whenever you move a geometry and try to collide it with another geometry, you get the orange warning box - "Avoiding Geometry Overlap". This limitation can be frustrating sometimes. Imagine you want to stick a conical nose to the spherical head of a Joker. If you cannot push the nose into the head, then it will look floating - barely touching the head at a single point of contact, totally artificial.
We have solved this problem for you now. You can now merge all the objects into other objects every which way you want. As a result you can now make some interesting shapes like this one.
This change can drastically improve the quality of the models. They can now look more realistic, instead of looking like mere collection of primitive blocks. I can't wait to see how you put it to use.
[Technically speaking, this operation is called Union of two solids. It's one of the 3 standard CSG /boolean operations (others being subtraction and intersection)]
Update:
There are some limitations that I left out in hurry yesterday. You can merge any number of geometries in the browser if you want, but if your ultimate goal is 3D printing you should use geometry merging with restraint. The boolean operations on solids are time consuming. So while exporting the STLs we do not perform merging if more than 10 geometries are overlapping in a group. We just export them as is. Such exported files may look the same, but they may contain invalid polygons that may confuse a 3D printer.
We know that some of you are good at teaching others about a tool like 3DTin. We have seen some enthusiastic video tutorials on Youtube showing how to use 3DTin. You are definitely better at it than we are. So here is a good news for you.
Create a video tutorial that shows how to use 3DTin to create awesome 3D models and we will give you the Premium Membership for FREE.
Just record your 3DTin session when you are creating a model. Describe the steps briefly as you go along and upload the video to Youtube. Let's know about it through the following submission form.
(You can get to the above form by clicking on the "info" icon in top toolbar and then clicking on the video icon in lower-left corner of keyboard shortcuts window. You will also see a "Teach & Earn" webclip now and then, it leads to the same form.)
If your video follows the guidelines, you get a Premium Membership.
We will feature select videos in 3DTin gallery to give them the exposure they deserve.
Last week we introduced 3D Text. Even though it worked as it was supposed to, there were some caveats. For one it was darn slow. Moreover the parameters (width, height, text length) were confusing.
Over weekend I found a way to speed things up a little by caching intermediate results. Now you won't have to wait forever for the text solid to build. The build time is proportional to the length of the text. We allow text length that can be built within 1 minute. The limit on text length was 5 characters. With latest improvements we can build longer text strings, so we have now raised the limit to 10 characters.
It is now also possible to create text with any aspect ratio. You can specify both width and height of the desired text and our server will scale the text accordingly. If you leave one of the Width or Height to 0, then that dimension will be automatically calculated to suite the default aspect ratio of text.
Hope the typophiles among you will like these improvements.
In our daily life there is a family of shapes that we encounter most frequently, yet it's too complex to draw using primitive tools. I am talking about Text.
Our digital universe is primarily made of text, but we never have to draw it. All the complex shapes that make up the text are mapped to specific keys on our keyboard. When we hit the keys the underlying software knows how to convert that keystroke in the shape of a letter. We don't have to worry about how smooth the curvature of "O" is or how tall "J" should look. Most of the software we use daily has taken care of these minute details. But when it comes to modeling tools, that luxury can't be taken for granted.
For instance in 3DTin, users have tried to create textual shapes in their 3D models by using cubes. But the results are far from ideal. Typical glyphs are so intricately shaped that, designing them manually is out of question. Therefore we decided to do something about it. We are introducing two templates to add text to your 3D models.
You will see the new templates near the end of the template list (which you can open by clicking the geometry button below 3DTin icon in the top left corner)
Click on the Text template and you will get to customize it.
Fill in whatever text you want to add. Specify height or width (not both) and choose one of the three fonts.
When you press 'Add', the server will generate the solid in the shape of the text you provided. Once it's ready you will see the ghost of this solid dancing along the mouse cursor.
As you click anywhere in the sketch, the solid will get added to the sketch.
As simple as that.
There is no new interface, it's just another template.
The second new template is similar to the first one in parameters, except it generates a void in the shape of text. It will be useful to create engraved text.
How is it done?
If you remember, we have built our server infrastructure in the form of a python library named 'Cadmium' - which is written on top of the venerable CAD libraries OpenCASCADE and PythonOCC. In order to create 3D text, we extended the cadmium library for the job. We use python bindings of fontforge to extract shape information from TTF font files and then use it to build solids using PythonOCC. The source code is available in cadmium's github repository. If you are an advanced user interested in cadmium, you will be glad to know how easy it's to create an STL file in the shape of the text you want. You just need to write following 3 lines of python code.
from cadmium import Text
s = Text('My 3D Text', fontpath='path-of-ttf-font-file', width=10, thickness=1)
s.toSTL('mytext.stl')
It's all ready to use. So give it a try and let me know how it goes.
Caveat Since it takes lot of processing on server to generate the solid from text glyph, we have limited the length of text to 5 for now. Depending upon ongoing usage we may change it in future.
A month long project to rewrite 3DTin backend has finally paid off. 24 hours ago we switched to our new server that is hosted on Amazon EC2. All the data was migrated from GAE datastore to our new database, with virtually no downtime. Other peripheral functions like Leaderboard and Premium membership payment system were restored gradually and now everything is working as before the switch.
Our new server architecture uses Tornado Web server, Amazon S3 for storage and PostGreSql for database. Unlike Google App Engine, we are in total control of this environment. It has already simplified many aspects of 3DTin webapp and I can see many opportunities to improve things further.
Please log in to your 3DTin account and let me know if you see any problems.
Update It has come to our notice that some users who have saved sketches on 3DTin in the past, may not find them anymore. If this happens, please don't panic, just drop me an email. Your data is safe, it may just be differently organized due to new login mechanism.
In past few weeks we haven't added any significant features to 3DTin front end, therefore I didn't have much to write. I have spent most of that time working on the backend, whereas Nihar has been working on tidying up 3DTin's GUI widgets to create a consistent interface.
Ever since 3DTin started, I chose Google App Engine to host the website, mainly due to extremely cheap hosting and my preference for Python. GAE has served us well. During the times of flash traffic it has helped us remain up. However, as 3DTin's needs started to diverge from a typical website (Export server, Cadmium factory server), we found GAE to be very limiting. I have been contemplating the shift from GAE for over a year now. But it didn't make sense to spend time on it at the expense of ignoring CAD features of the frontend. However, GAE announced certain changes in past month and it suddenly made sense to work on the migration after all. I spent entire October re-architecting our server architecture. In the new design I got chance to implement certain features that should reduce the overall loading time of 3DTin.
The backend work is in its last stage now and during next week we will proceed with actual migration from GAE to Amazon EC2. Our plan is to have minimal downtime during the process. In fact, if everything goes according to the plan, the site will never be down; only for a brief period of time it will go readonly (i.e. you won't be able to save Sketches). I will post updates about how it goes.
Meanwhile, let me write about some subtle enhancements that Nihar has done in 3DTin GUI. In my opinion, 3DTin's GUI still lacks consistency (e.g. Undo-redo feature, standard keyboard commands). Nihar's work is a step in that direction to improve things. He has implemented a consistent Keyboard handling architecture, so that standard keyboard keys will behave as expected. For instance, Enter and ESC can now be consistently used to accept/dismiss dialog prompts. In the template browser dialog, Arrow keys provide an alternative way to reach the desired template. I am sure these small details are going to prove important in the long run, so we are taking some time off the main feature-train to work on them.
Every other day I browse the sketches that users have created recently, and more often than not I come across a sketch that makes me go "wow!". I add these great works to the gallery and also post them to our Facebook page and Twitter stream. I will highly recommend you to subscribe to one of these channels to see some incredible 3D modeling work people are doing with 3DTin. You will find the links on the left of this column.