Retopology in 3ds Max

Exclusive offer: get 50% off this eBook here
3ds Max Speed Modeling for 3D Artists

3ds Max Speed Modeling for 3D Artists — Save 50%

Flex your speed modeling muscles using 3ds Max with this book and ebook

$26.99    $13.50
by Thomas Mooney | November 2012 | Games

Retopology is the process of reducing the polygon count of a high-resolution mesh tidily, without losing key detail. Quite often, sculpted meshes have polygon counts in the millions and it is messy to decimate or optimize them automatically. There are specialist tools for retopology, such as Topogun and 3D-Coat, but 3ds Max does include its own retopology tools, found in the Freeform section of the Ribbon.

This article by Thomas Mooney, author of 3ds Max Speed Modeling for 3D Artists shows different ways to get a highly detail model down to a useable polygon count without losing key detail from the original, primarily looking at the brush-based PolyDraw tools.

(For more resources related to this topic, see here.)

High poly model import

Different applications are biased to different file formats and may therefore have different import procedures. The Send To functionality between 3ds Mudbox and 3ds Max(which is possible as both are Autodesk products).This is essentially a .fbx transfer. If you are using ZBrush, you will want to get used to the GoZequivalent transfer feature. Note that GoZ must be run from ZBrush to 3ds Max before it can go in the other direction. GoZ also works the free, mini-modeler tool from Pixologic(who make ZBrush too)called Sculptris, which is available at http://www.pixologic.com/sculptris/. In the following example, we'll directly export from Sculptris, a model made from a sphere(so it needs retopology to get a clean base mesh). We'll export it as a .obj and import it to 3ds Max in order to show a few of the idiosyncrasies of this situation. With a model that is sculpted from a primitive base, such as a sphere or box, there are no meaningful texture coordinates, so it would be impossible to paint the model. Although many sculpting programs, including Sculptris, do automapping, the results are seldom optimal.

Importing a model into Sculptris

The following steps detail the instructions on importing a model into Sculptris:

  1. Install Sculptris 6 Alpha and run it. Note that the default scene is a sphere made of triangle faces that dynamically subdivide where you paint. Use the brush tools to experiment with this a while.
  2. Click on Open and browse the provided content for this article, and open \Packt3dsMax\Chapter 9\Creature.sc1. The file format .sc1 is native to Sculptris.
  3. To get this model to work in 3ds Max, you will need to choose Export and save it instead as Sculptris.obj.

Importing the Sculptris.OBJ mesh in 3ds Max

