May 6th, 2018

Terms and Definitions for Investigating Real-Time Rigid Body Deformations in a Game Environment

Engineering Terms

This is just a list of useful terminology for understanding rigid body deformations in the real world in an effort to translate them into a virtual setting, preferably for games. I am currently looking into research that uses finite element analysis and modeling techniques in order to create physically accurate deformations in real-time in a video game setting.

May 5th, 2018

Finite Element Analysis in Games – Deformable Objects

Unity Tools

DefKit – Deformable Bodies Toolkit for Unity [v0.2] – FEM and SBD

Plugin for Unity that uses FEM to deform solid bodies.


Fractuccino – Real time fracturing for Unity

Tool that attempts to allow for real time fracturing of solid objects in Unity. This tool is based on methods that were researched by Matthias Muller, Nuttapong Chentanez, and Tae-Yong Kim in the PhysX team.

Paper Fractuccino is Based on can be found here.

April 23rd, 2018

Using Procedural Generation Techniques in Game Design Effectively

GDC Talk – Math for Game Programmers: Semi-Procedural Content Pipelines – Squirrel Eiserloh

Link to GDC Vault (May be locked content)

2nd of 6 talks on semi-procedural content generation for games by Squirrel Eiserloh at GDC 2018. In this video he goes over many techniques and how to use them effectively.

  1. Variants:

    Have multiple versions of things. Multiple colors for grass, dirt tiles. Multiple different sounds when running through grass.
    Do I need a tile to be the same forever?
    Whenever possible, let the designer provide multiple alternatives.

  2. Blueprint Definitions:

    Don’t make an orc, create “orcness”. This blueprint has many ranges of values for different characteristics of a character.
    “Do I need an int, or an int range? Do I need a float or a float range?” Use these types of questions for every trait/parameter.
    Whenever possible, let the designer provide number ranges.

  3. Procedural Detailing:

    I paint important parts, algorithms fill in tedious boring labor.
    Example: Unreal fills in grass where designer says to put grass.
    Whenever possible, let the algorithm do the dirty work.

  4. Procedural Brainstorming:

    Use procedural generation to spark creativity.
    Whenever possible, let the algorithm spark your creativity.

  5. Content Injection:

    Inject hand crafted content into procedurally generated content.
    Whenever possible, let the designer inject handmade content into the procedural pipeline.

  6. Stitching:

    Create ways for your things to go together.
    Example: Speleunky – Has many map grid templates with connection points, so they connect in a sensible way.

  7. Template Instantiation:

    Load various copies of things into memory given space allowed.
    Ex: Load instances of rotations or variances into memory.

  8. Content Lists:

    Be a data whore.
    Have huge lists of data to use as names for things. Let content be pulled from these lists.

  9. Mad-Libs:

  10. Abstract Compositions:

    Allow designer to paint out abstract designs, and procedurally generate based on that.
    Ex: Lay out city design with 3 colors depicting residential, commercial, and industrial areas which can then be filled in appropriately.

  11. Constraints

    Say what you want the content to have.
    Ties in well with procedural recipes.
    Creates limits and ranges.

  12. Nested Constraints:

    Be consistent with terminology so that data can string together nicely from large encompassing objects/ideas down to the simplest singular objects that are generated.

  13. Exemplars:

    Human creates “good” content, then algorithm can:
    Make more like this (ex. Markov chains)
    Fill in the missing bits (ex. Wave Function Collapse)

  14. Training:

    Inject human designs into ML processes.
    Genetic algorithms (make a thing, rate it, then do more stuff, keep the best ones)

  15. Outputs as Inputs:

    Anything you generate in general can be an influencer in another thing that is generated.
    Generated content helps create more generated content.

April 21st, 2018

Exploring Uses of Physics in Gameplay

Physics in Games: A New Gameplay Frontier – from Gamasutra.com

Article by Pascal Luban on Dec. 4th, 2007. This is an older paper explaining some of the possibilities opened up by computers becoming stronger and being able to process physics in games more readily. The author suggests ways of using physics as a core gameplay element as opposed to just some aesthetic element.

April 16th, 2018

