planet pigmi

March 10, 2010

Entity Crisis

Nick

Places to stay in Singapore

Anyone have recommendations for places to stay in Singapore?

Heidi and I will most likely be there for a few days in May (on our way back from Thailand). Looking for nice but not too fancy (what’s that? 3-4 stars) in a good location (walking distance or good access to public transport).

In related news… any recommendations for Beijing? (I might be there in June)

Update: I’m all caught up on Singaporean history thanks to this:

by Nick at March 10, 2010 04:32 AM

Black Lab Games Blog

GDC is crazy times!

I couldn’t get to the annual Game Developers Conference (GDC) in San Francisco this year, so instead have to read about it.

In the last 24 hours, I’ve seen 3 huge announcements that directly relate to tools, platforms and technology that I use.

First, Unity Technology announced a new version of Unity3D with support for Xbox 360, Playstation 3 and Android coming soon. Next, Microsoft announce XNA 4.0, a significant upgrade to .NET based game framework. Finally, Sony announce that they are releasing PhyrEngine for the PSP!

Why do these announcements matter? Because I do contract work in Unity, original games for the Xbox 360 with XNA, and I’m currently building a technology “platform” to allow my games to run on the PSP/PS3 - so every platform/toolset I use is being upgraded.

So much craziness, I can’t keep up! And that’s just day one of a five day conference!!

by Black Lab Games at March 10, 2010 01:12 AM

March 09, 2010

Adrian Boeing: Blog

Pixelux Digital Molecular Matter engine - Free license soon!

AMD have just announced there will be a free version of the DMM engine. It sounds like it will be closely integrated with Bullet Physics and provide OpenCL support.

I'm looking forward to this as DMM is the only realtime finite-element (FEM) based physics engine around. I'm interested to see how well it works.

Hopefully I can get a copy soon and some time to integrate it into the Physics Abstraction Layer.

Here is a video of DMM to refresh your memory:

by Adrian (noreply@blogger.com) at March 09, 2010 02:00 PM

Entity Crisis

Unity3D 3.0 Available for Pre-order

Unity3D 3.0. Awesome list of new features, and pre-order is cheap too!

Bluetooth Multiplayer for iPhone! Woohoo!
PS3 and Android Support! Woohoo!
New Physics Engine! Woohoo!

Woohoo and Woohoo again!

As a friend just said... "unreal == toast". Agreed.


Now... where did I leave that credit card...

by noreply@blogger.com (Simon Wittber) at March 09, 2010 08:17 AM

Black Lab Games Blog

Prototyping

OMG, nearly a full month without a blog post. What the?? Why the blog silence?

Amongst other things…prototyping! I’ve been exploring a game idea by working on a simple, potentially throw-away prototype.

In bygone days, game developers would write game design documents to describe a game they wanted to build. Once the document was complete, they’d build the game. The problem is, not all game ideas are created equal, and you don’t usually find whether the game will be any good or not until the game is built. Over the last few years, as game development tools and technology have improved and gotten easier to quickly build games, it’s become more common to bypass the design document, and build a rough prototype of the game to test our the ideas at the core of the game.

And that’s what I’ve been doing. I started with a small idea about a platformy action game, and I’m exploring that idea to see if their is potential for a full game.

Oh, and I entered Star Hammer Tactics in the 2010 DreamBuildPlay competition. It’s one of about 155 entries. Wow.

by Black Lab Games at March 09, 2010 06:26 AM

March 08, 2010

Perth Techalite

First Sports Photography Attempt – Motocross

My boyfriend and I went over to the Coastal Park Motocross Track to watch a friend race and take some photos. This was my first attempt at sports photography and boy, was it fun! I still have quite a lot of practice to do before I’m really happy with my shots, but I think I did ok for a first attempt. If anyone has any feedback or suggestions, please comment.

Motocross Photos

Motorcycle Photos

Motox photos

Motocross Race

Motocross racing

Motox race

Four Wheeler

by Lazer at March 08, 2010 07:31 AM

March 07, 2010

FACEPOCALYPSE

Live painting @ Coopers Sunday Green

Volunteered to do a live painting at Coopers Sunday Green today. Was pretty fun, and motivation to solidly paint for a few hours. This piece went from concept to ‘completion’ (although I need to fix it up in parts – especially the hands) in about 4 or 5 hours, including a digital mockup.

PhoenixLivePainting

by Simon at March 07, 2010 03:52 PM

March 06, 2010

MEMORIES OF NAM

Tangled Thoughts Of Leaving

Just over a week ago I was approached by Brad from Revert Entertainment, management for local epic virtuoso post-everything proggers Tangled Thoughts Of Leaving, to do a gig poster for their first show of 2010. I was really super super busy this week but I really dig what the band does and on the agreement of having creative freedom how could I turn it down :) .

NOTE: You can download TTOL’s releases for free here and here.

The band had an image of an astronaut fighting an octopus in space, and gave me free reign to reinterpret that, and so this is what I’ve ended up with!: Tangled Thoughts Of Leaving poster FINAL for WEB

And here’s the process:

This is an alternate colouring (pink instead of red) – I really liked it colour-wise as well as the idea of all the bodily fluids being smooshed into a pinkish goop, rather than just blood.. client didn’t like the pink so brought back in the red:

by brendan at March 06, 2010 06:39 AM

March 05, 2010

FACEPOCALYPSE

Earth deity WIP 2

Made a bit of progress of the Earth Deity artwork. It’s deviating from the digital mockup a bit. I think I need more mark-making utensils…

earth2

by Simon at March 05, 2010 08:10 AM

Nick

Caricature

I’m working on product branding that will require a series of emotional caricatures.

To be honest, I’ve never really been very good at caricature. I find it difficult to capture all the subtle nuances of the subject without just adding a lot of detail. So my drawings end up looking alright… but nothing like the people I’m trying to capture.

Fortunately, my work next week mostly just requires stylised cartoon imagery. So it doesn’t really demand that the image is identifiable as a specific person. Also, it’s all going to be lightly stylised only (no heavy caricatures) meaning that it’s a little more like stuff I’m a bit better at. :D

Anyhow, here are some practise sketches that I did yesterday and today.

It’s me!… kinda:

I emphasised the wrong visual cues in this one: my face isn’t really super thin, and my hair is big in a different way. It’s also the wrong sort of smile (“huh?” rather than “hey”). Gah… moving on… here’s the work-in-progress if anyone is interested. I find it easiest to sketch different colours for different surfaces (eg. hair) and then break it out into layers later on:

After deciding that I’m probably too close to me to be objective in drawing myself, I went through some old photos looking for other interesting faces. I decided upon this photo of Tone doing the “Blue Steel” look (from Zoolander) at iParty 2.0. I tried for fewer, cleaner lines, and basic blocky shading:

Then I added in some colour:

Better I think… but I’m still not really feeling the emotion. I can probably add some spin lines or other iconographic elements in the background, but I want to get as much as I can from just the main figure…

I guess that I’ll just have to keep practising! ;)

by Nick at March 05, 2010 05:53 AM

March 04, 2010

FACEPOCALYPSE

Museum sketchtimes

Went sketching at the Museum of WA today. Started the day with a great local artist, Jenna Downing, in the ‘regular animal’ section. I’m sure she’ll post her sketches up soon, and they’re epicgood. She’s much better with a pencil and pad than I am – she actually renders details! ha, I was busy trying to cross-reference with my sweet little animal anatomy book that arrived yesterday. It’s not as lame as it looks on the cover though, it actually has bone/muscle structures and comparisons.