After we have imported a model into Sculptris, we'll move on to see how we can save this file into 3ds Max. The importing part is fairly easy.

  1. In 3ds Max, choose File | Import and browse to Sculptris.obj, the mesh you just exported from Sculptris. You could also try the example .obj called \Packt3dsMax\Chapter 9\RetopoBullStart.obj. The import options you set matter a lot. You will need to make sure that the options Import as single mesh and Import as Editable Poly are on. This makes sure that the symmetrical object employed in the Sculptris scene (actually a separate mesh that conforms to the model) doesn't prevent the import.

  2. While importing, you should also swap the Normals radio button from the From SM group to Auto Smooth, to avoid the triangulated mesh looking faceted. A model begun in Sculptris won't contain any smoothing information when sent to 3ds Max and will come in faceted if you don't choose Auto Smooth. After importing, another way to do the same thing is to apply a Smooth modifier. The Auto Smooth value should be 90 or so, to reduce the likelihood of any sharp creases.
  3. Finally, once the model is imported into the 3ds Max scene, move it in the Z plane so it is standing on the ground plane, and make sure its pivot is at 0,0,0. This can be done by choosing Edit | Transform Toolbox and clicking on Origin in the Pivot section. Note that the model's edges are all tiny triangles. This is a result of the way Sculptris adds detail to a model. Retopology will help us get a quad-based model to continue working from. The idea of retopology is to build up a new, nicely constructed model on top of the high-resolution model. The high-resolution model serves as a guide surface.
  4. If you are curious, apply an Unwrap UVW modifier to the model and see how its UV mapping looks. Probably a bit scary. A high-resolution model such as this one (250K polys) is virtually impossible to manually UV map,at least not quickly. So we need to simplify the model.
  5. If you can't see the Ribbon, go to Customize | Show UI | Show Ribbon, or press the icon in the main toolbar.
  6. Then click on the Freeform tab.
  7. With the creature mesh selected, click on Grid in the Freeform tab. This specifies the source to which we'll conform the new mesh that we're going to generate next. We don't want to conform to the grid, so change this to Draw On: Surface and then assign the source mesh using the Pick button below the Surface button, shown in the following screenshot:

  8. Each time you relaunch 3ds Max to keep working on the retopology, you'll have to reassign the high-resolution mesh as the source surface in the same way.
  9. You could also use Draw On: Selection, which would be handy if the source was, in fact, a bunch of different meshes.
  10. There is an Offset value you can adjust so that the mesh you'll generate next will sit slightly above the source mesh that can help reduce frustration from the lower-resolution mesh, which is likely to sink in places within the more curvy, high-resolution mesh. If you're just starting out, try leaving the setting alone and see how it turns out. An additional way to help see what you are doing is to apply a semitransparent material or low Visibility value to the high-resolution model (or press Alt + X while it is selected).
  11. Next, in a nested part of the Ribbon, we have to set a new object or model to work on (that doesn't exist yet). Click on the PolyDraw rollout at the bottom of the Freeform tab.

  12. Having expanded PolyDraw, click on the New Object button and we're ready to start retopologizing. I would strongly suggest raising the Min Distance value in the PolyDraw section, so when you create the first polygons they aren't too small. When using the Strips brush, usually I set the Min Distance to around 25-35, but it depends on the model scale and the level of detail you want. Just like with modeling, when you retopologize, it is best to move from large forms to small details.

    The object will be called something like Box001, an Editable Poly beginning in the Vertex mode. You can rename it to Retopo or something more memorable.

  13. Turn on the Strips mode and make sure Edged Faces is toggled on (F4) so you can see the high-resolution model's center line. Starting at the head, draw a strip of polygons along the symmetry line so that there's an edge on either side. As this model is symmetrical, we only have to work on half of it.

    If you hold the mouse over the Strips mode icon , you'll get a tool tip that explains how Strips are made, and if you press Y, you can watch a video demo albeit drawing on the Grid. Note that the size of the polygons, as you draw, is determined by the Min Distance value under PolyDraw. Bear in mind that apart from the Min Distance value, the size of the polygons drawn also depends on the current viewport zoom. This is handy because when working on tighter detail, you'll tend to zoom in closer to the source mesh.

3ds Max Speed Modeling for 3D Artists Flex your speed modeling muscles using 3ds Max with this book and ebook
Published: October 2012
eBook Price: $26.99
Book Price: $44.99
See more
Select your format and quantity:

Retopology

There's no rush to do everything at once. You can edit what you've done to your liking, and then continue adding more strips. Strips can be joined at their ends using Step Build or Bridge, or Target Weld. You can also use the Drag brush to slide the points of the strip on the high-resolution model surface.

I like to use the Strips method to establish the symmetry line as much as possible all the way round the model. You may want to skip over areas of tight detail like the mouth, saving them until later. Sometimes the strip's edge distribution will be a bit fine, as in the example shown below. Consider using Dot Ring to grab every second edge and choose Ctrl + Remove to lighten the mesh.

You will notice that since we're adding the strip along the symmetry line, there isn't a good fi t to the actual middle as the polygons don't have a center edge. We can add a center line by making a Ring, selection around the strip, then ConnectEdges to make a new loop. To force this loop to be centered and absolutely flat, use Align | Align X found in Graphite Modeling Tools of the Ribbon.

Using Packt3dsMax\PacktUI.ui, right-click and choose Convert to Vertex, which makes the edge loop a vertex loop and puts us in the Vertex editing mode. After that, using the Conform brush tool provides an easy way to make the edge loop fit to the high-resolution mesh's symmetry line. The Conform brush when active shows an options palette that, when expanded using the arrow icon , lets you toggle Use Selected Verts , which in this case makes sure you only affect the added loop. Due to the fact that the strip runs around the back and front, you may want to also toggle on Ignore Backfacing below Use Selected Verts. Set the Conform value to 100 so verts jump immediately to the high-resolution mesh surface.

There are several ways to slap new polygons on top of the source mesh, including Step Build,which is a kind of one-at-a-time method that is good for detailed areas as you will have the most control. Also, there is the Topology tool that lets you draw guidelines on the surface and generates a polygon for each quad the drawn guidelines create, as they cross each other. Let's look at both of these methods in turn.

While this model isn't so very high poly that it will overtax the viewport, having set a strip of polygons to make a loop around the center line, you could now delete half the model down to its symmetry axis via Select by Half in the Polygon mode.

Exploring the Freeform/Polydraw tools

Open the scene RetopoStrip.max to begin from here, with the strip already running around the symmetry line of the monster.

  1. The Step Build mode lets you add verts and polys aligned on the surface of the high-resolution mesh. There are more hotkey combinations for the various possibilities.This tool offers us more hotkey combos then there are in Tekken, so it pays to rehearse them. You can view the tool tip list of key operations if you hold your mouse over the Step Build icon.
  2. The basic idea is to click to add points, and then hold Shift and drag the mouse within a quad of points to create a polygon. You can create rows of points and then drag across them all in one sweep, holding Shift + LMB, as shown in the following screenshot:

  3. If you want to check for quads you might have missed, you can apply a Shell modifier with a sufficient Outer Amount thickness value, and turn on Show End Result in the modifier stack while working with Step Build at the Editable Poly level. Remember that the Shell modifier used this way is only meant to provide a visual guide and should be removed later.

  4. Enter the Drag mode to shuffle points that you've added around on the surface, so the edge loops you're creating flow nicely.
  5. The Topology tool lets you draw a series of interlacing lines in a grid over the high-resolution mesh surface, and where the lines overlap to form quads, it creates polygons. The nice feature of this tool is that you can explicitly control edge loop shapes. In the following screenshot, smaller lines help form end corners:

  6. After creating a lattice of such lines, right-click to commit them. They show a surface while you are drawing the lines, but you have to commit them to include the result in your object. Once you do so, you'll notice that the Shell modifier kicks in (if you are using it). In the following screenshot, the first section made with Step Build and the new section made with Topology have been joined together. To join the pieces, select the facing edge loops and use Bridge Edges. Make sure there's the same number of segments on both sides.

  7. After joining the pieces, I used the Conform Relax brush, highlighted in the following screenshot, to help smooth the edge loops created so far. There's also a Conform Scale and Conform Move brush in the same section of the Ribbon. If you try them out on a section of your mesh, it'll be clear enough how each brush affects the mesh.

  8. If you want to continue from here, you can open the provided scene at \Packt3dsMax\Chapter 9\RetopoExtendStart.max.
  9. The Extend tool , below Step Build, allows you to quickly drag out a new strip. The best way to use this is by holding down Shift + LMBand dragging an existing edge. The leading edge of each new polygon has the same relative shape as the edge you drag it from. It's similar to extruding an edge while modeling, by using Shift + LMB in the Move mode, except the points conform to the surface of the source mesh. Skewed edges that you drag out can be adjusted in the Drag mode or Extend mode by holding Shift + Ctrl + Alt + LMB and nudging the points. This key combination may seem a bit annoying at first, but you'll get used to it. Think of it as "mash all the command keys at once".
  10. Note that there are other shortcut combinations for Extend, which allow you to do even more. You can reproduce entire loops in one go by dragging while you hold Ctrl + Shift + LMB and then nudge the new polygons around until you release. You can effectively bridge between two edges by dragging while you hold Ctrl + Alt + LMB.
  11. Try dragging a strip of polygons using Extend (Shift + LMB and drag an edge) along the length of the creature's ear. Also, try it using the Strips tool. Note that the Strip mode polygons have an even size and spacing based on the tool settings we discussed earlier, whereas the Extend mode polygon size is up to you, since each polygon will only be created when you release after dragging.

  12. In the previous screenshot, A was made using Extend (plus nudge), B was made using Strip(set to Min Distance = 25), and the join at C was made in the Extend mode using Ctrl + Alt + LMB.

Pinch/Spread

When you use Extend, you may notice that the strips you generate may tend toward being thinner than they need to be, especially if you're starting from an area of detail and moving out towards a broader surface. To solve this quickly, we can use the Paint Deform tool Pinch/Spread To use this, set the brush radius to be a bit bigger than the strip you added (around 0.55 was fi ne for the example in the following screenshot), and hold Alt while stroking over the polygons to spread them out (not using Alt will shrink them to be even tighter). This is very similar to the Scale Conform brush and works well alongside it.

Using Quad Cap Pro to generate meshes to conform

The highly worthwhile commercial script called Quad Cap Pro can be used to generate a quad-based mesh from an extruded Spline or border. The script is available on Marius Silaghi's website at http://www.mariussilaghi.com/products/quad-cap-pro, and there's a video example there about capping splines. The script allows us to fill an area bounded by polygon strips, as shown in the following steps:

  1. In the following screenshot in step A, an open border that frames an empty area we want to fill has been selected. Using Packt3dsMax\UI Settings\ UI.ui, you can right-click and choose Create Shape From Edges, or you can find it in the Graphite Modeling Tools by expanding Borders. Be sure to set Linear in the Create Shape options. After creating it, at Top-level select the new Shape01 object and add an Extrude modifier with its Amount set to 0.5. You can use Quad Cap Pro directly on the Border selection of the model, but I like to break it off to be safe.
  2. In step B, the extrusion has been created by giving a large single polygon on top. If you have the Quad Cap Pro script, you can run it and choose Preview, then Apply. The default options should be fi ne in this case, but you may want to use the Rotate function to adjust the result, which works a bit like the Twist 1 function in the Bridge Polygons tool. The result is shown in C.
  3. In step D, finally, the new surface has been detached from the extrusion. Since the polygon selection to which you applied Quad Cap Pro remains selected, you can press Ctrl + I to invert it and delete the rest of the extruded shape. Then you should Attach and Weldthe result to the retopology object. This should be easy since the border you're rejoining it to is the same. Then you can use the Conform Relax brush to ensure the newly added polygons fit to the high-resolution source mesh. If you fi nd that the welded borders don't join properly, it is probably because the extruded face that gets capped needed to be fl ipped. Also, you will fi nd from time to time that Quad Cap Pro asks you for a border with an even number of segments, so you have to add an extra edge (or remove one).

Filling stubborn polygons

To fill a quad using Step Build , dragging while you hold Shift + LMB, make sure you drag it out from the middle of the space you want to fill toward the unclosed gap. From time to time when you use Step Build and want to fill a polygon, it may not want to be your friend. So, you have to use another mean. In cases like the one in the following screenshot, in Step Build mode hold Shift + Alt and glide the mouse over the four points you want to surface, and then left-click in the middle of them after they're highlighted. If you are working inside of a cavity or on a surface with a lot of existing surface behind it (even with Ignore Backfacing turned on), you may find that this method is the easiest way to get a result even though it's more or less manual polygon building. For this tool to work without glitches, it is best to orient the current section you are working on so that there are no polygons behind it, and it even helps to hide polygons that you have already constructed from time to time while working on a really complex part, such as the inside of a mouth.

To hide a polygon selection, use Edit Geometry | Hide Selected in the Command Panel or Graphite Modeling Tools | Visibility | Hide Selected in the Ribbon.

Topology concerns for animation

If you compare the source files Retopo01.max to Retopo12.max and RetopoBodyStart.max from \Packt3dsMax\Chapter 9\, you will notice that the process first shows the build-up of the quad-based mesh, and then there's a second pass where the fl ow of the edge loops is cleaned up to maximize the potential of the model; this is done, in particular, so that deforming areas like the skin around the eyes and mouth and neck get tidy, uninterrupted loops.

In the cleaned-up version, the key and secondary edge loops are marked by assigning differently colored materials to the polygon selections. Shading the loops can help you analyze and clean up the initial pass. It's advantageous also in that it helps you isolate edge loops that aren't contributing a lot to the form, which you can then remove using Remove

The following screenshot shows a before and after of the retopology pass and the clean-up pass.

In the top frame, an edge loop around the eye is not closed, and in the lower frame it has been flowed by using Cut and Target Weld and regular edge editing steps, so that it is closed.

Also, in the top frame, the arrow points to an overly dense area. The same area has been cleaned up in the lower frame. The arrow in the lower frame shows that the cheek edge flow is tidier too.

Around the corner of the mouth, the edge loop flow simulates a muscle fl ow around the lips. Flowing loops are helpful in highly fl exible, deformable areas of a model. Around joints like the elbow, knee, ankle, and wrists, distribute clean edge loops so they are evenly arranged on either side of the rotation point. In an area such as the skull, there is no movement of the polygons themselves during animation, so you can turn the edges and include less detail.

One of the simplest explanations of edge loop topology that I've come across is shown on the Blender forums (okay, it's not 3ds Max but polygons are polygons) at http://blenderartists.org/forum/showthread.php?93651-Poles-and-Loops. A similar reference is the blog tips compilation at http://gotwires.blogspot.com..

