Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

  • Days Won


Hodgman last won the day on August 25

Hodgman had the most liked content!

Community Reputation

52655 Excellent

About Hodgman

  • Rank
    Moderator - APIs & Tools

Personal Information

  • Website
  • Role
    Game Designer
    Technical Artist
    Technical Director
  • Interests


  • Twitter
  • Github

Recent Profile Visitors

102162 profile views
  1. Hodgman

    Bare bones AAA team

    That's a triple-I team, not a triple-A team
  2. Yeah on highly tesellated meshes it's usually not too noticeable, but on low poly meshes with realistic lighting models, it can produce horrible artefacts... The most common "solution" I've seen is to simply bias the N dot L / N dot V calculations so that, say -0.1 becomes 0.0, shifting the horizon slightly further ...beyond the horizon? Another solution is to blend from the smooth normal to the per-triangle flat normal at grazing angles. Some recent related work (not the geometry issue, but same issue from normal maps): https://blogs.unity3d.com/2017/10/02/microfacet-based-normal-mapping-for-robust-monte-carlo-path-tracing/ Also, yes, this seems like it should be a fundamental and well known problem in computer graphics, but I'm not sure what keywords to use when searching for solutions either ๐Ÿฅบ I guess under systems like REYES, it wasn't a problem because every triangle was flat shaded (and meshes tesellated enough that you couldn't notice)...
  3. Hodgman

    What makes a game an "indie" game?

    The word you're looking for there is hobby project. Anyone who's aiming to actually make money, is running a business. And anyone who's running a business has to put a value on their own time... $100 doesn't get you one day's worth of work, let alone a whole game... Indie games can easily have budgets of anywhere from $10k to $1M. That doesn't necessarily mean that they actually spend that much money -- but the "free labor" that the founders have put in could easily be worth such sums. Also it's normal to have to hire contractors to do the development tasks that the founders aren't good at. For example, on of the first famous "indie games" in this recent usage of the word is Braid, which cost about USD $200k in actual spending (not including the hidden costs of Jon Blow's own time!). No one argues that Braid isn't an indie game. ๐Ÿ™„ ...really? One of the downsides of punching above your weight (putting out something that looks close to the AAA quality level) is that people will treat you like a AAA company. People will expect updates that take 100 man-months to produce, every month. People will expect bugs fixed yesterday. People will expect customer service One good example of this is Wander, which is a simple exploration MMO made by a tiny, tiny little indie team on a shoestring budget... but, because they had nice CryEngine graphics, the public's expectations were much higher than what you'd expect from one programmer. So when it had hilarious bugs at launch, it quickly became a meme of "the worst game" instead of people having the patience to wait for bugfixes No, that's what the people who try to define the "indie genre" tend to expect. But a genre of games and a style of development are two different things (and the people who try to define the "indie genre" are wasting their time)... An indie developer is someone who develops games independently (not beholden to external stakeholders).
  4. Hodgman

    My main complaint with OOP

    Yeah - its basically "here are these tools that we call OOP" but not "here's why you should and shouldn't use them in different situations". OOP makes for a horrible mess if you just use all its tools all the time with no guidance
  5. Hodgman

    My main complaint with OOP

    That's (ab)using OOP tools, but breaking OOD rules, so it's "OOP".... That approach is famously identified as C++ OOP best practice in 1992 (or in the Effective C++ 3rd edition from 2005: "Item 23: Prefer non-member non-friend functions to member functions."). Free functions can improve encapsulation and are perfectly valid in OOP designs.
  6. The normal open source candidates: www.theora.org/ https://ffmpeg.org/about.html https://www.webmproject.org/code/ New idea - use a simple implementation of a very old codec: https://phoboslab.org/log/2019/06/pl-mpeg-single-file-library This one is great for small videos that you would use in your game world, because the frames remain compressed on the GPU after you decode them from the video stream: https://github.com/BinomialLLC/basis_universal/blob/master/README.md
  7. How many events are sitting in a queue at a time? Unless you're dealing with tens of thousands of entries in the queue, I'd probably just default to using an array and quicksort or a radix sort (e.g. std::vector and std::sort in C++) -- inserting at the end of the array and then sorting into the appropriate order before you remove items.
  8. Hodgman

    How do you make Windows 10 barely usable?

    wtf was installed on here to begin with? None of that is normal...
  9. Most of them deal with large binary files pretty well... except for the DVCS systems like Git. Git doesn't cope with large files because every client stores the entire history, and because LFS (the hack to fix that issue) is build around an irreparably slow architecture on Windows. My company has a single SVN repo containing every asset (mostly PNG and DAE files) and every built EXE file since 2012 -- about 20GB when the current version checked out on a client computer (plus 60GB for the .svn folder, WTF?!), but amazingly disk usage on the server is only about 26GB to store the full history because it apparently does manage to compress diffs of these files pretty well In my experience in the industry, Git, SVN and Perforce at the most common that I've seen. @linus_e are you just looking for a Git alternative, or that plus a service provider that hosts repositories for you on the internet?
  10. I've been thinking about this too recently. For a side project (non-games) I had to set up our own installers, patcher, content distribution network, cd-key service, encrypted DRM / product registration, etc... Which was actually a fun exercise because this hasn't been something that Devs actually do anymore since Steam took over the world ๐Ÿ˜† Now that we've built all this tech, I'm wondering if we should sell a non-steam version of our game on our website (as well as selling the Steam version directly on our site too)... I'm also wondering if other Devs would be interested in this stuff we've built - we could put it out there as a kind of "self hosted steam alternative". For anyone not aware, Steam allows you to generate steam keys and then sell them directly on your own site at full price (which means Steam don't take the 30% cut on those sales!) and Humble Bundle offers a service to automate this for you and handle the credit card processing responsibilities for around 5% if I remember correctly. That's worthwhile setting up, at least. If you have your own non-steam version with keys via your own system, I think you can sell them via the humble widget for 5% too. (Also, if you're going to buy a Steam game, you should always go check if you can buy a Steam key direct from the developer to save them those extra few dollars ๐Ÿ˜) For our game, I'm also looking into a blockchain-sold version, where you'd buy it by exchanging cryptocurrency for a non-fungible-token that represents a game license/key. The (automated) log-in process would check your public wallet address to see if you have the right token in your wallet, and then challenge for a signature from that wallet to prove ownership. The people who love their cryptos would be right into that...
  11. We have an agency on retainer for our indie game - we basically just talk to one person managing us, but I think their company is around the dozen staff size. In my local indie scene, I used to be office neighbours to https://www.lumiconsulting.com/about/ who were 2-3 marketing people seemingly looking after half of the local indie Devs ๐Ÿ˜… so I guess there was a bit of demand for help in that area. They've since pivoted to actual mobile development now though. I think a lot of it will depend a lot on whether you market yourself towards "Indies" or "indies". A small independent business spending a decent amount on a core activity such as marketing is a completely expected expense. A hobbyist who balks at the $100 steam publication fee will want you to work for free and not respect your time in the way that you will as a freelancer. We also do art outsourcing work and occasionally have people asking for ~$30k worth of work and offering a generous budget of up to $1k to get it done ๐Ÿ˜’ Getting known by the right kind of clients is important. Also FWIW, I'd personally never use any of the sites like Upwork/etc to get anything done. They seem to exist to connect the cheapest possible labour to the cheapest possible clients... I don't know if that's a common view or just me.
  12. Hodgman

    Storing full games on paper?

    Yeah for musical notation to be readable by a future civilization with no connection to our history, you'd have to also include documents on how to interpret that notion in the most basic possible form... maybe including physical tuning forks to illustrate the different notes, etc? When we sent music off into the eternal darkness, we used the oscillation of hydrogen as the clock reference and binary digits to encode timing values, assuming that anyone who finds it will know enough physics/math to enable space travel, and will have a chance of decoding the symbols:
  13. The typical thing to do is to use a spatial partitioning structure to quickly skip over most of the triangles. One of the most common structures for a triangle mesh is a BVH, but other options include octrees, BSP trees, k-d trees, etc...
  14. Hodgman

    Texture mapping an indexed cube

    If you de-index them (get rid of the indices from the file and create unique tuples of values), then yes, you end up with 36 vertices... But, in your array, item[0] and item[3] are identical. Within those 36 vertices, there's actually only 24 unique ones (4 for each face of the cube). Instead of de-indexing (turning the OBJ indices into a vertex attribute structre) and then reindexing them (finding the unique vertex structures), you can do this in one step with something like: //The index data from your OBJ file: struct ObjIndices { int vertex_index, normal_index, texcoord_index; }; //we're going to find the unique set of ObjIndices and map them to a NEW singular index value map<ObjIndices, int> reindexer; vector<int> newIndexBuffer; // this will be the new index buffer data that we send to the GPU //little routine checks if this ObjIndices struct has been seen before, and if not, assigns it a new index value int GetNewIndex(objIndices) if not reindexer.contains(objIndices) then reindexer[objIndices] = reindexer.size() return reindexer[objIndices] // for each vert in your OBJ file, add it to your new index buffer for each indices as o newIndexBuffer.push_back( GetNewIndex(o) ) //After this, newIndexBuffer should contain 36 entries (6 faces * 2 triangles * 3 corners per tri) // and reindexer should contain just 24 entries (6 faces * 4 unique corners) //now you can read the unique values from the 'reindexer' map, and use them to build your vertex buffer that will be sent to the GPU struct Vertex { float3 vertex; float3 normal; float2 texcoord; } vector<Vertex> newVertexBuffer newVertexBuffer.resize( reindexer.size() ) for each reindexer as objIndices, index newVertexBuffer[index] = Vertex{ obj.vertex_values[objIndices.vertex_index], obj.normal_values[objIndices.normal_index], obj.texcoord_values[objIndices.texcoord_index], }
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net isย your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!