Beat Attack [prototype] - One-button two-player rhythm puzzle combo heaven!

Comments


  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    Tuism said:
    if there was a way to "simulate" the frame rate and speed of iOS while compiling and playing on desktop
    If you are using Time.deltaTime in a standard Update loop, (and if you're not, you really need to learn how to! All game updates should *always* be frame-rate independent!!!), then you can set the maximum framerate in Unity via Application.targetFramerate (ie. -1 means as fast as possible, 10 means 10fps, etc.).

    Alternatively, if you're using FixedUpdate (which like was said above, is generally used for consistent Physics updating), then you can adjust the frequency to be less in Edit->Project Settings->Time->Fixed Timestep.... setting Application.targetFramerate will also affect the maximum frequency in which FixedUpdate is called as well.

    Remember though, even if you want FixedUpdate to run at 50ms (0.02), if your application's frame time takes longer than that to update and render, you're going to get messed up as no matter what you do, your app cannot time travel :)
    Tuism said:
    my iPad 2, which is obviously not the fastest hardware these days
    iPad 2 is actually still one of the best graphically performing devices out there when comparing GPU power to pixels rendered. It's going to lag behind in terms of CPU compared to more recent devices, but in terms of pushing pixels when comparing apples to apples, it's still right up there.

    As for general mobile performance, your 2 killers ARE ALWAYS going to be 1) DrawCalls (if you're > 150 you're doing it wrong!!!) and Fillrate (more than 2 or 3 full screens of pixels are likely going to hurt you, depending on your shader complexity->doubly so if they are alpha blended pixels).
    critic said:
    Well if you are updating the position of your polys 3 times per draw instead of once it can have an effect
    You're only every going to get any benefit of greater physical updates vs. visual updates when you're talking physics integrations or collision detection. For merely updating visual items, one update per render is always going to be sufficient; any more and you're just wasting CPU cycles that could let you get another few Drawcalls out :)

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Thanks everyone for your inputs!!! :D It's been super valuable, and now I know a bit about draw calls :D Thanks @elyaradien for a super helpful call last night :)

    Last night I took a snapshot of my game stats while running:
    image

    And today's results:
    image

    Yay! So what I did between the two:

    1. Changed all the blocks geometry to sprites (they're pretty much ugly placeholders for now :P)
    2. Deleted two lights that were unnecessary (they were providing the shading in the gems because they were 3D), left one light to light the two models in the background.
    3. Changed most things from FixedUpdate to Update (there was one or two things I couldn't move because they were game-breaking but I need to fix that eventually)
    4. Implemented the lerp with deltatime thing (@kobus your formula appears to be wrong? I eventually just went with a * time.deltaTime thing without the division and it works)

    So now it runs fairly ok on iPad, but still lags when things get full... Though it's still playable. Is it actually still a graphical bottleneck, or is it now computational? How do I tell on iPad?

    I have an idea of what to still do for performance, but these are harder and will take longer:

    1. Convert the system to Grids (I'm currently using my own system that uses blocks' xy positions to calculate their position in their 2D array... Which is probably terrible)... I've started with this but Unity Grids is kinda hard to get to grips with so I'm stuck :P
    2. Pre-create all instances of the blocks (and popping particles?) instead of instantiate/destroying them <-- is this a major thing? It'll be a hectic system to implement :/
    3. Simplify the 3D models in the background by rebuilding them and UVing + texturing them.

    Slightly concerned that even in a stripped-down version it's straining the iPad2, I still have yet to put in stuff like backgrounds and more pretty things, which I want to, eventually. Is this just iPad2's limitation and I can't hope too much from it?

    Are there anymore things to watch out for?

    You guys are the bestest :)

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Tuism said:
    Is it actually still a graphical bottleneck, or is it now computational? How do I tell on iPad?
    Only way to really know is to use either the Editor Profiler (you need Pro) or at least, the Unity Built In Profiler.



  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    Tuism said:
    Slightly concerned that even in a stripped-down version it's straining the iPad2, I still have yet to put in stuff like backgrounds and more pretty things, which I want to, eventually. Is this just iPad2's limitation and I can't hope too much from it?
    As @AngryMoose said above, the iPad 2's actually pretty excellent target hardware. At the time of release, it was one of the best performing devices for Bladeslinger, and we managed to squeeze quite a lot out of it from a graphics perspective.

    Basically, to reiterate on what @Elyaradine said, you can't really guess when it comes to performance stuff. There is only one hard rule, and that's to measure first, then fix what is ACTUALLY slow. There are good practises in literally every domain of game development that affect things, but the degree to which they do varies based on what your actual bottlenecks are, and what kind of game you're making. I recognise that's not necessarily useful advice in this case, but them's the breaks.

    So short answer is, run it through the profiler. If you don't have Unity Pro, now's a good time to buy it. The profiler is literally the most important reason to have Pro, perhaps second only to getting rid of the Unity splash screen and giving your product that extra professional touch. If you HAVE Unity Pro and you need help interpreting that stuff, feel free to PM me and I'll help where I can.

    EDIT: Ninjaaaaed

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    3. Changed most things from FixedUpdate to Update (there was one or two things I couldn't move because they were game-breaking but I need to fix that eventually)
    You want to fix this now, probably before any more performance work. Having your object updates incorrectly split between Update/FixedUpdate can result in artifacts that _look_ like performance issues visually, but actually aren't.

    +++ on measuring before "fixing", chances are you're "fixing" the wrong thing. First step here is @angrymoose's suggestion of the text logging profiler, at least you'll get an idea of if CPU or GPU is your bottleneck. It's still not going to be nowhere near as good as having the Pro profiler, but it'll narrow your search down a bit.
    2. Pre-create all instances of the blocks (and popping particles?) instead of instantiate/destroying them <-- is this a major thing? It'll be a hectic system to implement
    So as much as I agree with measure before you fix, at some point (soon) you should probably look at pooling these objects (have a system that creates the objects if asked for one and it's not available, and then recycles them once they're no longer in use). If for no other reason than these are probably going to lead to nasty occasional hitches even if you do get the rest running smooth as butter. This is an allocation thing, and unlike the CPU/GPU determination, the only way you're really going to get an idea of how bad your per per-frame mem allocations are is the profiler.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Thanks for another round of great input! I'm using the built-in profiler for now to see how far I can get. As for getting Pro, I think that I'll eventually have to get it. Eventually... But for now I want to keep my costs down... Is that wise or not so wise? (opinion time!)

    On the built-in profiler, I have a question for you guys, this is an example of the output:

    iPhone Unity internal profiler stats:
    
    cpu-player>    min: 77.3   max: 86.7   avg: 81.2
    
    cpu-ogles-drv> min:  5.1   max:  8.3   avg:  6.7
    
    cpu-present>   min:  0.7   max:  3.2   avg:  1.5
    
    frametime>     min: 83.6   max: 97.2   avg: 89.8
    
    draw-call #>   min: 142    max: 213    avg: 180     | batched:   245
    
    tris #>        min:  6292  max:  9670  avg:  7032   | batched:  4332
    
    verts #>       min: 11009  max: 17765  avg: 12490   | batched:  7033
    
    player-detail> physx:  6.0 animation: 52.0 culling  0.0 skinning:  0.0 batching:  4.5 render:  9.5 fixed-update-count: 4 .. 5
    
    mono-scripts>  update:  6.5   fixedUpdate:  1.1 coroutines:  0.0 
    
    mono-memory>   used heap: 372736 allocated heap: 524288  max number of collections: 1 collection total duration:  1.6


    I checked it against Unity's documentation on it (http://docs.unity3d.com/Manual/iphone-InternalProfiler.html), and I found a few things missing, like cpu-waits-gpu... Which I understand as the prime number to look at while trying to figure out if the bottleneck is with the cpu or gpu? Or does the number's absence mean it's zero and the gpu is always waiting on the cpu?

    Or, is there some kind of setting I'm missing that would show that number? I can't find it :/

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    Tuism said:
    player-detail> physx: 6.0 animation: 52.0 culling 0.0 skinning: 0.0 batching: 4.5 render: 9.5 fixed-update-count: 4 .. 5
    That there is an enormous problem. I can't imagine what it is you're doing that causes this, but 52ms spent updating bones is far, far more than any game can manage. For something so timing-heavy, you're going to want to reduce your ENTIRE frametime to sub 16ms, so that it's as smooth as it can be.

    Focus on this. Once you isolate and fix the cause, it will likely affect the profiler in other ways, in which case you can sample again and see where new bottlenecks arise. There are other red flags in the data there, but with optimisation, you should always focus on the biggest hits first, because once they're resolved, some other bottlenecks can fall away, and new ones can appear.

    Are you using Unity animations heavily? What for? Could you do whatever it is you're doing here in some other way?
    Tuism said:

    I checked it against Unity's documentation on it (http://docs.unity3d.com/Manual/iphone-InternalProfiler.html), and I found a few things missing, like cpu-waits-gpu... Which I understand as the prime number to look at while trying to figure out if the bottleneck is with the cpu or gpu? Or does the number's absence mean it's zero and the gpu is always waiting on the cpu?

    Or, is there some kind of setting I'm missing that would show that number? I can't find it :/
    The lack of the number means the CPU's likely not waiting on the GPU ever. With your 90ms frametime (~11fps), I can't imagine that will ever happen, so that's why you're not seeing it.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    Ignore me. @chippit is too fast

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    At this point, although I know nothin' 'bout nothin', allow me to reiterate the suggestion I made on Twitter a while ago to use position and rotation lerps to wibble the head models around programmatically, rather than using the bloated animation system. :P

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Tuism said:

    cpu-player>    min: 77.3   max: 86.7   avg: 81.2
    frametime>     min: 83.6   max: 97.2   avg: 89.8

    Woah. Yeah. 12fps be slow for a puzzle game! No reason that you should be able to to 60fps for what you're doing, even on 4 year old hardware. You're 100% definitely CPU bound.
    Tuism said:

    cpu-ogles-drv> min:  5.1   max:  8.3   avg:  6.7
    draw-call #>   min: 142    max: 213    avg: 180     | batched:   245

    This is your Drawcalls coming to bite you. iPad2 DCs should be <= 80 for it not to affect the CPU. You're going to need to make sure you're batching properly, which means sharing materials efficiently, and not changing material properies of individual objects which will then break the batching.

    BATCHING IS ONE OF THE MOST IMPORTANT REALTIME GRAPHIC CONCEPTS TO UNDERSTAND AND MASTER IF YOU WANT A PERFORMANT GAME ON MOBILE!!!

    Tuism said:

    player-detail> physx:  6.0 animation: 52.0 culling  0.0 skinning:  0.0 batching:  4.5 render:  9.5 fixed-update-count: 4 .. 5

    Physics? What are you doing physics-wise? Ahhhh... I bet you have a lot of Static Colliders being moved around every frame don't you? Make sure that isn't happening! So if you have Colliders on all of your blocks, and you're moving them around all of the time, Unity (Physx) is going to be doing a lot of re-calculations of it's physics system.

    Animation? I've never, ever, EVER, EEEEEVVVVEEEERRRRRR!!!! seen 52ms taken up by animation. Ever. Woah. You're doing something fundamentally wrong there for sure... not sure what you're animating... do you have like, 67000 bones in each of your characters?? Does each of your blocks play an animation constantly? Possibly 37 each?

    This is your big issue. Fix this before anything. This should be like 1 to 3ms. Tops. For a character game with 6 3000 vertex skinned characters fighting each other.
    Tuism said:

    mono-scripts>  update:  6.5   fixedUpdate:  1.1 coroutines:  0.0

    That's on the high side for the update loop of a puzzle game. You're likely doing some intense math or logic that you don't need to. This shouldn't be more than 2-3ms tops really, unless you're doing something cray cray.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    "updating bones"... Eh? I'm not sure what that means, what contributes towards that number?
    Mecanim animations? Is there a wrong way of doing the animations? Is it wrong to animate each sprite separately in mecanim? Do tweens of big value changes make things slow?
    Particles?

    I use unity animation (mecanim and the dope sheet things, right?) in these instances:
    1. The two heads animating in the background.
    2. When a block is lined up to destroy itself, doing that scaling animation.
    3. That big diamond in the background animating once per beat

    I think that's it for now. I don't know if these count as animation?:
    1. Trails?
    2. Tweens by maths (lerping and such)

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    So if I understand you correctly, every single block has an animation/animator component on it? If this is the case, and you're not already doing this, make sure you TURN OFF the component when it's not actually playing anything ,and then turn it on just for its destruction animation. I can't say that this is necessarily your problem, but I don't imagine having a huge number of those idling about is a good idea.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    iTween is great form animation tweens

    http://itween.pixelplacement.com/

    So you can replace the mecanim animations with it

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    petrc said:
    iTween is great form animation tweens
    NNnnnnnnnoooOOOO000oo000oo000ooOOOOO!!!!!!!

    Avoid iTween like the plague. There are other, better Tweening libraries that you can use for Unity that don't generate constant garbage like iTween does. If you don't keep tabs on garbage generation early on in your mobile title's life, you're going to have major issues trying to clean it all up when it comes time to ship your game without constant GC hitches.


  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Why does everyone keep recommending iTween!? It's an absolute performance nightmare (despite the author's claim to the contrary).

    Literally second google hit on "unity tweening library performance": http://dentedpixel.com/developer-diary/leantween-speed-comparison-to-itween/

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Calm down guys. I wasn't trying to give you a stroke.

    I've used itween before and didn't have any gc issues with it.

    But thanks for the shout, I won't use it again. leantween looks like the way to go.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Yeah we (me and @loet) used iTween when we were making Dead Run, and it literally was responsible for the game being unplayable on mobile for the first month of testing before we tossed it.

    So *that* I get :)

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    Thanks to your guys' insights, amazing people, here are the latest results:

    iPhone Unity internal profiler stats:
    cpu-player>    min: 26.7   max: 30.2   avg: 28.5
    cpu-ogles-drv> min:  7.4   max:  9.1   avg:  8.3
    cpu-present>   min:  0.7   max:  3.0   avg:  1.1
    frametime>     min: 35.7   max: 42.4   avg: 38.2
    draw-call #>   min: 230    max: 265    avg: 248     | batched:   173
    tris #>        min:  5192  max:  7206  avg:  5834   | batched:  3175
    verts #>       min:  8693  max: 12721  avg:  9977   | batched:  4617
    player-detail> physx:  2.2 animation:  0.4 culling  0.0 skinning:  0.0 batching:  3.8 render: 13.5 fixed-update-count: 1 .. 2
    mono-scripts>  update:  6.0   fixedUpdate:  0.8 coroutines:  0.0 
    mono-memory>   used heap: 430080 allocated heap: 786432  max number of collections: 0 collection total duration:  0.0


    animation went to 0.4 because I turned all the animators off, which is amazing. I'll make another build later where I turn them back on and see what happens. Right now the game runs much smoother, BUT, I'm getting quite big swings between lag and non-lag, while the game catches up between dropped frames, feels like it happens more noticeably than before.

    So the next project is A) Grids and B ) Pooling :/

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Calm down guys. I wasn't trying to give you a stroke.
    Can't calm down.. the iTween scars are still just too fresh O_o

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    I'd address the draw calls first, since they're around 3x what you'll want them to be. I'd get rid of the light and the shaders that use lighting. (Can add them back to look almost identical, but much cheaper, later.)

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    That's looking way better!

    I don't think you'll gain much from pooling at all. They're not necessarily going to make any of your update times any shorter. Pooling will reduce your GCs, but it looks like that's not even a big problem for you (sub 2ms GCs are pretty fast), probably given the relative flatness of your heap. Using Grids might not help you much either, unless its flexibility allows you to perform new optimisations that are not trivial to do with your current architecture (whatever that is).

    Next I suggest that you want to look into what @Elyaradine is saying. If you ARE using realtime lighting, that practically doubles your draw calls (or worse). You can very easily replicate the 2D lighting look without that cost, and it should help bring your render time down a LOT. Make sure you have things like shadows disabled everywhere too.

    Once that's been taken care of, the biggest thing remaining is the comparatively high 6ms script update, which suggests your scripts are probably doing a whole lot more work than they should. Optimising this without the Unity profiler will be VERY difficult, though. This is also the part where optimisation quickly becomes VERY technical and complicated.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    @Chippit @Elyaradine thanks :D

    Just wanna confirm something with you, you said that pooling and grids won't gain me much benefit, but you then also said that the 6ms script updates are doing a lot more work than they should, to me, that seems contradictory, or am I missing some vital bit of understanding on this?

    I'll give dismantling my lighting a shot and see what benefit that gives. I keep hearing about baked lighting but I'll leave that kind of stuff till later. Alternative ways of simulating 3D would be A) Using UV textures to paint darker/lighter shades in B) Using some kind of shader magic to calculate a colour according to angle of a face's normal to the camera - would these be a lot faster than running lighting, basically speaking?

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    @Tuism: Speaking as sort of a non-programmer here, so I may be wrong, but there are countless dumb things you can do in your scripts that make them slow. Using pooling or Grids may or may not help for the reasons @Chippit mentioned above, but it's possible (and pretty likely) that there's something silly that you're doing elsewhere in your code.

    Check if there are things that you're doing in your Update() that don't have to happen every frame, and add conditions so that large blocks of more expensive code only run if that really have to.

    But definitely do the draw call thing first, because that's probably still the biggest bottleneck.

    And yeah, you'd either texture your model to have those different planes of colour, or you'd write a shader that just brightens/darkens a surface depending on where it's facing. I imagine you'd rather go for the latter, because that'd change the brightness as your models move, as opposed to the texture where it stays the same no matter how your model rotates. I'd also probably rather have the shader use the angle between the normal and the world-up direction rather than the camera (because that's closer to what you've got right now), but I guess that's more of an artistic/stylistic decision. And yeah, the Unity shaders do a bunch of extra stuff when they're doing lighting, and you're not really in control of what those are. They may or may not be taking a light colour, or be catering for different types of lights, or be doing light attenuation, or be checking for lightmaps or light probes, or be doing shadow calculations and rendering to a shadow map, or a bunch of other things... where your custom shader could just checking for one dot product.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Tuism said:
    Just wanna confirm something with you, you said that pooling and grids won't gain me much benefit, but you then also said that the 6ms script updates are doing a lot more work than they should, to me, that seems contradictory, or am I missing some vital bit of understanding on this?
    So neither pooling nor using the grids API are magic bullets that are going to make your game run faster. Chances are very likely that both of them will INCREASE your code overhead, in fact.

    Pooling is generally a more complicated manner of managing objects that are created frequently. This isn't going to make your scripts execute much faster (if at all faster). What it really achieves is minimizing allocations, which means the garbage collector is going to run less frequently, meaning you're going to get fewer GC hitches when it has to collect. Judging by your previous few pastes (which aren't authoritative by any means, mind you) your GCs are already fairly infrequent, and they're also executing (fairly) quickly. GCs will cause frame time spikes, but they might not even be noticeable. Pooling will only really help with these, nothing else.

    As for Grids, this is a remarkably advanced and complex API we're talking about. It's incredibly flexible, it'll potentially make some of your tasks easier to manage and more elegant to handle, but it's almost certainly more likely to make your script execution time SLOWER rather than faster, simply by virtue of bringing in and interfacing with far more complicated systems than the ones you're likely to have written. Perhaps Herman might be a bit upset at me for saying that, because using it will almost certainly make your life easier (and his life happier!), but it's probably way too late to make use of it anyway, since your game is already working. You'd have to restructure quite a lot of things to make use of it, and technology like this isn't something you want to bring in once you already have the mechanic working. It's something you want to use to facilitate the creation of that mechanic, not necessarily to refactor an existing mechanic into.

    I should also disclaim at this point that I use Grids in two separate projects, and it's certainly saved ME from having to write a whole load of stuff myself, but in both of those cases, the technology was there from the start.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281

    Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    edited
    I've taken away all lights and materials that use lighting (and found a 2-line shader that's "No Texture"... Works pretty well, obviously loses all shading.), and here are the latest results:

    iPhone Unity internal profiler stats:
    cpu-player>    min: 14.9   max: 32.3   avg: 17.2
    cpu-ogles-drv> min:  4.2   max:  5.3   avg:  4.4
    cpu-present>   min:  0.7   max:  3.4   avg:  1.2
    frametime>     min: 24.9   max: 48.7   avg: 33.3
    draw-call #>   min: 128    max: 134    avg: 130     | batched:   202
    tris #>        min:  4752  max:  5070  avg:  4938   | batched:  3450
    verts #>       min:  7809  max:  8343  avg:  8105   | batched:  5079
    player-detail> physx:  0.8 animation:  0.6 culling  0.0 skinning:  0.0 batching:  3.7 render:  5.2 fixed-update-count: 1 .. 2
    mono-scripts>  update:  4.9   fixedUpdate:  0.0 coroutines:  0.2 
    mono-memory>   used heap: 425984 allocated heap: 524288  max number of collections: 0 collection total duration:  0.0


    The draw calls seems to have about halved from the previous one, and the scripts also seems shorter by about 1 (I checked against outputs throughout runtime and it seems to be consistently around this value).

    I'm pretty sure there are some particles and things I can still simplify further... Time to delve into my code to optimise like a good little dev, though it's already running a hundred times better now than before :D Thanks guys!

    And further down the line I'll look into the faking the lighting according to global up shader... I tried to do something according to ye olde shader tutorial thread but I couldn't get my head around it right now...

    Oh, the base shader I found, in case anyone's interested:
    Shader "Texture Only"
    {
    Properties { _Color ("Base Color", Color) = (1,1,1) _MainTex ("Texture", 2D) = "" }
    SubShader { Color[_Color] Pass{ SetTexture[_MainTex] {Combine texture * primary} } }
    }

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Would be nice to halve them draw calls again, but I'm not sure where I'd look next without playing around with your scene.

    --
    Could try something like this shader for your 3D geometry. If you keep your models pretty blocky, this should be fine I think. There are a bunch of things that are exposed there to help with customising to get the look you want, but if you're not using them, you can take them out.

    Shader "Custom/FakeLight" 
    {
    	Properties 
    	{
    		_MainTex ("Base (RGB)", 2D) = "white" {}
    		_Color ("Base colour", Color) = (1,1,1,1)
    		_LightCol ("Light colour", Color) = (1,1,1,1)
    		_ShadowCol ("Shadow colour", Color) = (0,0,0,1)
    		_LightDir ("Light direction", Vector) = (0,1,0,0)
    	}
    	
    	CGINCLUDE
    	#include "UnityCG.cginc"	
    	
    	sampler2D _MainTex;
    	fixed4 _Color;
    	fixed4 _LightCol;
    	fixed4 _ShadowCol;
    	half3 _LightDir;
    	
    	struct v2f {
    		half4 pos:		SV_POSITION;
    		half2 uv:		TEXCOORD0;
    		fixed4 tint:		TEXCOORD1;
    	};
    	
    	v2f vert(appdata_base v)
    	{
    		v2f o;
    		o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
    		o.uv = v.texcoord.xy;
    		
    		half3 norm = normalize(mul((half3x3)_Object2World, v.normal));
    		half3 up = normalize(_LightDir);
    		half lookup = saturate(dot(norm, up));
    		
    		o.tint = lerp(_ShadowCol, _LightCol, lookup) * _Color;
    		
    		return o;
    	}
    	
    	fixed4 frag(v2f i):COLOR0
    	{
    		fixed4 tex = tex2D(_MainTex, i.uv);
    		return tex * i.tint;
    	}
    	
    	ENDCG
    	
    	SubShader 
    	{
    		Tags { "RenderType"="Opaque" }
    		LOD 200
    		
    		Pass
    		{
    			CGPROGRAM
    			#pragma vertex vert
    			#pragma fragment frag
    			#pragma glsl_no_auto_normalization
    			#pragma fragmentoption ARB_precision_hint_fastest
    			ENDCG
    		}
    	} 
    	FallBack "VertexLit"
    }

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Just watch that Fallback... it's going to go to a (relatively) expensive lit shader, instead of say, Mobile/Unlit which is probably better... though, even more likely in this scenario would be to kill that Fallback line entirely; you don't really need to 'fall back' to a cheaper version of this shader in reality :)

    Also, have I taught you nothing @Elyaradine!?!?! In vert(), you can get away with fixed3 for the 2 normalized normals used for the lighting dot product :P

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Yeah, @Elyaradine. Jeez.

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    *opens up @Elyaradine's shader*
    *control+F*
    *vert()*
    *replaces half3 with fixed3*
    *runs*

    STILL WORKS OMG

    *feeling of accomplishment*

    Thanks a mill guys, you guys are just too awesome for words ^^

  • Notice: Undefined variable: GuestHourOffset in /home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php on line 281
    Also, have I taught you nothing @Elyaradine!?!?! In vert(), you can get away with fixed3 for the 2 normalized normals used for the lighting dot product :P
    Gah, they weren't normalized until later, and and and and

    T_T
Sign In or Register to comment.

Debug Trace

Info Need to re-index theme cache
Info Need to re-index plugin cache
Info CommentModel->PageWhere()
Info
Comment.Page.30.2497.2: false
Info CommentModel->CachePageWhere()
Info
Comment.Page.30.2497.2: array (
  0 => '2014-11-04 09:26:42',
  1 => '2014-11-05 10:41:15',
)
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/library/core/functions.render.php line 338.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 715.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.
Notice Undefined variable: GuestHourOffset
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 281.
/home/nitrogen/public_html_mgsatest/forums/library/core/class.format.php line 465.
/home/nitrogen/public_html_mgsatest/forums/themes/mgsa/class.mgsathemehooks.php line 712.
/home/nitrogen/public_html_mgsatest/forums/applications/vanilla/views/discussion/comments.php line 19.