.It's worth noting that if you work on the model in parts, you can approximate some topology automation using Conform and regular primitives, for example, setting up cylindrical meshes for the legs and conforming them into proper place:

  1. Create a Cylinder on the ground under the leg, as shown in the following screenshot in A. Drag this up to the height of the inner part of the leg.
  2. Add an FFD 4x4 modifier, and turn on the Control Points mode via the Command Panel options for the modifier. Select and move the control points so the Cylinder better fits the shape of the source mesh, as in B.
  3. Delete the top and bottom of the Cylinder, as in C. We don't want the capped end because we'll be joining the surface to the rest of the retopologized mesh later.
  4. Use the Conform or Relax Conform brush in the Freeform section of the Ribbon to quickly wrap the Cylinder mesh to the source mesh, as in D. Remember to set the source mesh as the Surface in the Freeform options. You may also want to add additional edge loops using Swift Loop.

3ds Max Speed Modeling for 3D Artists Flex your speed modeling muscles using 3ds Max with this book and ebook
Published: October 2012
eBook Price: $26.99
Book Price: $44.99
See more
Select your format and quantity:

WrapIt by The Pixel Hive

Unlike in software such as 3d Coat, Modo 601, or ZBrush, there is no automatic retopology tool in 3ds Max. It so happens that a third-party company — company—"The Pixel Hive" — has written a commercial plugin WrapIt which fi lls this gap. Matt Clark has updated the plugin to 3ds Max 2013

