Human in Nature

BimbamBimbam Posts: 99Member
edited June 2020 in Projects

Human in Nature

I've been lurking on the forums long enough I figure it's time to start sporadically talking about the game I am working on. This is now week ~7 from a no background in GameDev or modelling' guy (background is Data Vis and computer networking), so there is a lot of improvement to be had.

That said I had briefly played with Godot before and liked both the node system and GDscripts similarity with Python. Saying that Godot 4.0 can't come soon enough for 3D as there have been plenty of times I've found a tutorial for Unity which does not appear to be natively available in Godot (yet).

The concept is fairly simple (I thought). It is about a city man and a city dog from different homes/backgrounds who both separately decide to give up on the insanity of the modern world to go live in the wild after watching the same discovery channel show.

I've fleshed out a slide deck full of my thoughts on the story and it's somewhat long, so I won't post it all here now, but tldr; the man falls off a cliff and the dog is swept down a river, both taking hefty knocks to the head. The man (the player) is then awoken by the dog savaging his ankle and the game commences.
They both quickly realise they can understand each other and decide to go about exploring the wild together, though all the while neither is fully convinced the other is actually real given they both just had knocks to the head.

At this point the dog will be used as an exposition tool for the tutorial, as well as general banter back and forth between the two, while longer-term may become a pseudo 'Navi' character though less annoying. The conceit though is that whenever something goes wrong (such as when attacked) the dog will make his excuses and leg it, adding to the uncertainty of if the dog is real.

The core gameplay loop is survival, with a goal of scaling the highest nearby mountain together to try and see where home is and/or surviving an in-game 'season.' As it stands that season is pretty much just going to be Summer, but if I ever finish this behemoth there will be multiple seasons that define the games difficulty (and of course the pinnacle being surviving a year).

But throughout this I want there to be a lot of story exploring themes of loneliness, companionship, ones own strength and the strength you get from your friends (hence the punny name), as both main characters come to learn more about themselves. Not only is this somewhat pertinent to my own adventures (I left to cycle through Japan and North America solo at the start of the year, then Covid happened), but also the world as a whole right now.

I'm severely hampered by my current lack of a dedicated GPU, and I've always liked semi-cell shaded 3D games so that's kinda where I'm thinking. This keeps the need for expensive models/textures, low as well as covers for my lack of experience in Blender.... I hope. If your immediate thought is "great another BoTW clone", honestly I wish it could be but it's not likely to be even close lol.

Open world map, though the scale is obviously somewhat limited by me being one person. That said I have already created a ~5km*5km USGS heightmap of Yosemite national park into a Mesh in Blender and then 'painted'the ground onto it. This is broken into 1km grids each with different levels of LOD for distance based quality. Unfortunately the rivers I have to carve into the mesh by hand, so far from 'done':

General Survival game mechanics to include hunting/gathering and some rudimentary crafting perhaps, though I have no plan to make it a craftathon like many other games. I want there to be more focus on story-driven elements with the dog and eventually, other NPCs driving the game, and a finite end screen, not an infinite sandbox (though I guess depending on the ending you can continue).

In addition I, like Jim Sterling, am no fan of excessive sliders and meters tracking your every stat, so these shall be hidden for the most part. Instead, the dog will comment occasionally on 'how you look' as well as things like your movement speed being affected over time. However, go without food/water long enough and I plan to have some kind of hallucination/fog system that gets progressively worse until it kills you.

Anyway. Enough talk. Specific bits I'm working on will be in comments below:

Tags :


  • BimbamBimbam Posts: 99Member
    edited June 2020

    Object Instancing

    Today I nailed raycast based object instance placement, where the angle of the ground acts as rejection criteria and uses a temporary next_pass material (grow) to give an outline.
    Minor bug to fix is excluding the player from the raycast, as right now it seems to intersect at certain angles but there is a function for this.

    Will also use collision groups to define placement moving forward, as I imagine right now this would let me plonk fire onto the river ^^.

    Also showcases my janky attempt at a UI & radial menu. This is very new so it won't look like that when finished. Also, still for the life of me can't figure out how to get it to capture the keyboard before a mouse click, but other than that all the keyboard controls work.

    I'm still playing with a good solution for grass. Scattered plane-based multimesh seems to be the best bang for buck, but at the same time looks kinda janky. Unfortunately using even a low poly mesh wrecks my Intel GPU. As does particles it seems :(

    Also, pretend you don't see the player sliding down that tiny hill. I fixed that ages ago and then something I did brought it back. I have no idea why my ground raycast code has decided to undo itself, problem for another day.

  • BimbamBimbam Posts: 99Member
    edited June 2020

    World level LOD

    This was from a week or two ago showing the LOD system to get a mostly smooth experience on iGPU (~40fps)
    This went through multiple iterations where lessons learned were:

    Don't put scripts on each object when you have lots of objects.
    Don't use areas when you have lots of areas
    Thread if you can
    If it doesn't break the illusion, spread the workload across frames.

    Without explaining each of the above, the 'final' product is a single script that manages each Square km block, which has 9* sub-blocks of multieshes, each with ~80-100 trees and thousands of foliage objects.

    The player tracks it's position each Square KM block and if it's close enough, starts tracking it's position to the 9 sub blocks, and if it's close enough starts tracking it's position to trees/foliage within that sub block. However, it threads these checks across frames and cores such that it generally is doing ~20-~40 checks at any given time, keeping scriipt lag to a minimum.

    The tricksy part, is that each tree is a multimesh instance AND a regular mesh with collision. Essentially I scattered the trees with collisions/variable LOD (from 3Planes to the 3000 tris) across the block, then iterate over the position of each to define the position of the multimesh LQ equivalent (3Planes). Then as the player approaches a given tree, the MM phases out using alpha dither, then is moved underground (semi necessary as the dither is relative to the camera and not the player, which for third person means oddites on the peripheral). Dither is also present on the HQ tree materials, noting it is inverse and slightly offset to the MM or you get a moment where both are invisible. This to me looks pleasing and is far less jarring than a straight on/off transition, but far from perfect. HQ tree should now be shown to the player up close who can now bump into it.
    While I have no intention of being able to fell trees, this could be expanded in the future to account for that I think.

    Then, to make sure it 'worked', I just duplicated the one block I was working on 9 times to give 3km*3km, cranked up my movement speed and went for a run.

    The gif shows a total of ~4000 trees with collisions and ~540,000 foliage objects. I did reduce view distance for foliage as even chopped up my machine struggles, but this will make it into the main menu as a Setting obviously.

    Plenty more done, but for now that will do as I don't want to be spammy. Also apologies for the poor quality, I don't have the resources to record my screen.

Sign In or Register to comment.