Anyway, I continued drawing after lunch with JessieBessieSipes in the Dinosaurs exhibit. This was a little tougher since they were all animatronic and moved around. Especially the triceratops – That thing looked like it desparately needed a bathroom.

20100304MuseumSketching

by Simon at March 04, 2010 03:42 PM

Nick

Gym

Heidi and I signed up for six month memberships down at the Albany Leisure and Aquatic Centre (our nearest sports centre).

We went to a few classes together including KiMAX by RADICAL FITNESS. I hadn’t been to gym classes before, so it was pretty interesting. Check out this video to get an idea of what I’m talking about:

It’s garish in the same way that almost all sports equipment (especially running shoes and cycling wear) is garish, but it’s also functional. I was pretty tired at the end and a little sore the next day.

I finally had my fitness appraisal just yesterday (since moving to Albany, I seem to spend a lot of time back in Perth) and I’ll receive my personalised fitness regime next Monday.

I mentioned that I don’t want to bulk up, so Terri (fitness instructor) is putting together something with a lot of aerobic “body weight” training – which means that I won’t really be using much of the equipment – which makes me wonder why I’m going to a gym.

Anyhow, I noted rock climbing and parkour (or in my particular case, very amateur gymnastics) as things that I would like to get better at. I didn’t mention anything about weight loss since she was pretty proactive in saying that it’s not required (I’m on around 15% body fat apparently).

I also didn’t mention the term “totally ripped”… maybe I should have… :P

by Nick at March 04, 2010 12:13 PM

March 03, 2010

Entity Crisis

Google Awesome

What a cool feature. (See image)

Google certainly know how to make awesome apps.

by noreply@blogger.com (Simon Wittber) at March 03, 2010 04:23 PM

March 02, 2010

Andy Hawkins Blog

Surf Prodigy 1.2 Update Released.


Tutorial video soon to come on YouTube but here's an old version that shows off the new perspective.

http://www.youtube.com/watch?v=s-wISrsxkjc




Quick man... that's all I can say. I submitted on Sunday and now it's out, plus the Lite version. Here's some screenies.

by andyhawkins@ozemail.com.au (Andy Hawkins) at March 02, 2010 11:29 PM

Adrian Boeing: Blog

Alpha Beta Filters


Alpha-Beta filters are fairly well explained on wikipedia, and are generally a very easy first-stop solution before heading to Kalman or particle-filter alternatives. (The next obvious step is to extend this to include acceleration (Alpha-Beta-Gamma), and to limit the error/estimates to a sensible range for your application).

Here is a small example program showing how they work, it generates output similar to this:
Ideal     position: -0.897 -0.443
Mesaured position: -0.890 -0.421 [diff:0.029]
AlphaBeta position: -0.898 -0.442 [diff:0.001]
Total error if using raw measured: 1.522438
Total error if using a-b filter: 1.059981
Reduction in error: 69%
C source code follows:
/** A simple alpha-beta filter example by Adrian Boeing 
www.adrianboeing.com
*/


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct {
float alpha; //alpha value (effects x, eg pos)
float beta; //beta value (effects v, eg vel)
float xk_1; //current x-estimate
float vk_1; //current v-estimate
} AlphaBeta;

void InitializeAlphaBeta(float x_measured, float alpha, float beta, AlphaBeta* pab) {
pab->xk_1 = x_measured;
pab->vk_1 = 0;
pab->alpha = alpha;
pab->beta = beta;
}

void AlphaBetaFilter(float x_measured, float dt, AlphaBeta* pab) {
float xk_1 = pab->xk_1;
float vk_1 = pab->vk_1;
float alpha = pab->alpha;
float beta = pab->beta;

float xk; //current system state (ie: position)
float vk; //derivative of system state (ie: velocity)
float rk; //residual error

//update our (estimated) state 'x' from the system (ie pos = pos + vel (last).dt)
xk = xk_1 + dt * vk_1;
//update (estimated) velocity
vk = vk_1;
//what is our residual error (mesured - estimated)
rk = x_measured - xk;
//update our estimates given the residual error.
xk = xk + alpha * rk;
vk = vk + beta/dt * rk;
//finished!

//now all our "currents" become our "olds" for next time
pab->vk_1 = vk;
pab->xk_1 = xk;
}

double frand() {
return 2*((rand()/(double)RAND_MAX) - 0.5);
}

int main(int argc, char *argv[]) {
AlphaBeta ab_x;
AlphaBeta ab_y;
double t; //time
double x,y; //ideal x-y coordinates
double xm,ym; //measured x-y coordinates
double xnoise = 0; //noise we are inserting into our system
double ynoise = 0;
double m_error = 0; //total error (measured vs ideal)
double ab_error = 0; //total error (ab filter vs ideal)
#define DT 0.1
//intialize the AB filters
InitializeAlphaBeta(1,0.85,0.001,&ab_x); //x position
InitializeAlphaBeta(0,1.27,0.009,&ab_y); //y position
srand(0);

for (t = 0; t < 4; t+=DT) {
//our 'true' position (A circle)
x = cos(t);
y = sin(t);
//update our simulated noise & drift
xnoise += frand()*0.01;
ynoise += frand()*0.01;
//our 'measured' position (has some noise)
xm = x + xnoise;
ym = y + ynoise;
//our 'filtered' position (removes some noise)
AlphaBetaFilter(xm,DT, &ab_x);
AlphaBetaFilter(ym,DT, &ab_y);

//print
printf("Ideal position: %6.3f %6.3f\n",x,y);
printf("Mesaured position: %6.3f %6.3f [diff:%.3f]\n",xm,ym,fabs(x-xm) + fabs(y-ym));
printf("AlphaBeta position: %6.3f %6.3f [diff:%.3f]\n",ab_x.xk_1,ab_y.xk_1,fabs(x-ab_x.xk_1) + fabs(y-ab_y.xk_1));

//update error sum (for statistics only)
m_error += fabs(x-xm) + fabs(y-ym);
ab_error += fabs(x-ab_x.xk_1) + fabs(y-ab_y.xk_1);
}
printf("Total error if using raw measured: %f\n",m_error);
printf("Total error if using a-b filter: %f\n",ab_error);
printf("Reduction in error: %d%% \n",(int)((ab_error/m_error)*100));
return 0;
}

by Adrian (noreply@blogger.com) at March 02, 2010 09:19 AM

March 01, 2010

Adrian Boeing: Blog

Catchup: Graphics Links Post

Again, a set of interesting links from the last few weeks:
And, as per usual, I'll finish off the catchup post with some neat videos. First, one that I think does a great job of explaining the animation process, and then a neat video showing just how far CG has come in film. (I recall speaking to Paul Debevec about Spiderman, and he said the director decided to redo all the actors in all scenes in CG since they looked better and they had more control over facial expressions,etc.)
Cirkus Animation ABC:Stargate studios reel:

by Adrian (noreply@blogger.com) at March 01, 2010 10:34 PM

Let's Make Games

Sundowner timelapse video

Rich (aka. Deceptikong) made this fantasitc timelapse video of last Saturday’s Sundowner (click through to the original for high-res):

Let’sMakeGames.org Sundowner from Deceptikong on Vimeo.

Thanks to everyone for coming and thanks Rich for the video (it makes me feel all warm and fuzzy)! Look out for our next event in a few months time! ;)

by nick at March 01, 2010 12:35 PM

FACEPOCALYPSE

Mytholology

More oil painting action. Started the Earth Deity painting on an acrylic underpaint.  Blocking in some shape out in my studio (backyard).