To see what this offers, check out the demonstrations at

http://www.matt-clark.co.uk.

WrapIt has two primary advantages over the methods we've looked at so far. One is QuadGen, which automatically shrink wraps a target quad mesh over the source mesh according to user settings. The other is AutoWrap , which gives you a live mesh update as you use Branch Paint for new loops around the form, bridging to the previous loop or to a border selection. It includes a Spacing tool , which redistributes loops evenly, and a Relax tool . There are certain limitations with shrink wrapping a mesh onto another. Automatic edge loops may miss nuances in the fl ow of forms that handset loops will allow you to achieve; and more importantly, cavities tend to be ignored, so for example, the mouth of our current creature would be a bit unresponsive to that approach. Also, extreme spikes in a mesh, such as branching horns, tend to stretch the wrapping mesh and are better conformed in parts. A logical workfl ow would be to work on the finely detailed areas of your creature by hand, and use WrapIt for larger volumes like the body, tail, and legs to get those out of the way quicker.

A quick walkthrough of QuadGen to get a base primitive to wrap to a high poly source mesh follows. After you install WrapIt, you can access it via Customize UI and assign it to a shortcut or Quad menu entry. Activate it, and a pop-up dialog will show the WrapIt options and tools.

  1. In the scene, create a Box01 primitive with 1 x 1 x 1 segments that fi ts to the bounding box of the high-resolution model. The segments value is not at all important, as the fi nal conformed mesh is a freshly generated object with segments determined during the procedure; so we just need a starting volume, as shown in the previous screenshot.
  2. Press High Poly and pick the source mesh from the objects list that pops up.
  3. Press Low and click on the Box01 object.

  4. There is a vertical slider in the Select Objects panel, shown in the previous screenshot, that lets you vary the relative opacity of the high and low resolution meshes in the viewport.
  5. Next to the picker button Low there's a button >, which opens the QuadGen dialog. Here, set the Quad Size to be 0.25. This value is much smaller than the default 10. A value of 10 gives a quick result, but usually much too chunky to be useful. The smaller value means the calculation of the mesh will take a while but have better fi delity.
  6. Make sure the Optimize Quads checkbox is ticked. If you click on Hide Target, the high-resolution source mesh will be hidden after calculation. You may prefer to leave it unchecked and calculate in wireframe mode to see everything, as, after all, all the meshes overlap each other. In this case, you don't have to worry about projecting UVs or Materials. Skip down to the big Generate button, press it, and wait for the Status bar to complete.

  7. If you don't like the result and want to try different values, close the QuadGen dialog to pop up the WrapIt dialog and start again, and adjust the Quad Size value in the QuadGen dialog.

