Advertisement

3D modeling and animation tool

Started by February 03, 2012 10:34 AM
3 comments, last by _Tinker 12 years, 9 months ago
A couple months ago I began programming a 3d modeling and animation tool in Java with jogl as the api for rastering. The reason I am posting about it is I would like to make it better. I have a lot of ideas on how to improve it, but I would like some critique and suggestions. One design choice I made some would disagree with. I allow only the formation of quads as faces, triangles and n-gons cannot be created. The scene can be viewed either in perspective or orthographically. Use of textures on the model in the scene can be toggled. Geometry can be viewed as wireframe, flat or smooth. There are currently 6 different modes available in the software.

Object Mode:

  1. Allows for creation of primitive objects (plane, circle, box, cylinder, sphere)
  2. It will support importing/exporting models (.x, .3ds, .obj)

Edit Mode: Currently all objects other than the selected one are not visible in edit mode. The transformation of the mesh is not applied, the vertices are rastered with their raw position data.

  1. Extrusion of vertices, edges and faces.
  2. Edge loop creation and selection
  3. Translation, rotation, and scaling (can be constrained to an axis)
  4. Multiple faces can be filled at the same time. For example if you had cylinder with a section taken out of it, selecting the loops and pressing 'f' would automatically fill in the gap. (it does not always work the way you envision it because of arbitrary potential configurations of faces)

Texture Mode: The screen splits into a 3d view and a texturing panel. The uv coordinates of selected geometry appear in this panel. When an image is loaded, it is applied to any currently selected faces.

  1. Supports unwrapping from perspective and an individual face basis. By individual face basis, I mean it uses the face normal to orient and fill the maximum space possible on the texture. There are many ways of unwrapping models, but I am not familiar with the algorithms.
  2. I am planning to be able to paint directly onto the model once it has been unwrapped. There will still be access to 2d texturing tools in the software. You will also be able to use images to projection paint onto the model.

Bone Mode: Bones can be viewed as octahedrons or sticks. Only one bone hierarchy is permitted per object.

  1. Allows for creation of bones by extruding once a skeleton is added.
  2. There are caps at the end of each bone. Moving the caps will change the head position of the selected bone and the tail positions of all the children.
  3. Grabbing the body of bone and moving will affect the offset of the bone, populating down to the children.

Weight Paint:

  1. After selecting a bone you can click and drag over the mesh coloring it proportionally to the influence on each vertex. Green means there is zero influence and red means full influence.
  2. Bones can be posed by rotating to examine the effect of the current weighting on the rig.

Animate Mode: Poses made in weight paint mode persist in animate mode and vice versa. The screen splits into a 3d view and an animation panel resembling a table. The animation panel contains data about the current animation. The first column contains the names of each bone in the selected object's skeleton. The first row displays frame numbers. Keyframes show up as dots in the corresponding frame column.

  1. The dots can be moved into a different column to change the frame in which those bone poses should reside. They may also be deleted.
  2. I need to write code for IK constraints.
  3. This mode is most recently under construction.


Any feedback about potential changes or additions to the project would be helpful. I am not very familiar with the leading technologies, mostly due to their cost. This will be a continuously improved software as new ideas are fed into it. Ideally I want to be able to evolve this project into a fine grained graphical level creation tool for making my games. It spurred from tediously hard coding constraints and properties of physical elements in a game (ragdolls). I want to be able to generate all that data graphically and export it as one file to save time and headaches.
Would this topic be better suited for a different section? I am not sure how many 3d artists look in the 'APIs and Tools' section.
Advertisement
This forum is probably ok. I did actually see this the other day, and started writing a lengthy reply before getting distracted. How much do you know about dependency graphs? Are you planning on building a DG style system under this? How well acquainted with Java's reflection system are you? I assume that the object system is kind of command driven as opposed to DG driven? (eg createBox -> creates a mesh object filled with box data?). Do you have plans for different geometry types in future? (eg beziers, Pn triangles, nurbs, etc?). Are you planing on supporting different deformer types in future? (e.g. blend shapes). Do you plan to offer a scripting language in future?
Also....
How are you planning on handling attribute editors / Outliners?
Have you given a thought to how the undo system will work?
How will the GUI be informed of changes to the model data?
Have you given a thought to how selection will work?
Translate / Rotate / Scale tools?
Have you seen Maya's manipulator system?
Have you though about File IO and versioning will work?
I don't have much experience with dependency graphs, only what little bit they had me do for my computer science degree. Were you considering this for a hierarchy of transforms for the model?

I have never heard of a reflection system in Java before.

I planned to add a special type variation of editing mode where you work entirely in curves. (could be bezier but I'm not sure) The edges will be curves and the faces will be curved. I was imagining it with the current quad system only adding a weight control to every edge to modify curves. If the control fell in line with between the two vertices connecting an edge, it would essentially have no curvature. Once your mesh was in a satisfactory state then you could decide the resolution of the curves through subdivision of the quads which would adhere to the defined curves. Of course the design will evolve based on the preferences of artists who use this.

I had not thought about writing a scripting language, but I would if enough people requested it.


How are you planning on handling attribute editors / Outliners?
Have you given a thought to how the undo system will work?
How will the GUI be informed of changes to the model data?
Have you given a thought to how selection will work?
Translate / Rotate / Scale tools?
Have you seen Maya's manipulator system?
Have you though about File IO and versioning will work?
[/quote]

Could you be more specific when you say attribute editors/ outliners

Currently the undo system works as a stack, where everything you do is an action to be undone. Even switching modes is considered an action. I plan on being able to calculate the memory used by the undo stack and allowing the user to specify the maximum amount of memory it uses before discarding steps. There is also a redo stack but it is emptied as soon as an operation is performed. It is mostly to allow the artist to move back a few steps and decide whether to take a different path.

Currently the operations determine when the canvas is redrawn. If a selection changes or a vertex is moved, the corresponding panels are updated.

Selection, translation, rotation and scale are just like Blender if you are familiar. Right clicking selects objects, there is a box selection tool and the hotkeys for scaling, rotation and translation are the same.

I have not looked into other packages other than Blender very much. I would have to research through youtube videos because I cannot afford Maya, 3ds Max or any of the other expensive packages. I would happily attempt to imitate any useful tool though.

Currently there is only support for saving and loading in the application's native format. When you say versioning do you mean of my application? If so, then I will have version stamps on each subsequent version. I don't even have version 1.0 yet though. I would provide updates on a website when the project is far enough to merit one.

This topic is closed to new replies.

Advertisement