• Content count

  • Joined

  • Last visited

  • Days Won


Hodgman last won the day on November 23

Hodgman had the most liked content!

Community Reputation

51535 Excellent

About Hodgman

  • Rank
    Moderator - APIs & Tools

Personal Information


  • Twitter
  • Github

Recent Profile Visitors

75713 profile views
  1. Debate: Proper Time For Microtransactions?

    Yeah, nah. Most people actually don't care about how their character is dressed up. It really doesn't affect their game experience anywhere near as much as other game items, and your viewpoint is actually extreme to them. On the other hand, some people do really care about how their character looks, or feel compelled to collect things, and for these people, collecting the "useless" cosmetic items is the game. I guess you're in that category. Don't make the mistake of projecting your own feelings onto everyone else though. When you put it this way, it does seem kind of immoral to exploit this small demographic's compulsions for monetary gain... They're just cosmetic. You get the full game for free, and then you grind, watch ads, or pay money to get coins, which you can use to unlock cosmetics that change the character model and sometimes also the appearance of the world.
  2. C++ Will it cast?

    Any integer from 0 to 16777216 (2^24) inclusive (and the negative version of that range) can make a round-trip between 32-bit int and 32-bit float without any wacky changes happening. Between 16777216 (2^22) and 33554432 (2^25), floats can only store integers that are a multiple of two (even numbers). Any odd number that you cast back and forth will be rounded to the nearest multiple of two. Between 33554432 (2^25) and 67108864 (2^26), floats can only store integers that are a multiple of four.... Between 8388608 (2^23) and 16777216 (2^24), floats can now only store integers -- you get no decimal places! Between 4194304 (2^22) and 8388608 (2^23), floats can only store two possible fractional parts: ".0f" or ".5f" Between 2097152 (2^21) and 4194304 (2^22), floats can only store four possible fractional parts: ".0f", ".25f", ".5f" or ".75f"....
  3. DX11 Copy Z-Buffer in DirectX

    Yeah. GL's "framebuffers" are a very thin/lightweight object that is equivalent to the parameters passed into OMSetRenderTargets (i.e. it's just an array of up to 8 render-target-views and up to 1 depth-stencil-view, which themselves are just a pointer to a texture-resource and some format/size info).
  4. DX11 Copy Z-Buffer in DirectX

    What's the reason behind copying it in the first place? You can just use the same z-buffer for opaque and transparent objects. In D3D the equivalent of blitting is CopyResource/CopySubresourceRegion, or for depth buffers you can write a shader that reads from the src texture and outputs the value to the SV_DEPTH semantic (though this generally won't end up copying any magic extra layers of information, like Hi-Z and will force both src/dest buffers to be decompressed).
  5. Debate: Proper Time For Microtransactions?

    https://www.cultofmac.com/314240/crossy-road-developers-made-10-million-90-days/ ..but: That is... not a very common opinion.
  6. How soon to start marketing?

    Depends on your marketing plan. If you're going to spend a million dollars on ads to coincide with release, you probably don't need to do any early marketing If you're making a multi-player or high-difficulty game, it may be important to begin gathering a community before you launch, so that on release day there's a group of experienced players already. If you're not sure of your ability to get attention from press, it might be worth trying to start getting media attention one year early, so that by the time you launch, it's possible to google your game and actually find articles written about it. If you've got something that is honestly innovative, perhaps you want to keep it under wraps until a month from launch to assure that copycats won't appear until afterwards. It also depends on what kind of marketing you plan on doing. We ran a blog for our indie game for the first 5 years of development and got pretty much zero press (a single mention in one french YouTube channel), so that's pretty much the same as doing nothing. We just exhibited our game at PAX recently though, and have appeared on several gaming blogs, podcasts and youtube channels, and also recruited a very small community of public beta testers. There's quite a few indie games that do the exhibition and game awards circuits for years before release, and then launch with a bajillion "IGF finalist"/etc logos all over their game.
  7. That first triangle.

    When porting existing games to new platforms, I've definitely written a nerve-wracking 5k LOC without seeing any results, as sometimes entire systems need to be rewritten in full before you can attempt to see anything
  8. In older API's there were some formats that, when fetched in the shader as a float4 value, you'd get (Red, Red, Red, 1), or (Red, Green, Blue, 1) or (Blue, Green, Red, Alpha), or (Red, Green, 0, 1), etc... In Dx12, you're given control over this behaviour yourself. If you want the shader's float4 'x' value to contain the data from the texture's green channel, you can do that. If you want to hard-code the alpha result to 0 or 1, you can do that. Typically though you set it to return (Red, Green, Blue, Alpha) / a.k.a. (component 0, component 1, component 2, component 3)
  9. Debate: Proper Time For Microtransactions?

    That's the famous example. During the Pre-orders phase, all these people boycotted a AAA sequel because a feature was being removed. A few days after release, most are playing it anyway. #hypetraintoostrong
  10. The Draw/Dispatch/Copy/Present functions are the only ones that actually queue up GPU work. The other functions just configure what the next Draw/Dispatch will do. If GPU-bound (CPU waiting on GPU situation) you should be spending 100% of your GPU time in those functions. The values that you've got for setting textures etc is just measurement error.
  11. Debate: Proper Time For Microtransactions?

    Publicly listed companies, which are owned by and run for shareholders, are legally obliged to always put their shareholders interests first. That is to say, it is illegal for companies such as EA to put entertainment before profits. Yep, EA sure is being spat out of the market for not doing their job That's happened. Three decades of scandals and complaints has finally caused consumers to turn against them. Yep. 100% If you've gathered together $10M of other people's money in order to build an entertainment product, those people have given you the money in order for them to make more money. They don't want a 3% return on their investment, otherwise they'd just put their money into a typical savings account and be safe in knowing that they're making $300Kpa profits safely with no risk. They don't want <10% return on their investement, otherwise they'd just put their money into index funds and be safe in knowing that they're making $1Mpa profits safely with no risk. They want a huge ROI, and are willing to take the small risk that maybe this blockbuster product won't perform quite that well, that's why their gambling their money. They don't care that it's entertainment or cheese graters or bank notes -- it's a box that consumers will buy. And again, as the person who has been lent this money, it is illegal for you to put the interest of your customers (i.e. entertainment) over the interest of the investors (i.e. profits). You're not living in reality, here. This is why people love indie games - because they're made by self-funded humans who aren't legally restricted in how they spend their money. They can (and do) choose to do the "dumb" thing and put the love of their craft above their own financial well being. AAA games don't have that luxury. Quite often you see successful, profitable studios shut down and completely dissolved by their publisher, despite the fact that they just released a critically acclaimed (and profit-making) game. This might seem like a really stupid move on the part of the publisher... but when a successful business looks like it's doing something stupid, the more likely answer is that they simply know more about making money that we do and they're acting completely rationally. In the case of this studio liquidations, the publishers know that a 3% ROI, despite being "a profit", is not enough to satisfy investors (who can get that kind of ROI safely from a bank), and they won't be able to procure the capital required to keep such a studio running. So smart choice for them is to liquidate the studio, recover whatever capital they can from it, and re-invest that capital into other projects that are set to make 10%+ ROI. This seems cruel, heartless, inhuman. It's capitalism. It's how the world works. You try convincing someone to lend you $100M and see how well you do at it. Let's just ignore the record breaking sales and rediculous profits of the churned out yearly AAA 'garbage'...
  12. If your world matrix contains scaling, the normals will be scaled, which ends up scaling the lighting. Normalisation is required if you use scaling. The inverse-transpose is required if you use non-uniform scaling, as it makes sure that normals are scaled in such a way that they become the normal of the newly scaled faces. It does not remove the need for normalisation. Also, normalisation should always be performed in the pixel shader even without scaling, as the interpolation of three unit-length vertex normals is unlikely to still be unit-length.
  13. Screenshots 2016

  14. So your GPU is running at 1fps, but your CPU is also only running at 4fps!? How does your CPU drawing take 170ms? How many draw calls do you make? It could be that you're doing something wrong on the CPU which is causing both CPU and GPU to run slowly. To profile your GPU workload it's pretty easy to do it yourself. You can use D3Ds timestamp queries / events to read the GPUs clock at different points in a frame. You can then just read the clock before/after a group of commands, subtract the difference, divide by the clock frequency and you know how long that group of commands took.
  15. If you don't explicitly link your resources to slots via the register keyword in HLSL, the compiler will remove all unused resources and then automatically assign them to slot 0, 1, 2, etc