May 20th, 2018

Sources to Learn Procedural Generation Techniques for Games

Procedural Generation in Unity

Unity Tutorial: A Procedurally-Generated Galaxy – Part 1 by: quill18creates

Youtube Link to Part 1 of Tutorial

A tutorial to look into for basic procedural generation of a galaxy in Unity. Also has some information on different variable types in C#.

Unity – Cellular Automata Tutorial

Unity Link to Cellular Automata Tutorial

Tutorial directly from unity on the basics of using the procedural generation technique of cellular automata.

May 20th, 2018

Procedural Content Generation in Games

Galactic Arms Race (GAR)

Youtube Link – Evolving Particle Weapons in Galactic Arms Race | AI and Games

by: AI and Games

AI and Games briefly describes how GAR uses evolutionary algorithms to design weapons that the player likes using. The player takes the place of the fitness function to determine what is “good”. Techniques such as CPPN and cgNEAT are lightly touched upon and offer topics to be further explored.

May 19th, 2018

Math for Game Programmers – Talks from GDC – Notes

GDC 2015 – Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations

Presenter: Squirrel Eiserloh

Youtube link to presentation

Notes:

  • Other names used for these concepts in other fields:
    • Easing functions
    • Filter functions
    • Lerping functions
    • Tweening functions
  • Implicit vs. Parametric Equations
    • Implicit: Ex. x^2 + y^2 = R^2
    • Parametric: Ex. Px = R * cos(2*pi*t); Py = R * sin(2*pi*t)
  • Parametric Equations use a single variable (usually a float) as input
  • Opportunities to Use Parametric Transformations
    • Anywhere you have a single float to change
    • Anywhere that could be expressed as a single float
    • Anytime you use time
  • The two most important number ranges in mathematics and computer science are:
    • 0 to 1: Good for fractions and percentages
    • -1 to 1: Good for deviations from some original value
  • These functions are normalized
    • Input of 0 has output of 0, and input of 1 has output of 1
    • The in-between values are those that vary function to function
  • Types of functions
    • Smooth Start: exponential functions with various orders
    • Ex: t^2
    • Smooth Stop: gives opposite feel of smooth start
    • Ex: 1 – (1-t)^2
    • Mix functions
    • Crossfade: mix but “blend weight” is the t parameter itself
    • Scale: multiply something by t; can also multiply functions together
    • Bezier Curves
Other suggested talks:

Juice it or Lose it – by: Martin Jonasson and Petri Purho
The art of screen shake – by: jan willem Nijman vlambeer

Math for Game Programmers – Talks from GDC – Notes

GDC 2013 – Math for Game Programmers: Interaction With 3D Geometry

Presenter: Stan Melax

Youtube link to presentation

Notes:

  • Basic Vector Math
    • Dot product
    • Cross product
    • Outer product
    • Jacobian
    • Determinants
  • Geometry Building Blocks
    • Traingles and planes
    • In games, triangles and planes need to know above and below
    • Triangles use normals
    • Planes use Ax + By + Cz + D == 0
  • Ray-Triangle Intersections
  • Ray-Mesh Intersection
    • Could check against all triangles, but there are ways to remove some for efficiency
    • Need to check if you’ve hit the nearest triangle
    • Mesh must be intact, can have issues if there are holes
  • Convex Mesh
    • Neighboring face normals tilt away
    • Volume bounded by number of planes
    • Every vertex lies at/below every other face
    • Convex used because it makes a lot of tests/calculations simpler
    • If point lies under every plane, it is inside
    • Can move rays as they intersect triangles
  • Convex Hulls
    • Techniques for converting meshes into convex meshes
    • There are two main techniques:
    • Expand Outward – start with small mesh and expand out until all vertices are accounted for
    • Reduce Inward – start with a large mesh and shrink it down to fit all vertices
  • Convex Decomposition: breaking down complex shapes into separate convex meshes
  • Objects in Motion – Spatial Properties
    • Find the center of triangles, then the center of tetrahedrons
    • Find the area of triangles and the volumes of tetrahedrons
    • These properties can be used for basic accurate physics simulations of objects
  • Time Integration without Numerical Drift
    • Forward Euler update versus Runge Kutta update
    • Forward Euler applies derivative at every step, which can give inaccurate results in too large of time steps
    • Runge Kutta looks at multiple time steps and their derivatives and takes a weighted average to make steps more consistent
  • Soft Body Meshes
    • Connect points/vertices of mesh with spring-like connections
    • Two main techniques:
    • Kinematic: can have issues with stressed state oscillating as it will not come to rest, forces continue to act
    • Dynamic: has better resting stressed states that will settle down
  • How to learn more
    • Practice tinkering with your own physics engine code
    • Write gjk algorithm
    • Help understand physics engines and their limitations
May 13th, 2018

Procedural Generation

Unite 2016 – The Power of Procedural Meshes

Unity Talk by Alexander Birke

Youtube Link to Talk

Suggested Reading:

“Essential Mathematics for Games – A Programmers Guide” by James M. Van Verth & Lars M. Bishop