Note in the following example that the quad mesh tends to align vertically and horizontally, not at all based on the flow of forms in the source mesh. This is particularly evident in the tail, as indicated by the marked lines where the loops might be better aligned. Also note that the mouth is not properly concave; rather than fussing around trying to get that to work, it would be easier to join the body to a better version of the head. Also note that the feet details are a bit smoothed out. You can select the mesh faces, delete them, and then go ahead and manually build the faces for the detailed areas.

In conclusion, QuadGen is good for quickly deriving a base mesh to sculpt on (a mesh made from evenly sized, evenly distributed quads that will subdivide well). It isn't so good for a fi nal, animation-oriented retopology mesh, where the flow of loops should be sensitive to the possible deformation during animation. Note that QuadGen is just one part of the WrapIt toolset, and the plugin does include other manual polygon creation tools similar to those in the Freeform tab of the 3ds Max Ribbon.

Finalizing the retopologized model

Finalizing the retopologized model Suppose that you have manually reconstructed the head, used Cylinders as the base for the legs and tail and conformed those, and used WrapIt for the bulk of the body; you could attach the pieces together and use Quad Cap Pro on the borders between them to seal up gaps, and then relax the result using Conform Relax. The final check on the model is that its symmetry is okay and that there are no stray triangles or N-gons, which is easiest to do using Selection | Select by Numeric in the Ribbon. An example is provided in \Packt3dsMax\Chapter 9\RetopoBodyWrapItJoins.max (you don't need the WrapIt plugin or Quad Cap Pro script to open the resulting mesh).

It is possible to automatically reduce the polygon count in a mesh while retaining its texture mapping using the Pro Optimizer modifier. Nice topology will generally be tossed out by this modifi er, but it can produce a result very quickly. The usefulness of this might be to generate a very low-resolution proxy or collision mesh, or to create a mesh that's easy to bind to an animation rig using the Skin modifier (and then transfer the weights via the Skin Wrap modifier to the original mesh automatically).

Summary

In this article, we've examined quad-based mesh retopology, and you should understand the difference between retopologizing a sculpted base mesh (for UV mapping and for further high-resolution sculpting) and retopologizing for animation so the edge loop flow is good for mesh deformation. You should also feel more comfortable about using the Freeform tools in the Ribbon, for modeling in general.

Resources for Article :

 


Further resources on this subject:


About the Author :


Thomas Mooney

Thomas Mooney grew up in New Zealand. He now lives in a jungle with squashed frogs, mosquitoes, and regular thunderstorms and power cuts. He is a lecturer in design and also works as an artist. You can learn more about his work at www.tomofnz.com.

Tom tends to work, play, teach, and sit around all day with computers, and also likes to do comics, films, maps, screenplays, novels, storyboards, and iPad doodles.

His book Unreal Development Kit Game Design Cookbook, Packt Publishing was published earlier in 2012.

Books From Packt


3D Game Development with Microsoft Silverlight 3: Beginner's Guide
3D Game Development with Microsoft Silverlight 3: Beginner's Guide

Unity   3D Game Development by Example Beginner's Guide
Unity 3D Game Development by Example Beginner's Guide

Unity 3.x Game   Development Essentials
Unity 3.x Game Development Essentials

Torque 3D Game Development Cookbook
Torque 3D Game Development Cookbook

XNA 4 3D Game Development by Example: Beginner's Guide
XNA 4 3D Game Development by Example: Beginner's Guide

ZBrush 4 Sculpting   for Games: Beginner's Guide
ZBrush 4 Sculpting for Games: Beginner's Guide

Unreal Development Kit Game Design Cookbook
Unreal Development Kit Game Design Cookbook

Unity 3.x Game Development by Example Beginner's Guide
Unity 3.x Game Development by Example Beginner's Guide


Your rating: None Average: 5 (1 vote)

Post new comment

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
z
W
W
N
f
D
Enter the code without spaces and pay attention to upper/lower case.
Code Download and Errata
Packt Anytime, Anywhere
Register Books
Print Upgrades
eBook Downloads
Video Support
Contact Us
Awards Voting Nominations Previous Winners
Judges Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software
Resources
Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software