10.06.2012 Semester Oppdatering.

10.06.2012 Semester Oppdatering.

Dette er det første som møter brukeren når man starter programmet, derifra så er man nødt til å trykke på lag ny presentasjon for så å velge en ny logo som brukeren har på sin maskin i dette vinduet:

når man da har valgt logo så må mann tilpasse den til programmets sine spesifikasjoner i dette vinduet:

hvor man justerer hvor logoen er i bildet, og hvor stor logoen skall være. (bytte bakgrunnsfarge er slått av i denne versjonen), når man da velger “Finish” får man opp en scene der man ganske enkelt trykker på tasten “P” for å lagre en presentasjon av logoen i scenen med alle “Pakkene” organisert i en “presentasjon” vennlig filstruktur. Når programmet da er ferdig med å lagre alle bildene trykker man på Esc tasten for å gå tilbake til hovedmenyen der man kan trykke på “Vis presentasjon” for å få opp dette vinduet: 

I dette vinduet velger man hvilke pakker som man skal vise til klienten, får så få en animasjonssekvens spilt av med logo på rett plass for å få klienten mer interessert i reklameplassen.

 

Mappe strukturen ser slik ut:

i mappen Preparer ligger selve programmet, under mappen Presentasjon ligger de forskjellige pakkene med bilder generert av programmet etter man har tilpasset logo og kjørt rendering sekvensen.

bildene i denne mappen er lagt dit for å illustrere at det er i denne mappen man helst vill ha logoen som man skall bruke i presentasjonen.

Slik ser det ut i Presentasjons mappen (pakkene har ikke riktig navn enda)

 

og dette er inne i Pakke1 Mappen, der alle bildene blir lagret.

 

 

Koden:

Dette er koden som sørger for presentasjons-delen, alle kameraer og materialbytte når en annen pakke skall vises:

 

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CameraControll : MonoBehaviour {
public GameObject MasterCamera;
public List<GameObject> MaterialMasters;
public Texture2D FinishedLogo;

public List<GameObject> PakkeCameras1;
public List<GameObject> PakkeCameras2;
public List<GameObject> PakkeCameras3;
public List<GameObject> PakkeCameras4;
public List<GameObject> PakkeCameras5;
public bool ShowGUI;
IEnumerator Start () {

for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
yield return 0;
}

public void Pakke1(){
StartCoroutine(Start());
StartCoroutine(PakkeNum1());
}
public void Pakke2(){
StartCoroutine(Start());
StartCoroutine(PakkeNum2());
}
public void Pakke3(){
StartCoroutine(Start());
StartCoroutine(PakkeNum3());
}
public void Pakke4(){
StartCoroutine(Start());
StartCoroutine(PakkeNum4());
}
public void Pakke5(){
StartCoroutine(Start());
StartCoroutine(PakkeNum5());
}
public void Pakke7(){
StartCoroutine(Start());
StartCoroutine(PakkeNum7());
}

IEnumerator PakkeNum1() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture1();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {

for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}

if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke1){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}
}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

IEnumerator PakkeNum2() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture2();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {
for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke2){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}

}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

IEnumerator PakkeNum3() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture3();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {
for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke3){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}

}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

IEnumerator PakkeNum4() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture4();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {
for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke4){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}

}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

IEnumerator PakkeNum5() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;

for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture5();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {
for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke5){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}

}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

IEnumerator PakkeNum7() {
WWW www = new WWW(“file://”+Application.dataPath +”/LogoTexture.png”);
yield return www;
FinishedLogo = www.texture;
FinishedLogo.wrapMode = TextureWrapMode.Clamp;
FinishedLogo.filterMode = FilterMode.Trilinear;
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeBack();
}
for(int cnt = 0; cnt < MaterialMasters.Count; cnt++) {
MaterialMasters[cnt].GetComponent<MaterialDecider>().ChangeTexture7();
}
MasterCamera.active = false;
for(int cnt = 0; cnt < PakkeCameras1.Count; cnt++) {
for(int cnt2 = 0; cnt2 < PakkeCameras1.Count; cnt2++) {
PakkeCameras1[cnt2].active = false;

}
if(PakkeCameras1[cnt].GetComponent<CameraExeption>().Pakke7){

PakkeCameras1[cnt].active = true;
PakkeCameras1[cnt].animation.Play();
yield return new WaitForSeconds(PakkeCameras1[cnt].animation.clip.length);
}

}
MasterCamera.active = true;
ShowGUI = true;
yield return 0;
}