Links to examples to learn about procedural generation of meshes
Notes from talk:
    Why use procedural meshes?

  • Player Made Content (Ex. Spore)
  • Unique Mechanics (Ex. Gish)
  • Procedural Generation (Ex. Sir You’re Being Hunted)
Unity Procedural Meshes
  • Mesh starts by creating vertices, and then making triangles from those vertices
  • Components Needed:
    • MeshFilter – stores the mesh
    • MeshRenderer – shows the mesh
    • Script – to generate the mesh
  • Normal vectors used to determine surface orientation
  • Colors
    • Used to be determined by assigning values to vertices
    • Can be used to provide more information to vertices still
    • Can be done as bytes or floats
    • Bytes generally better
  • UVs
    • 2d coordinates for each vertex
    • Used to map textures
    • Create vector2d array to assign to mesh object
  • Setting Trangle Indices
    • Most difficult part
    • Find common features of topology that repeats
    • Draw it out to help find these patterns!
  • Delaunay Triangulation
    • Maximizes angle of all angles of triangles in triangulation
    • Good for GPU rendering since skinny triangles can lead to visual artifacts
    • Port of triangle.net can be found in an above link
  • Debugging Procedural Meshes
    • Very important to do
    • Use Gizmos and Debug classes
    • Rotate camera to check if tris are facing correct direction
    • Turn on wireframe rendering
  • Optimizing Meshes
    • StaticBatchingUtility: batches multiple game objects together into fewer drawcalls but where each can still be culled
    • Mesh.CombineMeshes: Puts many meshes into one, good if individual meshes not likely to cull, but can break things if not done carefully
  • Optimizing Dynamic Meshes
    • Mesh.MarkDynamic: allocates a memory buffer of sorts to designated mesh to let graphics API know mesh data will change often
    • Base data structure to store data in is flat arrays when possible
    • Lists can be used too, especially if you are unsure how many vertices you will need before creating mesh
    • Frustrum Culling
    • Skinned Meshes
  • Multithreaded Mesh Generation: Unity API not thread safe
  • Compute Shaders
    • GPU great for running parallel tasks
    • Only available on modern platforms: PS4, Xbone, DirectX 11, OpenGL 4.3, OpenGL ES 3.1
    • Unity can cross compile with these options
Summary

Procedurally generating a mesh starts with creating vertices, and then triangles from these vertices. Normals and UVs can be added to this data for more informed meshes. In Unity, your mesh will need a MeshFilter and MeshRenderer component. Debugging your mesh is important, and some tools in Unity to help with that are the gizmo and debug classes, moving the camera around, and turning on wireframe rendering. There are also several options to look into to either optimize your existing meshes how they are, or compute them more efficiently.

More to Research
  • Bezier Curves: parametric mathematical curves used commonly in generating computer graphics
  • Use of GPU to do parallel calculations, and how to connect that with Unity scripting
  • Thread and Multithread Mesh Generation: Not sure what this actually meant
  • Computing shaders
  • Talk through Unity by “Sir You’re Being Hunted” on 3D Mesh Generation
May 7th, 2018

AI Wish List from GDC

AI Wish List: What Do Designers Want out of AI? – GDC Vault

GDC Talk with Raph Koster, Dave Mark, Richard Lemarchand, Laralyn McWilliams, Noah Falstein, and Robin Hunicke. They go over what directions they would like AI to move in in the future to further good game development.

Some Topics Discussed:
  • Content Creation: Don’t focus on procedurally generating a tree, or a forest of trees. Generate interestingly varied trees that have other interactive elements within/about them to create a much more detail-rich environment that could not be created by human hands in any practical way. Create a world, with a forest, with a pond, with tadpoles that you can interact with.
  • Feelings to Invoke: Feeling Proud for something. Have the player feel proud that they were able to guide something else to perform an action on its own.
  • Create systems of interactivity that decentralize the player. Make the player understand that their actions are upsetting a balance. Make the player see that their actions affect other lives, even NPC lives.
    Example: A player arrives at a procedurally generated world with procedurally generated pink moles that have built up an entire ecosystem and have a history. These moles will then react to the player arriving and their actions/decisions, but also carry on with their own lives, which they would have done regardless of whether a player ever arrived or not.
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.

May 3rd, 2018

Unity – ProGrids

Brackeys Tutorial on ProGrids – Youtube

Progrids is a tool that can be obtained for free on the Unity asset store. It allows you to have a grid-system in Unity for constructing your scenes. This can be useful for basic level design and simply keeping items in line with each other.
This can be extremely helpful for prototyping and grayboxing level designs, or even full game creation, especially in a 2D sprite/tile setting.

May 2nd, 2018

Game Jams in Ludem Dare

Ludem Dare Site

“Ludum Dare is one of the world’s largest and longest running Game Jam events. Every 4 months, we challenge creators to make a game from scratch in a weekend.”

This site lets users participate in a game jam every 4 months where they create a game based on a theme over one weekend. The users can see others submissions, and it is a competition where submissions are based on multiple categories.

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.