Research Readings for DIGM 540

Automatic generation and analysis of physics-based puzzle games

By: Shaker, Sarhan, Naameh, Shaker, Togelius

Learning Mechanics and Game Mechanics Under the Perspective of Self-Determination Theory to Foster Motivation in Digital Game Based Learning

By: Proulx, Romero, Arnab

Mapping Learning and Game Mechanics for Serious Games Analysis in Engineering Education

By:Callaghan, Savin-Baden, McShaneEguiluz

Link to Circuit Warz Game

Above is the link to Circuit Warz, the game created for the research paper on “Mapping Learning and Game Mechanics for Serious Games Analysis in Engineering Education”. This game attempts to teach some advanced electrical/circuit theories through a first person action game.

March 20th, 2018

Current Research Exploring Game Play at Science Center Tom Tits Experiment – Project Experimenta

Tom Tits Experiment Homepage
This was referenced in the research paper “Designing for Transformative Play” by JON BACK, ELENA MA´RQUEZ SEGURA, and ANNIKA WAERN. The basics of it are that there was work done on a project called Experimenta (originally “The Mission”), where designers worked to create a large scale game that visitors of the Tom Tits Experiment science center in Södertälje, Sweden could play while they interacted with the various experiments around the exhibit.

Key Quotes on Details from the Paper
  • “The design has been iteratively developed over two years, and repeatedly studied over the course of the project. It is now installed as a permanent part of the science center’s exhibitions.”
  • “Allen [2004] describes an interactive experiment as typically including: (1) a surprising phenomenon, (2) some way to interact to explore the phenomenon, (3) an explanation of the physics, or biological, principle underlying the experiment, and (4) a connection to everyday phenomena.
  • “Experimenta is constructed by rebuilding and sensor-equipping such classic installations, so that the experiment can measure how ‘well’ the user performs [Bergstr¨om et al. 2014]. The result is translated into a number of “points,” which are saved to a RFID card. The points are then used to drive a big ‘machine’—a toy marble labyrinth mounted close to the entrance of the science center.”
Paper Citation
[1] J. Back, E. M. Segura, and A. Waern, “Designing for Transformative Play,” ACM Transactions on Computer-Human Interaction, vol. 24, no. 3, pp. 1–28, Apr. 2017.

March 5th, 2018

Examples of Progress with Gear Mesh Generator in Unity

The approach for creating a full gear mesh in Unity was to create a single section of a gear with one tooth with the given parameters/dimensions, then replicate this a number of times equal to the total number of gear teeth and rotate each of these instances appropriately to create a single full gear. An extra bit of scripting was added to place small black spheres around the vertices of the first gear segment created, to highlight the locations of the created vertices.

The prior setup was tweaked to account for the control of spaces between the gear teeth. This appears to have made the instances of the meshes concave in some manner though, so the convex mesh colliders do not completely accurately follow the model around the teeth now. Another technique will be looked into to prevent this from happening.

Parameters:
  • Number of Teeth: 10
  • Thickness: 0.1
  • Body Radius: 0.5
  • Tooth Height: 0.1
  • Tooth Width: 0.1
  • Space Between Teeth: 0.15
Parameters:
  • Number of Teeth: 12
  • Thickness: 0.25
  • Body Radius: 0.75
  • Tooth Height: 0.15
  • Tooth Width: 0.15
  • Space Between Teeth: 0.15

Video Demonstrations of Gear Generation Script at Work

Shows Physics of Full Gear Mesh

As can be seen from this video, the full gear mesh acts as one object even though it is made of several individual objects each representing a gear segment. It also shows that it has basic physics function within Unity’s game space.

Shows Changing Parameters to Create Different Gear Shapes

This video shows directly how changing the parameters of the script relates to changes of the resulting gear mesh. Currently, all the work is loaded at the start of the scene. Further work will be done to translate this to something that can be edited real time.

Current Equations for Determining Geometry of the Gear Mesh – Shown for Creating Single Gear Section