earth1

And more work on the Psychopomp.

psychopomp2

I didn’t mean to spray drips on the left side, or by the hand… Had too much turps.

It’s getting close to ‘done’ though. The skin parts and hair are done, just clothing, mothbits and the orbs. Might add some graphic kinda linework, too.

by Simon at March 01, 2010 06:26 AM

The lookout

Been pretty busy lately, but just whipped up a digital sketch for sketching’s sake.

20100301Lookout

Got my grant application into DCA on Friday. I’m pretty much only eligible for the Development grant. I feel like I’m a great candidate though, pursuing this ‘new’ digital art-form.

I’ve looked into other funding bodies and there’s not a whole lot of support available to artists after training. One key factor is the course I’ve applied isn’t accredited (no degree or formal recognition etc) – it’s completely practical and very specialised, which is exactly what I need!

There’s also a Skills and Development grant I’m eligible for through the Australia Council. I believe that’s an annual grant though (due August), and for activity starting next year. Bleh. This course wasn’t even announced when the last round of funding was due, making the lengthy grant turnaround highly inconvenient.

by Simon at March 01, 2010 03:35 AM

Nick

Yay! Internet upgrade!

We’ve finally had our Internet connection upgraded from 512kbps to around 1-2mpbs. It’s still not that much, but the speed increase is noticeable. Hopefully this means that I will be able to do some web development work from home in Albany!

In other news, I bought Heavy Rain while in Perth (thanks Jason for the $74 tip). It’s an interesting take on interactive drama with clear heritage in adventure games. Unfortunately it’s incredibly buggy so far. Seriously, how did this thing make it past QA?!

by Nick at March 01, 2010 03:08 AM

February 28, 2010

MEMORIES OF NAM

Do old people even have pubes?

Quick sketch while waiting for the computer to process things, mis-heard lyrics.

by brendan at February 28, 2010 12:55 PM

February 27, 2010

Chris McCormick - News

Hong Kong KIRF Lego

Some "Lego" I bought in Hong Kong at a street market recently. Space Lego + cheapfakes + Hong Kong is pretty much my personal nexus of awesome.

You can buy this stuff on ebay very cheaply too, and it's compatible with the real bricks. I can't really tell much of a difference in quality. The idea of Lego is too good to be monopolised - I wonder if anyone has tried 3d printing lego parts?

I am really looking forward to when those "fake" Android phones & tablets start to perform better (and cheaper) than the official stuff. The smart thing about Google's Android strategy is that they benefit from that kind of Wild East tech cowboyism. It's like if Windows 95 had have been Free Software instead of pirated globally.

February 27, 2010 05:02 AM

February 25, 2010

Perth Techalite

Our First Geocaching Fail

Last night the boyfriend swiveled around in his office chair and said: “I think we should find a hobby that we can do together.”

What a great idea! Don’t get me wrong – we like a lot of the same things. We both like computers and games, and we both frequent Gizmodo and Engadget at least twice a day (I do Gizmodo, he does Engadget). But we just don’t have a hobby that we can call “ours”.

So we started thinking. I suggested starting a website or blog together, but he said our ideas about these things are so different that it wouldn’t work. He says he likes to keep things simple and I like to go over the top and sink my teeth into a big project. This is true. I suggested that we could start building things together, like bicycles…anything. But he noted that when he was fixing up his motorcycle, I helped but didn’t really get into it with a passion and that I don’t have a mechanic’s mind. He’s probably right.

Our hobby had to be fun, but not something that required a lot of time as we both work and he only has one day off per week between his job and uni. We both liked the idea of doing photography together, but he said that he can’t afford to buy a camera right now, although it’s an option for later.

Then I suggested geocaching. I’ve never gone geocaching before, but it has always sounded fun and we talked about it briefly a few months ago.

“That’s a really good idea!” He said. “That would be fun.”

I filled him in on some of the geocaching basics, or what I’ve read about it, anyway. We got so excited about trying geocaching together that we decided to go right that minute. It was somewhere around 10pm. I downloaded the free Geocaching Intro app for my iPhone and it showed us three nearby geocaches, each about 1.5 miles away. So off we went in his car, hunting for our first cache. Unfortunately as you can guess, as amateurs going out in the dark to find a micro cache, we didn’t actually find anything. But we got so close to two of the caches! The first was in a bit of bushland near a park in a neighborhood. Unfortunately the compass was pointing us straight into the bush, which was surrounded by what looked like an electric fence. Not only did we stand to get zapped, but it was so dark that we couldn’t actually see a thing. We decided to come back to this cache this weekend, in the daylight this time, and hop the fence.

We then moved on to another cache nearby. The description said that this geocache was tiny. The map led us to a tiny, cozy looking neighborhood with a small park. We got more and more excited as we followed the compass – 50 feet, 38, 21, 10, 7, 3, 0! I waved the boyfriend over – “It’s here, it’s somewhere around here! We’re right on top of it!”

We scoured that spot and everything around it for what must have been 15 minutes. I shone my flashlight app into the trees, we looked under the wheelie bin and rummaged through the bushes. To an onlooker we probably would have looked like two crazy people having a mental breakdown at a park.

Eventually we gave up and decided that trying geocaching for the first time in the middle of the night probably wasn’t a good idea. We aren’t quitting, though! We’ll just stick to looking for treasure during the daytime in the future.

by Lazer at February 25, 2010 03:41 AM

February 24, 2010

Perth Techalite

Google Executives Charged With Invasion of Privacy

Three Google executives have been convicted of invasion of privacy for a video they didn’t record, appear in, or review. The video showed a group of kids bullying a child with Down Syndrome. Of course any sort of bullying is a horrible thing that should never go on, but blaming three individuals from a search engine who had nothing to do with the video is ridiculous. There are so many videos out there indexed by Google that can be considered inappropriate and in many cases they are sickening, but expecting a search engine to go through each video one by one is ludicrous and wrong. There are many opinions which I would consider sickening being expressed in text out there, but search engine executives aren’t being sued over them. Instead of finding a scapegoat (or three) who had nothing to do with an act to blame, prosecutors should focus to bringing the actual bullies to justice and getting the victim help. You see photos, stories, and videos of dead people, wars, fighting, abuse, embarrassing incidents, and so much more out there. A search engine is meant to be a source of information and a tool to gather data. Forcing search engines to remove content depicting inappropriate acts is like sweeping these acts under the carpet and punishing 3 executives of a search engine for something they had nothing to do with is akin to just wanting to find someone, anyone, to take the blame.

by Lazer at February 24, 2010 01:17 PM

The GameJam Blog

beetlefeet.net

Lessons learned

Just because you can get sweet usec timestamps on Ubuntu and Vista doesn’t mean the same library will get any decent resolution times out of windows XP.

The default ruby mysql library doesn’t deal properly with > 32bit database ids.

If you want to use > 32bit database primary id’s. Sleep on it. You might not really want to (especially if you get hit by the above point -_-;)

by beetlefeet at February 24, 2010 09:20 AM

Zenner Blog

.Uni Begins.


I've always wanted to texture a 3D model with tones, but now that I'm studying again this project might have to go on hiatus for a short while, thought I might aswell post it up.

by Fiend (noreply@blogger.com) at February 24, 2010 12:24 AM

February 23, 2010

FACEPOCALYPSE

Psychopomp

A psychopomp guides newly deceased souls to the afterlife, and is the subject of my first (and largest) contribution to the Mythology exhibition.

I’ve decided to give oil painting a crack, and just spent the night painting with Richard Healy, who’s provided some useful input on the process of oil painting. He’s pretty great with the oils.

