Search Unity

How hard is to move from Unity3d to custom built game/engine.

Discussion in 'General Discussion' started by Wrymnn, Dec 9, 2014.

  1. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    Hi there,

    For past few years I have been working with game engines (GameMaker and Unity3D).
    I have been coding in JavaScript and mainly in C#.

    "So our routine is to add Model/Sprite to our project, drag it from Project to scene/editor and whoala, we have new GameObject, where we can write transform.Translate and move it and script it the way we like"


    - Now, After all those years, I want to to create game, that I know cannot be achieved in Unity3D the way I like. So I want to create game from scratch using C++ and OpenGL.

    My Question is, to you guys who worked with custom built engines, or made the game from ground up without Unity, how hard and challenging would it be for me to move from GameEngine - to creating game from sratch without one? Or how hard was it for you?

    Since from what I understand, there is no scene, no gameobjects, no components, no camera, nothing.

    What is your experience with all this? :D
     
  2. Devil_Inside

    Devil_Inside

    Joined:
    Nov 19, 2012
    Posts:
    1,119
    I tried creating my own game using C++ and OpenGL before I moved to Unity. I don't understand why would you want to downgrade?
     
  3. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    Because of the game I want to make. I need open world game, with a lot of AI. And yes this AI matters it`s not like in Skyrim that I switch off the guard standing there whenever I`m more than 200m away.

    But in Unity, the rigidbody2D takes up 50% of power with 200 objects. The Polygon colliders take up A lot of power too.
    Where I can do 200 AI with the same mechanics in Unity,someone else can make 10 thousand objects with almost no performance loss in his OpenGL built engine.

    But ofc it would be stupid to not use engine when I`m making android game or some shooter or whatever.
     
  4. JamesLeeNZ

    JamesLeeNZ

    Joined:
    Nov 15, 2011
    Posts:
    5,616
    you will never, ever achieve that.

    Unless you've been coding in c++ for AT LEAST 10 years, then maybe you'll get somewhere, however the fact that you're getting bad performance with 200 rigidbodies tell's me you're not ready for the challenge of writing a c++ engine from scratch.
     
    kamilmarekjpg, Amon, Not_Sure and 3 others like this.
  5. Devil_Inside

    Devil_Inside

    Joined:
    Nov 19, 2012
    Posts:
    1,119
    I think it would be way easier for you to find a solution for Unity that doesn't rely on rigidbodies or uses other workarounds, than to write your own game/game engine from scratch.
    Just take into account the hundreds of people that work on the Unity Engine for many years now and try scaling this down to just a subset of the Unity features you need. It won't be that many people, and it won't be that many years, but it will still take you an enormous amount of time.
     
  6. RockoDyne

    RockoDyne

    Joined:
    Apr 10, 2014
    Posts:
    2,234
    The single greatest ability of Unity is to actualize ideas faster than just about any other engine out there, and then you can get it to run on your toaster. Use an engine that requires you to recompile every time you make a small change in the code and you'll figure out why some people like Unity.

    ALL polygon colliders are like that though. I highly doubt you can find any engine that uses physics on that many objects though. Most of the time they are all using pathfinding tricks instead of actual collision detection.
     
    Nanako likes this.
  7. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    When I say "Game Engine", I do not mean to develop software that makes games. I know what engines is, and that is of the most difficult engineering challenges in computer science.

    - I was rather talking about making game from scratch without using engine, but some people call it "engine itself", what I meant was not engine as Unity engine, but to run, compile code and have game I built, or how that works.

    Okay I maybe overstated that sentense. I am talking about 500-1000 game objects AI that move with rigidbody, rotate, check surrounding objects around them fire bullets, get collision from it, create explosion effect etc.

    I have tried to move 2000 rigidbody objects. Adding polygon collider dropped FPS greatly for example.
     
  8. Ostwind

    Ostwind

    Joined:
    Mar 22, 2011
    Posts:
    2,804
    What kind of game would have so many things active same time? your open world game running them all the time fully featured and always activated? thats not how open world games do them so it sounds like you are trying to give up on Unity cause of wrong design.
     
  9. Deleted User

    Deleted User

    Guest

    Simply put, very hard, there are some decent rendering templates out there which you are free to use. There are a lot of obvious benefits, extremely lightweight. I was surprised when I used LWJGL exactly how much you can get away with compared to pre-made engines, by the time I'd finished my crappy home brew engine demo it had 132 different segments and I really should of documented it because it was confusing as hell.

    I've attempted (made) three AAA engines, by myself and it just NEVER ends.. It's one of those things you'll have to attempt several times just to know how the engine should be modularised. Most of the math / concepts is out there to use already.. But if you get stuck you'll have to be able to do it yourself.

    Only attempt it if you're certain that Unity and / or any other engine has completely failed you. Having performance issues? Ask around and try other engines first.

    You need Streaming / tiling and plenty of it :)..
     
  10. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    I know, open world games deactivate AI, objects as player moves away from it, so Imperial City is "Winterhold" in Skyrim is deactivated in Skyrim when player is in Reach. I am perfectly aware of that.

    But let`s take game like Sins of Solar Empire. You can have fleet up to A lot of ships, + small squadrons of ships.
    And if you have other 6 opponents on huge map, the number of active objects, that run their battle in system you are not in, is very huge.

    Yes, they have deactivated meshes, textures, they update maybe only every second frame, but they are there and they run.

    And that is what I am trying to achieve, but only my advantage is I need this only in 2D.

    Now I have full game working here, with procedurally generated galaxy, and ofc distant systems in which player is not in are "deactivated", and I`m checking every few second that if ship has spawned in that distant system, I tell it to deactivate.

    But even here I HAVE to have fully active surrounding systems, at least the ones that player can jump to any time. I want realisticly simulate battles, factions taking over another etc.
     
  11. kburkhart84

    kburkhart84

    Joined:
    Apr 28, 2012
    Posts:
    910
    Unity is still probably your best bet. Things to think about.......scale back the design when possible, and deactivate things when you can.

    Example, just because you have 500 rigidbodies etc... going doesn't mean they really have to be going. Example, the scripts themselves might be plenty fast, but you don't really need to calculate the actual battles happening at certain distances from the player. So just calculate "simulations" instead. Heck, if you have things in other areas that aren't even loaded, you can still do it once you do indeed load into an area. Look at classic Animal Crossing. All sorts of things happened while you were gone even though the console wasn't even on. You can do something similar for things aren't anywhere near the player. The player won't know the difference I promise.
     
    Wrymnn likes this.
  12. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    Hmm maybe what I need is another, more experienced person just helping me a bit out. No, I have never worked on such a big project as now, so optimization wasn`t my concern. I have learned in Unity and in c# past month more than I learned in past year.

    But when I hear from other game developer this:

    " The galaxy I generated had 100 star systems, 200 planets and at each planet there is a 36 vs 36 ship battle taking place at exactly the same time. So in total there are 14,400 ships being simulated in full detail."

    And he made it on notebook with 2GB ram and 50fps, now I wonder "I think 200 objects shouldn`t lag even with bad optimization".
     
  13. kburkhart84

    kburkhart84

    Joined:
    Apr 28, 2012
    Posts:
    910
    Just thought I'd mention something.....the word "simulated" is being used there. It isn't saying that you can see the battle directly. Rather, the code is doing it. Generally code can be pretty quick, though actually rendering things out maybe not so much. Also, I don't see there that it is talking about full physics either, rather just simple battle mechanics, though I could be wrong about that.
     
  14. RockoDyne

    RockoDyne

    Joined:
    Apr 10, 2014
    Posts:
    2,234
    If you had to make the graphics pipeline and the asset import pipeline, you've made an engine. It wouldn't be an engine you could cleanly separate from the game, but it's an engine.

    I'm going to be the boy who cried bullshit on that and say none of it is being simulated anywhere the level of detail you think it is. I have no doubt it is being systemized and being reduced in complexity significantly to get those kinds of numbers.
     
    landon912 likes this.
  15. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    Okay maybe the video is better :D

    This is a stress test he made. Yes there is 30 fps, but Fraps are taking 20.



    If you watch this, you will se the battles are actually taking place in real time, no simulation.
     
  16. JamesLeeNZ

    JamesLeeNZ

    Joined:
    Nov 15, 2011
    Posts:
    5,616
    While all the battles are probably running at the same time, they arn't all being rendered at the same time. He zooms in/out of sectors.

    I doubt he's using physics either which means you can do a lot more with less.
     
  17. Neoku

    Neoku

    Joined:
    Oct 27, 2014
    Posts:
    261
    If you are a very very good C++ programmer and have many many time you can, if not continue using Unity.
     
  18. thxfoo

    thxfoo

    Joined:
    Apr 4, 2014
    Posts:
    515
    In this video you see that only few battles are visible.
    These are just some simple additions and multiplications.
    You can run millions of them at the same time. You know how many ships shoot on what ship. You know fire speed and hit rate. You multiply that and know the damage. No physics or rendering or anything.

    Of course in C++ you can run much more such battles in parallel. But you can create a C++ dll for Unity that calculates your battles if you really need any millions of them.
     
  19. Devil_Inside

    Devil_Inside

    Joined:
    Nov 19, 2012
    Posts:
    1,119
    Yeah, as others already said,
    1. There's no need for physics in this kind of simulation
    2. You're only seeing one battle at a time
    3. He can greatly reduce the complexity of simulation when you're not watching a battle directly
     
  20. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    But I can turn off sprite renderer in Unity too, but it is the "Rigidbodies" collision update or Quaternion.Slerp or rigidbody2D.AddForce that is drawing the most power.

    I can turn off Sprite Renderer, Audio Source, trail renderer on ships that are far away.
    But things like this has to work:

    //-------------------------------------------
    Polygon Collider (Collision checking for bullets)
    Rigidbody2D
    AddForce in FixedUpdate
    Quaternion.Slerp in Fixed update(this eats a lot)
    Instantiate bullets
    Check collision
    (Check nearby objects around every 2sec)
    //-------------------------------------------

    These codes eat the processing power I need, And this stuff has to run, here, on other RTS games like Sins of Solar empire, even if the language is different. And with current CPUs capable of billion calculations per second. Come on.
     
  21. thxfoo

    thxfoo

    Joined:
    Apr 4, 2014
    Posts:
    515
    Why run physics for stuff not visible?

    And if you just need collision and no physics, you can create a collision detection library without physics. If needed in C++.
    It is hard. But simpler than creating your own game engine.
    But you should really ask yourself if you cannot simulate the stuff without a physics/collision engine.

    And why instantiate invisible bullets?

    Your code example tells me you have no chance to create your own engine, sorry.
     
  22. kablammyman

    kablammyman

    Joined:
    Nov 22, 2010
    Posts:
    507
    Dont listen to the guys here, do it! its an awesome learning experience! I dont care if you are ready for this or not. There is a lot of info out there...esp on Amazon. The info you seek isn't gonna just manifest itself in your head by making more unity games. You have to get your hands dirty. You have to not be afraid to fail. You have to be willing to learn. This is why the experience is invaluable. Also note, you dont need to have a rendering engine that's AAA worthy, getting an animated mesh on screen is all that's needed. Even the old LaMothe books form the early 2000's can help you achieve your own engine, (even tho the books are old and somewhat out of date) the basics dont change.

    Even if you don't finish, I bet you will learn more during that time than all of your time using Unity. IMO, its like making the jump from mechanic to engineer.
     
    SamFernGamer4k and Ony like this.
  23. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,401
    This is a design error, not something you solve by writing your own engine. Maybe you can achieve twice the number of objects through brute force with a super-efficient custom engine compared to Unity, but you still have the same problem in the end. What you should do is use various optimization techniques so that only the objects you actually need to be active, are active at any given time. Proper optimization would allow you to scale to pretty much any number, and still have a good framerate.

    --Eric
     
  24. darkhog

    darkhog

    Joined:
    Dec 4, 2012
    Posts:
    2,218
    Very hard. Writing collisions is a mess.
     
  25. Ostwind

    Ostwind

    Joined:
    Mar 22, 2011
    Posts:
    2,804
    Theres a lot wrong here if you are doing similar to the video above and I'll just mention few examples. Bullets should be pooled. Hmm polygon colliders for bullet hits...? you don't probably even need physics for bullets or you can only use them on every n bullet or only with special ammunitions. Even then box or sphere collider would be enough at that scale. Does each ship have own scripts running or do you have one manager for hundreds of ships?
     
    SamFernGamer4k likes this.
  26. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    1. Pooled by: (Create turret -> with it 30 bullets -> get them to array -> enable/disable them,add force and change position)?
    2. If I do not need physics on bullets, how do I move them? Will Translate be better? I`ve heard this isn`t that good either.
    3.Each ship has 2 scripts attached. Pretty complex + 500 lines, though highly optimized.(Even it doesn`t look like that). Since each ship is enterable, has own cargo storage with items, own fitting(modules,turrets) etc.
    4. So doing foreach loop through 300 gameobject and calling some customUpdate function would be better? (calling optimizeUpdate only every 5 frames when ship is too far away)
     
  27. Nubz

    Nubz

    Joined:
    Sep 22, 2012
    Posts:
    553
    This is one of those threads that the op gets a real answer over and over but then insists they know better.
     
  28. JamesLeeNZ

    JamesLeeNZ

    Joined:
    Nov 15, 2011
    Posts:
    5,616
    highly optimized and foreach loop cant be used in the same sentence.
     
    landon912, N1warhead, Stoven and 2 others like this.
  29. ostrich160

    ostrich160

    Joined:
    Feb 28, 2012
    Posts:
    679
    I see where your coming from man, I would just personally recommend you use unity and just deactivate as many components as possible while the AI is offscreen.

    And that would be only if AI is a HUGE factor in your game. If its just a cool little feature, its not worth it mate.

    Heres an idea. Do some research of procedural universe generation and population within unity. That will probably yield some similar results.
     
    SamFernGamer4k likes this.
  30. Tomnnn

    Tomnnn

    Joined:
    May 23, 2013
    Posts:
    4,148
    It's not too bad, it's just a lot of work. How do you make a button in unity? GUI.Button in the OnGUI function. How do you make a button in a basic engine you've made yourself? You need to link a graphics library, make a structure that holds the data you need in the button and then make an event system to handle button presses.
     
  31. thxfoo

    thxfoo

    Joined:
    Apr 4, 2014
    Posts:
    515
    If they are not visible, just use math. Don't create or instantiate anything. Just compute it for all bullets in one method in bullet manager class.


    That seems like a problem if you want to have many of them. Create a ShipManager class that handles all of them at once (if they are not visible) , or even better has different pools depending on details level and update rate needed for the specific pool.
     
  32. ShilohGames

    ShilohGames

    Joined:
    Mar 24, 2014
    Posts:
    3,021
    Are you trying to build a simulator or are you trying to build a game? When you decide you want to build a game, you use tricks to make it look like a lot more is happening than really is. For example, none of the space battles that are not currently zoomed in on are worth wasting CPU time on. If a space battle is not currently the center focus, just use simple routines to estimate damage and destruction as a function of time instead of doing real time bullet physics on them. Come up with an ultra simple math formula for estimating damage received per second (not even per frame) for each ship that is out of focus but in a fight. Only use bullet physics for the battle that the user is currently zoomed in on. If you made this design change, you could probably easily scale your game.
     
    SamFernGamer4k likes this.
  33. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,401
    O rly..."If you want stuff to be highly optimized, don't use a foreach loop." ;)

    --Eric
     
    landon912 and Stoven like this.
  34. cannon

    cannon

    Joined:
    Jun 5, 2009
    Posts:
    751
    @OP, I hope the following sentence makes clear the main thing you have to realize:

    At that scale, you need to run your simulations without GameObjects or Monobehaviours within Unity.

    If you understand that, you can go to thousands upon thousands of units at varying levels of simulation.
     
    SamFernGamer4k likes this.
  35. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    How would I then check other objects around ? :D
     
  36. RJ-MacReady

    RJ-MacReady

    Joined:
    Jun 14, 2013
    Posts:
    1,718
    That's not even 1% of 1 header file. It gets extremely worse from there. In 6-7 months, you'll be able to draw things on the screen and maybe load models and stuff reliably if you work all day every day... just saying, you don't look at a building and say "how hard would it be to build my own luxury highrise?" Kay, cause that takes lots of people and lots of money... well, game engines take lots o' people and lots of money, too, right? There's a reason for that. Just saying. ;)
     
    Xaron likes this.
  37. Deleted User

    Deleted User

    Guest

    Took me about three days to draw stuff on the screen, in two weeks I had shader / .OBJ compiler / rendering and object picking done and basic lighting / texturing, it's not that hard and plenty of tutorials on it. It's more like making a big budget AAA, it all starts out small and innocent enough but gets large and out of control quickly.

    Engines for small teams only work if you're doing it for one game / platform only and you don't decide to sell it to anyone. So you're not having 10 of your staff every day just doing nothing but fixing bugs. You don't need to care about backwards compatibility, nothing needs to look fancy. You should see some AAA engines, they look like they were made in Delphi back in the 90's.

    If you want cutting edge multi-platform engine, then no chance. I've seen guys on here and gamedev with there own homebrew engines and they are sweet. Using Unity isn't a pre-req for building your own, there is a huge gap in skills.. Although you can dig pretty deep..

    TL;DR? Meh, depends.
     
    SamFernGamer4k and landon912 like this.
  38. chelnok

    chelnok

    Joined:
    Jul 2, 2012
    Posts:
    680
    Same way you would do it with your own engine :p

    Anyway, try to do offscreen battles with just calculating end results with math. Start small, for example just like ten ships vs twenty ships, one with twenty wins and have ten ships left. This should help you to get the idea how to use different methods in large scale. Its pretty much impossible to do anything like that big with bullet physics and all (without few supercomputers) ..no matter what engine you got.
     
    Last edited: Dec 10, 2014
  39. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,401
    You could use a standard for loop (or a while loop). Not foreach.

    --Eric
     
  40. Wrymnn

    Wrymnn

    Joined:
    Sep 24, 2014
    Posts:
    380
    I can get object reference from a HashSet only in foreach loop.
    That`s how I store objects in certain databases for certain performance. And I add / remove them from hashSets on the fly.
     
  41. Arowx

    Arowx

    Joined:
    Nov 12, 2009
    Posts:
    8,194
    It looks like the example game engine does not use a physics library!

    from - http://www.galaxial.com/2012/01/faq.html

    No mention of a physics library at all. So even on screen battles are probably 'dice roll' interactions animated to look like battles. e.g. Attacker rolls a d20 gets 12, defender rolls a d20 gets 6, attackers missile hits and does d20 damage. Visualised as missile launched and impact on hull of defender.

    Note that Arcen Games AI War was migrated from a bespoke game engine using DirectX to Unity.

    Check out the developers blog for details, he had to use a lot of tricks and bypass Unity's object system to get the performance needed for his fleet battles. But as he started with a bespoke C# engine he just ported the code and used Unity's low level mesh drawing features to get the performance he needed.

     
    Last edited: Dec 10, 2014
  42. RJ-MacReady

    RJ-MacReady

    Joined:
    Jun 14, 2013
    Posts:
    1,718
    Maybe you can. I can lift a 160 lb human being up over my head, don't mean it's just easy stuff that should be common for everybody. But if you're saying that is the norm and the rest of us who can't slap a 3D game engine together in 3 days are just losers, because there's tutorials... apparently that's all you need... tell me more.
     
  43. R-Lindsay

    R-Lindsay

    Joined:
    Aug 9, 2014
    Posts:
    287
    There's nothing wrong with using a foreach. Optimising a foreach linked list into a while block is like optimising a for loop by unrolling it. It's 9000% unnecessary.
     
    SamFernGamer4k likes this.
  44. RJ-MacReady

    RJ-MacReady

    Joined:
    Jun 14, 2013
    Posts:
    1,718
    I think people worry about optimization because it takes away from worry about designing a game, which is infinitely more complex. If people spent as much time as they spend worrying about imaginary scenarios and premature optimization on the actual game... But first but first but first... My game absolutely can't do without this level of performance... Its not my fault unity can't handle my game... Therefore I can't make my game and its not my fault. And absolutely, positively unequivocally has absolutely nothing to do with the fact that I have no idea how to make my game or perhaps even how to make a game.

    I'm a genius who has no equal but for reasons outside of my control I am unable to make anything at this time, but I still want to be respected as a genius. Not for what I've done but what I could have done.
     
  45. Devil_Inside

    Devil_Inside

    Joined:
    Nov 19, 2012
    Posts:
    1,119
    If you still need proof that Unity can handle thousands of units at the same time, check out this video:
     
    Ryiah likes this.
  46. Arowx

    Arowx

    Joined:
    Nov 12, 2009
    Posts:
    8,194
    The OP has a valid concern Unity gives you a great tool set but it does not scale well for high Unit count games, especially using the default GameObject/Physics System.

    You have to write a 'game engine' within Unity to handle really massive Unit counts and bypass the default gameObject paradigm provided by default.

    Although I have my fingers crossed for Unity 5 being a lot better in this regard!
     
    thxfoo and Ryiah like this.
  47. cl9-2

    cl9-2

    Joined:
    May 31, 2013
    Posts:
    417
    For development with C++, I'd be likely to use an existing open source engine that I could openly customize. Urho3d appears to be coming along well.

    Urho3d in action (Urho3d editor also works in Linux)

     
  48. Deleted User

    Deleted User

    Guest

    There's a massive difference between a full on modern engine and something that can draw 3D primitives in GL, Of course I'm not calling anyone anything, more of a it's not as bad as some think. (Obviously dependant on what you're doing)..

    Also for the most part, if you're a games developer you should know how matrices / basic lighting / shadow mapping / transforms and all the basic things to make a not very functional engine, because in essence that's how you'd make a game. Unity shields you from a lot of this, which in some cases is a good thing in others a bad thing. To actually finish the engine to something near useable and catch up to modern day standards, we'd be looking at a year at least and even then it wouldn't exactly be "user friendly" (this is assuming you've been doing dev for at least three years and know the concepts)..

    There's a huge difference between a personal engine and a commercial one. Not that I'd recommend anyone make their own engine if they want to make a game, it's a time and money pit. As a learning exercise, hell yeah it's a great thing to do..
     
    Last edited by a moderator: Dec 11, 2014
  49. RJ-MacReady

    RJ-MacReady

    Joined:
    Jun 14, 2013
    Posts:
    1,718
    I think it's a waste of time for someone who claims to be interested in game development. You can't do anything that hasn't been done before, you have no reason to try. I understand some of these "very basic things" and some of these other "very basic things" I don't understand as well. I also understand how computer memory works (in principle) and how to do binary math. I also have a very vague notion of how computers process data at the electronic level, with series of switches and gates. I also understand conductivity, and the principles of electricity, basic chemistry and the theory of life, the universe and everything else. 42, man. 42.

    I chose Unity (check your URL) because I was mature enough to realize that I didn't need to reinvent everything from the ground up, I just had to learn to understand what was already there and start working in harmony with existing stuff. I had to stop listening to uninformed, bad advice like "C++ is faster" and "learn a real programming language" and start thinking goal-oriented. Which is actually good advice. You can always take a diversion from game development and waste a part of your life building something that's already been done ten thousand times before, it's not going anywhere.
     
    salah-, Ryiah and Xaron like this.
  50. Deleted User

    Deleted User

    Guest

    Games are difficult enough, I'm not arguing with you I as well think it's not worth the time if you're wanting to make a game. Use a pre-made one and go through it, on the flip side the learning advantage is invaluable and it really does help get you a job if you can understand deeply how games and engines work.

    Also a generic pre-made engine might not be what a team needs, there are all sorts of companies big and small that use in-house engines. Just because it's been done a 1000 times before, it doesn't also mean they're wrong...

    Believe me when I say, it really isn't a waste when you're learning.