SlideShare a Scribd company logo
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Content Generation with Unity
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
What is Procedural Content Generation?
Procedural Generation
with no or limited human intervention, algorithmically
of Content
of “things that affect the gameplay”, not non-player
character behavior, not the game engine
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
so what exactly is procedurally generated?
levels, tracks, maps, terrains, dungeons, puzzles,
buildings, trees, grass, fire, plots, descriptions,
scenarios, dialogues, quests, characters, rules,
boards, parameters, camera viewpoint, dynamics,
weapons, clothing, vehicles, personalities, etc.
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://en.wikipedia.org/wiki/Rogue_(video_game)#mediaviewer/File:Rogue_Screen_Shot_CAR.PNG
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
BBC Micro – 2 MHz MOS Technology 6502/6512
16-128 kB RAM 32-128 kB ROM
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015https://www.youtube.com/watch?v=ISR4ebdGlOk
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
what’s the basic principle?
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
f(x) = sin(x)
float y = 0f;
for (float x = 0f; x<6.28f; x+=.01f) {
y = Mathf.Sin(x);
}
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
What the ingredients?
domain knowledge
structured randomness
multi-layering
filters, limits & restrictions
specialized algorithms
artificial intelligence
gameplay integration
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Outline
geometry
textures
animations
dungeons
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Geometry
(Quads)
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
/// specify vertices
Vector3[] vertices = new Vector3[4];
vertices[0] = new Vector3(0.0f, 0.0f, 0.0f);
vertices[1] = new Vector3(0.0f, 0.0f, m_Length);
vertices[2] = new Vector3(m_Width, 0.0f, m_Length);
vertices[3] = new Vector3(m_Width, 0.0f, 0.0f);
/// specify 2 triangles
int[] indices = new int[6];
/// triangle 1
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
/// triangle 2
indices[3] = 0;
indices[4] = 2;
indices[5] = 3;
/// create the mesh
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = indices;
mesh.RecalculateBounds();
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
/// create the normals
Vector3[] normals = new Vector3[4];
normals[0] = Vector3.up;
normals[1] = Vector3.up;
normals[2] = Vector3.up;
normals[3] = Vector3.up;
mesh.normals = normals;
/// create the UV for the full texture
Vector2[] uv = new Vector2[4];
uv[0] = new Vector2(0.0f, 0.0f);
uv[1] = new Vector2(0.0f, 1.0f);
uv[2] = new Vector2(1.0f, 1.0f);
uv[3] = new Vector2(1.0f, 0.0f);
mesh.uv = uv;
/// create the UV for half texture
Vector2[] uv = new Vector2[4];
uv[0] = new Vector2(0.0f, 0.0f);
uv[1] = new Vector2(0.0f, 1.0f);
uv[2] = new Vector2(0.5f, 1.0f);
uv[3] = new Vector2(0.5f, 0.0f);
mesh.uv = uv;
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Geometry
(Polygons)
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
/// specify vertices
Vector3[] vertices = new Vector3[_no_sides];
float d = 2*Mathf.PI/no_sides;
for(int s=0; s<_no_sides; s++) {
vertices[s] = new Vector3(Mathf.Cos (-s*d), 0f,
Mathf.Sin (-s*d)) * _ray;
}
/// compute triangles no_sides-2 triangles, 3 indices each
int[] indices = new int[(_no_sides-2)*3];
for(int t=0; t<_no_sides-2; t++) {
indices[t*3] = t;
indices[t*3+1] = t+1;
indices[t*3+2] = vertices.Length-1;
}
/// ...
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Geometry
(Surfaces)
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
public class MeshBuilder
{
public List<Vector3> Vertices;
public List<Vector3> Normals;
public List<Vector2> UVs;
public void AddTriangle(int i0, int i1, int i2);
public Mesh CreateMesh()
}
MeshBuilder meshBuilder = new MeshBuilder();
//Set up the vertices and triangles:
meshBuilder.Vertices.Add(new Vector3(0.0f, 0.0f, 0.0f));
meshBuilder.UVs.Add(new Vector2(0.0f, 0.0f));
meshBuilder.Normals.Add(Vector3.up);
...
meshBuilder.AddTriangle(0, 1, 2);
meshBuilder.AddTriangle(0, 2, 3);
...
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
MeshBuilder meshBuilder = new MeshBuilder();
for (int i = 0; i < m_SegmentCount; i++)
{
float z = m_Length * i;
for (int j = 0; j < m_SegmentCount; j++)
{
float x = m_Width * j;
Vector3 offset =
new Vector3(x, Random.Range(0.0f, m_Height), z);
BuildQuad(meshBuilder, offset);
}
}
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Geometry
(Cubes, Cylinders, Flowers)
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Generation of Textures
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
structured noise
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
// Create the new texture
texture = new Texture2D(width, height, TextureFormat.RGBA32,
false);
// Assign it to the material
GetComponent<MeshRenderer>().material.mainTexture = texture;
// Generate the pixels
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
R = …
G = …
B = …
A = …
texture.SetPixel(x, y,
new Color (R, G, B, A));
}
}
// Apply the texture
texture.Apply();
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
// Noise pattern
noiseR =
SimplexNoise.noiseOctaves(nOctaves,xx*betaWR,yy,seed,frequenc
y);
// Alpha blending
valueR = (1-alphaR)+alphaR*noiseR;
// Sine pattern
valueR *= Mathf.Sin(noiseR*(sineX*x+sineY*y)*sineFrequency);
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Animations
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Procedural Animation
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Animation in Unity
Skinned mesh renderer
Transforms = Bones
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
// Get all children transforms
var bones = gameObject.GetComponentsInChildren<Transform>();
// Rotate them using a sine wave
foreach(var bone in bones)
{
// Create a sine wave
float angle = Mathf.Sin(t + phase)*amplitude;
// Assign rotation
Vector3 tmpRot = bone.localEulerAngles;
tmpRot.z = angle;
bone.localEulerAngles = tmpRot;
}
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Dungeon Generation
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Dungeon Generation
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
The Grid Map
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
// Mark the starting location
CellLocation currentLocation = starting_location;
map.MarkAsVisited(currentLocation);
// Pick a starting direction
Direction previousDirection = Direction.North;
// Repeat until all cells have been visited
while (!map.AllCellsVisited)
{
// Choose a direction
DirectionPicker directionPicker =
new DirectionPicker(map, currentLocation, directionChangeModifier,
previousDirection);
Direction direction = directionPicker.GetNextDirection(map, currentLocation);
// Check if we can go in that direction
if (direction != Direction.None)
{
// Create a corridor to the next cell and flag this cell as visited
previousLocations.Add(currentLocation);
previousDirection = direction;
currentLocation = map.CreateCorridor(currentLocation, direction);
map.FlagCellAsVisited(currentLocation);
} else {
// Backtrack
currentLocation = previousLocations[previousLocations.Count - 1];
previousLocations.RemoveAt(previousLocations.Count - 1);
}
Recursive Backtracking algorithm
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Virtual Map -> Physical Map
// Choose a prefab based on the cell type
GameObject prefab = behaviour.GetPrefab(cell_type);
// Instantiate the prefab at the given position
GameObject go = (GameObject)GameObject.Instantiate(prefab, new
Vector3(l.x*behaviour.tileSize,l.storey*(behaviour.wallHeight
+behaviour.storeySeparationHeight),l.y*behaviour.tileSize),
Quaternion.identity);
go.name = cell_type.ToString();
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
we can do it, so can you!
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
http://www.youtube.com/watch?v=uIUYWzdMXog
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://www.michelepirovano.com/portfolio_swordgenerator.php
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://www.michelepirovano.com/portfolio_swordgenerator.php
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
http://www.polimigamecollective.org
http://www.facebook.com/polimigamecollective
http://www.youtube.com/PierLucaLanzi
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
47
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Ingredients #1 & #2
Domain Knowledge & Artificial Intelligence
•  Domain Knowledge
§ To generate something you need to know it
§ PCG typically aims at building an artificial level
designer, usually needs domain knowledge
about level design
•  Artificial Intelligence
§ Need algorithms that can work on complex
knowledge and generate plausible content
§ Search-based methods, L-systems, evolutionary
computation, fractals, cellular automata,
agent-based methods, planning, etc.
48
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
ingredient #3
structured randomness
things look like they have been randomly
generated but it is not completely at random!
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
f(x) = sin(x)
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
they both look like “noise”
but one of them feels like it has structure…
it is structured randomness
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
ingredient #4
multi-layering
typically more layers of procedural
content generation are applied in sequence
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
•  Warzone 2100
§ Heights & Cliffs
§ Roads
§ Textures
§ Player Bases
§ Local Features
•  Civilization 4
§ Fractal Heightfield
§ Plate Tectonics
§ Tile Types
§ Rivers and Lakes
§ Map Bonuses
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
ingredient #5
Filters, Limits & Restrictions
“In Civ3 I would say we even shipped with a sub-standard resource
placement algorithm where all the iron could be concentrated in just
a few small locations on the map, and for one player there may be
literally no way for them to build swordsmen.” – Soren Johnson
"With Civ4 we instituted randomness with limitations. There
always has to be a minimum distance between each element of
iron, or each element of horses, and that completely solved the
problem.” – Soren Johnson
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
ingredient #6
specialized algorithms
placing special items, requires special tricks
this tricks must be encoded in the PCG
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
1.  Connect all bases, the resources,
pick three random points and
connect them
2.  Apply a customize A* heuristic
and reuse roads!
3.  Customize A* heuristic with
randomize cost of non-road
grid cells.
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
ingredient #7
gameplay integration
Is it fun to play? Is the progression adequate?
Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015

More Related Content

Viewers also liked

Designing Puzzles for Video Games
Designing Puzzles for Video GamesDesigning Puzzles for Video Games
Designing Puzzles for Video Games
Pier Luca Lanzi
 
Idea Generation and Conceptualization
Idea Generation and ConceptualizationIdea Generation and Conceptualization
Idea Generation and Conceptualization
Pier Luca Lanzi
 
Transparency in Game Mechanics
Transparency in Game MechanicsTransparency in Game Mechanics
Transparency in Game Mechanics
Pier Luca Lanzi
 
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other MethodsDMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
Pier Luca Lanzi
 
DMTM 2015 - 07 Hierarchical Clustering
DMTM 2015 - 07 Hierarchical ClusteringDMTM 2015 - 07 Hierarchical Clustering
DMTM 2015 - 07 Hierarchical Clustering
Pier Luca Lanzi
 
Game Balancing
Game BalancingGame Balancing
Game Balancing
Pier Luca Lanzi
 
Machine Learning and Data Mining: 12 Classification Rules
Machine Learning and Data Mining: 12 Classification RulesMachine Learning and Data Mining: 12 Classification Rules
Machine Learning and Data Mining: 12 Classification Rules
Pier Luca Lanzi
 
Introduzione alla realizzazione di videogiochi - Meccaniche
Introduzione alla realizzazione di videogiochi - MeccanicheIntroduzione alla realizzazione di videogiochi - Meccaniche
Introduzione alla realizzazione di videogiochi - Meccaniche
Pier Luca Lanzi
 
Introduzione alla realizzazione di videogiochi - Game Engine
Introduzione alla realizzazione di videogiochi - Game EngineIntroduzione alla realizzazione di videogiochi - Game Engine
Introduzione alla realizzazione di videogiochi - Game Engine
Pier Luca Lanzi
 
Engagement through Gamification
Engagement through GamificationEngagement through Gamification
Engagement through Gamification
Pier Luca Lanzi
 
Pint of Science - Milano 24 Maggio 2016
Pint of Science - Milano 24 Maggio 2016Pint of Science - Milano 24 Maggio 2016
Pint of Science - Milano 24 Maggio 2016
Pier Luca Lanzi
 
A Journey at The Heart of Game Design
A Journey at The Heart of Game DesignA Journey at The Heart of Game Design
A Journey at The Heart of Game Design
Pier Luca Lanzi
 
Presentazione Open Day del Politecnico di Milano (2016)
Presentazione Open Day del Politecnico di Milano (2016)Presentazione Open Day del Politecnico di Milano (2016)
Presentazione Open Day del Politecnico di Milano (2016)
Pier Luca Lanzi
 
Introduzione alla realizzazione di videogiochi - Fun
Introduzione alla realizzazione di videogiochi - FunIntroduzione alla realizzazione di videogiochi - Fun
Introduzione alla realizzazione di videogiochi - Fun
Pier Luca Lanzi
 
Working with Formal Elements
Working with Formal ElementsWorking with Formal Elements
Working with Formal Elements
Pier Luca Lanzi
 
The Structure of Games
The Structure of GamesThe Structure of Games
The Structure of Games
Pier Luca Lanzi
 
Machine Learning and Data Mining: 04 Association Rule Mining
Machine Learning and Data Mining: 04 Association Rule MiningMachine Learning and Data Mining: 04 Association Rule Mining
Machine Learning and Data Mining: 04 Association Rule Mining
Pier Luca Lanzi
 
Machine Learning and Data Mining: 02 Machine Learning
Machine Learning and Data Mining: 02 Machine LearningMachine Learning and Data Mining: 02 Machine Learning
Machine Learning and Data Mining: 02 Machine Learning
Pier Luca Lanzi
 
Machine Learning and Data Mining: 03 Data Representation
Machine Learning and Data Mining: 03 Data RepresentationMachine Learning and Data Mining: 03 Data Representation
Machine Learning and Data Mining: 03 Data Representation
Pier Luca Lanzi
 
Course Organization
Course OrganizationCourse Organization
Course Organization
Pier Luca Lanzi
 

Viewers also liked (20)

Designing Puzzles for Video Games
Designing Puzzles for Video GamesDesigning Puzzles for Video Games
Designing Puzzles for Video Games
 
Idea Generation and Conceptualization
Idea Generation and ConceptualizationIdea Generation and Conceptualization
Idea Generation and Conceptualization
 
Transparency in Game Mechanics
Transparency in Game MechanicsTransparency in Game Mechanics
Transparency in Game Mechanics
 
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other MethodsDMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
DMTM 2015 - 13 Naive bayes, Nearest Neighbours and Other Methods
 
DMTM 2015 - 07 Hierarchical Clustering
DMTM 2015 - 07 Hierarchical ClusteringDMTM 2015 - 07 Hierarchical Clustering
DMTM 2015 - 07 Hierarchical Clustering
 
Game Balancing
Game BalancingGame Balancing
Game Balancing
 
Machine Learning and Data Mining: 12 Classification Rules
Machine Learning and Data Mining: 12 Classification RulesMachine Learning and Data Mining: 12 Classification Rules
Machine Learning and Data Mining: 12 Classification Rules
 
Introduzione alla realizzazione di videogiochi - Meccaniche
Introduzione alla realizzazione di videogiochi - MeccanicheIntroduzione alla realizzazione di videogiochi - Meccaniche
Introduzione alla realizzazione di videogiochi - Meccaniche
 
Introduzione alla realizzazione di videogiochi - Game Engine
Introduzione alla realizzazione di videogiochi - Game EngineIntroduzione alla realizzazione di videogiochi - Game Engine
Introduzione alla realizzazione di videogiochi - Game Engine
 
Engagement through Gamification
Engagement through GamificationEngagement through Gamification
Engagement through Gamification
 
Pint of Science - Milano 24 Maggio 2016
Pint of Science - Milano 24 Maggio 2016Pint of Science - Milano 24 Maggio 2016
Pint of Science - Milano 24 Maggio 2016
 
A Journey at The Heart of Game Design
A Journey at The Heart of Game DesignA Journey at The Heart of Game Design
A Journey at The Heart of Game Design
 
Presentazione Open Day del Politecnico di Milano (2016)
Presentazione Open Day del Politecnico di Milano (2016)Presentazione Open Day del Politecnico di Milano (2016)
Presentazione Open Day del Politecnico di Milano (2016)
 
Introduzione alla realizzazione di videogiochi - Fun
Introduzione alla realizzazione di videogiochi - FunIntroduzione alla realizzazione di videogiochi - Fun
Introduzione alla realizzazione di videogiochi - Fun
 
Working with Formal Elements
Working with Formal ElementsWorking with Formal Elements
Working with Formal Elements
 
The Structure of Games
The Structure of GamesThe Structure of Games
The Structure of Games
 
Machine Learning and Data Mining: 04 Association Rule Mining
Machine Learning and Data Mining: 04 Association Rule MiningMachine Learning and Data Mining: 04 Association Rule Mining
Machine Learning and Data Mining: 04 Association Rule Mining
 
Machine Learning and Data Mining: 02 Machine Learning
Machine Learning and Data Mining: 02 Machine LearningMachine Learning and Data Mining: 02 Machine Learning
Machine Learning and Data Mining: 02 Machine Learning
 
Machine Learning and Data Mining: 03 Data Representation
Machine Learning and Data Mining: 03 Data RepresentationMachine Learning and Data Mining: 03 Data Representation
Machine Learning and Data Mining: 03 Data Representation
 
Course Organization
Course OrganizationCourse Organization
Course Organization
 

Similar to Codemotion Milan - November 21 2015

Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with UnityPier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
Codemotion
 
201707 SER332 Lecture 17
201707 SER332 Lecture 17   201707 SER332 Lecture 17
201707 SER332 Lecture 17
Javier Gonzalez-Sanchez
 
VDP2016 - Lecture 15 PCG with Unity
VDP2016 - Lecture 15 PCG with UnityVDP2016 - Lecture 15 PCG with Unity
VDP2016 - Lecture 15 PCG with Unity
Pier Luca Lanzi
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5
Takao Wada
 
201707 SER332 Lecture 15
201707 SER332 Lecture 15  201707 SER332 Lecture 15
201707 SER332 Lecture 15
Javier Gonzalez-Sanchez
 
Monteverdi 2.0 - Remote sensing software for Pleiades images analysis
Monteverdi 2.0 - Remote sensing software for Pleiades images analysisMonteverdi 2.0 - Remote sensing software for Pleiades images analysis
Monteverdi 2.0 - Remote sensing software for Pleiades images analysis
otb
 
Seeing Like Software
Seeing Like SoftwareSeeing Like Software
Seeing Like Software
Andrew Lovett-Barron
 
Maximizing performance of 3 d user generated assets in unity
Maximizing performance of 3 d user generated assets in unityMaximizing performance of 3 d user generated assets in unity
Maximizing performance of 3 d user generated assets in unity
WithTheBest
 
IAT334-Lab02-ArraysPImage.pptx
IAT334-Lab02-ArraysPImage.pptxIAT334-Lab02-ArraysPImage.pptx
IAT334-Lab02-ArraysPImage.pptx
ssuseraae9cd
 
Computer Science CS Project Matrix CBSE Class 12th XII .pdf
Computer Science CS Project Matrix CBSE Class 12th XII .pdfComputer Science CS Project Matrix CBSE Class 12th XII .pdf
Computer Science CS Project Matrix CBSE Class 12th XII .pdf
PranavAnil9
 
Noise Driven Encryption Algorithm (NDEA) Version-1
Noise Driven Encryption Algorithm (NDEA) Version-1Noise Driven Encryption Algorithm (NDEA) Version-1
Noise Driven Encryption Algorithm (NDEA) Version-1
AM Publications
 
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeksBeginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
JinTaek Seo
 
[App devcon 18] Brace yourself with Android Architecture Components
[App devcon 18] Brace yourself with Android Architecture Components[App devcon 18] Brace yourself with Android Architecture Components
[App devcon 18] Brace yourself with Android Architecture Components
Michelantonio Trizio
 
Taller parcial 2
Taller parcial 2Taller parcial 2
Taller parcial 2
RubenAlfredoTomalaVe
 
iOS NSAgora #3: Objective-C vs. Swift
iOS NSAgora #3: Objective-C vs. SwiftiOS NSAgora #3: Objective-C vs. Swift
iOS NSAgora #3: Objective-C vs. Swift
Alex Cristea
 
Fundamentals of Digital Signal Processing - Question Bank
Fundamentals of Digital Signal Processing - Question BankFundamentals of Digital Signal Processing - Question Bank
Fundamentals of Digital Signal Processing - Question Bank
Mathankumar S
 
Augmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3DAugmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3D
Roman Protsyk
 
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
Omkar Rane
 
OOP.pptx
OOP.pptxOOP.pptx
OOP.pptx
SanketAde1
 
D44091720
D44091720D44091720
D44091720
IJERA Editor
 

Similar to Codemotion Milan - November 21 2015 (20)

Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with UnityPier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
Pier Luca Lanzi, Michele Pirovano - Procedural Content Generation with Unity
 
201707 SER332 Lecture 17
201707 SER332 Lecture 17   201707 SER332 Lecture 17
201707 SER332 Lecture 17
 
VDP2016 - Lecture 15 PCG with Unity
VDP2016 - Lecture 15 PCG with UnityVDP2016 - Lecture 15 PCG with Unity
VDP2016 - Lecture 15 PCG with Unity
 
Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5Trident International Graphics Workshop 2014 1/5
Trident International Graphics Workshop 2014 1/5
 
201707 SER332 Lecture 15
201707 SER332 Lecture 15  201707 SER332 Lecture 15
201707 SER332 Lecture 15
 
Monteverdi 2.0 - Remote sensing software for Pleiades images analysis
Monteverdi 2.0 - Remote sensing software for Pleiades images analysisMonteverdi 2.0 - Remote sensing software for Pleiades images analysis
Monteverdi 2.0 - Remote sensing software for Pleiades images analysis
 
Seeing Like Software
Seeing Like SoftwareSeeing Like Software
Seeing Like Software
 
Maximizing performance of 3 d user generated assets in unity
Maximizing performance of 3 d user generated assets in unityMaximizing performance of 3 d user generated assets in unity
Maximizing performance of 3 d user generated assets in unity
 
IAT334-Lab02-ArraysPImage.pptx
IAT334-Lab02-ArraysPImage.pptxIAT334-Lab02-ArraysPImage.pptx
IAT334-Lab02-ArraysPImage.pptx
 
Computer Science CS Project Matrix CBSE Class 12th XII .pdf
Computer Science CS Project Matrix CBSE Class 12th XII .pdfComputer Science CS Project Matrix CBSE Class 12th XII .pdf
Computer Science CS Project Matrix CBSE Class 12th XII .pdf
 
Noise Driven Encryption Algorithm (NDEA) Version-1
Noise Driven Encryption Algorithm (NDEA) Version-1Noise Driven Encryption Algorithm (NDEA) Version-1
Noise Driven Encryption Algorithm (NDEA) Version-1
 
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeksBeginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
Beginning direct3d gameprogramming10_shaderdetail_20160506_jintaeks
 
[App devcon 18] Brace yourself with Android Architecture Components
[App devcon 18] Brace yourself with Android Architecture Components[App devcon 18] Brace yourself with Android Architecture Components
[App devcon 18] Brace yourself with Android Architecture Components
 
Taller parcial 2
Taller parcial 2Taller parcial 2
Taller parcial 2
 
iOS NSAgora #3: Objective-C vs. Swift
iOS NSAgora #3: Objective-C vs. SwiftiOS NSAgora #3: Objective-C vs. Swift
iOS NSAgora #3: Objective-C vs. Swift
 
Fundamentals of Digital Signal Processing - Question Bank
Fundamentals of Digital Signal Processing - Question BankFundamentals of Digital Signal Processing - Question Bank
Fundamentals of Digital Signal Processing - Question Bank
 
Augmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3DAugmented Reality With FlarToolkit and Papervision3D
Augmented Reality With FlarToolkit and Papervision3D
 
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
Digit Factorial Chains .(Euler Problem -74) (Matlab Programming Solution)
 
OOP.pptx
OOP.pptxOOP.pptx
OOP.pptx
 
D44091720
D44091720D44091720
D44091720
 

More from Pier Luca Lanzi

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi
Pier Luca Lanzi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei Videogiochi
Pier Luca Lanzi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning Welcome
Pier Luca Lanzi
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018
Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di apertura
Pier Luca Lanzi
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
Pier Luca Lanzi
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
Pier Luca Lanzi
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
Pier Luca Lanzi
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
Pier Luca Lanzi
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
Pier Luca Lanzi
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
Pier Luca Lanzi
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
Pier Luca Lanzi
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
Pier Luca Lanzi
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
Pier Luca Lanzi
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
Pier Luca Lanzi
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
Pier Luca Lanzi
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
Pier Luca Lanzi
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
Pier Luca Lanzi
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
Pier Luca Lanzi
 

More from Pier Luca Lanzi (20)

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei Videogiochi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning Welcome
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di apertura
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
 

Recently uploaded

The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
heathfieldcps1
 
1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx
JosvitaDsouza2
 
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
Dr. Vinod Kumar Kanvaria
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
Sandy Millin
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
Jisc
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
Jean Carlos Nunes Paixão
 
Azure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHatAzure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHat
Scholarhat
 
Thesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.pptThesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.ppt
EverAndrsGuerraGuerr
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
deeptiverma2406
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
TechSoup
 
Unit 8 - Information and Communication Technology (Paper I).pdf
Unit 8 - Information and Communication Technology (Paper I).pdfUnit 8 - Information and Communication Technology (Paper I).pdf
Unit 8 - Information and Communication Technology (Paper I).pdf
Thiyagu K
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
chanes7
 
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
Nguyen Thanh Tu Collection
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
EduSkills OECD
 
South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)
Academy of Science of South Africa
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
SACHIN R KONDAGURI
 
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat  Leveraging AI for Diversity, Equity, and InclusionExecutive Directors Chat  Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
TechSoup
 
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBCSTRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
kimdan468
 