Anyway, here’s what I’ve been working on today. It’s something big like 48″x48″, and still a work-in-progress, but thus far I’m quite proud of my second ever oil painting! My first was a 6″x8″ picture of an apple. I think I was 9 years old at the time.

psychopomp

by Simon at February 23, 2010 04:34 PM

Let's Make Games

Sundowner this Saturday

As the sun sets on a significant period for the Perth game development community, Let’s Make Games has decided to run a sundowner so that everyone can catch up over a drink and a BBQ.

Details:

  • Time/Date: 4pm-8pm, Saturday 27 February 2010
  • Location: BBQ area at Matilda Bay (meet at the Gazebo)
  • Schedule: 3pm setup, 4pm drinks, 5pm cooking, 6pm food!
  • Food/Drink: BYO or buy our $1 soft drinks and $2 hot dogs
  • Activities: BYO picnic mat, footie, frisbee, etc.

Here’s a handy Google Map (click the markers for more information):


View BBQs at Matilda Bay in a larger map

We apologise for the late notice compared to our previous events (a number of us have been distracted by recent matters), but we hope to see you there!

Update: Facebook event page.

by nick at February 23, 2010 02:18 AM

February 22, 2010

Nick

Adventures in Albany (and surrounds)

Just some quick comments and photos.

It’s been great spending time down here with Heidi (and my sister who is visiting). I have a feeling that these six months will pass very quickly. ;)

What the heck is that? A whale fetus?!:

And then she said “I’m not beached, I’m just sunbathing!” (har har):

Koala’s are really cute! Or it is a Tasmanian Devil?:

It may not look like it, but we’re pretty high up (something like 40m):

The tree-top walk is less “Crouching Tiger, Hidden Dragon” than I imagined:

My power-up rage obviously charred the inside of this tree:

Heidi managed to run through this tree, but it was a bit of a stretch (har har):

My sister tried diving through it, but she got stuck:

Note: I love cheesy photos. Look forward to more of them! ;)

by Nick at February 22, 2010 09:31 AM

Entity Crisis

KAOSSILATOR PRO



Cannot... resist... must... need... ARGH!

Seriously, this is a very cool tool. I'm gonna have to get me one. Soon. Dear Korg, please send me a unit so I can review! :-)

by noreply@blogger.com (Simon Wittber) at February 22, 2010 08:37 AM

Ellen Jurik

My own Hamartia


I realise now one improvement or change I could have made to my thesis.

It isn’t actually important that the player character can’t speak, so much as it is important that the tragic hero doesn’t listen. That is hubris- pride that they know what is right, that they will ignore any warning that anyone will give them. They believe they are above fate (or karma, or whatever law of balance etc you want to think about).

Whoops, I could have ended up with a Creative Component I actually thought was any good, and recieved better marks overall ;)

Ellen

by Ellen at February 22, 2010 04:11 AM

Entity Crisis

Why the iPhone and iPad can't use Flash.

This flash developer explains why..

I had similar problems two years ago when building Unity3D apps for a touch screen application. The GUI system in Unity3D relies on a widget having 'hover focus' before it will accept a click event, therefore requiring every widget to have at least two screen taps to function. Unity3D iPhone doesn't have this problem, and it would be nice to see the same behaviour in Unity3D itself.

by noreply@blogger.com (Simon Wittber) at February 22, 2010 03:05 AM

February 21, 2010

Ellen Jurik

The player’s experience


I remember when I took a unit on writing for film, how we were told, “Don’t tell me, show me.”

Well, I think this needs to be expanded upon for the sake of differentiating between films (or tv shows) and games.

Books: Tell me.
Film: Show me.
Games: Let me find out for myself.

It may seem obvious, but when this is properly understood, will we really have any need for epic cut-scenes that do anything more than literally set the scene? I’m not talking about getting rid of all cut-scenes: for example, the intro for Left 4 Dead is highly effective at showing a variety of scenarios and special infected, while hinting at ways of dealing with them. In that sense, “show me” has superceded “tell me,” while remaining short and setting the scene. We do need some sort of introduction, some sort of illustration of how to play, but first and foremost, we should encourage players to feel more involved than watching a film.

Ellen

by Ellen at February 21, 2010 04:59 AM

February 20, 2010

Entity Crisis

February 19, 2010

Adrian Boeing: Blog

Solving Linear Systems

In school you probably learnt how to solve systems of linear equations with techniques like Gaussian elimination, and Row-Reduced Echelon Form (RREF). However a simple, brute-force way to solve linear systems on a computer is through iteration.

Say we wish to solve the following equations:
4x -  y +  z = 7
4x - 8y + z =-21
-2x + y + 5z = 15
Then we can re-write them as:


We can solve these with Gauss-Seidel iteration just by plugging in the current x,y,z values we calculate from these equations (and begining with an initial estimate.)

Thus, the Gauss-Siedel method in C-code looks something like:
#include <stdio.h> 

int main() {
//a sparse way of representing the equations
float eq[3][4];
eq[0][0] = 7/4.0; eq[0][1] = 0; eq[0][2] = 1/4.0; eq[0][3]= -1/4.0;
eq[1][0] = 21/8.0; eq[1][1] = 4/8.0; eq[1][2] = 0; eq[1][3]= 1/8.0;
eq[2][0] = 15/5.0; eq[2][1] = 2/5.0; eq[2][2] = -1/5.0; eq[2][3]= 0;

float x,y,z;
x=1;y=1;z=2; //initial guess

//10 iterations of gauss-seidel
for (int i=0;i < 10;i++) {
x = eq[0][0] + eq[0][2]*y + eq[0][3]*z;
y = eq[1][0] + eq[1][1]*x + eq[1][3]*z;
z = eq[2][0] + eq[2][1]*x + eq[2][2]*y;
printf("%f %f %f\n",x,y,z);
}

return 0;
}
Producing this output:
1.500000 3.625000 2.875000
1.937500 3.953125 2.984375
1.992188 3.994141 2.998047
1.999023 3.999268 2.999756
1.999878 3.999908 2.999969
1.999985 3.999989 2.999996
1.999998 3.999999 3.000000
2.000000 4.000000 3.000000
2.000000 4.000000 3.000000
2.000000 4.000000 3.000000

