Good day, I'm here looking for some important information. I'm part of a team that's developing software meant to aid in animation and game development. This is the first time we've embarked on such a project and we lack any reliable references, so we're seeking advice from a few places online. We've broken down the program into a few major sections, and the plan is to commission one or more programmers to develop each section. What we're looking for is a fair estimate on cost to develop the features in a section, and the approximate time it would take to develop it assuming it was only one programmer. This is meant to be a commission, not a wage. The program is being written in Java, and we're using LWJGL as a frontend for OpenGL graphics and other features. The project is rather large and ambitious. Listed here are a few of the sections we're seeking estimates on. Please ask any questions, we're aware the sections may be too vague or lack needed details.
So in short, we're trying to determine a fair amount to commission a programmer for each section listed below, and the approximate time it would take for a programmer to develop it.
Graphics -OpenGL (LWJGL) --A graphics library that: ---Handles 3d model formats ---Dynamically compiled shaders ---Alpha blended triangles ---Triangles which may be rendered at any depth in any order pose a problem when they have partial visibility. So the triangles may have to be sorted and drawn in order. ---We need to work with an expert to come to a compromise on the best way to handle alpha blending. ---Also, we need to come to a solution on how to approach alpha blending with the deferred lighting. ---Dynamic shadows ----Cascading shadow maps
Audio -OpenAL (LWJGL) --3D sound ---Handle stereo --Pitch bending --Doppler effect --Write audio output -Reading file types: --WAV --OGG --MP3
Video -Encoding and decoding common formats -Video playback and manipulation -ffmpeg
3D Physics -Forces -Rigid bodies -Alternatively using existing physics engine
Is your goal ultimately to make a game or simulation of some sort? If so, you should seriously question the wisdom of building your own game engine. It will be much cheaper and easier to use an off-the-shelf engine such as Unity, UDK or CryEngine. Especially since you have no previous experience in game development, there are a lot of minefields and issues you probably haven't thought about, that you can sidestep by using an off-the-shelf engine.
All the features you listed are very basic and any mature off-the-shelf engine should have them. The only exception is the video enc/dec bit. Many engines have support for playing video files, either full-screen (cutscenes) or into a texture that can then be rendered in the 3D scene (for showing video on a TV in the game world, for instance). Support for encoding video is probably less common. If you just need to capture video/audio of what the engine is outputting, that can be done with external tools like FRAPS. If it's something more complex you'll likely need to mod the engine, but that can be done with a source license and will be way cheaper than building the whole engine from scratch.
If any of the things you suggested were viable options we wouldn't be bothering with this. Believe me, I know all of this very well. We're not creating a game or simulation. We're creating a program capable of animation and simulation. Its approach is completely different from software like Unity and 3d animation suites, and we believe it will be far more efficient. We can't depend on external engines to get it to work, we have to create a lot of it from scratch.
"Especially since you have no previous experience in game development" I'm not sure how you inferred that, I have quite a bit of experience in game development.
Well, you said "This is the first time we’ve embarked on such a project", which I assumed meant a game-like project. If you are actually an experienced game developer, I apologize. (Besides, I would expect a team or technical lead with game development experience to have someone able to make these estimates themselves, rather than pinging a web forum for free advice...)
Does your "completely different" approach affect the rendering layer a great deal? If so, we would need to know a lot more about it in order to come up with any reasonable estimates.
If your special sauce is more front-end and doesn't affect the low levels too much, though, then I still say you can get a lot of mileage out of off-the-shelf components, perhaps using parts of existing open-source libraries and engines, and building your own front-end over them. There's just no reason to pay people to write the 1000th iteration of a basic GL engine with alpha-blending, deferred lighting and real-time shadows from scratch.
I suppose a better way to put it would be "first time we've ever embarked on a project of this magnitude."
The software we're making has a different structure than game engines and other software. We need it to be flexible to our needs and not depend on existing engines. Programs from Unity to Blender had their engines created from scratch because it was necessary and the most practical way to do it. Most of things we're aiming to create are not that difficult either.
Without knowing what you actually want to do, we can't help. We would need to know target platforms, operating systems, compiler, etc.
From your original post, I would have said you want to write your own game engine. Which I agree with Reedbeta is probably not a good idea.
However, to give you some kind of numbers to work with. I charge £400 a day, and I'm busy. Recent projects include....
- Porting a complete modern AAA game to a new platform. 21 days
- Porting a casual game to a new platform. 1 - 7 days
- Porting a library like OpenAL to a new platform 1 day
- Porting a complex library like OpenMax to a new platform 14 days
- Writing a custom video compositing application using CUDA 21 days
Hope this helps
It's being written in Java, so it targets any platforms Java does. And no, this is not a game engine, it's more of a software for animation and simulations that can help previsualize game concepts.
This information actually helps a lot, thank you.
First thing I would recommend is you create a complete requirements document outlining all the functional, non-functional features, and use cases of your software and then create a work breakdown structure. Typically this is done by an experienced project manager / software engineer, so I don't know if you have any background in this or if anyone in your current team does. When done right, it's your blueprint and timesheet for the project. When done poorly, you will underestimate the work, go over budget, and likely the final product quality will be very poor.
Tasks must be broken down into very small parts, usually no more than 8-24 hours of work. If a task is greater than that, you need to break it down into more parts. For example, don't just ask "handle 3d model formats". Be very specific. Example:
- Task 1: "Design 3D model importer/exporter system"
- Task 2: "Implement 3D model importer/exporter"
- Task 3: "Implement OBJ importer"
- Task 4: "Implement OBJ Exporter"
- Task 5: "Test OBJ importer"
- Task 6: "Test OBJ exporter" Etc.
It's much easier to look at something like that and say, 16 hours for that task, 8 hours for that task, etc. You need to factor in time for R&D (no developer knows everything), time for designing and prototyping, time for implementing, and time for testing, including writing unit tests. The sum of all the parts equate to the total estimate to complete the project. It's not uncommon to have hundreds of tasks, so don't worry if you start filling up pages after pages of tasks. The more granular, the more confident someone will be to give an accurate estimate. When done, you enter these tasks into a content management system (CMS) such as JIRA. You'll now have your blueprint. When hiring a contract worker, you ask them to fill in those estimates and then negotiate the contract.
Beyond that, there's no reliable way anyone on the Internet can give you an estimate. It's purely subjective and not the best way to go about it. I mean we can throw numbers at you, but it's pure hearsay.
Don't assume that because you are using Java, it's portable.
Java was a good idea that fell apart under real world conditions.
Anyone who has had to deal with Java, pJava, Midp, JDK 1.N, etc will tell you what a nightmare it can be.
Having actually written a JVM, I know from experience how crap Java can be.
The JVM we wrote was typical 130 times faster than the one written by Sun. This caused massive problems getting it certified. For example, the garbage collector in Java had a known problem that means it will eventually crash. To be certified, your JVM had to run a test for 10 hours. Since our's ran so much faster than the standard JVM, we had to run for the equivalent of about 130 hours. Nightmare.
I have written very thorough documentation on a great deal of the software already which had been broken down further by the lead programmer. We still do not know how long these pieces will take. As undetailed as the above list is, I thought someone might be able to give an estimate on at least some things. Thank you for your advice though, this is very helpful.
I have done fair amount of estimations as a lead graphics programmer, and one thing that will vastly influence your estimates is the experience of the programmer doing the tasks. Particularly if working independently without supervision and mentoring of more experienced lead. So you got a bit of catch 22 if you try to estimate tasks before having a team that executes it. Also your list for tasks (atleast for the graphics bit) appears too vague for any reasoble estimate and is more of a basis for further discussion to come up with more detailed list. Maybe you should hire someone experienced in these domains for few days to put more detailed plan together and who can discuss about the actual requirement you have? This would tremendously increase the accuracy of time estimations and be a basis for you to try to hire someone to do the tasks. It'll probably be very difficult though to find anyone experienced to work on commission though so you'll likely to have to settle for someone fairly inexperienced, which may translate to vastly slipping project.