Jump to content

Happy New Year - Another year older...

Flexman

746 views

I (Richard H) take the opportunity to indulge myself in a little year-end editorial and pick out some of the personal highs and lows of the past twelve months. Warning: may contain rambling, digression and woeful inaccuracies.

 

Is it over already? What happened this year?

 

2011 a year where the most wanted man in America was shot (along with 4 other people that nobody seems to remember) by US Navy SEALs. A year where governments attempted to convince themselves they have any kind of control over economies despite the billions spent on technology and infrastructure to remove people out of the loop. I call blasting away mountains to improve packet travel time by mere milliseconds pretty compelling evidence of the forces being thrown into this new hi-tech computer based trading war. When the speed of light is too slow to make money over the competition and shortening your cable by removing hillsides is the difference between profit and loss what chance do governments or people have in this trading scenario? And it's all happening without much talk or opposition.

 

The 'adventure' in IRAQ was laid to rest with US President Obama announcing US troop withdrawal. The British army was there in the first half of the previous century and didn't fare much better, although the suggestion that using poison gas on rebels in the north was not acted upon, that was one of Winston Churchill's bright ideas curiously. Always seemed ironic that.

 

Freedom swept across the middle east, starting with Tunisia as despot after despot was felled in popular uprisings. You'd be forgiven for thinking it was some sort of Facebook game.

 

 

Earthquakes and devestation

 

Japan moved 20 meters westerly and horrific scenes of coastal devastation were broadcast live as the resulting tsunami from the massive undersea earthquakes swept away generations of familes, homes and soon after any remaining nuclear power comfort zone.

 

Japan has never been a stranger to holocaust, scenes and stories of annihilation and devastation are popular in Japanese culture, see the opening scene of Akira. This is something they have lived through time and time again. My late father-in-law was a Hiroshima survivor, sponsored by US scientists after the war he became a US citizen and then a notable scientist and Quaker. He told me once of thanking Oppenheimer (at a conference) for ending the war in his country, how awful must things have been when getting nuked and loosing your family was in retrospect the better option? It's something I can't even begin to think about without breaking down in tears.

 

 

Game devs want more pie

 

It was the year every game studio and his dog decided they wanted a slice of the Mincecraft pie without any consideration of what makes it so popular. The phrase "just like Warcraft" was replaced by "just like Minecraft", or if you're an unethical developer, "Just like Farmville".

 

Unethical is a strong word to use but I'll use it for any type of game that preys on innate human weaknesses to make you play them rather than well designed gameplay. This can be aimed at a lot of games that exist in the social arena. I blame a large part of this down to the adoption of the "Monthly Active User" metric being used as a key performance indicator (KPI) for IP acquisition and exploitation.

 

Another example of game success passed around developers is "Angry Birds". What they often don't realise is Angry Birds was not an out of the blue success, the creators had built up experience working on around 50 games between them prior to launch. The game mechanics are stupefying simple, any programmer or user of Little Big Planet can put such a game together. It is no more sophisticated than Gorillas (shipped as BASIC source code with MSDOS 5 see wiki), it is a single player artillery game. But everything surrounding the mechanics is a finely tuned presentation based on their collective game experience. It takes experienced designers to make Angry Birds, not programmers.

 

 

Indie because we say so

 

Somehow the meaning of 'indie' became fluid, when news of companies like EA announce the formation of an indie studio to engage social and mobile spaces it has one reaching for my "WTF?" stamp. In what way is this indie? Indie is folks trying to democratise games in a way big studios have been blocking for years, indie is independent thought in the game-space or some pretentious twaddle like that. Indie is not trading on skin deep looks, big bucks advertising budgets but game mechanics and freedom to experiment. Freedom to fail.

 