Converging towards the solution nicely. (Things don't always converge, only when Ax=B, A is diagonally dominant - but that is another story)

Jacobi iteration does not converge as quickly, but is easy to execute in parallel. With Jacobi iteration you simply use the last iterations x,y,z value instead of updating it.

See? Solving systems of equations is easy.

by Adrian (noreply@blogger.com) at February 19, 2010 05:58 PM

Profiling on Mac OSX with Saturn

It is always advisable to profile your code before trying to optimize it. It is often most helpful to role your own (using timers & counters), but often a quick and simple tool will help a lot.

For windows I like the very sleepy profiler. On Mac OSX Apple provide the Saturn profiler (See: Saturn profiler user guide).

To demonstrate we can try compiling a small program:
#include <math.h> 
#include <stdio.h>

#include <saturn.h> //include the saturn profiler

double func1(double x) { //do some maths
return sin(x)*cos(x);
}

double func2(double x) { //do some more maths
return pow(x,3);
}

int main() {
double x=0;
double z=0;
startSaturn(); //being profiling
for (x=0;x<100;x+=0.01) {
z+=func1(x)+func2(x)*tan(x);
}
stopSaturn(); //end profiling
printf("z:%f\n",z); //make sure compiler doesn't throw our computations away
return 0;
}

Now we need to compile it with profiling support:
g++ x.c -finstrument-functions -lSaturn -m32 -O2

Some common problems include:



  • Undefined symbols: ___cyg_profile_func_enter
    This comes from the -finstrument-functions option : it requires a special hook for each function - this is provided by saturn, so you must link with it.



  • ld: warning: in /usr/lib/libSaturn.dylib, file is not of required architecture
    Undefined symbols: _startSaturn
    Again, either you forgot -lSaturn, or you have remembered it, but are using a 64 bit OS/chip. Specify '-m32' to force 32bit mode.

If it all compiled succesfully, then start Saturn and choose 'Saturn', 'Launch Process'. Then select the executable (eg: a.out) in the dialog box.

Press OK, and Saturn will run and profile your program, and generate a folder with the profiler output data. (eg: Saturn_profile_a.out.000)

You can then select the data file to view the output, and Saturn will display a call graph and the amount of time spent in each function. Now the fun of optimizing can begin. Enjoy!

by Adrian (noreply@blogger.com) at February 19, 2010 05:55 PM

FACEPOCALYPSE

Earth deity WIP2

Reshaped the deity, added a few plants and cattle for a bit of scale. Will push the depth so the deity looks like it’s just coming in from the distance, exaggerating the scale.

EarthDeityThumbnailing02

by Simon at February 19, 2010 07:53 AM

February 18, 2010

Adrian Boeing: Blog

Intersection of a Convex Hull with a line segment

A ray, or line segment can be represented parametrically as:
S(t) = A + t(B-A)
Where A and B are the endpoints of the segment, and t is the parameter that ranges from –infinity to +infinity for a ray, or just 0..1 for a segment.

A plane can be represented as n.X = d, where n is the plane’s normal, and d is the offset. (Given the plane’s normal, and a single point on the plane, P, we can calculate: d = -n.P)

A convex object can be represented as the area contained within a set of planes. Thus, to find the intersection between a line segment and a convex object, we just need to clip it against all the planes that form the convex object.

First, substitute the line equation into the plane, and solve for t:
i.e.:
n.(A+t(B-A)) = d
n.A + t*n.(B-A) = d
note: using identity ru.sv = rs(u.v), where u,v are vectors, and r,s are scalars
re-arrange to solve for t, the intersection point along the line:

We can determine if the plane faces the segment or not by evaluating the dot product of the plane’s normal, and the line segment’s direction vector.
From this we can determine which point of an intersecting line segment to influence. If the plane is facing the segment direction, then we can clip against the end point, otherwise we can clip against the start point.
As we are testing the intersection against a convex object we can simply keep clipping against each plane and altering the segment endpoints until we have the minimum remaining line length, or the intersection length becomes empty (there is no intersection).


In pseudo-code the entire operation is:
AB = B – A
tFirst = 0
tLast = 0
for all planes:
denom = N dot AB
dist = d – N dot A
t = dist/denom
if (denom>0 )
if (t>tFirst) tFirst = t;
else
if (t
if (tFirst>tLast)
No Intersection

by Adrian (noreply@blogger.com) at February 18, 2010 03:55 PM

Entity Crisis

US Corporate Pillages Local Talent, Exploits Gov, Flees Back Home.

I've just read a newspaper article (courtesy of Kranzky) from WA Business News documenting the malfeasance, gross negligence and misconduct of the US parent company of Interzone Pty Ltd.

Interzone came to Perth in 2006 to establish a large game studio. I was a keen supporter of their plans at the time, and even worked with them over a period of 12 months. Now, they appear to have unofficially folded and closed the Perth Studio sometime last week, owing millions of dollars to the ATO and employees. Reading the above article make me rather angry, and sad too.

This is apparently the reason that the CEO, Marty Brickey chose not to pay employees.

If we had paid the employees, there was no more money for operations. - Marty Brickey

Mr Brickey, I personally know of some employees who currently cannot afford to eat, due to being stuck in a foreign country and being ineligible for welfare assistance. How does this stack up against your need to operate?

This next quote is a gem, do some maths and you will wonder where all the money has gone.

Mr Brickey said he had personally invested $8 million in the company, as part of about $30 million in capital required to launch and maintain the Interzone business for the past four years.

This statement directly contradicts his words at the Kotaku Blog:

After being directed to your article I felt it was necessary to offer some corrections... IZ has not received millions in funding.

Let's leave the lies alone, because the arrogance is even more entertaining. Mr Brickey actually feels that he is owed money!

In March 2007, Interzone received $500,000 in state government funds as part of a three-year deal announced by the then industry and enterprise minister, Francis Logan.
But Mr Brickey said this had not been paid in full, claiming to be owed more than $120,000.

So let me get this straight, Marty operates a company illegaly for 18 months, doesn't pay his debts, exploits and abuses employees then "appropriates" the unpaid-for intellectual property from Perth... and has the insolence to claim the state government owes him $120,000?

Finally, the article ends:

However, after what’s occurred during the past 12 months, he said he would be happy to never return to WA.

I suspect Mr Brickey hoped the former IZ employees would slip quietly away, however they are determined to raise a ruckus and see justice done.

Mr Brickey himself seems to be spoiling for a fight. He has already directly threatened current and former employees.

"Eight of our major investors are already independently retaining council (sic) in Perth and are reading (sic) to strike hard and fast at anyone committing tortuous (sic) interference, slander, or liable (sic) against the company"

This of course, never happened and appears to be just another attempt to stall via misdirection and lies, while his "agent" made a getaway with the IP.

Then, there is this beautiful sequence of comments at Kotaku:

zaphodity
February 16, 2010 at 10:36 PM
If I were you guys I wouldn’t be sitting around posting poison comments.. I’d be having a serious round table talkies about how we were going to put Marty’s balls well and truly through the wringer.

Insider
February 17, 2010 at 1:34 AM
Zap, you might be in for a bit of a surprise on whose balls are going to be put through the ringer. You all want your day in court and i can guarantee your going to get it.

Wow, this is the most telling comment of all. If "Insider" is Mr Brickey, he clearly feels that he has been dealt with unjustly, and deserved better from his employees. Yes, the CEO is blaming the rest of the company for his failure to manage and deliver.

by noreply@blogger.com (Simon Wittber) at February 18, 2010 10:47 AM

FACEPOCALYPSE

Earth deity

I’ve been floating around word of my upcoming Mythology group exhibition. It’s scheduled to open on 17th April but I haven’t made any promo material yet. I want to produce a series of reinterpretations. As such, I’ll be depicting mythological deities common across many cultures in a more contemporary context.

Here’s something I’m working on:

EarthDeityThumbnailing01

This is just a thumbnail.

Also I may revert the earth deity to look more like I’d originally intended:

20100218EarthDeitysketch

A bit less humanoid and more disjointed and cumbersome.

by Simon at February 18, 2010 08:51 AM

Entity Crisis

Random Python

I don't know why, but this code kept popping into my my brain last night.

import random
def to_be_or_not_to_be():
return random.random() 0.5

I think it is interesting, because even though it asks a clear question, the answer is... not entirely clear. It is a sad day when one realises his dreams are plagued by source code.

by noreply@blogger.com (Simon Wittber) at February 18, 2010 01:58 AM

February 17, 2010

Adrian Boeing: Blog

Building MRPT under Windows with MSVC

These are brief instructions on building MRPT under Windows.
  1. Download CMake, and install it. (You need a recent version, > 2.6)
  2. Download OpenCV, and install it. (I used the source package)
  3. Download wxWidgets, and install it. (Again, I used source.) [Note: wxWidgets is in my opinion one of the worst packages I've ever had to deal with - its build is notoriously unstable]
  4. Find the wxWidgets 'include/wx/msw/setup.h' file, and enable the use of OpenGL widgets:

    #define wxUSE_GLCANVAS       1
  5. Open (and convert) the VC6 build solution (build/msw: wx.dsw), and perform a batch build (select all, and go!). You will need to do this three or four times. (wx does not have the dependencies correct!)
  6. Close Visual Studio, and add an environment variable (right click on my computer, properties, advanced). Set wxWidgets_ROOT_DIR to C:\wxWidgets-2.8.10\lib\vc_lib (or your equivalent).

    We are now done with wxWidgets - you may wish to try some samples to make sure it works. (Pick ones that use OpenGL)

  7. Now run CMake with OpenCV. Set the Source and Bin directories to your OpenCV directory, eg:

    source: C:/OpenCV2.0
    bin: C:/OpenCV2.0
    . Press Configure a few times and generate the solution files.
  8. Compile OpenCV from the generated solution (Should be in C:/OpenCV2.0). Try some of the examples. Many of them require a webcam, so try plugging one to make sure DirectShow works.

  9. Set your visual studio library directory (Projects and Solutions/ VC++ Directories) to include the OpenCV lib directory. Close visual studio.
  10. Run the MRPT makefile 'win32_rebuild_MSVC9_GUI.bat' (not sure why?), and then start CMake again, clear the cache, and point CMake to MRPT. eg:




    source: C:/lib/MRPT/mrpt-0.8.0
    binaries: C:/lib/MRPT/mrpt-0.8.0/makefiles/MSVC9
  11. Build MRPT, all done!
Before running the examples you will probably need to copy all openCV dll's from the OpenCV bin directory, and copy all the wx widgets dll's from lib/vc_dll directory into the MRPT bin directories.

by Adrian (noreply@blogger.com) at February 17, 2010 04:04 PM

FACEPOCALYPSE

Portfolio submitted to TAD!

08SBoxerEnvironmentFlamengo

The other night I got my portfolio submission into The Art Department, a new practical course offering the top tier of arts education in the digital realm.

There’s a new page up if you’d like to see what I submitted. It’s mostly things on my portfolio website, plus a bunch of drawings.

Anyway… If accepted I’ll be out of here come June. I’m a little daunted by living costs in San Fran though. My budget thus far contains scary numbers. ha :S

by Simon at February 17, 2010 06:52 AM

February 16, 2010

Bobostuff

February 15, 2010

Black Lab Games Blog

Last Week - Vol 2, and musings about QA

Last week was full of ups and downs in the Black Lab.

On the not so good side of the ledger, I had to pull Star Hammer Tactics out of peer review. I discovered a problem with one of the single player scenarios near the start of the game. It wasn’t a crash bug or anything nasty, just some data was missing that made the scenario almost impossible to beat. I figured that would possibly lead to bad reviews, so decided to take the game out of review and fix the problem. Although it was a 10 minute fix, there is a rule with the XNA Creator Clubs that games pulled from peer review (whether by the author, or as a result of a failure) cannot be resubmitted for 7 days. Therefore, I’ve had to wait around until this week before I can resubmit.

The time has been put to good use though! I’ve been making some excellent progress on building a game engine for the PSP. I can’t really go into much detail about it at this stage. NDA’s and all that. But I will say that it’s been great fun, and it’s interesting to have to program so “close to the metal” again - just like old times!

Lesson learnt pulling Star Hammer from peer review : Do not underestimate the value of QA (Quality Assurance). I realized that I need to expand my thinking about what “job roles” are important in building a game. My core skill is as a programmer, so obviously I understand the value of programming. I think of art and sound as being important - pretty obvious really, since a game is experienced by vision and sound. Also, there is an important role for marketing and promotion (if it’s a commercial release). This starts before the game is finished, but goes up a few gears when the game is finished. Although I’ve always been very aware of the need for QA, it never really registered how important it is. Developers can get too close to their creations to see problems, or changes to a system in the game can have flow-on effects in other parts of the game. A few years ago, Puzzle Quest on the PSP was released with a bug that caused a bit of angst amongst fans. If people are paying for a game, I think it’s fair to expect it to work and be playable to the end! So, note to self, need to work out a better solution for regular playtesting.

Finally, on a personal note, it was sad to see the implosion of Interzone Games Perth Studio. I have a number of friends who have worked, or until last week, did still work at that studio. I hope it all works out.

by Black Lab Games at February 15, 2010 02:20 AM

February 14, 2010

Kruger Heavy Industries, Dev Log (of sorts)

Your own Custom Carbon Application Event Loop

When one develops a Carbon API application, you normally just setup all your application callbacks and logic in your code before you hit the RunApplicationEventLoop call that doesn't return until you Quit.

Certainly you can run different bits of code based on events and so on, and that works just fine for most cases.

There are certain cases where this may not work for you and you want finer grained controls of when different bits and pieces of your code runs. You may wish you could get into the RunApplicationEventLoop and do things how you would like. If this sounds like you, then there is a way to do this.

I needed this when porting a title to OSX, in order to give the same behaviour as the Windows build. Rather that work out how I could get it all to happen syncing between updates and renders I just implemented my own loop which gave me quick access to easy predictable control.

Apple haven't told us exactly what happens in RunApplicationEventLoop but there is a way write your own loop that certainly has worked for folks so far. See the code below.



static EventHandlerUPP gQuitEventHandlerUPP; // -> QuitEventHandler

static OSStatus QuitEventHandler(EventHandlerCallRef inHandlerCallRef,
EventRef inEvent, void *inUserData)
{
OSStatus err;

err = CallNextEventHandler(inHandlerCallRef, inEvent);
if (err == noErr) {
*((Boolean *) inUserData) = true;
}

return err;
}

static OSStatus EventLoopEventHandler(EventHandlerCallRef inHandlerCallRef,
EventRef inEvent, void* inUserData)
{
OSStatus err;
OSStatus junk;
EventHandlerRef installedHandler;
EventTargetRef theTarget;
EventRef theEvent;
Boolean quitNow;
static const EventTypeSpec eventSpec = {kEventClassApplication, kEventAppQuit};

quitNow = false;

// Install our override on the kEventClassApplication, kEventAppQuit event.
err = InstallEventHandler(GetApplicationEventTarget(), gQuitEventHandlerUPP,
1, &eventSpec, &quitNow, &installedHandler);
if (err == noErr) {

// Run our event loop until quitNow is set.
theTarget = GetEventDispatcherTarget();
do {
err = ReceiveNextEvent(0, NULL, kEventDurationNoWait,
true, &theEvent);
if (err == noErr) {
SendEventToEventTarget(theEvent, theTarget);
ReleaseEvent(theEvent);
}

/// Run application code
RunOurApplicationCodeHere();

} while ( ! quitNow );

junk = RemoveEventHandler(installedHandler);
}

return err;
}


static void RunCustomApplicationEventLoop()
{
static const EventTypeSpec eventSpec = {'KWIN', 'KWIN' };
OSStatus err;
OSStatus junk;
EventTargetRef appTarget;
EventHandlerRef installedHandler;
EventRef dummyEvent;

dummyEvent = nil;

err = noErr;
if (gEventLoopEventHandlerUPP == nil) {
gEventLoopEventHandlerUPP = NewEventHandlerUPP(EventLoopEventHandler);
}
if (gQuitEventHandlerUPP == nil) {
gQuitEventHandlerUPP = NewEventHandlerUPP(QuitEventHandler);
}
if (gEventLoopEventHandlerUPP == nil || gQuitEventHandlerUPP == nil) {
err = memFullErr;
}

if (err == noErr) {
err = InstallEventHandler(GetApplicationEventTarget(), gEventLoopEventHandlerUPP,
1, &eventSpec, nil, &installedHandler);
if (err == noErr) {
err = MacCreateEvent(nil, 'KWIN', 'KWIN', GetCurrentEventTime(),
kEventAttributeNone, &dummyEvent);
if (err == noErr) {
err = PostEventToQueue(GetMainEventQueue(), dummyEvent,
kEventPriorityHigh);
}
if (err == noErr) {
RunApplicationEventLoop();
}

junk = RemoveEventHandler(installedHandler);
}
}

if (dummyEvent != nil) {
ReleaseEvent(dummyEvent);
}
}


What this code does is that it creates a custom event loop that gets entered by the normal RunApplicationEventLoop when the event for it gets fired (very early on). The custom loop runs the normal events pump as expected. A custom quit event handler is inserted to toggle the finalisation of the custom event loop. Simple!

by montdidier (noreply@blogger.com) at February 14, 2010 05:42 PM

February 13, 2010

beetlefeet.net

Interzone Craziness

~2 months ago I had to suspend my position at Interzone Games due to unpaid superannuation and shaky payroll. This week it all came crumbling down…

A growing collection of quotes and links about Interzone Games, Big Collision Games, Michael Turner, Marty Brickey and Greg Chadwell.

The summary as I understand it:

This week, Michael Turner from the US office, came to Australia to take the intellectual property for the game. The game would then be finished by another company in the US.

This is while the company has around $1.6 million of Australian debt which includes unpaid Australian business tax, unpaid payroll tax, unpaid employee wages and entitlements and unpaid employee superannuation.

When Mike was met with questions as to how these debts will be resolved, he left the premises. He then came back that night after dark and changed the locks of the building. He barred employees from their workplace (personal belongings still inside).

This was met with peaceful protest and many questions that went unanswered. Then the media were contacted and the police were called by both parties, etc etc.

Most notable was the climax yesterday where employees were ordered off their own workplace by a spokesperson of the Department of Commerce?!

The link above has many links to news reports please check em out if only to bump up exposure :)
It was quite surreal seeing it laid out on the ABC News last night. :/

by beetlefeet at February 13, 2010 03:35 AM

February 12, 2010

FACEPOCALYPSE

Sci-fi clichés

Lots of em!

Was painting up this environment concept with the intention of making it folio-worthy, but no. I just couldn’t get past how cliché it is, so it shall remain as yet another speedpaint. I feel the composition, lighting and narrative is pretty good though. I wanted to indicate something had escaped, but not what.

20100213SciFiEnviro

by Simon at February 12, 2010 06:29 PM

Adrian Boeing: Blog

PEAK CAN Linux drivers

PEAK system provide a number of CAN cards with open-source drivers, and so far they have been working fine for us. (Unlike some other CAN cards!).

Installing the drivers is relatively straight-foward on a clean linux system (a fair bit more complicated with a Xenomai based system), but there are still a few quirks that can get in your way. I've described a simple way that works for us.

Starting with a fresh install of linux, the first thing you probably want to do is add some new users, eg:
adduser (name)
And perhaps add the user to admin group:
sudo usermod -a -G admin (name)
Then you need to make sure gcc, g++ have been installed, and the system is up to date. Having wget and a browser are always handy too. With ubuntu we can use apt:
sudo apt-get update
sudo apt-get install lynx
sudo apt-get install gcc
sudo apt-get install g++
Next, we need to ensure we have our linux header files. Find out your linux version:
uname -r
And install the linux headers, eg:
sudo apt-get install linux-headers-$(uname -r)
Now we need a symbolic link to this for the CAN driver to compile.
So you need to find your linux 'version.h' file. (You can try whereis/locate). eg, mine is at:
/usr/src/linux-headers-2.6.31-14-generic-pae/include/linux/version.h
So you need to make a new symbolic link there:
cd /usr/src
sudo ln -s linux-headers-2.6.31-14-generic-pae linux

We are now ready to compile the driver, but first, we need to get it. Go back to your home directory and download the driver:
cd ~/
wget http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver.6.15.tar.gz
Then extract:
tar -xvf peak-linux-driver.6.15.tar.gz
cd peak-linux-driver-6.15
Now we are ready to compile! (and install the libraries)
make clean
make NET=NO

sudo make install
Now we can load the driver (if it isn't already):
cd driver
sudo /sbin/modprobe pcan
And we are all done!

Now, we can check if it is ok:
cat /proc/pcan 
cat /dev/pcan0
cat /dev/pcan1

If you have the dual-channel version you can try sending some data with a terminated CAN cable between the hardware modules. Example:
console1: cat /dev/pcan32
console2: echo "m s 0x111 2 0x12 0x34">/dev/pcan0
console1 will receive:
m s 0x00000111 2  0x12 0x34       310146 619

Enjoy!

by Adrian (noreply@blogger.com) at February 12, 2010 09:16 AM

Entity Crisis

A Spatial Hash class in C#.

Now that I'm writing more C# than Python... I've ported some of my more useful classes for use with Unity3D and C#. This is a rather useful class, the Spatial Hash. It is used for creating an index of spatial data (3D things in space) and allowing fast queries to be run against the index. The original Python version is over here. This new class is used in much the same way.

Effectively, you can use this class to ask, "I'm at this position, what other objects are near me?".

using UnityEngine;
using System.Collections;

public class SpatialHash
{
private Hashtable idx;
private int cellSize;

public SpatialHash(int cellSize) {
this.cellSize = cellSize;
this.idx = new Hashtable();
}

public int Count {
get { return idx.Count; }
}

public ICollection Cells {
get { return idx.Keys; }
}

public void Insert(Vector3 v, object obj) {
ArrayList cell;
foreach(string key in Keys(v)) {
if(idx.Contains(key))
cell = (ArrayList)idx[key];
else {
cell = new ArrayList();
idx.Add(key, cell);
}
if(!cell.Contains(obj))
cell.Add(obj);
}
}

public ArrayList Query(Vector3 v) {
string key = Key(v);
if(idx.Contains(key))
return (ArrayList)idx[key];
return new ArrayList();
}

private ArrayList Keys(Vector3 v) {
int o = cellSize / 2;
ArrayList keys = new ArrayList();
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-0, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y-0, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-0, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y-o, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y-o, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y-o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z-0)));
keys.Add(Key(new Vector3(v.x-o, v.y+o, v.z+o)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z-0)));
keys.Add(Key(new Vector3(v.x-0, v.y+o, v.z+o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-o)));
keys.Add(Key(new Vector3(v.x+o, v.y+o, v.z-0)));
return keys;
}