void OnGUI(){
if(ShowGUI){
if(GUI.Button(new Rect(0,0,120,40),”Tittelsponsor”)){
Pakke1();
ShowGUI = false;
}
if(GUI.Button(new Rect(0,60,120,40),”Generalsponsor”)){
Pakke2();
ShowGUI = false;
}
if(GUI.Button(new Rect(0,120,120,40),”Hovedsponsor”)){
Pakke3();
ShowGUI = false;
}
if(GUI.Button(new Rect(0,180,120,40),”NM-Sponsor”)){
Pakke4();
ShowGUI = false;
}
if(GUI.Button(new Rect(0,240,120,40),”Arenasponsor”)){
Pakke5();
ShowGUI = false;
}
if(GUI.Button(new Rect(0,300,120,40),”Samarbeid utstyr”)){
Pakke7();
ShowGUI = false;
}
}
}

}

 

 

Alt i alt er det 1200 linjer med kode som er i det “ferdige” produktet. men jeg har vert nødt til å skrive om, fjerne og skrive på nytt ganske mye for å få alt til å virke som det skall.

Evaluering:

Produktet:

Alt i alt er jeg ganske fornøyd med at jeg faktisk greide å lage dette programmet, men jeg mener selv at jeg ikke er ferdig, det fungerer men det er forskjellige ting som må pusses på, blant annet omgivelsene, kamera-animasjonene og brukervennligheten.

04.06.2012 Semester

04.06.2012 Semester

Alle bildene er generert av Applikasjonen… eneste som mangler for at preparerings appen blir ferding er:

Egne logoer og pakker.

 

Med presentasjons appen gjennstår kamera animasjoner i tilleg til Logo og pakker.

29.05 Semester Oppdatering.

29.05 Semester Oppdatering.

Jobbet med å gjenskape arenaen på nytt, ferdig med å plassere ut en tre typer med reklame plakater og flagg.  jeg har plassert placeholder reklame over alt på arenaen så det kan raskt byttes ut med forskjellige opsjoner for pakkene. jeg har også optimalisert de to shaderene som brukes på gjære og logoene(reklamen) modelert selve banen, veien og gjærdet som nå går i rundt hele banen(må eventuelt fikses)

Portalene er ikke helt ferdig.

 

Har fortsatt problemer med svart kant på venstre side av logoene, problemet ligger ikke med texturen, shaderen eller uvmappinga. har satt på clamp option under textur optionene, som skal fikkse problemet, problemet forsvinner når jeg bruker Repeat men det er ikke denn effekten jeg skall ha. (må eventuelt finne en annen måte å vise logoene på, mulig en eller annen form for prosjektering?).

Ellers så står kamera animasjon, de forskjellige pakke optionene i scenen og logoene til de forskjellige firmaene igjen for meg å fikse. beregner at dette kommer til å ta uken(inkludert helgen) ellers er det en del småting.

Jeg har dessverre ikke hatt mulighet til å følge planen jeg satte opp i starten til punkt å prikke på grunn av forskjellige uventede problemer som har tatt en del tid.

14.05 Semester Oppdatering.

14.05 Semester Oppdatering.

I dag har jeg skrevet en shader som skal brukes til flagg og flersidede plater.

Shaderen fungerer slik at alt renderes i to prosesser, først den ene siden av platen så den andre,

Forsiden er satt opp slik:

//Front “Pass”

Cull back

CGPROGRAM

#pragma surface surf Lambert

sampler2D _MainTex;

struct Input {

float2 uv_MainTex;

} ;

void surf (Input IN, inout SurfaceOutput o) {

half4 c = tex2D (_MainTex, IN.uv_MainTex);

o.Albedo = c.rgb;

}

ENDCG

 

 