Parameter Equations
  • angleForSpaceBetween = Mathf.Asin(spaceBetweenTeeth / (2 * bodyRadius));
  • angleForSpaceBetweenDeg = Mathf.Rad2Deg * angleForSpaceBetween;
  • distanceToCenterOfSpace = bodyRadius * Mathf.Cos(angleForSpaceBetween);
  • angleBetweenSections = 360 / numberOfTeeth;
  • halfAngleBetweenSections = angleBetweenSections * Mathf.PI / 360 – angleForSpaceBetween; // Cuts in half and converts to radians
  • cosineTheta = Mathf.Cos(halfAngleBetweenSections);
  • sineTheta = Mathf.Sin(halfAngleBetweenSections);
  • cosineThetaAlpha = Mathf.Cos(halfAngleBetweenSections + angleForSpaceBetween);
  • sineThetaAlpha = Mathf.Sin(halfAngleBetweenSections + angleForSpaceBetween);
Vertex Equations
  • newVertices[0] = new Vector3(0, 0, 0);
  • newVertices[1] = new Vector3(bodyRadius * sineTheta, bodyRadius * cosineTheta, 0);
  • newVertices[2] = new Vector3(-bodyRadius * sineTheta, bodyRadius * cosineTheta, 0);
  • newVertices[3] = new Vector3(-toothWidth / 2, bodyRadius * cosineTheta + toothHeight, 0);
  • newVertices[4] = new Vector3(toothWidth / 2, bodyRadius * cosineTheta + toothHeight, 0);
  • newVertices[5] = new Vector3(0, 0, thickness);
  • newVertices[6] = new Vector3(bodyRadius * sineTheta, bodyRadius * cosineTheta, thickness);
  • newVertices[7] = new Vector3(-bodyRadius * sineTheta, bodyRadius * cosineTheta, thickness);
  • newVertices[8] = new Vector3(-toothWidth / 2, bodyRadius * cosineTheta + toothHeight, thickness);
  • newVertices[9] = new Vector3(toothWidth / 2, bodyRadius * cosineTheta + toothHeight, thickness);
  • newVertices[10] = new Vector3(distanceToCenterOfSpace * sineThetaAlpha, distanceToCenterOfSpace * cosineThetaAlpha, 0);
  • newVertices[11] = new Vector3(-distanceToCenterOfSpace * sineThetaAlpha, distanceToCenterOfSpace * cosineThetaAlpha, 0);
  • newVertices[12] = new Vector3(distanceToCenterOfSpace * sineThetaAlpha, distanceToCenterOfSpace * cosineThetaAlpha, thickness);
  • newVertices[13] = new Vector3(-distanceToCenterOfSpace * sineThetaAlpha, distanceToCenterOfSpace * cosineThetaAlpha, thickness);
Mar. 4th, 2018

Research for DIGM 540

Designing for Transformative Play by: Jon Back, Elena Marquez Segura, and Annika Waern

This paper could serve as a very useful base behind my current project for designing editable physical engineering mechanisms within the Unity game engine. I could use this idea along with my toy to look into creating a more open, user defined play area. This paper focuses on play designed in an open way.

Some Important Key Words:
  1. Human-Computer Interaction (HCI)
  2. Human-Centered Computing
  3. Interaction Design
  4. Interaction Design Theory
  5. Explorative Play
  6. Creative Play
  7. Transformative Play
Further Topics to Look Into:
  1. Ludic Design by Gaver et al.
  2. Stenros Thesis on foundational theory of play

Current Progress of Research Paper

Link to Google Doc of Paper Information

Feb. 28th, 2018

Research for DIGM 540

  1. Predictive Physics Simulation in Game Mechanics by: Perttu Hämäläinen, Xiaoxiao Ma, Jari Takatalo, Julian Togelius
  2. Interactive Control For Physically-Based Animation by: Joseph Laszlo, Michiel van de Panne, and Eugene Fiume

Other Interesting Topics Encountered

  1. The lack of research in soft bodies (as opposed to rigid bodies) in the physics engines of games.

    Covered in: Unifying Rigid and Soft Bodies Representation: The Sulfur Physics Engine by DarioMaggiorini, Laura Anna Ripamonti, and Federico Sauro