private string Key(Vector3 v) {
int x = (int)Mathf.Floor(v.x/cellSize)*cellSize;
int y = (int)Mathf.Floor(v.y/cellSize)*cellSize;
int z = (int)Mathf.Floor(v.z/cellSize)*cellSize;
return x.ToString() + ":" + y.ToString() + ":" + z.ToString();
}

}

by noreply@blogger.com (Simon Wittber) at February 12, 2010 04:37 AM

Interzone Continues to Implode. Waiting for the Explode bit.

I just received a link to this rather incriminating writeup about IZ Corporate management tactics. It reeks of dishonesty, fraud and greed. For more information, see the story on Kotaku. It is a very interesting read, trust me.

I wrote a lot of Python for IZ over 12 months, it was a great place to work with a very smart team of Pythoneers, Artists and other creative sorts. If the game had been delivered, it could possible have become the second biggest MMO powered by Python. Sadly, it seems this is unlikely to happen.

Update: More inside info and allegations at at WA Business News.
Update: Gamasutra cover the Interzone Corruption.
Update: This page names the management, Marty Brickey, Mike Turner and Greg Chadwell.
Update: Tsumea documents Interzone mismanagement and employee abuse.
Update: Giant Bomb talks with ex-IZ employee.
Update: More detail on the con at deviantART.

