Item Creation Engine Design

Item Creation Engine Design
For required features, see "Item Creation" on Project Requirements page

Initial Item Creation / Selection
User will "enter" the forge and a selection of template objects will open up. For the demo there will only be one template to choose, and it will be a basic sword. Upon selection of the template, the user will enter the crafting process as defined in the following section.

Item Crafting and Modification
After template selection, the user will find him- or herself in the crafting process. This process will begin as a level in UDK, with the integrated UI superimposed over various parts of the screen. The user will have available a number of tools with which to shape the object, a selection of materials from which the sword can be constructed or modified, and a simple vertex-editing mode which can be used to change the sword's shape. Naturally, there will be action buttons for saving, undo/redo, loading another template, and exiting.

When the user is using crafting tools that change the object's shape, or when the user is in vertex mode, UDK will dynamically generate the geometry necessary to store the object for each geometric change that the user makes via a triggered custom script. Tools will be placed by the user on the area which he/she wishes to edit, followed by a user click to perform the function of each tool. In vertex mode, the user will be able to click on regions to create new vertices or to remove existing ones. Vertices can also be dragged in order to change their placement in relation to the remainder of the object, and some means will be employed (still being designed) to keep the user from making objects that wouldn't work in the real world.

The user may edit the sword as much as desired, though there will be a limited amount of each material available to construct with. When the user is finished modifying the sword, the model will be saved as-is to its corresponding file(s) and the user will exit the forge.

Storage
We will store the geometry of the object in a .obj file, and the remainder of the information (materials from which the object is made and simulated physical characteristics) will be stored in a properties file (.txt, .props?)

Custom attributes
(This portion is still being designed)


 * Density (determines mass)
 * Hardness (determines armor-piercing ability)
 * Sharpness (ditto; determined by geometry)
 * Toughness (how much shock can it take before it will break?)
 * Flexibility (can it bend? How much?)

How will the item be able to interact with the game world post-creation? How will we incorporate these attributes into the creation process?

Design Review Feedback / Open Questions
What if we simply said "a grid square of this material has this many hit points*, and the total volume of the item adds up those points to a hit point total. Once the hit points run out, the item is broken and has to be repaired in the forge?

Interface with other aspects: Package up item representation & available attributes. Anything else?

Technology Questions and Other Miscellaneous-isms
Interactive modeling of items - research needed (SethS). Possible approaches for modeling unique items in-game:
 * 1) Voxel editing - really easy and straightforward; basically just a 3D pixelated Paint program (like Minecraft) Another (cooler) way to think about this is as a 3D-printing approach. You have a little squeeze tube (like a cake decorator's standard frosting pouch) that you move around on the surface of the work table to add volume to the object at that point.
 * 2) 3D modeling - there are a number of cheap and free 3D modeling programs out there that let you point and click and edit 3D objects. While it isn't physically based, the basic features are simple to implement and allow for a high degree of geometric customization (see the freeware Anim8or.com). Point-and-click polygon creation could be easily implemented well within the course of a semester. Sculptris.com has invented something they call "Digital Sculpting" which is a lot like Photoshop, but for 3D objects: http://pixologic.com/sculptris/ The geometry and math required for this approach are quite a bit more challenging, but many well-published and well-documented algorithms exist for solving this type of problem interactively.
 * 3) Approximate physically based modeling - This approach is even more realistic but is still an oversimplification of physical reality. It is not particularly hard to implement, for example, a spring-body system where particles in a "solid" object have a basic shape but employ some amount of deformability. The main challenge here is to tweak the system so that it approximates real objects to a sufficient degree of accuracy. The complexity of this system could be highly variable depending on how accurate or detailed we want it to be. Many surveys and papers have been published detailing these approaches and their pros and cons: https://graphics.stanford.edu/courses/cs448b-00-winter/papers/TR97-19.pdf
 * 4) Exact physical modeling - in this type of system, certain laws of physics are employed with the highest degree of exactness available. Benefits are high fidelity and close correspondence to real-world systems, but drawbacks include greatly increased computational complexity so we are not likely to attempt this approach.