Chuhan Yao 683814 AIR Studio Part C Individual sketchbook
description
Transcript of Chuhan Yao 683814 AIR Studio Part C Individual sketchbook
STUDIO AIRALGORITHMIC SKETCHBOOK2016, SEMESTER 1, ALEX HOLLAND
CHUHAN YAO(ALEX)
ALGORITHMIC SKETCH TASK 1
For the first algorithmic task I bas-cially tried to get familiar with basic grasshopper commands.
So firstly I tried out what is taught in the tutorial, namely populate points in the given 3D box and run voro-noi command to create this cell-like structure. And then in the pruning stage I tried to emphasis on the di-agonal structure so I created the last product.
And then I tried to loft three fair-shaped curves to create a 3D geom-etry. I tried the octree command for this geometry and the outcome be-came really different from the import product. The octree command turns geometries into cubic forms and the structure became dynamic.
I also tried circles to form geom-etry to run the octree command but the outcome looked like the previous product.
I personally like the octree com-mand better because the cubic form reminded me of some precedents such as Jewish Holocaust Memorial in Berlin designed by Peter Eisenman and Luxury Summer House of Mediterranean designed by Alvaro Siza.
ALGORITHMIC SKETCH TASK 2
ALGORITHMIC SKETCH TASK 2 ALGORITHMIC SKETCH TASK 3roller ball tutorial
ALGORITHMIC SKETCH TASK 4clock tutorial
ALGORITHMIC SKETCH TASK 4fractua;l tutorial
ALGORITHMIC SKETCH TASK 5csv landscape generation
ALGORITHMIC SKETCH TASK 6if statements exploration
Interesting & Noise
Path & Interesting & Noise Path & Interesting & Noise & Tree
Path & Tree
Voxels Exploration
Deadzone Exploration
1.1 3.2
4.1 5.5
Noise & Interestingness
Legend: 1st number:Deadzone of Interestingness 2nd number: Deadzone of Noise
ALGORITHMIC SKETCH TASK 6if statements explorationTree & Path
1.1 3.2
4.1 5.5
Legend: 1st number:Deadzone of Tree 2nd number: Deadzone of Path
Legend: 1st number:Deadzone of Tree 2nd number: Deadzone of Path
1.1.1 3.1.3
4.2.4 6.1.4
6.6.6
ALGORITHMIC SKETCH TASK 6if statements explorationInterestingness & Noise & Path
Legend: 1st number:Deadzone of Interestingness 2nd number: Deadzone of Noise 3rd number: Deadzone of Path
1.1.1.1 3.2.4.3
4.2.3.2 6.2.4.2
6.6.6.6
ALGORITHMIC SKETCH TASK 6if statements explorationInterestingness & Noise & Path & Tree
Legend: 1st number:Deadzone of Interestingness 2nd number: Deadzone of Noise 3rd number: Deadzone of Path 4th number: Deadzone of Tree
ALGORITHMIC SKETCH TASK 6ram test
20x8x20 Voxel Mesh Reader 25x8x25 Voxel Mesh Reader
30x8x30 Voxel Mesh Reader 35x8x35 Voxel Mesh Reader
50x8x50 Voxel Mesh Reader
ALGORITHMIC SKETCH TASk 7Group explaination
Our group is the bridge that connects group 1’s and group 3’s work to the final outcome. We create the processing system that uses the researched landscape generated by group 3 and interesting shapes generated by group 1 to produce the actual game. We assign logic and rules of how group 1’s shapes can be generated and how group 3’s landscape can be visualized.
landscape geometry from group 3 voxel object geometry from group 1
converted csv file of landscape converted csv file of voxel object
Unity manager panel that reads csv files
actual gaming interface in Unity
TREENESS
PATHWAY
PERSPECTIVE PLAN ELEVATION
INTERESTINGNESS
NOISENESS
ALGORITHMIC SKETCH TASK 7single voxel exploration
ALGORITHMIC SKETCH TASK 7single voxel exploration
PATH
D=2 D=2 D=2
D=3 D=3 D=3
D=4 D=4 D=4
D=5 D=5 D=5
PERSPECTIVE PLAN ELEVATION
ALGORITHMIC SKETCH TASK 7single voxel exploration
NOISE
D=2 D=2 D=2
D=3 D=3 D=3
D=4 D=4 D=4
D=5 D=5 D=5
PERSPECTIVE PLAN ELEVATION
TREE
D=2 D=2 D=2
D=3 D=3 D=3
D=4 D=4 D=4
D=5 D=5 D=5
PERSPECTIVE PLAN ELEVATION
ALGORITHMIC SKETCH TASK 7single voxel exploration
void Start() { myRenderer = gameObject.GetComponent<Renderer>();
_gridXDim = tileManager.gridXDim; _gridZDim = tileManager.gridZDim;
deadZone = voxelManager.deadZones;
}
// IGNORE ME // Update is called once per frame void Update() {
myX = Mathf.RoundToInt(transform.position.x); myZ = Mathf.RoundToInt(transform.position.z);
//accumColor = attributA if (manager.GetComponent<tileManager>().att == 1) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt1; }
else if (manager.GetComponent<tileManager>().att == 2) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt2; }
else if (manager.GetComponent<tileManager>().att == 3) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt3; }
else if (manager.GetComponent<tileManager>().att == 4) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt4; }
Treeness = thisObject.GetComponent<xyzToI>().slaveAtt1; Noiseness = thisObject.GetComponent<xyzToI>().slaveAtt2; Interestingness = thisObject.GetComponent<xyzToI>().slaveAtt3; Pathness = thisObject.GetComponent<xyzToI>().slaveAtt4;
if (manager.GetComponent<tileManager>().trace == false) { if (accumColor > 0) {
if (voxelManager.showLandscape == true) { myRenderer.enabled = true; } Color myColor = new Vector4(accumColor, accumColor, accumCol-or, 1); myRenderer.material.color = myColor;
THIS PART OF SCRIPT INDICATES THAT FOR THE DIFFERENT NUMBER WE PUT IN “ATT” PANEL ON “TILE MAN-AGER”, READS CORRESPONDING PART OF THE INFORMATION IN THE CSV
THIS PART OF SCRIPT INDICATES THAT FOR THE CSV SHAPES PUTTING IN THE “ELEMENT” PANEL, CORRE-
ALGORITHMIC SKETCH TASK 8coding
THE SPAPES ARE CONVERTED INTO CSV FILE. CSV FILE CONSISTS OF A LIST OF NUMBER THAT RECORDS THE POSI-TION OF EVERY SINGLE VOXCEL OF THE SHAPE. THEY ARE RECORDED AS A VALUE BETWEEN 0 AND 1. IT GIVES US INDICATION OF WHERE TO SPAWN THE VOXELS.
CSV FILES FROM LANDSCAPE GROUP HAS FOUR EXPLORATIONS, WHICH ARE TREE, PATH, NOISE AND INTEREST-INGNESS. THIS PANEL ENABLES US TO QUICKLY SWITCH FROM 4 MAPS WITH-OUT EDITING THE SCRIPT BACK AND FORTH.
CSV FILE FROM LANDSCAPE GROUP WILL BE IMPORTED HERE
CSV FILE FROM SHAPE GROUP WILL BE IMPORTED HERE. THROUGH SCRIPT WE CAN ALSO MODIFY WHICH CSV FILE WE WANT TO SHOW OR HOW MANY CSV FILES WE WANT TO SHOW.
PROTOTYPE SYSTEM EXPLORATION: IF STATEMENTS
THE IF STATEMENT IS THE MOST IM-PORTANT PART OF OUR SYSTEM. IT DECIDES HOW THE VOBJECT WILL BE SPAWNED. THE SCRIPT SUGGESTS IF THERE IS AN VALUE IN THE LAND-SCAPE CSV FILE LOADED IN “ATT” PANEL THAT IS BETWEEN 0.5 AND 0.7, A VOBJECT AS LOADED IN “CSV DATA” PANEL WILL BE SPAWNED AT THAT POSITION.
if (manager.GetComponent<tileManager>().trace == false) { if (accumColor > 0) {
if (voxelManager.showLandscape == true) { myRenderer.enabled = true; } Color myColor = new Vector4(accumColor, ac-cumColor, accumColor, 1); myRenderer.material.color = myColor; } }
if (Treeness > 0.5f && Treeness <= 0.7f && hasSpawned == false) { shapeInt = 0; shapeToHash (); } if (Pathness > 0.5f && Pathness <= 0.7f && hasSpawned == false) { shapeInt = 1; shapeToHash(); } if (Interestingness > 0.5f && Interestingness <= 0.7f && hasSpawned == false) { shapeInt = 2; shapeToHash(); }
if (Noiseness > 0.5f && Noiseness <= 0.7f && hasS-pawned == false) { shapeInt = 3; shapeToHash (); }
//there is a 50% chance of spawning this shape if (Pathness > 0.5f && Pathness <= 0.6 && hasS-pawned == false) { int SpawnChance = Random.Range (0, 2); if (SpawnChance > 0) { shapeInt = 0; shapeToHash (); } else {
manager.GetComponent<tileManager> ().hasSpawned [visitedTileNo] = true; } }
if (accumColor > 0.3f && accumColor <= 0.4f && hasSpawned == false) { shapeInt = 2;
THIS PART OF IF STATEMENT CAN VARY TO CONTROL HOW MANY VOXELS TO BE SPAWNED. THE LARGER THE INTERVAL IS, THE MORE VOXELS WILL BE SPAWNED. BUT A HIGHER INTER-VAL(E.G. 0.5-0.7 TO 0.6-0.8) DOES NOT NECESSARILY MEAN MORE VOXELS ARE GOING TO BE SPAWNED. IT DE-PENDS ON THE PROPERTY OF THE CSV FILE.
if (myX >= 0 && myX < _gridXDim && myZ >= 0 && myZ < _gridZDim) { if (tileManager.isDead [myX, myZ] == true && voxelManager.showDeadZone == true) { myRenderer.enabled = true; myRenderer.material.color = Color.red; } }
} void shapeToHash () { if (tileManager.isDead [myX, myZ] == false) { // make deadzone for (int x = myX - deadZone [sha-peInt]; x < myX + deadZone [shapeInt]; x++) { for (int z = myZ - deadZone [shapeInt]; z < myZ + deadZone [shapeInt]; z++) { if (x >= 0 && x < _gridXDim && z >= 0 && z < _gridZDim) { tileManager.isDead [x, z] = true;
} } }
// update hashtable Vector3 pos = gameObject.trans-form.position; if (voxelManager.voxelObjects != null) { voxelManager.spawn (voxel-Manager.voxelObjects [shapeInt], pos); manager.GetComponent<tile-Manager> ().hasSpawned [visitedTileNo] = true; } } }
}
myRenderer.enabled = false;
visitedTileNo = thisObject.GetComponent<xyz-ToI>().TileNo;
slaveVisited = manager.GetComponent<tileMan-ager>().hasVisited[visitedTileNo]; slaveTimesVisited = manager.GetCompo-nent<tileManager>().timesVisited[visitedTileNo]; hasSpawned = manager.GetComponent<tileMan-ager>().hasSpawned[visitedTileNo];
THIS IS THE SCRIPT FOR GENERAT-ING DEADZONES. IT INDICATES THAT AROUND EVERY SPAWNED VOBJECT THERE WILL BE AN SPACE AROUND IT WHERE ALL THE TILES ARE “DEAD”, SO NOTHING WILL SPAWN ANYMORE. THE RADIUS OF THE DEADZONE CAN BE ALTERED IN “DEADZONE” PANEL IN “VOXEL MANAGER”(NOTE THAT ONE DEADZONE CAN ONLY APPLY TO ONE CSV SHAPE. YOU CAN SET DIFFER-ENT DEADZONES FOR DIFFERENT CSV SHAPES).
using UnityEngine;using System.Collections;
public class meshReader : MonoBehaviour {
public GameObject voxelMesh;
public static int voxelReaderX; public static int voxelReaderY; public static int voxelReaderZ;
public int setVoxelReaderX; public int setVoxelReaderY; public int setVoxelReaderZ;
public float bubble = 4;
void Awake() { voxelReaderX = setVoxelReaderX / 2; voxelReaderY = setVoxelReaderY; voxelReaderZ = setVoxelReaderZ / 2; }
// Use this for initialization void Start() {
for (float i = -voxelReaderX; i < voxelReaderX; i++) { for (float j = 0; j < voxelReaderY; j++) { for (float k = -voxelReaderZ; k < voxelRead-erZ; k++) { Vector3 pos = new Vector3(i / 2, j / 2, k / 2); Quaternion rot = Quaternion.identi-ty; GameObject newObj = Instantiate(vox-elMesh, pos, rot) as GameObject; newObj.transform.parent = gameOb-ject.transform; } } }
} // Update is called once per frame void Update () { }}
THIS SCRIPT REFERS TO THE VOX-EL MESH READER. THE MESH READER READS A CUBIC AREA SURROUNDING THE PLAYER. WHENEVER THE PLAY-ER MOVES, THE VOXEL MESH READER MOVES AS WELL AND CHECK WHETH-ER TO SPAWN VOXELS OR NOT. THIS IS WHY ALL THE PRESENTATION OF EXPLORATION PRESENTS AS A CUBIC FORM.
THESE SETTING CAN BE SEEN IN THE MESH READER PANEL AS “SET VOXEL READER” X&Y&Z AND CAN BE ALTERED TO CHANGE THE VOXEL MESH PRESEN-TATION SCALE.
ALGORITHMIC SKETCH TASK 9legibility images
IF STATE-MENT: 0.2 - 0.4
IF STATE-MENT: 0.5 - 0.7
IF STATE-MENT: 0.8 - 1
BEFORE AFTER
ALGORITHMIC SKETCH TASK 10building prototypes
First, we set up an Apple ID.
Simply followed the instrcutions
on Apple website.
Next, we set up an Apple
Developer account using the
Apple ID registered previously.
Then, we download the newest
version of Xcode for building the
game into Iphone.
In Xcode-->preference, we created a profile using the Apple
ID. Then double clicked the profile and created an IOS
development profile.
IOS development identity to be
created for game building
Add Apple ID here to create the
profile
ALGORITHMIC SKETCH TASK 10building prototypes
Type in the registered Apple ID
information here
Then we refered back to Unity to build
the IOS version of the game.
Then we have the built pakage of the
file.
At last, use Xcode to open the game
package, plug in Iphone and select it as the
target device, and then build the game.
the place to change the game
name
Switch the platform to IOS here
Change “Generic IOS device” into
the target phone and hit play to
build
gps rating in walking/running speed
indoor
street
wooded land
open space
gps rating in cycling speed
street
wooded land
open space
Indoor GPS is not precise. The character keeps rotating and changing position.
GPS in street works better with less rotation and position changing. Relatively precise.
In wooded land GPS works slightly better than indoor, with less rotation but still changing position.
In open spaces GPS works well, with only occasional rotation and changing position.
Generally there is a 3 seconds delay with the GPS tracking, which is acceptable in walking speed. However in the participants
testing session, GPS tracking still does not response to participants’ movement well enough.
GPS in street works fine in street. It roughly stick to the player’s path.
In wooded land GPS is not precise. Cyclist has to stop occasionally to wait the phone to act.
In open spaces GPS works generally fine, slightly changing position.
ALGORITHMIC SKETCH TASK 11gps accuracy exploration
TR: 25x25GS:100x100RR: 0.3s
TR: 25x25GS:100x100RR: 1s
TR: 25x25GS:100x100RR: 0s
Ram TEST
TR: 25x25GS:100x200RR: 0s
TR: 25x25GS:100x200RR: 0.3s
TR: 25x25GS:100x200RR: 1s
Ram TEST
TR: 20x20GS:300x300RR: 0s
TR: 25x25GS:300x300RR: 0.3s
TR: 30x30GS:300x300RR: 1s
Ram TEST
ALGORITHMIC SKETCH TASK 12recommended setting explo-ration
SICK RADIUS 5 SICK RADIUS 3
FLOOD LEVEL 0.1 FLOOD LEVEL 0.7
ALGORITHMIC SKETCH TASK 12recommended setting explo-ration
This problem is not considered happen before the session. Due to this problem we would encourage playing this game by walking so you can hold the phone closer to see it clearly.
GPS is not considered accurate enough by all participants.
Might need to increase the time limit of the game because all participants did not archieve any goals. They can only compare their value.
Expaining the overall goal of the game Testing the game at walking speed
Bicycle set up for the game Testing the game at cycling speed
summarized comment sheet from participants
ALGORITHMIC SKETCH TASK 13prototype testing session
ALGORITHMIC SKETCH TASK 14voxels movement recording
Perspective
Elevation
Orthographic
Plan
ALGORITHMIC SKETCH TASK 14player video recording
ALGORITHMIC SKETCH TASK 15comic strip
Something started downloading... And yes, you have the game Pixel Park on your phone!
Today, Quarries Park is peaceful as always. What is different is that there are QR codes scattered everywhere in the park: on the tree, on that rubbish bin, on the skatepark... What are they? Simply point your phone to them, and see what happens?
Pixel Park
Starting the game, you can choose a character from the 5 characters. Dif-ferent characters like different areas of the park. These areas are based on at-tributes of the park the character likes or dislikes. Keep that in mind if you want to get high score in the game!
Known their preference? Now you are ready to bring the game to the site and play it!
I like quiet spaces with great views but I can’t climb steep hills!
I don’t want to be found by adults! Go to bushy areas where grown ups find it hard to through in but I don’t!
I just wanna BUILD for MMMoney! More flat areas with great views would be per-fect!
Wah! WoooWah!(I like bushy area where I might find some food!)
I like open and nat-ural spaces! I also like the creek where I can see water and wild life!
Pixel Park provides player a virual reality of the site. In game everything is presented in voxels. For example, people voxels will spawn on the path because people normally walk on path, and vegetation voxels spawn at where trees and grass is..
Starting to play the game on site! Oh I get a runaway, quickly look to bushy area to get my score efficiently!
Simply walk on voxels to own them! The voxels on the area you walk through will be petrified and then owned by you when it turns black! This will add to your dollar value displayed in the screen!
How do we win the game?-With the dollar value increases, the flood at the creek will also increases! When you earn enough dollar value to flood the whole map, you win the game!-Earn voxel value as much as possible before the game reaches its time limit.-Own all of the voxels of the game!
Oh, I just see a power-up! The bigger black power-up voxels can temporarily increase the area of voxels of your infection, so as to boost up your score!
TIME UP!
Now, simply enjoy the game! Through your phone, you become your character and think as your character. You will discover interesting areas you wouldn’t go and have an unique experience!
The game will bring you to the world of voxels and give you an unique experience of exploration!
Quickly think! Where a runaway wants to go?
Wow look at the hybrid landscape! The path on site is shown in the game at the right place!
So what are you waiting for? Quickly join us in the game and explore a much more interesting Pixel Park!
So what are you waiting for? Quickly join us in the game and explore a much more interesting Pixel Park!
ALGORITHMIC SKETCH TASK 16group introduction diagram
70
//////TC00 visible tiles /// /// //accumColor = attributA if (manager.GetComponent<landscapeManager>().attDisplayedOnTile == 0) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt0; }
else if (manager.GetComponent<landscapeManager>().attDisplayedOnTile == 1) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt1; }
else if (manager.GetComponent<landscapeManager>().attDisplayedOnTile == 2) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt2; }
else if (manager.GetComponent<landscapeManager>().attDisplayedOnTile == 3) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt3; } else if (manager.GetComponent<landscapeManager>().attDisplayedOnTile == 4) { accumColor = thisObject.GetComponent<xyzToI>().slaveAtt4; }
Voxel Transformation
Scenario Design & Attributes decision
Algorithmic analysis & CSV file generation
Match Up
If Statements
(Framework for voxel seeding)
The actual game &
Explorations and different configurations 6