Recently uploaded (20)

The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
 
1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx1.4 modern child centered education - mahatma gandhi-2.pptx
1.4 modern child centered education - mahatma gandhi-2.pptx
 
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
 
Azure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHatAzure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHat
 
Thesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.pptThesis Statement for students diagnonsed withADHD.ppt
Thesis Statement for students diagnonsed withADHD.ppt
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
 
Unit 8 - Information and Communication Technology (Paper I).pdf
Unit 8 - Information and Communication Technology (Paper I).pdfUnit 8 - Information and Communication Technology (Paper I).pdf
Unit 8 - Information and Communication Technology (Paper I).pdf
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
 
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
BÀI TẬP BỔ TRỢ TIẾNG ANH GLOBAL SUCCESS LỚP 3 - CẢ NĂM (CÓ FILE NGHE VÀ ĐÁP Á...
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
 
South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
 
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat  Leveraging AI for Diversity, Equity, and InclusionExecutive Directors Chat  Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
 
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBCSTRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
 

Codemotion Milan - November 21 2015

  • 1. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Content Generation with Unity
  • 2. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 What is Procedural Content Generation? Procedural Generation with no or limited human intervention, algorithmically of Content of “things that affect the gameplay”, not non-player character behavior, not the game engine
  • 3. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 so what exactly is procedurally generated? levels, tracks, maps, terrains, dungeons, puzzles, buildings, trees, grass, fire, plots, descriptions, scenarios, dialogues, quests, characters, rules, boards, parameters, camera viewpoint, dynamics, weapons, clothing, vehicles, personalities, etc.
  • 4. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://en.wikipedia.org/wiki/Rogue_(video_game)#mediaviewer/File:Rogue_Screen_Shot_CAR.PNG
  • 5. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 6. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 BBC Micro – 2 MHz MOS Technology 6502/6512 16-128 kB RAM 32-128 kB ROM
  • 7. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015https://www.youtube.com/watch?v=ISR4ebdGlOk
  • 8. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 9. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 10. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 what’s the basic principle?
  • 11. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 f(x) = sin(x) float y = 0f; for (float x = 0f; x<6.28f; x+=.01f) { y = Mathf.Sin(x); }
  • 12. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 What the ingredients? domain knowledge structured randomness multi-layering filters, limits & restrictions specialized algorithms artificial intelligence gameplay integration
  • 13. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Outline geometry textures animations dungeons
  • 14. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Geometry (Quads)
  • 15. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 16. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 /// specify vertices Vector3[] vertices = new Vector3[4]; vertices[0] = new Vector3(0.0f, 0.0f, 0.0f); vertices[1] = new Vector3(0.0f, 0.0f, m_Length); vertices[2] = new Vector3(m_Width, 0.0f, m_Length); vertices[3] = new Vector3(m_Width, 0.0f, 0.0f); /// specify 2 triangles int[] indices = new int[6]; /// triangle 1 indices[0] = 0; indices[1] = 1; indices[2] = 2; /// triangle 2 indices[3] = 0; indices[4] = 2; indices[5] = 3; /// create the mesh Mesh mesh = new Mesh(); mesh.vertices = vertices; mesh.triangles = indices; mesh.RecalculateBounds();
  • 17. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 /// create the normals Vector3[] normals = new Vector3[4]; normals[0] = Vector3.up; normals[1] = Vector3.up; normals[2] = Vector3.up; normals[3] = Vector3.up; mesh.normals = normals; /// create the UV for the full texture Vector2[] uv = new Vector2[4]; uv[0] = new Vector2(0.0f, 0.0f); uv[1] = new Vector2(0.0f, 1.0f); uv[2] = new Vector2(1.0f, 1.0f); uv[3] = new Vector2(1.0f, 0.0f); mesh.uv = uv; /// create the UV for half texture Vector2[] uv = new Vector2[4]; uv[0] = new Vector2(0.0f, 0.0f); uv[1] = new Vector2(0.0f, 1.0f); uv[2] = new Vector2(0.5f, 1.0f); uv[3] = new Vector2(0.5f, 0.0f); mesh.uv = uv;
  • 18. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Geometry (Polygons)
  • 19. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 /// specify vertices Vector3[] vertices = new Vector3[_no_sides]; float d = 2*Mathf.PI/no_sides; for(int s=0; s<_no_sides; s++) { vertices[s] = new Vector3(Mathf.Cos (-s*d), 0f, Mathf.Sin (-s*d)) * _ray; } /// compute triangles no_sides-2 triangles, 3 indices each int[] indices = new int[(_no_sides-2)*3]; for(int t=0; t<_no_sides-2; t++) { indices[t*3] = t; indices[t*3+1] = t+1; indices[t*3+2] = vertices.Length-1; } /// ...
  • 20. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Geometry (Surfaces)
  • 21. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 public class MeshBuilder { public List<Vector3> Vertices; public List<Vector3> Normals; public List<Vector2> UVs; public void AddTriangle(int i0, int i1, int i2); public Mesh CreateMesh() } MeshBuilder meshBuilder = new MeshBuilder(); //Set up the vertices and triangles: meshBuilder.Vertices.Add(new Vector3(0.0f, 0.0f, 0.0f)); meshBuilder.UVs.Add(new Vector2(0.0f, 0.0f)); meshBuilder.Normals.Add(Vector3.up); ... meshBuilder.AddTriangle(0, 1, 2); meshBuilder.AddTriangle(0, 2, 3); ...
  • 22. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 MeshBuilder meshBuilder = new MeshBuilder(); for (int i = 0; i < m_SegmentCount; i++) { float z = m_Length * i; for (int j = 0; j < m_SegmentCount; j++) { float x = m_Width * j; Vector3 offset = new Vector3(x, Random.Range(0.0f, m_Height), z); BuildQuad(meshBuilder, offset); } }
  • 23. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 24. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Geometry (Cubes, Cylinders, Flowers)
  • 25. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 26. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 27. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 28. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Generation of Textures
  • 29. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 structured noise
  • 30. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 31. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 // Create the new texture texture = new Texture2D(width, height, TextureFormat.RGBA32, false); // Assign it to the material GetComponent<MeshRenderer>().material.mainTexture = texture; // Generate the pixels for (int y = 0; y < height; y++){ for (int x = 0; x < width; x++){ R = … G = … B = … A = … texture.SetPixel(x, y, new Color (R, G, B, A)); } } // Apply the texture texture.Apply();
  • 32. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 // Noise pattern noiseR = SimplexNoise.noiseOctaves(nOctaves,xx*betaWR,yy,seed,frequenc y); // Alpha blending valueR = (1-alphaR)+alphaR*noiseR; // Sine pattern valueR *= Mathf.Sin(noiseR*(sineX*x+sineY*y)*sineFrequency);
  • 33. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Animations
  • 34. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Procedural Animation
  • 35. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Animation in Unity Skinned mesh renderer Transforms = Bones
  • 36. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 // Get all children transforms var bones = gameObject.GetComponentsInChildren<Transform>(); // Rotate them using a sine wave foreach(var bone in bones) { // Create a sine wave float angle = Mathf.Sin(t + phase)*amplitude; // Assign rotation Vector3 tmpRot = bone.localEulerAngles; tmpRot.z = angle; bone.localEulerAngles = tmpRot; }
  • 37. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Dungeon Generation
  • 38. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Dungeon Generation
  • 39. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 The Grid Map
  • 40. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 // Mark the starting location CellLocation currentLocation = starting_location; map.MarkAsVisited(currentLocation); // Pick a starting direction Direction previousDirection = Direction.North; // Repeat until all cells have been visited while (!map.AllCellsVisited) { // Choose a direction DirectionPicker directionPicker = new DirectionPicker(map, currentLocation, directionChangeModifier, previousDirection); Direction direction = directionPicker.GetNextDirection(map, currentLocation); // Check if we can go in that direction if (direction != Direction.None) { // Create a corridor to the next cell and flag this cell as visited previousLocations.Add(currentLocation); previousDirection = direction; currentLocation = map.CreateCorridor(currentLocation, direction); map.FlagCellAsVisited(currentLocation); } else { // Backtrack currentLocation = previousLocations[previousLocations.Count - 1]; previousLocations.RemoveAt(previousLocations.Count - 1); } Recursive Backtracking algorithm
  • 41. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Virtual Map -> Physical Map // Choose a prefab based on the cell type GameObject prefab = behaviour.GetPrefab(cell_type); // Instantiate the prefab at the given position GameObject go = (GameObject)GameObject.Instantiate(prefab, new Vector3(l.x*behaviour.tileSize,l.storey*(behaviour.wallHeight +behaviour.storeySeparationHeight),l.y*behaviour.tileSize), Quaternion.identity); go.name = cell_type.ToString();
  • 42. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 we can do it, so can you!
  • 43. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 http://www.youtube.com/watch?v=uIUYWzdMXog
  • 44. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://www.michelepirovano.com/portfolio_swordgenerator.php
  • 45. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015http://www.michelepirovano.com/portfolio_swordgenerator.php
  • 46. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 http://www.polimigamecollective.org http://www.facebook.com/polimigamecollective http://www.youtube.com/PierLucaLanzi
  • 47. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 47
  • 48. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 Ingredients #1 & #2 Domain Knowledge & Artificial Intelligence •  Domain Knowledge § To generate something you need to know it § PCG typically aims at building an artificial level designer, usually needs domain knowledge about level design •  Artificial Intelligence § Need algorithms that can work on complex knowledge and generate plausible content § Search-based methods, L-systems, evolutionary computation, fractals, cellular automata, agent-based methods, planning, etc. 48
  • 49. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 50. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 ingredient #3 structured randomness things look like they have been randomly generated but it is not completely at random!
  • 51. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 f(x) = sin(x)
  • 52. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 53. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 they both look like “noise” but one of them feels like it has structure… it is structured randomness
  • 54. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015
  • 55. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 ingredient #4 multi-layering typically more layers of procedural content generation are applied in sequence
  • 56. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 •  Warzone 2100 § Heights & Cliffs § Roads § Textures § Player Bases § Local Features •  Civilization 4 § Fractal Heightfield § Plate Tectonics § Tile Types § Rivers and Lakes § Map Bonuses
  • 57. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 ingredient #5 Filters, Limits & Restrictions “In Civ3 I would say we even shipped with a sub-standard resource placement algorithm where all the iron could be concentrated in just a few small locations on the map, and for one player there may be literally no way for them to build swordsmen.” – Soren Johnson "With Civ4 we instituted randomness with limitations. There always has to be a minimum distance between each element of iron, or each element of horses, and that completely solved the problem.” – Soren Johnson
  • 58. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 ingredient #6 specialized algorithms placing special items, requires special tricks this tricks must be encoded in the PCG
  • 59. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 1.  Connect all bases, the resources, pick three random points and connect them 2.  Apply a customize A* heuristic and reuse roads! 3.  Customize A* heuristic with randomize cost of non-road grid cells.
  • 60. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015 ingredient #7 gameplay integration Is it fun to play? Is the progression adequate?
  • 61. Pier Luca Lanzi e Michele Pirovano – Codemotion Milan November 2015