by noreply@blogger.com (Simon Wittber) at February 12, 2010 12:27 AM

February 11, 2010

Adrian Boeing: Blog

4K programs

One of my favourite programming tasks is to create a program in under 4k.  This is something the Demoscene excel at (see scene.org awards).
Some of my favourites are:
Of course, achieving this seems impossible, however a few tools make this easier. I used many of these tools and tricks to create my 3kb entry to the global game jam.  First of all a drop/compression tool. Crinkler has eliminated the need for com/cob droppers and gives excellent compression. This little tool has made most of my 4k productions possible.IN4K has plenty of tools and code examples to help you learn the trade, but Iñigo Quilez has an excellent set of beginner projects. (Not the most optimized ones out there, but still a fantastic starting point).  FIT have an excellent set of demoscene resources, including source code to some fantastic 4k intros (plus synthesizers!). Ryg/Farbrausch has some interesting reads as well.The other thing that you will find when making 4K intros is the lack of maths functions (which you can get around by using intrinsics /QIfist in MSVC, or something like that), and by writing them yourself in assembly.  The next problem is often getting rid of the C standard library, in particular rand(). This is where Linear congruential generator (LCG) come in handy. This is where IQ comes handy again with a 'better, smaller and faster random number generator'. And again, this isn't the fastest or most optimal, but it will do. Finally you will probably want to allocate memory dynamically, and on Windows you can simply use:GlobalAlloc instead. (Feel free to overide operator new and use your standard C++ coding style).If your really looking to crunch size, then stick to values that will compress well (ie: powers of 2), but the latest crinkler can drop floating precision for you anyway, so I'm not sure how much you save with this trick these days...

