Project Offset Crowd Test

Miscellaneous Forums/General Discussion/Project Offset Crowd Test

Have you guys seen this yet? It's pretty brilliant and only makes me more excited to see whats in store for us.

Check it out, it's about half way through the page.

http://www.projectoffset.com/technology.html

All that tech and they can't even make a human that looks anything like a real one.


All that tech and they can't even make a human that looks anything like a real one.

That's because he's actually a Dwarf :)

Oooooohhhh, KiwiSteve is the burn master!!!

amazing , considering it was done by a couple of guys working at home .

Yes its amazine what they are doing - it almost makes me want to learn C++.

IPete2.

If you will, I will ;)

Every single screenshot there is very easy to realise. All you need is a function to register the shader, apply it to a mesh or render-to-texture-target (for post processing) and it's done. It's all shaders. And moreover, they aren't using the highest quality blur there either, you can see the trail, while there are better blur shaders out there. All out of the box pretty much. A skin shader exists as well. "Specular bloom" ? Thats a new name. It's just "bloom" to me. Standard shader. Shadows, standard shader. This is all fairly simple guys, i'm amazed how few of you are informed about shaders :P (yeeees im the l33t guy around here haha).

Lol i said this for 100th time this month. Shaders are god.

So the only thing impressive here is the amount of work that went into building the high poly characters. All other effects are extra simple to do. On top of that, i dont know why daniel says "in store for us" when these shaders have been in use in a variety of games, but maybe not combined in such a way simply because of GPU power requirements.

I think that they have put a lot of work into the back-end. Sure, the shaders are fairly derivative but the way they have assembled the code which underpins them sounds very good.

I picked up on the fact that you can create new game entities and drop them straight into the editor without having to alter any of the code in the editor. Perhaps this is really clever and you can drop in new C++ code or perhaps it's marginally clever and you can drop in some form of custom script / XML (they seem to like XML, which is not so great IMHO).

The chap doing voice-over in the 2nd video mentions that they have enabled the post-processing in such a way that you don't have to think about it when creating new entities, shader effects or lighting. Obviously, I haven't had any experience of coding such stuff myself but I can very well imagine that other engines aren't quite so flexible (perhaps Unreal, I don't know).

I have a great respect for these guys because not only do they understand how to 'do' 3D and put a game together (well, a tech-demo) but they are going about it in an intelligent way, making sure that when they enable a feature, it doesn't trip up everything else in the game. Not only that, but designing the whole architecture so that it isn't possible to cause unwanted interaction between different elements of the engine.

Kudos to them, I say.

Well, you got a point i guess, but i didn't get that far into that project to really know for sure what they're doing. I just commented the 3d visuals. If they can indeed make it so usable, they'll probably sell a few licences.

That Dwarf's skin has too much subusurface scattering. But they may have overdone the effect in order to show it off.

Subsurface scattering is a technique which simulates how light passes through skin and wax. Ie, if you put a flashlight up against a block of wax, the block would glow, because the wax scatters the light in all directions inside it. The same happens with your skin, though to a much lesser effect. It happens most around your nose and ears. But hold your thumb up to the monitor, and you should be able to see the skin around the nail glowing, if you're in a dark room.

It's the next big thing in realistic character rendering. Requires shaders though. I've seen a lot of people misusing it in 3D renderings, I think it might take people a while to learn to avoid that wax look.

It looks nice. But I want to see some use of the engine in a game. A lot of nice things can be done in the visuals, it's when you try and make it dynamic and interesting and add some gameplay etc that they fall appart.

So far it looks like a nice renderer, but what about the rest. It is cool though :)

The crowd test video appears to have gameplay. Far from a game, but also more than just machinima.

"Specular bloom" ? Thats a new name. It's just "bloom" to me


Specular bloom is bloom around the specular effect (duh) giving a glowing sparkle to objects with a high specularity where they catch the light, rather than just making everything on the screen that is bright start to glow, which is what a normal bloom effect would do.

So, you could have a light coloured or brightly lit object but only the specular highlights would bloom.

You cant have the shader only pick up specular glow from object. Postprocessing is done in a way that you render to texture from whatever the camera picks up and then postprocess this.

The only way you could have bloom based on a specular map would be to have a special render with the scene HDR-ed in a way that everything is darkened and that specular shader reflections are brightened and then after this postprocess, add this texture to bloom and then put the result on add infront of the camera. That requires 2 renders and you would still not be doing much because there may be other bright parts which are not due to the specular map. It is possible but a very hard, unfeasable, uneconomic thing to do, so i doubt they did something like this. I've never heard of it being done, and it is not needed.

In the shot where it says "specular bloom" you can see that the bloom affects the sky on the left as well as it pierces through the arches and the light spreads over the dark areas. It all looks like regular bloom to me.

Really?



Looking at this image from their tech page, the Elf's sword is glowing brightly, but the bright blue sky beyond the window is showing almost no bloom at all, and the white sky on the left showing very little also.

The sword and white sky are all white pixels, yet the sword glows much more than the sky, suggesting some process other than a regular postprocess bloom taking place.

Therefore, if they are using the texture's specular channel to effect this glow, then it sounds like a reasonable description to call it specular bloom.

On the other hand, if it's some form of faked glow effect such as you would use a halo sprite around a light to effect a glow, then specular bloom is probably not the right term.

Also, to quote directly from the website -
Post processing notable features:
Post processing can be set up in the C++ code by "chaining" together passes. Any pass can be used as the input to another pass, allowing for elaborate effects
Post processing shaders can be created in the node based shader editor, just like any other shade


Sounds like you can setup the post process effects to take in account more than just the rendered scene - any pass it says - so the specular pass could be used as the input for the post-process effect.

Looking at this image from their tech page, the Elf's sword is glowing brightly, but the bright blue sky beyond the window is showing almost no bloom at all, and the white sky on the left showing very little also.


This is because in most bloom shaders you can set the sensitivity to brighter bright colours and darker bright colours. There is a "table" (ie float4x4) of varying detail that describes how a certain brightness of colour is amplified and "leaked" accross the screen. By setting this table as a sort of a spike, where certain higher values go "thru the roof" that means that anything above certain brightness will be completely white and thus also blurred more extensively (which is another pass in the shader). That sword looks like it doesnt even have a specular map on it but rather a form of diffused cube map which could be but doesnt have to be dynamic. Either way, it simply looks like the top of the sword is a substantially brighter than the blue sky above, talking without the bloom postprocess. And because it belongs in the "higher brightness" category it is blurred and amplified even further. In fact, why dont we just ask the creators what shader they're using, then you'll see. I doubt they would have a problem with showing us the code of the shader.

The sword and white sky are all white pixels, yet the sword glows much more than the sky, suggesting some process other than a regular postprocess bloom taking place.


Youre wrong in two places there. Firstly, the sky on the left isnt all white pixels, its 249,247,242 in that sample, while the sword is 255,255,255. The sky above is 217,234,241, AFTER postprocess. Secondly, what you're seeing is the postprocessed render. That means that the bright colours are amplified even further from the original and like i said, the brightest ones are distorted (go thru the roof) and thus the sword is amplified above 255. For example, a table may contain a sort of exponential brightness increase from 128 to 240. All pixels above 240 are postporcessed to 255. In this case it looks like the original sword is something around 245 and the sky would be say 230, so the brightness of the sky reaches an approximate 247 while the sword goes above max brightness and sticks at 255 so all pixels that were in that top range (in my example above 240 brightness) become 255 = ie fully white.

They probably call it "specular bloom" because they wanted to say how specular maps look cool with bloom which they do. Looks great! But a term "specular bloom" is wrong in the techincal way. Bloom takes up everything, lifts the whole scene. And you can see that the sky on the left has obvious bloom, that means that it does have bloom. So to have separate bloom on two objects in the same scene is unheard of, and it would require another render which means that FPS would have to go down by half in the first place. You have to understand that the whole scene has to be taken for bloom to work because the brightness of the sword for example spreads over the columns behind it. So you cant separate it like this, at least not easy and feasably.

"faked glow", "halo sprite" hahaha, where do you live? Dx7land? lmao. No matter how good, a halo sprite wouldnt look so nice, whatever angle it is "configured" for, or even if there are multiple halo sprites for multiple angles (never head of such a thing being used).

What you quote from the website is a common practice. Most engines can do that, and it isnt hard to code. They're just saying "you can have bloom and blur in the same scene" which is obvious. When you "input" to another pass that means you do a bloom first and then you output the pixel shader info only (not the vertex shader for example) then you can just use another pixel shader with the passed TEXTURE0 and COLOR0 and do the effect that it does.

so the specular pass could be used as the input for the post-process effect.


Now you said it. You should really learn what you're talking about. Specular pass IS a post-process effect. What are you on about? It is ONE OF the post-process effects. Let me teach you. When you render a scene you render it with shaders on objects. Shaders on objects can be specular maps, normal maps or bump maps, anisotropic material shaders, water shaders, etc. Those shaders output to the screen, they output to the pixel positions of where the object is. Postprocessing shaders are shaders like HDR or bloom, blur, night vision, heat vision, cell shading, etc. They take what was rendered to them in the normal scene (from the camera rendering to a texture) and use certain rules to modify this texture and display it on the screen.
Sounds like you can setup the post process effects to take in account more than just the rendered scene

Like i said, psot-process effects do NOT take anything else than the rendered scene by definition. It's what they DO. They take the firstly rendered scene and post process it by adding bloom for example. This rendered scene may contain previous "object shaders" such as specular, normal, water, etc. So you need to understand, specular maps and bloom work in different realms. Specular maps are applied to objects, bloom is applied to the texture which is rendered from the camera.

Shaders are pretty cool, you should learn about them. I've done limited learning for ColdSteel (but sadly we cant render to texture in it yet). I will give you loads of links to tutorials if you're interested, i think you should see them it's really cool what you can do.

I see that noone has even mentioned what the game is like, is it an extremely well rendered piece of steaming dog turd?

I see that someone hasn't read what this is. It's a tech demo for now, no release of any game with it. It's an engine they're making they hope to sell for FPS makers, and they may release an FPS with it on their own.

Ah, a tech demo or game maker. I see.


The only way you could have bloom based on a specular map would be to have a special render with the scene HDR-ed in a way that everything is darkened and that specular shader reflections are brightened and then after this postprocess, add this texture to bloom and then put the result on add infront of the camera. That requires 2 renders and you would still not be doing much because there may be other bright parts which are not due to the specular map. It is possible but a very hard, unfeasable, uneconomic thing to do, so i doubt they did something like this. I've never heard of it being done



*COUGH!* Maybe if you spent a bit less time writing and a bit more time reading...? ;P

Only kidding - I actually want you to spend more time writing... that stencil shadow system of yours. Go on - scoot!

Heh yea that does look good, nice work by Tim there.

In relation to this, i saw a util that converts some shaders to a more native OGL code. There it says why using certain way of coding in OGL (which looks a lot like what people use in BMax right now for 3d) is slow, and they have a converter that makes shaders possible at good speeds using these commands. Maybe i should have learned more about OGL and how to do this in max :)

Re: shadows, Yea, it's getting done. It has grown to a size that each time i start working on it i need 30 minutes to pick up where i left last time, resulting in me needing bigger and bigger chunks of time. Also due to the fact i didn't write it all by myself. But i have to admit i'm getting sidetracked by a few things :( new toys ... know how it is.

What, wow a massive (and very patronising) essay.

Like i said, psot-process effects do NOT take anything else than the rendered scene by definition. It's what they DO


Perhaps what they are suggesting is that their version of a bloom-filter is not in fact just a post-process effect. But I'm sure you know more than they do....

How can a bloom-filter not be just a post-process effect? What else can it be? An apple juice processing effect? The closest shader i've seen to per-object effect of that sort is the "fur shader", but making per object bloom would be too unrealistic. So it has to be post-processing. There isn't middle grounds, you know.


Yea, patronising is my middle name :( sorry. At least i know why nobody likes me.

when your shadow system comes out everyone will love you:)

How can a bloom-filter not be just a post-process effect?


As I said, it might not be effecting something as simple as a single post-process effect typical of a bloom filter - what I mean is, they suggest the effect can be applied as a post-process effect but with shader-specific results -

Post processing shaders can be created in the node based shader editor, just like any other shade


Any pass can be used as the input to another pass, allowing for elaborate effects


it suggests that more than a simple screen-wide post-process effect takes place - the specular channel of a certain material (defined in the shader) could be re-rendered as a post-process effect pass, creating a bloom effect only as a part of a certain material/shader, and not as an entire screen effect. Yes, it may require another render pass, but so what? It is described as an elaborate effect, thus probably requiring more rendertime.

This would explain how the elf's sword can have such an extreme glow, created as a shader but rendered as a material-specific post-process effect, but there is minimal glow around the background scenery.

If you want to render glow only on specular highlights, you could do that in Blitz without shaders.

All you'd need to do, basically, is render the scene twice.

The first render, you color all the objects black, but enable specular on those you want to have specular.

Then you copy this to a texture, and blur the texture.

Finally, you render the scene normally, with the objects colored normally, and with the specular still enabled, and overlay a quad over the screen with your blurred texture that contains only the specular elements.

You would probably want to render the first pass to a small window, for speed.

No, it isn't really possible and nobody in their right mind would halve the FPS for something that looks exactly like normal bloom which requires only 1 pass. That does look like normal bloom configured to "spike" high values. You have ignored everything i wrote up there. Great...