Start-ups being handed hundreds of thousands of pounds in government grants could be said to be independent. Certainly this year saw many studios spring forth from magic money with little to show for it, and some priced beyond reason. It smells of the dot com boom bust of the early 2000s. Studios are good at being handed funds (in the words of Lord Stark) 'when it's safe'. Hey investors, how about taking some risks on real projects? We could have done this bloody game in half the time, does that smack of enough bitterness? Yes I'm bitter. OK that's enough, better now. Moving on to some of the personal gaming highs this year.

 

 

Video game highlights of 2011

 

Shogun 2 - Creative Assembly

Magika - Arrowhead Game Studios

Assassins Creed Revelations - Ubisoft

 

Most of the games I had time to play this year (and that's not many) were a mixed bag. To be fair even Assassins Creed was a face-roll fest (not much skill required) but managed to keep one going through sheer story and production value. At the opposite end is Shogun 2, Creative Assembly's triumph combining many elements they've tinkered with in previous games and spades of neat game elements into their two tier strategy game packed with historical facts.

 

Magika is a hilarious indie action game where blowing yourself up in interesting ways seems par for the course. It came out of nowhere and fair to describe the tone of the game as something you'd get if you threw Reservoir Dogs, Lord of the Rings and Monty Python into a blender. Thanks guys for the laughs.

 

Honorary mentions: Battlefield 3, Portal 2. and Kerbal Space Program. That latter being great fun if you're into building your own monstrous launch systems and killing space crews in spectacular fireballs.

 

 

Video game disappointments of 2011

 

I bought 'em, played 'em, felt gutted.

 

Test Drive 2 Unlimted - Eden Games

 

Wow, after the brilliant but only slightly flawed first game they didn't need to do very much to make the second game a winner. It was like the anticipation of a new Star Wars film (The Phantom Menace), in the words of Harry Plinkett, how hard is it to screw up? It's like mashed potato, just add water. Well they managed it IN SPADES by populating the game entirely with really awful people. I don't want to play these characters, I don't want to interact with these characters. One forum poster dubbed it "Douche-bag simulator".

 

Skyrim

 

An honorary arrow in the knee because Oblivion with a face-lift seemed cool at first, erm how much was spent on this? Disappointment still ringing from the hours I put into Oblivion only to find the openness of character development can result in halting any progression after xxx hours. They filmed this live action trailer which could be for anything, my step-son suggested that it could work as a dandruff commercial, see for yourself...

 

Let me know if you hit the same wall in Skyrim.

 

 

Batman Arkham City

 

I finished the first Batman game a total of FIVE times. I can't think when I've ever bothered to do that with any other console game. Finishing ONCE is a rare thing.

 

Arkham City lost me after a weekend of play. Too much freedom and visual clutter spoiling an otherwise masterfully visualised city environment. Riddler on the Roof, he's painted dayglow green **** everywhere to solve his collection meta-quest. And worse, there's really no logic to some of the puzzles, (the rooftop chicken run with the magnetic ball for one), I can absorb bullets but I can't rip open a chicken run to grab the ball and stick it in the hole? Put me in the game like you did with Arkham Asylum please, but ill-considered content like this kept taking me out. Sometimes less is more. The artwork is amazing and the laser effects best I've ever seen, a real visual treat with jarring game elements that kill pacing.

 

 

Combat-Helo

 

I had to mention this. Still not out yet and my internal build seems so close yet needs more cowbell. I was really looking forward to seeing a beta released around now and spending my time apologising in public forums and working on improvements. What happened is a series of poor choices on my part which I wouldn't choose to do again. Problem that a normal team could rally around is too much for one programmer to deal with (such as the much needed engine occlusion bug which broke a key avionics sub-system). Another mistake was getting pressured into announce a release period which was just setting myself up for disappointing people when problems arose. I broke my own rule and paid the price. While I still feel bad about that I love the team even though they probably hate some of the choices I made, I can't disagree. Will the release meet expectations? Probably not. Will it fly? You bet. Besides my wife said she'll cut off my bollocks if I don't release it soon or get a decent paying job. Can't argue with that either.

 

 

Video and film highlights of 2011

 

Everything is a Remix

 

If there was ever a documentary that shows how ridiculous, damaging and outdated modern day copyright and patent laws are, Everything is a Remix is an entertaining documentary series in 4 parts. Everything around us is a remix of some tool, idea and material. Without the freedom to copy, transform and combine existing ideas and technologies creativity is stifled and with it western economies. How different our world would be today if the same level of litigation was around at the time of the industrial revolution.

 

 

Sons of Guns - Discovery Channel

 

Once you get past the gratuitous 'gun porn' flag waving aspect what I love about this series is the sheer love and enthusiasm from the employees of Red Jacket Firearms featured in the show. Sure they love to blow stuff up and you might question the sanity and choices made (as do the employees from time to time) but the company is not run as a democracy (insert discussion here). Now airing the third season it's perhaps the most popular show on Discovery HD. It had me yelling, "I got a guitar GUN!" Cracks me up every time.

 

Cowboys and Aliens (imdb)

 

The film was better than the title. Reminding me a little of an old b-movie Valley of the Gwangi (imdb) it was a reasonably fun and gritty take on the what-if monster genre.

 

Super-8 (imdb)

 

A charming revisit of what an 80s Spielberg movie would be if made today....set in the 80s. Yes we wore those clothes in school. And if you have a 5.1 surround system then the train crash scene will terrify your neighbours. Written and Directed by J.J Abrams.

 

 

Cool science stuff

 

Energy from paper, discovery of hundreds of 'earth like' planets around nearby stars, the possible discovery of the Higgs Boson and Mentos in diet coke. Granted the last one is a bit late but is the only practical experiment I actually conducted in the kitchen. I did clean up though.

 

Here's hoping that next year science will bring us phones and portable computing devices that can keep a charge for more than a few hours.

 

Oh and the amazing new bulletproof liquid armor from BAE systems would be handy in the field. Currently it requires 10 pints of Newcastle Brown Ale to feel bulletproof and lightweight however field tests show the subject to be less than agile.

 

 

 

HAPPY NEW YEAR EVERYONE

(or I'll hit the UNDO button at midnight and we'll have to try all over again)

 

 

 

Parting quote:

 

"Goodbye. Goodbye to all the 87 software houses who are no longer with us . . . hello multinationals with your contract lawyers and your cut-price rotten little programs ..." - The Pi-man's end of the year message to fans circa mid 1980s

4946580266235927217-77474821464494294?l=combathelo.blogspot.com

 

Source



0 Comments


Recommended Comments

There are no comments to display.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Blog Entries

    • By Josh in Josh's Dev Blog 2
      I started to implement quads for tessellation, and at that point the shader system reached the point of being unmanageable. Rendering an object to a shadow map and to a color buffer are two different processes that require two different shaders. Turbo introduces an early Z-pass which can use another shader, and if variance shadow maps are not in use this can be a different shader from the shadow shader. Rendering with tessellation requires another set of shaders, with one different set for each primitive type (isolines, triangles, and quads). And then each one of these needs a masked and opaque option, if alpha discard is enabled.
      All in all, there are currently 48 different shaders a material could use based on what is currently being drawn. This is unmanageable.
      To handle this I am introducing the concept of a "shader family". This is a JSON file that lists all possible permutations of a shader. Instead of setting lots of different shaders in a material, you just set the shader family one:
      shaderFamily: "PBR.json" Or in code:
      material->SetShaderFamily(LoadShaderFamily("PBR.json")); The shader family file is a big JSON structure that contains all the different shader modules for each different rendering configuration: Here are the partial contents of my PBR.json file:
      { "turboShaderFamily" : { "OPAQUE": { "default": { "base": { "vertex": "Shaders/PBR.vert.spv", "fragment": "Shaders/PBR.frag.spv" }, "depthPass": { "vertex": "Shaders/Depthpass.vert.spv" }, "shadow": { "vertex": "Shaders/Shadow.vert.spv" } }, "isolines": { "base": { "vertex": "Shaders/PBR_Tess.vert.spv", "tessellationControl": "Shaders/Isolines.tesc.spv", "tessellationEvaluation": "Shaders/Isolines.tese.spv", "fragment": "Shaders/PBR_Tess.frag.spv" }, "shadow": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "Shaders/DepthPass_Isolines.tesc.spv", "tessellationEvaluation": "Shaders/DepthPass_Isolines.tese.spv" }, "depthPass": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "DepthPass_Isolines.tesc.spv", "tessellationEvaluation": "DepthPass_Isolines.tese.spv" } }, "triangles": { "base": { "vertex": "Shaders/PBR_Tess.vert.spv", "tessellationControl": "Shaders/Triangles.tesc.spv", "tessellationEvaluation": "Shaders/Triangles.tese.spv", "fragment": "Shaders/PBR_Tess.frag.spv" }, "shadow": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "Shaders/DepthPass_Triangles.tesc.spv", "tessellationEvaluation": "Shaders/DepthPass_Triangles.tese.spv" }, "depthPass": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "DepthPass_Triangles.tesc.spv", "tessellationEvaluation": "DepthPass_Triangles.tese.spv" } }, "quads": { "base": { "vertex": "Shaders/PBR_Tess.vert.spv", "tessellationControl": "Shaders/Quads.tesc.spv", "tessellationEvaluation": "Shaders/Quads.tese.spv", "fragment": "Shaders/PBR_Tess.frag.spv" }, "shadow": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "Shaders/DepthPass_Quads.tesc.spv", "tessellationEvaluation": "Shaders/DepthPass_Quads.tese.spv" }, "depthPass": { "vertex": "Shaders/DepthPass_Tess.vert.spv", "tessellationControl": "DepthPass_Quads.tesc.spv", "tessellationEvaluation": "DepthPass_Quads.tese.spv" } } } } } A shader family file can indicate a root to inherit values from. The Blinn-Phong shader family pulls settings from the PBR file and just switches some of the fragment shader values.
      { "turboShaderFamily" : { "root": "PBR.json", "OPAQUE": { "default": { "base": { "fragment": "Shaders/Blinn-Phong.frag.spv" } }, "isolines": { "base": { "fragment": "Shaders/Blinn-Phong_Tess.frag.spv" } }, "triangles": { "base": { "fragment": "Shaders/Blinn-Phong_Tess.frag.spv" } }, "quads": { "base": { "fragment": "Shaders/Blinn-Phong_Tess.frag.spv" } } } } } If you want to implement a custom shader, this is more work because you have to define all your changes for each possible shader variation. But once that is done, you have a new shader that will work with all of these different settings, which in the end is easier. I considered making a more complex inheritance / cascading schema but I think eliminating ambiguity is the most important goal in this and that should override any concern about the verbosity of these files. After all, I only plan on providing a couple of these files and you aren't going to need any more unless you are doing a lot of custom shaders. And if you are, this is the best solution for you anyways.
      Consequently, the baseShader, depthShader, etc. values in the material file definition are going away. Leadwerks .mat files will always use the Blinn-Phong shader family, and there is no way to change this without creating a material file in the new JSON material format.
      The shader class is no longer derived from the Asset class because it doesn't correspond to a single file. Instead, it is just a dumb container. A ShaderModule class derived from the Asset class has been added, and this does correspond with a single .spv file. But you, the user, won't really need to deal with any of this.
      The result of this is that one material will work with tessellation enabled or disabled, quad, triangle, or line meshes, and animated meshes. I also added an optional parameter in the CreatePlane(), CreateBox(), and CreateQuadSphere() commands that will create these primitives out of quads instead of triangles. The main reason for supporting quad meshes is that the tessellation is cleaner when quads are used. (Note that Vulkan still displays quads in wireframe mode as if they are triangles. I think the renderer probably converts them to normal triangles after the tessellation stage.)


      I also was able to implement PN Quads, which is a quad version of the Bezier curve that PN Triangles add to tessellation.



      Basically all the complexity is being packed into the shader family file so that these decisions only have to be made once instead of thousands of times for each different material.
    • By Josh in Josh's Dev Blog 0
      I'm back from I/ITSEC. This conference is basically like the military's version of GDC. VR applications built with Leadwerks took up about half of Northrop Grumman's booth. There were many interesting discussions about new technology and I received a very warm reception. I feel very positive about our new technology going forward.

      I am currently reworking the text field widget script to work with our persistent 2D objects. This is long and boring but needs to be done. Not much else to say right now.
    • By Josh in Josh's Dev Blog 4
      Here are some screenshots showing more complex interface items scaled at different resolutions. First, here is the interface at 100% scaling:

      And here is the same interface at the same screen resolution, with the DPI scaling turned up to 150%:

      The code to control this is sort of complex, and I don't care. GUI resolution independence is a complicated thing, so the goal should be to create a system that does what it is supposed to do reliably, not to make complicated things simpler at the expense of functionality.
      function widget:Draw(x,y,width,height) local scale = self.gui:GetScale() self.primitives[1].size = iVec2(self.size.x, self.size.y - self.tabsize.y * scale) self.primitives[2].size = iVec2(self.size.x, self.size.y - self.tabsize.y * scale) --Tabs local n local tabpos = 0 for n = 1, #self.items do local tw = self:TabWidth(n) * scale if n * 3 > #self.primitives - 2 then self:AddRect(iVec2(tabpos,0), iVec2(tw, self.tabsize.y * scale), self.bordercolor, false, self.itemcornerradius * scale) self:AddRect(iVec2(tabpos+1,1), iVec2(tw, self.tabsize.y * scale) - iVec2(2 * scale,-1 * scale), self.backgroundcolor, false, self.itemcornerradius * scale) self:AddTextRect(self.items[n].text, iVec2(tabpos,0), iVec2(tw, self.tabsize.y*scale), self.textcolor, TEXT_CENTER + TEXT_MIDDLE) end if self:SelectedItem() == n then self.primitives[2 + (n - 1) * 3 + 1].position = iVec2(tabpos, 0) self.primitives[2 + (n - 1) * 3 + 1].size = iVec2(tw, self.tabsize.y * scale) + iVec2(0,2) self.primitives[2 + (n - 1) * 3 + 2].position = iVec2(tabpos + 1, 1) self.primitives[2 + (n - 1) * 3 + 2].color = self.selectedtabcolor self.primitives[2 + (n - 1) * 3 + 2].size = iVec2(tw, self.tabsize.y * scale) - iVec2(2,-1) self.primitives[2 + (n - 1) * 3 + 3].color = self.hoveredtextcolor self.primitives[2 + (n - 1) * 3 + 1].position = iVec2(tabpos,0) self.primitives[2 + (n - 1) * 3 + 2].position = iVec2(tabpos + 1, 1) self.primitives[2 + (n - 1) * 3 + 3].position = iVec2(tabpos,0) else self.primitives[2 + (n - 1) * 3 + 1].size = iVec2(tw, self.tabsize.y * scale) self.primitives[2 + (n - 1) * 3 + 2].color = self.tabcolor self.primitives[2 + (n - 1) * 3 + 2].size = iVec2(tw, self.tabsize.y * scale) - iVec2(2,2) if n == self.hovereditem then self.primitives[2 + (n - 1) * 3 + 3].color = self.hoveredtextcolor else self.primitives[2 + (n - 1) * 3 + 3].color = self.textcolor end self.primitives[2 + (n - 1) * 3 + 1].position = iVec2(tabpos,2) self.primitives[2 + (n - 1) * 3 + 2].position = iVec2(tabpos + 1, 3) self.primitives[2 + (n - 1) * 3 + 3].position = iVec2(tabpos,2) end self.primitives[2 + (n - 1) * 3 + 3].text = self.items[n].text tabpos = tabpos + tw - 2 end end  
×
×
  • Create New...