Reputation: 610 Enlightened
- Active Posts:
- 1,365 (1.31 per day)
- 24-April 12
- Profile Views:
- Last Active:
- Today, 06:25 AM
- OS Preference:
- Favorite Browser:
- Internet Explorer
- Favorite Processor:
- Favorite Gaming Platform:
- Your Car:
- Who Cares
- Dream Kudos:
- Expert In:
- Game Programming, XNA
Posts I've Made
Posted 27 Feb 2015
Posted 22 Feb 2015I left this question alone for a couple of days because I don't have a good answer and hoped someone else might chime in on it.
I assume we're talking about profiling here as opposed to debugging. Debugging I can talk about. Profiling I never do, so I can't say much about it.
That reminds me of a computer science course I took many moons ago in college. I had taken all of the computer courses I could find that did not involve advanced math. At the time I think I was taking trig that semester but even now I don't know calculus.
So, I went to the student advisor and asked what should I take since I was math deficient. He told me to take this profiling class and so I took it.
After about 2 days I realized this class was nothing but applied calculus used to profile computer code and determine the most efficient algorithms. I tried to stick in there for a couple of weeks and tried to get a tutor, but after a couple weeks I just had to drop it.
Anyway, I haven't used the Visual Studio profiler. I see there is some discussion of it on YouTube. It's probably a good thing to know how to use it.
I've just never run into serious performance problems that didn't boil down to me not knowing what I was doing enough to make me want to use profiler. For a commercial game it makes a lot of sense, but for just learning it's not nearly as big of a deal.
There have only been a couple of times where I hit a limit with a game program. There are some absolute limits like the maximum size of textures you can use in XNA. But that aside, I can only think of two times where I had truly bad performance.
The first was me just doing something wrong. It was years ago, I barely remember it. But I think I was doing something like completely rebuilding a render state every draw call. After looking at more code examples from other people I realized that I should do it once at initialization and not every draw call. And once I corrected that the code started performing wonderfully again. I was just doing something that wasn't the way it was intended to be done.
The other was with my MineCraft terrain attempt. I think I was only able to do a voxel world of around 160x100x160 without the framerate dropping to unacceptable levels. If you know anything about MineCraft you know that I should have been able to do far better than that.
After a couple more years of experience, I think my approach was wrong and I'm sure I never understood chunking. In another post I mentioned how I might approach it if I were to do it again and I think I could manage to get performance significantly up.
I've also never been able to do mega-terrains like I would like. But I'm well aware that that involves ROAM or some other algorithm beyond basic terrains. Again, it's more me not knowing how to do it rather than needing to tweak the code a bit. I've studied ROAM and a couple other solutions but have never coded it.
Anyway, it's pretty rare that I've hit a performance bottleneck that I was concerned about. I generally try to code nearly as efficient as possible in the first place. I'm a huge fan of Assembly Language where you're going for absolute maximum efficiency at almost the electronic level. At first I was even uncomfortable with a lot of Object Oriented Programming methods because I was worried they would be inefficient. I've gotten a lot more comfortable with that over the years as I've tried some crazy stuff and it worked out well without any performance problems.
Where I see profiling coming in is when you're writing software (probably commercial) that other people will be using and it's just not performing well and you know you're doing things properly and the hardware is sufficient. I would imagine at that point finding the loops in the code where it spends the most time and then rewriting them in Assembler.
Many years ago, again back in my college days, I was in this computer class where we were assigned the task of writing a compiler. It was a team project for a major grade for the semester. I was responsible for the User Interface. I spent day and night for about a week working on this thing and it should have been working but I had a bug in it I couldn't find.
So, because it was a team project and I did not want the team to fail, I went in the last day before it had to be turned in and quickly threw together a UI that met the requirements of the assignment. But thrown together in hours it just barely met the minimum requirements of the assignment.
So, I handed it in to the professor and I remember him commenting about how it just barely met the qualifications for the assignment. I think he knew that that was just not me; on almost every assignment I would go way beyond what the assignment actually required and delve off deep into some advanced topic that wasn't even part of the assignment. For example, I think we had one assignment to reverse the letter of a string using a stack.
For that assignment I wrote a generic dynamic stack. He was expecting a simple character array, and I turned in this stack where you could literally put anything in it and it would dynamically allocate memory so that it could grow to infinite size. This was a first year class and I don't even think that sort of thing was even covered in the text book.
So, when I turned in this bare bones UI he was a bit shocked. Then I told him the story of how I had been working on this advanced UI day and night for a week but it had a bug I couldn't find and I didn't want the team to get a bad grade because of me and so I came in and threw together something that day just to not get a failing grade.
He took me in his office and asked to see the code I had been working on. We spent hours. He found my bug pretty easily and it was actually me having two variables backwards and not realizing it. Then he proceeded to rewrite chunks of my code in Assembly. That thing was screaming by the time he got through with it. It made a pretty big impression on me.
Although, I heard a few years back from some top level guys in the software industry that rewriting in Assembly is not nearly as popular these days as it once was because the MS Visual C++ compiler has become extremely efficient after decades of working to make it so. Most of the time the compiler chooses the absolute most efficient machine code in the first place and there's just no way to improve on it.
Of course, part of the reason that I don't think of profiling C# and XNA code is that I've always assumed they are by nature highly inefficient in the first place, and imagine C++ and DX or OpenGL is the solution to efficient code. However, over the years XNA has proven to be far more capable than I dreamed it could be.
If you have the profiler and could learn to use it, it would probably be a good thing. But I've never really been much interested in it.
Anyway, I haven't done much in the way of profiling and so can't say too much on that. Debugging, is something I do about half the time I spend writing code. But not profiling.
Posted 21 Feb 2015traxix, good to see you. I appreciate that!
Geo, thanks for the advice. You're probably right. I'll give some thought to that. They are really long and I try to make them so that there is as little prerequisite knowledge required as possible to get something out of them.
The first three videos are largely prerequisite info entirely. I want the main focus to be on DirectX programming, but you almost immediately have to jump into vectors and matrices to do HLSL (and DX11 requires you to jump into HLSL for your very first project). I was thinking of doing an "Overview" video that would say, "If you know vectors and matrices and know all about Gimbal Lock, skip these videos and go directly to the getting started with DX video" and maybe it would talk about what each video covers and why.
But 1 to 2 hours is really long for a YouTube instructional video. Having Chapters of some sort is a really good idea.
I think future videos will be a lot less Power Point and a lot more walking through lines of computer code like the Gimbal Lock video now that I'm going to do more on DX coding. My goal for this weekend is to try to get the latest version of Visual Studio and Blender installed on my machines and maybe start writing my first DX code example. I pretty much have that written, but it's in an older version of Visual Studio and I need to clean up the code and comment it. Plus, I could probably do better if I study each line of code a little bit myself. It will probably be weeks at best before I get the video done for that one.
But thank you for the feedback! I appreciate it and will think about it!
Posted 20 Feb 2015Don't get me wrong I'm not dismissing blender in any way, it's a great piece of software. By "horribleness" I mean the initial user friendliness of blender or lack of, the menus are freaking all over the place and it's a bit of a cumbersome thing until you get the hang of it. When you do get the hang of it then it's perfectly fine.
I used Milkshape for a long time so I know what lack of user friendliness feels like />
For the longest time I couldn't remember the menu hotkeys T and N. I mean "T" for "Tools" is pretty easy to remember but "N" for... um... "Not tools?" "'Nother Set of Tools?" "Nothing we could think of?" ...
Then I figured out that if you throw in the "A" hot key which is "Select/De-Select All" you have... TNA! How can any guy forget that? When you can't remember something you're sure to remember it if you make it vulgar! ;-)
So, using the TNA method, you remember 3 of the most important hot keys: the two menus (which are probably the most important parts of using Blender and typically hidden) and the Select/Deselect All which is highly useful. And it's a bit challenging to make these menus appear if you aren't familiar with Blender and don't know the hotkeys, which is a pretty major problem.
One of these days I'm going to make a beginner's Blender video on using the TNA method. :-)
Posted 20 Feb 2015I think it's fair to say that going from a $4,000 software package to freeware is going to mean you miss out on some things.
I've never used Maya. And I haven't used Max really since Max 8. I was never an expert or even really an average user with it. I did take a class on Max though and after years of trying to learn it was approaching basic competence with it.
I switched over to Blender a few years ago when I started doing public tutorials and such largely because I only wanted to use tools in the tutorials that people could get for free and would not have copyright issues.
People have asked why I don't use Max or Maya. Maya is partially because I would have to start all over again from scratch in learning it. (I hated relearning everything when I went from Max to Blender but did it because of the tutorials I was doing and the free availability of Blender to everyone.) But I used to be decent with Max so there really would not be a learning curve there.
I just can't think of a reason to switch back. I mean I still have the issue with wanting to use free software for tutorials and such, which is the primary reason I use Blender. But, I just can't think of a single thing that Blender can't do and do well that I might want for game modeling.
I'm not super experienced with any of this and I'm much more of a programmer than a modeler. (Other than following tutorials, I'm still doing pretty much the equivalent of "stick drawings" when I model.) But Blender seems to me every bit as good as Max for 3D modeling for games, so far anyway.
I think that's partially because it was originally designed to be a commercial piece of software to compete with the others and after it went free there is an extremely dedicated team of people constantly updating it and putting in more and more features.
My impression is that where Max and Maya truly excel over Blender is movie making. You do a lot more advanced graphics stuff when you render out a movie than you do in real time graphics. You might spend 10 hours rendering a two hour movie. Almost none of that stuff gets used in game modeling.
I'm still just barely starting to get into things like baked lighting and displacement mapping for game programming. But so far, I've never come across anything game programming wise where I thought Max would do a better job than Blender.
Again, I'm not super experienced with modeling, but that's just been what I've seen so far at my amateur level.
- Member Title:
- Here to help.
- Age Unknown
- Birthday Unknown
- Dallas, Texas, US of A, Planet Earth, Sol System, Milky Way Galaxy
- Rock music composition and performance, Grunge Music, Bebop (think Thelonios Monk), Swing (think Cab Calloway), Gaming, Astronomy, RPGs, Scuba, Sail Boats, Furniture Building, Cooking, Rocky Patel Cigars, Character Driven Dramas(like HBO's Deadwood), Story Telling (plot writing), Linguistics, Economics, Target Shooting, Electronics (don't know as much as I'd like to), all aspects of 3D game programing including music, physics, modeling, texturing, annimation, probability, AI, lighting, etc., Texas Holdem' Poker, Learning, Dogs, the love of my life (my pit bull), guns (especially 19th century black powder), putting make-up on ogres, etc.
- Programming Languages:
- C, C++, C#, Visual Basic, Java, Pascal, T-SQL, HTML, FoxPro, ASP.Net(very little), Assembler, Machine Code(conceptually anyway)
- Website URL: