Panmmo


Eniko said:
Cloudef said:
You are going to use TCP protocol? Good luck with that.. I guess only popular (massive)MO doing that is WoW.
There's tons of MMOs that use TCP. Ultima Online, World of Warcraft, Dark Age of Camelot (with some UDP for movement I believe), Mabinogi, Lineage 1, Ragnarok Online, Guild Wars, Anarchy Online, Age of Conan, Phantasy Star Online/Universe and a whole slough of smaller, older and lesser known MMOs and online games.

I don't know why so many people seem to think that online gaming and TCP means instant lag, because it's basically false, so it's a moot problem to begin with; you pick the tool you need for the job at hand. I won't be making a supertwitchy MMO anyway, so I don't need the small amount of extra oomph UDP would give me.

I am however only a single person doing all this, so I don't have the time to write extra features (that are already built into TCP) onto an UDP layer to gaurantee the game won't break and everything is secure. And even if I did have the time to do that there is no reason to believe that I could somehow write a better mini-implementation of TCP (since that's what I'd basically be doing) than the professional network engineers who wrote TCP in the first place.

It doesn't mean that. But heck, really I would only use TCP for reliable packets. And depend on UDP for everything else.. It may work fine for not-so large scale, but when you use Pandora with limited wifi and lots of connections the packet drops are going to be pain for everyone.
 
Last edited by a moderator:
So, proof of concept for the 3d rendered sprites thing. I've been working on a character model and today I got it rigged and did a rudimentary render to test if this is even possible:

3dsprite.gif


Rendered on the left, hand drawn pixel art on right for comparison.

Mind you I rendered this in Blender, and I'm no Blender guru so I didn't have that much control over the colours, lighting and how it comes out. If I program my own shaders the result is probably going to be a bit more impressive. But at least now I know this is possible. Best thing too is that this is just a low-poly model with per pixel lighting, which means I'll only need textures for details, which means I'll need far less memory for textures.
 
Cloudef said:
It doesn't mean that. But heck, really I would only use TCP for reliable packets. And depend on UDP for everything else.. It may work fine for not-so large scale, but when you use Pandora with limited wifi and lots of connections the packet drops are going to be pain for everyone.

I have no trouble playing TCP games on crappy internet/Wifi, this isn't 1999 bro.
 
Last edited by a moderator:
Awesome to see you are still planning to do the MMO.

I'd love to help out a bit, but I can't code or anything, so if you need somebody to help out with the story or whatever you have planned, or testing I'd be happy to help!

Good luck on the sprites and the other project :)
 
Eniko said:
So, proof of concept for the 3d rendered sprites thing. I've been working on a character model and today I got it rigged and did a rudimentary render to test if this is even possible:

3dsprite.gif


Rendered on the left, hand drawn pixel art on right for comparison.

Mind you I rendered this in Blender, and I'm no Blender guru so I didn't have that much control over the colours, lighting and how it comes out. If I program my own shaders the result is probably going to be a bit more impressive. But at least now I know this is possible. Best thing too is that this is just a low-poly model with per pixel lighting, which means I'll only need textures for details, which means I'll need far less memory for textures.

Looks nice.

-God Ginrai
 
Last edited by a moderator:
Eniko said:
Stuff I don't know about; what the Pandora/OpenGL ES can do 3D wise. Can it basically do anything a desktop can do, just...a bit more slowly? Should I hold my breath for normal mapping which would be a great improvement to cell shading quality, or should I be complacent with per-pixel-lighting? How does texture memory work, is it just the device's general RAM? Will I need vertex buffer objects? Where are those kept if I do? If it's all in shared memory space, is there any improvement using VBOs over simply "uploading" everything to "the graphics card" every frame? Can the Pandora render-to-surface? Are pixel/fragment shaders going to be blazing fast like they are on desktops, or am I going to have to spend tons of time optimizing those to make everything run at proper speeds?

OpenGL ES 2.0 throws out most of the fixed functionality of OpenGL 2, so you have to use shaders for everything. From what I've read, VBOs are still the only really viable option performance-wise. As best as I understand it this is because of driver/draw call overhead more than moving things around memory. It might also have something to do with synchronous vs asynchronous updates. Render to texture/FBO/etc works, but my guess is that it'll cause multiple passes which can work against the efficiency of a TBDR. Not saying it's not viable or anything, just something to look out for. Fragment discard is also really expensive, so you should look out for that while doing your sprites and see if you can't do alpha blending instead (unfortunately, will require sorting).

If you render at 800x480 I think you'll find you only have a handful of cycles per-fragment for shading. You can do normal mapping in fragment shaders, but it might overwhelm your shader budget. This may not be a big deal if it just applies to sprites which don't take up a ton of screen real estate, but it might also be a reason to consider targeting 400x240.. which I imagine will look not at all bad for the kind of look you're going for. Also probably want to target locking at 30fps.
 
Last edited by a moderator:
Thanks Exophase, that's useful information. I'll have to read up on this TBDR thing to figure out how I can get the most out of it. Fortunately it seems like normal mapping won't be required, so it doesn't seem like that'll eat up my budget. The bigger problem then - it seems - would be outline shading.

Using 2D full screen post processing seems like it's straight out. I'd have to render the colours, normals and depth into separate buffers, then do another pass (or more than one even) merging all of those into the actual backbuffer. I may be wrong but it sounds like this isn't a viable approach at all for the Pandora, even if I limit it only to mobiles. Sounds like for the Pandora drawing the model again fattened up with reversed normals would be more feasible.

I kinda hope I'm wrong here but it seems like counter to what you expect on desktops more tris and less fillrate is better.
 
a couple of words on cell shading et al:

* consider what you want to do for the edges - your options are post-processing (edge-detection filters) or hull extrusion. the former is the overal-better approach (more flexible, etc) but it requires rendering to texture. the latter is relatively cheap - comes at the cost of some more vertex work and an extra drawcall per object.

* don't be afraid of normal mapping - the fragment shader takes just an extra texture lookup (i.e. the normal map lookup). the vertex shader does not need to be much more complex either, given you'd normally use your light sources in object space - it's one more transform from there to tangent space. skinning can tax your vertex shader a bit there, as you apparently should skin at least one more vector to form the tanget basis (and that's num_bones X transformations per vector), but with good vertex counts you'd be skinning w/ normal mapping at no time.

ps: reading this thread so far makes me glad with the amount of people who are trying to get the hang on 3D on a budget - carry on guys & gals, the rewards are worth it! : )
 
Eniko said:
Stuff I don't know about; what the Pandora/OpenGL ES can do 3D wise. Can it basically do anything a desktop can do, just...a bit more slowly?

Pretty much ... the "a bit more slowly" part is a bit misleading though ... if you were to take a decent Nvidia card and run it at 800x480 it would probably run about 100x faster in terms of basic fillrate/vertex throughput so you gonna have to cheat ...
 
Last edited by a moderator:
darkblu said:
* consider what you want to do for the edges - your options are post-processing (edge-detection filters) or hull extrusion. the former is the overal-better approach (more flexible, etc) but it requires rendering to texture. the latter is relatively cheap - comes at the cost of some more vertex work and an extra drawcall per object.
Yep. I'm going to have to see if/how feasible using edge detection will be. Right now I'm betting on worst case scenario for proof of concept stuff, so that would be hull extrusion. It's likely I'll have a tiered outline approach anyway; in an MMO you cannot control how much is on screen at a same time and events can bring normally stable clients to their knees (if the servers don't buckle first). So it's possible, depending on outline quality, that the client will automatically shift to less complex methods.

I believe there is a way to do single pass outlines too by checking if the normal of a fragment is sufficiently pointing away from the camera and then adding a black pixel there. I suppose that could be the final tier, but I don't have high hopes for quality, particularly as I'd have to hull extrude the base model in the vertex shader to make up for losing inside pixel space.

darkblu said:
* don't be afraid of normal mapping - the fragment shader takes just an extra texture lookup (i.e. the normal map lookup). the vertex shader does not need to be much more complex either, given you'd normally use your light sources in object space - it's one more transform from there to tangent space. skinning can tax your vertex shader a bit there, as you apparently should skin at least one more vector to form the tanget basis (and that's num_bones X transformations per vector), but with good vertex counts you'd be skinning w/ normal mapping at no time.
Before I respond to this, first... more shiny graphics!

3dsprite2.gif

3D rendered on the left, hand drawn sprites on the right for comparison. This is using a very simple shader and I quite like the results. The outline was created through hull extrusion, which doubles the tris from ~1k to ~2k. The result is definitely passable though.

The shader used here uses some very basic per pixel lighting (dot product of the light and the normal) and then tiers the intensity, and I think the results are pretty nice for such a low poly model. So I don't expect to be using normal mapping on the Pandora, as at this resolution it's really not necessary. Normal maps might be relatively inexpensive but they still require texture state changes (very expensive) and extra memory. It may be added as an option (turned off by default) if I decide to add it for desktops anyway, though.

The nice part is that so far I'll only need textures for small details. The whole body can be done with simple vertex colours. I might be able to stuff a lot of the details that do need textures (like the character's eyes, decals on clothing, things like that) into a texture atlas that combines a lot of very tiny textures, and require extremely few texture state changes while rendering mobiles.

So I'm feeling pretty good about getting all of this running at a stable speed on the Pandora so far. :)

Bonus: I created a rotating animated gif of the character base.
3dsprite-rotating.gif


In the stills it's easy to pick out distracting flaws in some of the pixels, but in the wild the model would probably never be completely still. The gif is to see if - when animated - the flaws become less apparent, which they do to me. I hope shimmer won't be too much of an issue though. A lot of that comes from the outlines, I think, and if I'm not married to using hull extrusion the actual results will be much better.

But even with this level of quality, I'm quite confident I can make this game look kickass.

And as a last bit of news, it's likely that someone I know and trust will be helping out with the 3D modelling when I figure out what the actual specs and budget are, freeing me up to do more environmental texturing work and coding.
 
Last edited by a moderator:
good job with the modelling & shading, Eniko.

FSAA will be your best friend when getting hull extrusion to look better.
 
Let me know if you need any help on the project, I can model pretty much anything in 3Ds Max (no complex characters), and can texture using Photoshop.
 
Eniko said:
Thanks for the offer for help. Right now though, I'm not even working on PanMMO in lieu of Onee-sama Tasukete! :)
I understood everything up to "lieu of Onee-sama Tasukete!" :)
 
Last edited by a moderator:
TylerAW said:
Eniko said:
Thanks for the offer for help. Right now though, I'm not even working on PanMMO in lieu of Onee-sama Tasukete! :)
I understood everything up to "lieu of Onee-sama Tasukete!" :)

Onee-sama Tasukete is the beat'em up game that Eniko is working on. Because she is working on that game, this game will be on the backburner for a while.

-God Ginrai
 
Last edited by a moderator:
Back
Top