by Adrian (noreply@blogger.com) at February 11, 2010 10:18 PM

Drishti

Drishti is a real-time interactive volume rendering and animation tool. Paul Bourke
organized a tutorial at WASP/iVEC. The tool is developed by Ajay, a very friendly guy, and very open to user feature-requests.

Drishti has three parts, the renderer, the importer, and the painter. We only covered the renderer and importer.


The importer can import from various file formats, including standard image stacks and raw data. (unsigned characters, Z=1 .. ns
, Y=1 .. wd, 
X=1 .. ht)

To use the importer you just
 drag and drop (raw) data
, then you can adjust the top slider nob to alter contrast
, and left click to add an additional point that you can move to compress the range. You can view the data in different color spaces, and use the sliders to inspect the data. When you save you have a number of additional options including sub-sampling and filtering.



Once you have finished with importing your data and generated the pvl.nc you can drag and drop this into the renderer. Pressing F2 swaps you between high and low-resolution mode.

You can edit the transfer functions to explore the volume. The 2D version depicts the gradients of the data set, and takes a bit of playing around with before you get used to it. You can left/right click to shift the points, add points, make curves, etc throughout the selected volume. Space will bring up additional color maps. You can add new transfer functions to highlight different parts of the volume. The two sliders on the side can be used to set the alpha, and 0.5 each for a gaussian influence instead.

In low-resolution mode you can alter the bounds for the volume by draging on the sides of the box, or using the arrow keys for fine change movements.

Under the preferences tab you can set the step size (ie: quality of the render), or add an axis and labels, etc. Strange things seem to happen when you set the steps too low (< 0.2).

The final thing we discussed was creating keyframe animations. Selecting View, Keyframe editor displays the dialog. You can then click anywhere on the keyframe line, and set the viewport however you like (ie: rotate/zoom) and then click 'add keyframe'. Select another keyframe position, move the camera and add another keyframe, etc, etc. until you have the animation you like. You can move individual keyframes, or shift-left mouse to select an entire region and drag/reposition a whole group of keyframes.



To rotate the camera in another axis or to manually modify the camera positions, etc. use the brick-editor. Press 'a' to show the axis, and you can modify the axis of rotation (eg: alter 1,0,0 to 0,0,1, etc.).

Thats a fast-short introduction to Drishti. Take a look at the gallery for more screenshots and videos - unfortunately few of the fanciest features have videos.

by Adrian (noreply@blogger.com) at February 11, 2010 10:02 PM

FACEPOCALYPSE

Family portrait

Did this family portrait commission for my uncle’s 50th. They requested a portrait (30″x40″) of them all walking, holding hands and provided a handful of references to work from.

FamilyPortraitCommission

Getting a likeness in faces is no light task! Especially in full colour, over-shading/lighting can warp the face and make it look off even if all the features are correctly positioned.

Here’s a closer look at some faces.

FamilyPortraitCommissionCloseup

by Simon at February 11, 2010 01:39 PM

Nick

WTF Interzone Entertainment?!

Seriously, what is wrong with you Interzone Entertainment?!

First this story breaks out on Kotaku and tsumea that you’re sending Mike Turner down to pick up assets from the Perth Studio so that you can contract someone else to finish the game (rather than pay existing staff what they are owed in unpaid wages, entitlements, and superannuation).

Now I’m hearing reports that Mike has turned up in the dead of the night to change the locks (which I assume was done illegally given that Mike just recently resigned as company director, and I can’t imagine that the building owner was informed) and take all the computers.

He was stopped by the police. The police!?! What are you doing Mike? Seriously, what the hell are you doing? Please come to your senses and stop playing any role in this insanity. Anyone asking you to perpetrate illegal or questionable actions probably hasn’t got your best interests in mind.

Update: Okay, I’ve calmed down now. I’m not making any claims regarding the authenticity of this information or the legality of any actions taken by any individuals. This just completely blew my mind. Read up on it elsewhere.

by Nick at February 11, 2010 01:25 AM

February 10, 2010

Adrian Boeing: Blog

Interzone Games - No more!


It is finally official. Interzone Games / Interzone Futebol is
(almost) dead
. After having heard the various horror stories for years, it is finally all out in the open. (Sumea also re-covered the story)

And with Staring Man/Spinfast loosing their lead programmer things don't look too great for the Interzone legacy right now. Still the ex-Interzoners are hardly alone, computer games have had it tough in Australia recently, Melbourne-based Transmission Games fired most of their employees, and closed its doors, Krome and Fuzzyeyes also had bad times. Seems reminiscent of the Ratbag games fiasco.

It is a shame it had to be such a public end. I still think it has helped nurture a WA-based games industry and given a lot of people some valuable experience. (Although actually RELEASING the game would have been a much more rewarding experience).

Hopefully it won't hurt future attempts - it seems WA independent game developers are doing well with a few good recent releases such as square-off, surf prodigy, and former-interzoners releasing Space Crash, pools of blood, etc..

by Adrian (noreply@blogger.com) at February 10, 2010 09:01 PM

Vortex Slides

Michel Carignan from CM Labs Vortex has kindly provided me with the slides to his presentation on Vortex.

edit: update, CM Labs can not publicly distribute the slides, but they are still available upon request.

by Adrian (noreply@blogger.com) at February 10, 2010 08:19 PM