og baksiden er satt opp slik:

//Back “Pass”

Cull front

CGPROGRAM

#pragma surface surf Lambert

sampler2D _MainTex;

struct Input {

float2 uv_MainTex;

} ;

void surf (Input IN, inout SurfaceOutput o) {

IN.uv_MainTex.x = 1.0 – IN.uv_MainTex.x;               <= Dette flipper texturen slik at den blir riktig på baksiden.

half4 c = tex2D(_MainTex, IN.uv_MainTex);

o.Albedo = c.rgb;

}

ENDCG

 

 

I helhet er shaderen slik:

Shader “MarcusRognes/AdvancedSignShader” {

Properties {

_MainTex (“Base (RGB)”, 2D) = “white” {}

}

SubShader {

//Front “Pass”

Cull back

CGPROGRAM

#pragma surface surf Lambert

sampler2D _MainTex;

struct Input {

float2 uv_MainTex;

} ;

void surf (Input IN, inout SurfaceOutput o) {

half4 c = tex2D (_MainTex, IN.uv_MainTex);

o.Albedo = c.rgb;

}

ENDCG

//Back “Pass”

Cull front

CGPROGRAM

#pragma surface surf Lambert

sampler2D _MainTex;

struct Input {

float2 uv_MainTex;

} ;

void surf (Input IN, inout SurfaceOutput o) {

IN.uv_MainTex.x = 1.0 – IN.uv_MainTex.x;

half4 c = tex2D(_MainTex, IN.uv_MainTex);

o.Albedo = c.rgb;

}

ENDCG

}

FallBack “Diffuse”

}

Progress!

Progress!

Denne uken har jeg kodet ferding programmet som tar ett bilde fra alle kameraene i en scene og lagrer dem i mapper i henhold til hvilken “pakke” bildet hører hjemme i. koden tar også å fjærner alle objekter som ikke hører hjemme i den “pakken”

exempel på kode:

IEnumerator Pakke1Photo() {

AllePakkeAssets.SetActiveRecursively(false);

Pakke1Assets.SetActiveRecursively(true);

yield return new WaitForSeconds(2);

for(int cnt = 0; cnt < Pakke1Cameras.Count; cnt++) {

AllCameras.SetActiveRecursively(false);

Pakke1Cameras[cnt].active = true;

yield return new WaitForEndOfFrame();

Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false);

screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);

screenShot.Apply();

Pakke1Cameras[cnt].camera.targetTexture = null;

byte[] bytes = screenShot.EncodeToPNG();

string filename = Application.dataPath +”/../../Presentasjon/Pakke1/”+ Pakke1Cameras[cnt].name + “.png”;

System.IO.File.WriteAllBytes(filename, bytes);

if(cnt == Pakke1Cameras.Count -1){

StartCoroutine(Pakke2Photo());

}

}

yield return 0;

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Du kan laste ned windows versjonen her

Du kan laste ned Mac versjonen her

 

08.05 Semester Oppdatering.

08.05 Semester Oppdatering.

Må utsette jobbing med interface design og animasjon med en til to uker på grunn av at mere modelering og texturerings arbeid er nødvendig.

modelering som stå i gjenn er;

Reklame-skilt som skall henge over veien til idrettsommerådet,

Oppblåsbar portal som skall stå to plasser, en mellom veien og parkerinsplassen og en mellom parkeringsplassen og tribunen,

Bananflagg som skall stå mellom parkeringsplassen og tribunen.

3×1 meter Reklameplakater.

2×1 meter Reklameplakater.

5x(1?) meter Reklameplakater.

Premiepalle med reklame.

Funksjonær tøy(Funksjonær)

Startnummer (Idrettsutøver)

Storskjærm,

eventuelt Brygga tønsberg, med 3x3m reklameseil en scene ved hotellet.

Pluss eventuell reklame i idretts-programmet.

 

Programmering som står  gjenn;

Et program der man kan tilpasse logo samt ta snapshots av animasjonen som kan legges i gjenn hos kunder.

Ett program som viser animasjonene med logo der man kan velge og vise forskjellige pakker til kunden, der logoen settes inn ved siden av relevante sponsorer.