Node based shader editor. That means you make shaders for nodes (in blitz called entities) but they also include an option to see postprocess shaders on any object. You refuse to understand that postprocessing cannot be done on a single object. If you had a single sword rendered and scenery hidden, then the shader wouldnt be able to spread it's bloom over the background (like that wall up there) because the wall isn't rendered, now is it? ;) When i suggested that specular map reflections could be amplified in relation to the scene i said a stupid thing, because that doesnt make sence either so don't go on that. I dont have time to write another article on why that doesnt make sence. I was just making a point of how unfeasable it would be.

It's just a simple bloom effect. Period. It looks great. Period.

Yeah sswift, that has logic for blitz but things work considerably differently in shaders. They dont have to, but they do if you want speed and a good FPS. I'm not trying to be the smart guy around here, just discussing. :\


Yeah sswift, that has logic for blitz but things work considerably differently in shaders. They dont have to, but they do if you want speed and a good FPS.



Good FPS is relative, mind - if you can afford to render twice then you can afford to render twice, and with rather plain geometry being detailed by, say, dot3 these days (outside of B3D, of course) I'm guessing it's more likely to be affordable than ever before. That Gamasutra article seems to cover both methodologies, though, so I guess this is really just a case of settling into the process you're most comfortable with. If these things are available then you generally find yourself tinkering with them anyway - shaders don't really need evangelising I'd guess, purely because programmers like to explore new tech.


Node based shader editor. That means you make shaders for nodes (in blitz called entities) but they also include an option to see postprocess shaders on any object. You refuse to understand that postprocessing cannot be done on a single object. If you had a single sword rendered and scenery hidden, then the shader wouldnt be able to spread it's bloom over the background (like that wall up there) because the wall isn't rendered, now is it? ;)


It is not true that this isn't possible, and it's kinda what I was expressing back with my S\/\/ANKY water teasers when I said that it introduced masses of scene management. You can do all this stuff, but it costs (which at least validates some of what you've said about performance): Sticking with your example, one would render any scenery that obfuscates the object in question in such a way as to create a mask, then once you re-render normally and overlay the bloom everything would look dandy. Rendering a single object is a really bad way to think about the process - what you are actually doing is "focusing on" a particular object (or, indeed, collection of objects) and that means taking into consideration anything else that needs to be involved in the FX render.

EDIT: I think the swear filter went a bit mental!

Yes, that's correct when you are rendering to texture and then slapping the texture onto the screen like you do in blitz3d. But in shaders, with the vertex shaders you set things such as the position and colour of the vertex on the screen and then the pixel shader on top of that returns results PER PIXEL. So if you enable a shader for a texture of an object, the vertex shader will return vert positions of the object on the screen and then the pixel shader will fill out these pixels on the screen according to the formula. It generally only fills the part of the screen where the object is, and not around it. Meaning it will cover the pixels precisely covered by the object. You CAN have pixel shaders that only seem to "extend" the object outside of its "vertex space" to put it bluntly. An example is the fur shader. It shades the object like it has some fading depth around it with denser fur inside. But it actually only shades the pixels which the object itself takes up, the shape you would see if the object was completely white against a black background. So you can't have a real glow being cast from a shader applied to a 3d object because it would have to shade the pixels that are also around the object in the background. Instead you can only have such effects from a texture of the render result from a camera for example. You could then in theory use the vertex output to display the postprocess on a specified part of the screen but it would probably be obvious that it is a square that is different from the rest and wouldnt save you much speed anyway. So any talk about per object bloom is not feasable with shaders.

If a fur shader can have the appearance of shading an area around an object, but not really do so, then why couldn't you do the same trick as you do with toon-shading to create outlines, and make a second expanded copy of an object around the original, and use that?

I'm not sure i understand what use that would be, creating a second expanded copy? If you mean for toon shading, there is a shader for that already. If you mean for glow effect then it wouldnt really be a gradient glow would it. But generally speaking drawing the same object twice means again halving the framerate, while on the other hand if you know how to handle shaders propperly you can do anything you want by coding them yourself and it will still be more efficient than using the mentioned blitz3d tricks, even for extremely complex shaders (such as fur).

halo is just jelous he isn't as talented as their main programer, aint' that right halo :P

these guys seriously rock, I know one of the artists since 5-6 years ago, and I'm glad to see him doing this.


Just watch this video:

http://www.projectoffset.com/media/g4tv.wmv


it's interview with the main programer, who is only programmer on the team. this guy is really talented.

halo, it transpires, is of the female persuasion ;)