It looks like I’m hitting another roadblock here and starting to get really frustrated with this whole process. Maybe it’s just the fact that I’m having to spend so much time on it due to not having a team but it also seems like the entire solution for Unity vegetation/terrains is somewhat flimsy and locked down without being able to customize much. I’ll try to document the problems I’m having and maybe some discussions about it can get some ideas going that I can pursue for a solution.
The first problem is that I wasn’t sure if the quality of my grass texture was good enough to get the look I wanted. I went into Blender and actually baked out custom grass blades in order to provide more gaps between edges, and was pretty happy with the bake. Yet when I plugged it into Unity (after a few saturation adjustments) I get this:
Which is again pretty identical to the results I was getting before, at least at distance. Up close is a different story but since my game involves airborne movement I’d say it’s pretty critical to get the look I want at this sort of altitude. My main problem with this look is that the grass is overall very blocky and patchy, and is very noticeably dark towards the fade out zone. It would be much better if it could actually blend into the ground a bit more, and perhaps hide the fade back into the flat terrain.
My initial attempts at making the texture ended up horrifically dark at distance to my confusion. However, I found that the parts of the texture which were transparent were actually providing color for distant patches, probably because of repeated alpha cutouts and sampling. So I brightened up the “background” in Photoshop, but that ended up making the entire grass glow, even up close. I darkened it a bit to compensate, and this is where it’s at now. However, it’s not just the brightness I have an issue with, it’s the saturation.
I wanted to edit the grass shader so that I could add some custom features to it, perhaps a desaturation filter and an overbright option, which would help both these issues. But looking into it, it appears Unity 2019.2 does not allow you to override hidden shaders anymore. By override, I mean the trick mentioned in this question.
Someone in this thread provided an editor script which is supposed to modify the Terrain asset JSON properties to allow for a custom shader. But unfortunately I couldn’t get it to work. I wrote my error down on that thread in case someone can figure out what’s wrong. Aside from that solution which seems pretty hacky/unstable (replacing your entire terrain data with a duplicate!) I can’t think of how else to adjust the grass shader. No matter how much I adjust the color or the texture, nothing seems to match my ground. It’s as though the cutout portion will always be obvious and is just colored/lit completely differently than the terrain.
My second problem is best shown here:
I’m already hitting the patch limit! Again! All I did was increase the density by a little bit, and I added some small rocks/grass details to the mix. Yet I’m getting holes in places which should be filled. In fact, they are filled if you get close enough, but at range Unity decides to drop them in favor of rendering closer blades. So even though I’m not even quite at full coverage here, I’m already hitting the max patch limit. That’s going to make it tough to actually add more plant variations or ground details. Perhaps if I could lower the density I would have more room to add other details, but I don’t see how it’ll be possible without the patches looking spotted and inconsistent. It already doesn’t look like a field of grass but more like a flat piece of land with grass painted on. I really could use a way to add more objects in these patches, even at max it’s tough to see how I can fill it the way I want.
I’m, again, well aware that with better art assets and more variety I could get closer to the look I want. However I’m still unsure about my terrain design and if this is really the best approach to use on my level. I could really use some help from an environment artist because it really feels like I’m stumbling around in the dark here. I know how to make art assets, but I’m not confident that any of them will actually pull these scene together until my grass is more consistent with the underlying terrain. Again, I will link to this tutorial. I’m not sure what kind of magic is going on to make those assets match so well with the terrain, but I’m really at a loss as to why I can’t replicate it, even after following the steps as best possible within Unity. I imagine it has to do with the shader quality and shadows, but as just mentioned that’s not possible with the grass detail method. I could switch to tree grass, but of course that would lead to horrible performance due to tree objects not combining.
Overall I’m just feeling completely stuck. I need direction on the workflow here. Even after looking at references all day and trying to match my assets accordingly I can’t get the look I want. Maybe I’m just not a good enough artist to accomplish it, but everything looks fine to me until I bring it into Unity’s terrain. There must be something I’m missing here. I’ve been watching level design timelapses and all of them seem to handle grass/nature much better than this, I don’t know what the difference is. Perhaps it’s just the engine entirely at this point. Or perhaps their assets are just better because they already have a library of them. I just don’t know. I’m going to do a deep dive into Final Fantasy yet again to study their grass methods. It just feels like a tremendous waste of time at this point and I’m at the end of my ropes here. I apologize for the rant, but I can’t imagine this project continuing unless I can figure something out.