And this is perfect ad of your game, you did a great job sir! P.S. I'd reduce motion blur by half, the car almost completely washed out while driving ;)
Your game concept is outstanding and I really like the performance tricks! The thing that I would love to see in your game is a night enviroment with a dense fog and beam lights from the city and and cops!
Right on, thank you! I'd be happy to hear if some of these techniques help you out, or if you discover additional ways of achieving better performance in your project.
Yes, there's been a lot of trial and error, time spent in the Profiler, and realization that no 1 solution fits all my objects. Glad you found the video interesting!
Wow nice! As a concept artist, i suggest you to add more fog/ pollution, and more lights and shadows contrast. But depends on the style that you are looking too. Its looking cool!
Thanks. Fog and pollution is still to be worked on. As for the lights/shadows, there isn't really any because the buildings are so damned tall that sunlight doesn't actually reach down to where the player is. It's all ambient light. I've been thinking about cheap (computationally speaking) ways of having some shadows and direct sunlight without it looking silly in the scene - since there wouldn't realistically be any - similar to a very overcast day.
@@CassiusJohnAdams Ah i see nice. I was referring to artificial lights (like the advertising, street lights, etc. And more occluded areas( like under the bridges or narrow streets) About the resources i've no idea, i just suggested what i thought. I'll be looking forward your progress! Good luck!
Crazy Taxi meets The Fifth Element? That's definitely my bag, baby! Also, thanks, this video is super helpful as I'm trying to understand how to make a concept work on the quest 2 and it's limited hardware
This is pretty cool looking. Thanks for the tips. We are in the early phase of making a game so I think there is a lot to learn from your experience. I guess Ill have to go look on your channel for a game synopsis. Once again thank you.
I love it, ima get the game because this is so inspirational for my own projects, not for public sale, but still none the less a huge project that has many objects. Thanks for making this!
@@bezoro-personal gave me a laugh, i really do agree, most people would spend years learning unity and making games but still lack some very basic skills and knowledge... too bad ig, this is just too powerful to be missed !
I haven't worked in VR, but I understand you need to hit a minimum framerate of 90, per eye. That's a pretty tough task. But hardware is always getting better, so it's up to artist and developers to make sure to continue to keep things streamlined to take advantage of the better hardware efficiently.
@@CassiusJohnAdams VRChat can be played without VR Headsets and 30 FPS in VR is socially accepted in VRChat for crowded events in worlds made by enthusiasts. If you have time, give VRChat a try and you will see the mess xD. Cheers!
I make vrchat worlds, the game is inherently cumbersome and poorly optimized for a lot of machines because of its players, their avatars and pickupable objects & mirrors. Occlusion culling, baked lights, no reflection probes & texture atlasing help the worlds only a bit
I am really impressed with the quality of the game here! It's so cool to see Indie producing this level of quality! I have some constructive critique here: - Motion Blur: As you know already, it is too much, I can't see the subject(Taxi) clearly and just vanishes. Just need to implement it correctly - Textures: There are some scenes in your game where the same texture is repeated over and over again. Also, there isn't much of a variety between textures themselves. When you take a look at GTA V, the texture variety is just amazing! You can almost not find any repeating patterns and the object textures are full of surface imperfections (crack in glass, dust collected on cars(if your game has any scene with static cars as subject), dirty cars, damaged cars). There is just so much potential for this game and so much details can be added to make this game really really good. Liked and subbed. Waiting for another devlog. All the best !
Thanks for the constructive feedback! For most of this you're preaching to the choir, so to speak. There isn't anything you've mentioned that I haven't already considered to some degree or another. For the most part, it's not that I can't do them, it's more that I want to be sure the game gets finished and that I limit the amount of scope creep (I've been very strict on myself about this). On top of that, there's obviously performance impacts I need to take into consideration. It's important that I'm realistic with myself by not holding myself to the standards of AAA games, GTA, etc. They have hundreds, maybe thousands, of people working on those games - I'm just one person. One thing you mentioned, which I hadn't really considered, is decaling the static objects, such as stationary cars (buildings already have some). I don't want to get into the task of changing up mesh/models too much, but decaling to "dirty things up" on those non-building static objects is quick and cheap performance-wise. I think this is do-able in my timeframe. Thanks again for taking the time to offer your feedback! It's very helpful. :)
Yeah, as is always the case, things are taking longer than I'd hoped. Still putting in multiple hours every day though. Glad you're still excited for it!
Yooo this looks brilliantly amazing! What a gameeee! Subscribed! Love these kinds of channels :D Wonder how much variety of gameplay there will be. Like a crazy taxi but in the future?
I love the project, for the edit try matching your voice volume with the music volume more Sometimes the music is way louder than you voice, but this is a small detail ofcourse What are you gonna use for the music in the game? Maybe make a system for uploading or linking you own mp3 file as a sort of radio.
Thanks for the comment. I really need to get a proper microphone (and get the guys that live above me to stop walking like elephants). I will try reducing the background music next time. For music, I'm likely going to go with dynamic music. Something that will match the player's intensities during gameplay (no gameplay objectives shown here).
a game where you play as taxi driver on a DYSTOPIAN MEGA CITY? awesome never saw that ideia before. kidding, the game is really cool im going to wishlist it on steam
@@CassiusJohnAdams fair enough haha ECS would probably help, because all card and objects would be mostly multithreaded. The downside is that coding takes a lot longer and you gotta start from scratch.
@@DevDunkStudio Fortunately I have very little logic built for the cars and pedestrians so far, so it's not a complete rewrite. Whether I use just the C# Job System by itself, or end up using ECS too I'm not sure yet. For now, I'm investigating Job System on it's own to see if it'll do the trick, and Profile that independently (so I can share those results). Without multithreading/parallelism, the cars are likely going to pose a problem to framerate so I'll definitely have to do something.
If you dont have any runtime need for manipulation for those 100k objects, theres no need having them separate as separate GO's. Chunk them into 100k tris-ish and put them through CombineMeshInstance. Also, the meshes of the building are so simple that you could get the same look with a low poly mesh + good normal maps. Occlusion culling also has a CPU cost, and if you put everything there, it can end up costing more that without culling at all. The GPU is a beast, it can handle a bunch of vertices if theyre within the same drawcall. Now the data you represent it is very choppy, you want it to be smooth.
Would be cool to use box trigger to drop people off vertically on buildings... or even thru the building to like a super supermarket skyscraper type... pop density and verity prob helped with the cost for low-budget pcs ...
You could make a chunk system or a variant of it, you can detect the area you are by position. You're surely using a fix for floating point precision and altering the zero position of your map, in that case you'll have to keep that position on a variable and use it as an offset for the chunks PS: I love your game PS2: just noticed this is an old video lol
I know this is a bit of an older comment, but I've read it a few times over the last month or so. I'm not sure I fully understand what you're suggesting. Are you able to rephrase? I'm not repositioning the zero position at all throughout the game. Floating point, from what I've seen, only starts becoming a problem when approaching the 10,000 position x, y, or z. Up until 10k it should still be accurate to 1cm if I recall. Anyways, I'd be curious to know what you mean about the chunk system?
Could you make a tutorial for lighting setup for large scenes please. btw your game looking awesome and thanks for the imposter i love it. but please share your experiences for lighting settings for large scenes
@@CassiusJohnAdams Hey, thanks for considering to add this option, I'm not alone with deciding not to buy a game (AAA or indie) if there is no option to turn off motion blur.
Hi, I don't know if this will be useful but if you are not concerned with buildings/props being reused at some point you can use object pooling to simply shift the position of some existing gameobjects around the player's position. You can have a theoretically infinite game world. Not sure how that would fit with your lighting setup though. Anyway thanks for the tips!
I haven't implemented my pooling system just yet but object pooling will only be used for the dynamic objects. That's still result in lots of resource savings. In my earlier tests, using pooling for the static buildings is problematic because of the baked occlusion culling. Moving buildings (in the Editor) post-bake and then going into play mode results in unwanted side effects.
Do you use job system for car Ai ? Or maybe full ecs stack? Also there are some invisible triangles in middle section of buildings im not sure if removing them will help they are just culled while rendering anyways.
I'm still working through the car AI. Right now there's no logic. I haven't been using any job systems nor ECS up to this point. It's likely I'll need to look beyond the traditional Unity way of doing things and implement some ECS. Regarding the invisible tris, yeah. They're on my list of things to get to a little later in development. Some are invalid backfaces, others just missing, and a few are in texture transparency.
IMO the taxi should have some different physics in collisions. In my high speed rocket riding game (Rocket Jockeys) I have implemented custom collision bounce back using some vector math to get smooth collisions while maintaining the flow. Here is a snippet: private void OnCollisionStay(Collision other) { //Bump off of walls if (other.gameObject.CompareTag("Wall") || other.gameObject.CompareTag("Pole") || other.gameObject.CompareTag("LowObstacle")) { if (other.relativeVelocity.magnitude > 20) TempDamage += other.relativeVelocity.magnitude * CollisionDamangeScaler; //damage float BumpBackForce = Vector3.Dot(myTransform.right, other.contacts[0].normal); //how much the right vector overlaps the normal (shallow collisions are glided instead of being very bouncy) float mult = Mathf.Abs(transform.InverseTransformVector(other.relativeVelocity).x); rb.AddRelativeTorque((1 - Mathf.Abs(BumpBackForce)) * Mathf.Sign(BumpBackForce) * 3 * mult * Vector3.up, ForceMode.VelocityChange); //bouncing off of the wall depending on angle of attack } } Note: this is implementing only side to side collisions and not bottom/top collisions which you need in your game as well.
I agree, collision physics could use some touch-up! Hey man, thanks a lot for sharing that code. I'll have a look at it, dissect it and see if it'll be helpful in my situation. I really appreciate you taking the time to post that!
Many of my objects are static (buildings etc) so I baked the occlusion culling for the entire scene. Then I implemented my custom "view corridor" triggers, so that only GameObjects that would be in view of the player are enabled. That eliminates about 70%+ of GameObjects from being calculated at all at any given time. Since most of my buildings are broken up into smaller segments/mesh/GameObjects, I still see decent results from the original occlusion culling bake on the GOs that are currently enabled.
What about investing some milliseconds on post production effects like rain and fog. So you can cover a lot of objects and they can be really low quality as you wont see them in detail. And it would add a lot of athmosphere to the experience.
Yeah, they are. In some of my earlier videos you can probably see a lot of fog. So much, in fact, that it produced 100% opacity beyond about 400 units ahead. That let me set the camera's far clip plane to about 450 units, saving me a fair chunk on processing. It more than made up for the expense of the fog and some additional PP I had at the time. But the visuals overall started to feel a little lower than I wanted to go.
this similar with the way i have plan to optimize my own game but i have pland to add extra optimize system 1.the first system to add trigger box in the wean the player enter to have more or lees view distance from dipping for haw closed or open each area are i have others ideas in the order to optimize my games but the problem is the others i ideas i have in mind is omost impassable make by my self 1. texture lood the idea is to have to change the texture depending for the distance if finding i way to do that everything i will looks better with out change the performance 2. the other idea i have is to make the billboard (imposter effects) but with 3D models 3. way that I think to optimize is to make i system that when is in specific tigers box to hide all the objects is not pasble to see this system sounds very easy to implement but the problem is my game have the option to play up to 4 players for the same devise that means that system is very hard to implement 4. to use ecs in my game Sean in the order to run everything faster the proble is i have no idea haw to use ecs (dots)
1. You can kind of do this already with Unity by setting your textures to Mipmapping. Unity will automatically make 1, 1/2, 1/4 and 1/8 scale version of your texture and automatically use the right scale at the right distance. This, however, comes with an increase in memory for the extra textures. 2. Amplify Impostor (mentioned in the video) does that kind of. The one I referred to in the video is here: ua-cam.com/video/G0ILW1cwuTc/v-deo.html But maybe I'm not sure what you mean. 3. Can you have a parent for all your player's with a rigidbody? That should allow all the players' colliders to register as a single source and then use that to enable/disable areas? Just a thought. 4. I haven't touched ECS yet. There may come a time when I have to, but for now things are ok.
@@CassiusJohnAdams don't worry you i have meny ideas to optimize my to by onest optimization is one of the things im i will not eny i know like fact the i will run with not problem in most computers Because Unlike your project my own project have way less objects not the project and my 3D models have way less polygons from your 3D in most cases But the only thing im not sure if able to implomate is the network system and and if able to optimize the for mobile because i have plan to that game i working on mobile and pc
Yeah, sorry about that. I've purchased a microphone since putting this video together. Not exactly sure how the music got so loud in some places and guess I didn't check the entire video prior to upload.
@@CassiusJohnAdams I meant the unity asset called "GPU Instancer". It uses instance indirect, so it would load the objects into the GPU memory only once. That way I was thinking, you maybe would not need atlassing
plz tell me bro how can we make a thing to renderd from far away like my camera far distance is 3oo butt i want a game object to render from 600 distance so what i have suppose to do plz help
not performance related but i feel like the city looks too monotone from what i can see . there is no distinct theme or land marks in any specific area so all the streets look too similar in most directions. i suggest making more unique things for each area that can function as land marks for players to navigate around and make your city more lively and memorable .
I think you need to rethink lighting, or put more work into it, because atm it looks like something from the source engine from 2008. Gameplay looks fun though!
@@GugureSux not sure why you are quoting "ugly" because I never said that, but ok. No, I'm not saying that, I'm saying that this game looks like those older games. I like those older games, they are great and most people agree that gameplay is more important than looks, but modern games look better than this, and I think there's a chance he could get it looking better with some effort, which would enhance the game.
"I spend about 60% of my time in optimization" Makes me optimistic, if that applies to everything, CD would only take another 17 years to make Cyberpunk as optimized as your game, and we'd finally be able to play it at 60 FPS!
My level is created in the editor, it's not dynamically generated. Some of the dynamic objects are generated, but again within the Editor, not at Runtime.
the taxi is too far away from monitor, I genuinely thought, the player is invisible and is chasing that taxi in front of him.. the motion blur is something I really don't like in games and the first thing I always disable.. also don't like how the taxi is indestructable and other cars are also indestructible, they ram you and not even move an inch to the side.. but all and all it looks amazing !
It'll still be necessary, both for static and dynamic objects. Once I've implemented a more robust pooling system for the dynamic objects it'll be less helpful (though every bit counts, right?). At that point it'll primarily be just for the static objects. Since my buildings are tiled/repeated in 90 degrees segments, and then replicated vertically as well, I still see significant improvements with the occlusion culling since many side and backs of buildings can then be culled.
Would the lighting data problem get better if you separated the level into multiple scenes and loaded/unloaded them additively? That would even help with mesh count!
Honestly, I don't know the answer to that, but it is something I previously thought about. I do know it will increase complexity in a number of other areas of my game's development. The lighting issue isn't just a technical one, aside from the huge number of Lightmaps it would produce and the LOD issue (below). It's problematic that essentially no sun light reaches the play area (with a few minor exceptions) due to the height of the game's skyscrapers. So all I really get is indirect light regardless of whether it's lightmaps or light probes. On top of that, I find Unity doesn't produce the results I want with regards to Lightmap on LOD buildings. Lightmaps apply to LOD0 - anything beyond that depends on Light Probes if I recall correctly. The end result was a "popping" between lightmap and light probe.
No, it's not. Wish I'd known about that when I started working on this project because I'm sure it would have been helpful. Although I'm not certain that's production-ready yet. Maybe.
I probably should have been more clear in the video. My initial idea was to use Amplify Impostors for the highest-level LOD on my building segments, each of which segment is broken into 4 (ex: north, east, south, west). Then it's tiled vertically to make the building. Impostors were costing me more this way for a few factors. 1 was the additional LOD level, which accounted for about 20k new GameObjects all in. That wasn't as big a deal as the 4 textures per impostor material needed for each building multiplied by dozens of buildings. Since these are large segments, the textures needed to be at least 2k to be passable. That lead to 200+ new 2k textures (all of which could appear in a single frame), which can't really be atlassed since the Impostor system has certain requirements. Even with instancing, statically batching, etc, the draw call (set pass) became very big, slowing things down as the CPU prepared and passed them to the GPU. Instead I opted for single GameObject per building and 16 x 4k atlassed textures which accounts for the highest LOD for all buildings in the game. All this said, I am in fact using Amplify Impostors in the game for some smaller static objects and plenty of dynamic objects as well. These items can all get by on 256px (4 texture Materials) impostor LOD levels. There's somewhere between 30-50 of them presently. That does take some CPU for the 30-50 draw calls prep, but they are GPU instanced since there are many multiples of each dynamic object, so there's definitely a savings in those cases. I have yet to fully validate that the GPU instancing is faster than the dynamic batching but so far my suspicion is that it is in my case. Sorry for the long-winded answer.
Often, but not always. Sometimes the occlusion process itself is more CPU-intensive than the resources you're trying to save. Always measure the results in a standalone build :)
The Fifth Element . . My favorit movie of all time! Loving the resemblance of the city 👌👌
Thanks! :)
And this is perfect ad of your game, you did a great job sir!
P.S. I'd reduce motion blur by half, the car almost completely washed out while driving ;)
agreed
Yeah way too much motion blur I got confused what was happening while watching a lot
0:57 impostors
3:50 occlusion culling
7:28 lighting
8:35 reflection probes
9:01 disabling gameobjects
Your game concept is outstanding and I really like the performance tricks! The thing that I would love to see in your game is a night enviroment with a dense fog and beam lights from the city and and cops!
Beautiful! As a scifi head i can totally see myself getting lost in there for hours!
Extremely impressive, nicely done! Subbed and wishlisted. I'll be looking into using these techniques myself! Thank you for this video.
Right on, thank you! I'd be happy to hear if some of these techniques help you out, or if you discover additional ways of achieving better performance in your project.
On yt there really arent many optimasation tutorials so watching this was really nice
I love the idea crazy taxi meet 5th element it looks amazing 👏 keep up the great work 👍
Thank you!
Really IMPRESSIVE!!
Glad you liked the video! Also, thank you for the support on Steam. :)
followed and wishlisted, hope to see more of your development progress. This is good game dev knowledge to have! :)
Thank you! Hope it was helpful. More videos will be coming over the upcoming few weeks.
Super interesting to how about these improvements you made. It's baffling just how much certain solutions can help.
Yes, there's been a lot of trial and error, time spent in the Profiler, and realization that no 1 solution fits all my objects. Glad you found the video interesting!
volumetric lighting would be a perfect fit for your game, great video
Oh man, this reminds me of NYR: New York Racing from PS2! Awesome!
Interesting devlog mate, great work!
More optimization videos :D
Great video
More to come, but I have one or two other videos to get to first. Stay tuned!
Love the Multipass-Ad. Wishlisted!
Wow nice! As a concept artist, i suggest you to add more fog/ pollution, and more lights and shadows contrast. But depends on the style that you are looking too. Its looking cool!
Yeah some post-processing effects would do wonder too
Thanks. Fog and pollution is still to be worked on. As for the lights/shadows, there isn't really any because the buildings are so damned tall that sunlight doesn't actually reach down to where the player is. It's all ambient light. I've been thinking about cheap (computationally speaking) ways of having some shadows and direct sunlight without it looking silly in the scene - since there wouldn't realistically be any - similar to a very overcast day.
@@CassiusJohnAdams Ah i see nice. I was referring to artificial lights (like the advertising, street lights, etc. And more occluded areas( like under the bridges or narrow streets) About the resources i've no idea, i just suggested what i thought. I'll be looking forward your progress! Good luck!
This is honestly quite amazing. Keep up the great work!
Crazy Taxi meets The Fifth Element?
That's definitely my bag, baby!
Also, thanks, this video is super helpful as I'm trying to understand how to make a concept work on the quest 2 and it's limited hardware
Good to hear that. :) And glad the video was helpful!
Really nice to watch the performance enhancements
This is probably one of the most believable and addictive game I have seen in my life. Keep up the Good work.
Impressive, looks like it feels lovely and fluid.
That camera follow is sweet
This is pretty cool looking. Thanks for the tips. We are in the early phase of making a game so I think there is a lot to learn from your experience. I guess Ill have to go look on your channel for a game synopsis. Once again thank you.
This looks awesome, and I appreciate the knowledge provided as well.
I love it, ima get the game because this is so inspirational for my own projects, not for public sale, but still none the less a huge project that has many objects. Thanks for making this!
Thank you! :)
looks pretty good, congratulations
and this is done without DOTS ? Amazing
@@bezoro-personal i wouldnt call it basic optimization
@@bezoro-personal gave me a laugh, i really do agree, most people would spend years learning unity and making games but still lack some very basic skills and knowledge... too bad ig, this is just too powerful to be missed !
Wow....this game looks amazing!
Thank you! :)
Amazing video, I’m gonna work on some 3D games in 2021 so your tips on improving performance will come in handy.
Thanks! And I watch some of your videos too.
Thats pretty amazing. Love the Toronto street signs
Thanks! Figured I'd keep the map and signs local. :)
We need someone like you to teach to the VRChat world creation community how to optimize their worlds 😮
I haven't worked in VR, but I understand you need to hit a minimum framerate of 90, per eye. That's a pretty tough task. But hardware is always getting better, so it's up to artist and developers to make sure to continue to keep things streamlined to take advantage of the better hardware efficiently.
@@CassiusJohnAdams VRChat can be played without VR Headsets and 30 FPS in VR is socially accepted in VRChat for crowded events in worlds made by enthusiasts. If you have time, give VRChat a try and you will see the mess xD. Cheers!
I make vrchat worlds, the game is inherently cumbersome and poorly optimized for a lot of machines because of its players, their avatars and pickupable objects & mirrors. Occlusion culling, baked lights, no reflection probes & texture atlasing help the worlds only a bit
Came looking for gold, found a diamond. It's a win boys.
Seems very good project. I personely loved the movie of Bruce Willis that he was driving this kind of taxi.
I am really impressed with the quality of the game here! It's so cool to see Indie producing this level of quality! I have some constructive critique here:
- Motion Blur: As you know already, it is too much, I can't see the subject(Taxi) clearly and just vanishes. Just need to implement it correctly
- Textures: There are some scenes in your game where the same texture is repeated over and over again. Also, there isn't much of a variety between textures themselves. When you take a look at GTA V, the texture variety is just amazing! You can almost not find any repeating patterns and the object textures are full of surface imperfections (crack in glass, dust collected on cars(if your game has any scene with static cars as subject), dirty cars, damaged cars). There is just so much potential for this game and so much details can be added to make this game really really good.
Liked and subbed. Waiting for another devlog. All the best !
Thanks for the constructive feedback!
For most of this you're preaching to the choir, so to speak. There isn't anything you've mentioned that I haven't already considered to some degree or another. For the most part, it's not that I can't do them, it's more that I want to be sure the game gets finished and that I limit the amount of scope creep (I've been very strict on myself about this). On top of that, there's obviously performance impacts I need to take into consideration.
It's important that I'm realistic with myself by not holding myself to the standards of AAA games, GTA, etc. They have hundreds, maybe thousands, of people working on those games - I'm just one person.
One thing you mentioned, which I hadn't really considered, is decaling the static objects, such as stationary cars (buildings already have some). I don't want to get into the task of changing up mesh/models too much, but decaling to "dirty things up" on those non-building static objects is quick and cheap performance-wise. I think this is do-able in my timeframe.
Thanks again for taking the time to offer your feedback! It's very helpful. :)
Still waiting to play the demo but yet so far nothing on Steam *frown* either way I am excited for this!
Yeah, as is always the case, things are taking longer than I'd hoped. Still putting in multiple hours every day though. Glad you're still excited for it!
Watch out for jumping Milla Yovovich!!!
Reminds me movie "The sixth element", old good times :)
Fifth ;)
what a lovely game, loved the tips
Thank you 😊
Great work! :)
Yooo this looks brilliantly amazing! What a gameeee! Subscribed! Love these kinds of channels :D Wonder how much variety of gameplay there will be. Like a crazy taxi but in the future?
Well done! Nice game and nice video!
Thank you.
Amazing. Well done
Thank you so much 😀
Bro amazing game bro I will wishlist this game now
Great job!
this game is beautiful
Amazing 🔥
I love the project, for the edit try matching your voice volume with the music volume more
Sometimes the music is way louder than you voice, but this is a small detail ofcourse
What are you gonna use for the music in the game? Maybe make a system for uploading or linking you own mp3 file as a sort of radio.
Thanks for the comment. I really need to get a proper microphone (and get the guys that live above me to stop walking like elephants). I will try reducing the background music next time.
For music, I'm likely going to go with dynamic music. Something that will match the player's intensities during gameplay (no gameplay objectives shown here).
Nice job!
You probably want to enhance you voice recording. It would definitely make you content better.
This is insane
a game where you play as taxi driver on a DYSTOPIAN MEGA CITY? awesome never saw that ideia before. kidding, the game is really cool im going to wishlist it on steam
Right on! Thanks for wishlisting!
Check out Quarantine from 1994
the game looks very nice ..
Optimising this looks like fun!
Would love to see more!
Do you use ECS for this?
It's fun and frustrating at the same time :)
No I don't use ECS. But I am currently considering the C# job system, maybe ECS too.
@@CassiusJohnAdams fair enough haha
ECS would probably help, because all card and objects would be mostly multithreaded. The downside is that coding takes a lot longer and you gotta start from scratch.
@@DevDunkStudio Fortunately I have very little logic built for the cars and pedestrians so far, so it's not a complete rewrite. Whether I use just the C# Job System by itself, or end up using ECS too I'm not sure yet. For now, I'm investigating Job System on it's own to see if it'll do the trick, and Profile that independently (so I can share those results). Without multithreading/parallelism, the cars are likely going to pose a problem to framerate so I'll definitely have to do something.
amazing
Nice video.. Good dev vlog..
This what driving was supposed to be in cyberpunk
If you dont have any runtime need for manipulation for those 100k objects, theres no need having them separate as separate GO's. Chunk them into 100k tris-ish and put them through CombineMeshInstance. Also, the meshes of the building are so simple that you could get the same look with a low poly mesh + good normal maps. Occlusion culling also has a CPU cost, and if you put everything there, it can end up costing more that without culling at all. The GPU is a beast, it can handle a bunch of vertices if theyre within the same drawcall. Now the data you represent it is very choppy, you want it to be smooth.
Great project, although the camera movement might cause motion sickness in some people
Weaklings...
Lulu Dallas! Multipasport!
Would be cool to use box trigger to drop people off vertically on buildings... or even thru the building to like a super supermarket skyscraper type... pop density and verity prob helped with the cost for low-budget pcs ...
You could make a chunk system or a variant of it, you can detect the area you are by position. You're surely using a fix for floating point precision and altering the zero position of your map, in that case you'll have to keep that position on a variable and use it as an offset for the chunks
PS: I love your game
PS2: just noticed this is an old video lol
I know this is a bit of an older comment, but I've read it a few times over the last month or so. I'm not sure I fully understand what you're suggesting. Are you able to rephrase?
I'm not repositioning the zero position at all throughout the game. Floating point, from what I've seen, only starts becoming a problem when approaching the 10,000 position x, y, or z. Up until 10k it should still be accurate to 1cm if I recall.
Anyways, I'd be curious to know what you mean about the chunk system?
Could you make a tutorial for lighting setup for large scenes please. btw your game looking awesome and thanks for the imposter i love it. but please share your experiences for lighting settings for large scenes
nice video, if you have time can you create more video on performance tips? good luck mate!
Thanks. And I will definitely try to include more optimization details in future devlogs.
Please have an option to get rid of the motion blur completely. Unfortunately there are some of us who get sick. My eyes start to hurt after a bit.
Thanks for the feedback. I'll try and get the option in for initial release.
@@CassiusJohnAdams Hey, thanks for considering to add this option, I'm not alone with deciding not to buy a game (AAA or indie) if there is no option to turn off motion blur.
Great video! Would you please explain why static batching got that much huge space?
This reminds me of that episode of Dr Who
This reminds me of the fifth element
bro crazy taxi fith element edition this would of actually been amazing on PSone
Ditch the music.
game kinda gives me claustrophobic vibes 😅.. but the city looks real neat :D smooth game so far👍
Hi, I don't know if this will be useful but if you are not concerned with buildings/props being reused at some point you can use object pooling to simply shift the position of some existing gameobjects around the player's position. You can have a theoretically infinite game world. Not sure how that would fit with your lighting setup though. Anyway thanks for the tips!
I haven't implemented my pooling system just yet but object pooling will only be used for the dynamic objects. That's still result in lots of resource savings.
In my earlier tests, using pooling for the static buildings is problematic because of the baked occlusion culling. Moving buildings (in the Editor) post-bake and then going into play mode results in unwanted side effects.
"why was this recommended to me?"
*Impostors*
"ah"
Sega and CDPR will sue you for making Crazy Taxi 2077 😂. Jk, nice game though
Hmm.. I think you are insane. This insane will lead you to success. That what I think for now.
Do you use job system for car Ai ? Or maybe full ecs stack? Also there are some invisible triangles in middle section of buildings im not sure if removing them will help they are just culled while rendering anyways.
I'm still working through the car AI. Right now there's no logic. I haven't been using any job systems nor ECS up to this point. It's likely I'll need to look beyond the traditional Unity way of doing things and implement some ECS. Regarding the invisible tris, yeah. They're on my list of things to get to a little later in development. Some are invalid backfaces, others just missing, and a few are in texture transparency.
Very cool. Hello from Reddit
Thank you!
Super game
IMO the taxi should have some different physics in collisions.
In my high speed rocket riding game (Rocket Jockeys) I have implemented custom collision bounce back using some vector math to get smooth collisions while maintaining the flow.
Here is a snippet:
private void OnCollisionStay(Collision other)
{
//Bump off of walls
if (other.gameObject.CompareTag("Wall") || other.gameObject.CompareTag("Pole") || other.gameObject.CompareTag("LowObstacle"))
{
if (other.relativeVelocity.magnitude > 20) TempDamage += other.relativeVelocity.magnitude * CollisionDamangeScaler; //damage
float BumpBackForce = Vector3.Dot(myTransform.right, other.contacts[0].normal); //how much the right vector overlaps the normal (shallow collisions are glided instead of being very bouncy)
float mult = Mathf.Abs(transform.InverseTransformVector(other.relativeVelocity).x);
rb.AddRelativeTorque((1 - Mathf.Abs(BumpBackForce)) * Mathf.Sign(BumpBackForce) * 3 * mult * Vector3.up, ForceMode.VelocityChange); //bouncing off of the wall depending on angle of attack
}
}
Note: this is implementing only side to side collisions and not bottom/top collisions which you need in your game as well.
I agree, collision physics could use some touch-up!
Hey man, thanks a lot for sharing that code. I'll have a look at it, dissect it and see if it'll be helpful in my situation. I really appreciate you taking the time to post that!
How did you implement the Occlusion Culling?
Many of my objects are static (buildings etc) so I baked the occlusion culling for the entire scene. Then I implemented my custom "view corridor" triggers, so that only GameObjects that would be in view of the player are enabled. That eliminates about 70%+ of GameObjects from being calculated at all at any given time. Since most of my buildings are broken up into smaller segments/mesh/GameObjects, I still see decent results from the original occlusion culling bake on the GOs that are currently enabled.
What about investing some milliseconds on post production effects like rain and fog. So you can cover a lot of objects and they can be really low quality as you wont see them in detail. And it would add a lot of athmosphere to the experience.
PP effects are REALLY heavy.
Yeah, they are. In some of my earlier videos you can probably see a lot of fog. So much, in fact, that it produced 100% opacity beyond about 400 units ahead. That let me set the camera's far clip plane to about 450 units, saving me a fair chunk on processing. It more than made up for the expense of the fog and some additional PP I had at the time. But the visuals overall started to feel a little lower than I wanted to go.
this similar with the way i have plan to optimize my own game but i have pland to add extra optimize system
1.the first system to add trigger box in the wean the player enter to have more or lees view distance from dipping for haw closed or open each area are
i have others ideas in the order to optimize my games but the problem is the others i ideas i have in mind is omost impassable make by my self
1. texture lood the idea is to have to change the texture depending for the distance if finding i way to do that everything i will looks better with out change the performance
2. the other idea i have is to make the billboard (imposter effects) but with 3D models
3. way that I think to optimize is to make i system that when is in specific tigers box to hide all the objects is not pasble to see this system sounds very easy to implement but the problem is my game have the option to play up to 4 players for the same devise that means that system is very hard to implement
4. to use ecs in my game Sean in the order to run everything faster the proble is i have no idea haw to use ecs (dots)
1. You can kind of do this already with Unity by setting your textures to Mipmapping. Unity will automatically make 1, 1/2, 1/4 and 1/8 scale version of your texture and automatically use the right scale at the right distance. This, however, comes with an increase in memory for the extra textures.
2. Amplify Impostor (mentioned in the video) does that kind of. The one I referred to in the video is here: ua-cam.com/video/G0ILW1cwuTc/v-deo.html But maybe I'm not sure what you mean.
3. Can you have a parent for all your player's with a rigidbody? That should allow all the players' colliders to register as a single source and then use that to enable/disable areas? Just a thought.
4. I haven't touched ECS yet. There may come a time when I have to, but for now things are ok.
@@CassiusJohnAdams don't worry you i have meny ideas to optimize my to by onest optimization is one of the things im i will not eny i know like fact the i will run with not problem in most computers Because Unlike your project my own project have way less objects not the project and my 3D models have way less polygons from your 3D in most cases
But the only thing im not sure if able to implomate is the network system and and if able to optimize the for mobile because i have plan to that game i working on mobile and pc
This video is so cool but the music being louder than your voice blew my ears
I don't know what the game is about, but I hope you add the ability to go through giant buildings and the ability to fly to another planet
Yeah, sorry about that. I've purchased a microphone since putting this video together. Not exactly sure how the music got so loud in some places and guess I didn't check the entire video prior to upload.
Can you please do a tutorial on Atlas texturing, it seems this is the way..........
I have one planned (in early planning right now). Stay tuned. When it's ready, hopefully I'll be able to provide you with some good tips/pointers.
Also did you try the GPU Instancer? Maybe you would not have to do the atlassing
Yes, I'm using plenty of GPU instancing where I've found it to make sense - dominantly on my dynamic objects. I use it in combination with atlassing.
@@CassiusJohnAdams I meant the unity asset called "GPU Instancer". It uses instance indirect, so it would load the objects into the GPU memory only once. That way I was thinking, you maybe would not need atlassing
Oh, my bad. I haven't investigated that on the Asset Store. Will check it out!
6:45 999999iq collisions
Hehe. Yeah, the NPC AI isn't implemented yet.
what i was expecting from Cyberpunk 2077
Nice but i do have one question? Do you have a multipass?
plz tell me bro how can we make a thing to renderd from far away like my camera far distance is 3oo butt i want a game object to render from 600 distance so what i have suppose to do plz help
not performance related but i feel like the city looks too monotone from what i can see . there is no distinct theme or land marks in any specific area so all the streets look too similar in most directions. i suggest making more unique things for each area that can function as land marks for players to navigate around and make your city more lively and memorable .
I think you need to rethink lighting, or put more work into it, because atm it looks like something from the source engine from 2008. Gameplay looks fun though!
...are you saying that Source 2008 looks somehow..."ugly"?
@@GugureSux not sure why you are quoting "ugly" because I never said that, but ok. No, I'm not saying that, I'm saying that this game looks like those older games. I like those older games, they are great and most people agree that gameplay is more important than looks, but modern games look better than this, and I think there's a chance he could get it looking better with some effort, which would enhance the game.
"I spend about 60% of my time in optimization"
Makes me optimistic, if that applies to everything, CD would only take another 17 years to make Cyberpunk as optimized as your game, and we'd finally be able to play it at 60 FPS!
How do you bake dynamic occlusion culling? I mean your level isn't created in Editor but on Runtime, right?
My level is created in the editor, it's not dynamically generated. Some of the dynamic objects are generated, but again within the Editor, not at Runtime.
the taxi is too far away from monitor, I genuinely thought, the player is invisible and is chasing that taxi in front of him.. the motion blur is something I really don't like in games and the first thing I always disable.. also don't like how the taxi is indestructable and other cars are also indestructible, they ram you and not even move an inch to the side.. but all and all it looks amazing !
Thanks for all the feedback! It's all still a work in progress.
@@CassiusJohnAdams cool, I'll keep my eyes on this game !
hey havw you checked the sub scene thing they used in the Mega City demo? could suit your project
I haven't yet but I will. Thanks.
Is there a part in the game where Milla Jovovich crashes through the roof of the cab wearing nothing but bandages?
Will it be necessary to use the occlusion culling implemantation, when you finished your disabling game objects approach?
It'll still be necessary, both for static and dynamic objects. Once I've implemented a more robust pooling system for the dynamic objects it'll be less helpful (though every bit counts, right?). At that point it'll primarily be just for the static objects. Since my buildings are tiled/repeated in 90 degrees segments, and then replicated vertically as well, I still see significant improvements with the occlusion culling since many side and backs of buildings can then be culled.
Would the lighting data problem get better if you separated the level into multiple scenes and loaded/unloaded them additively? That would even help with mesh count!
Honestly, I don't know the answer to that, but it is something I previously thought about. I do know it will increase complexity in a number of other areas of my game's development.
The lighting issue isn't just a technical one, aside from the huge number of Lightmaps it would produce and the LOD issue (below). It's problematic that essentially no sun light reaches the play area (with a few minor exceptions) due to the height of the game's skyscrapers. So all I really get is indirect light regardless of whether it's lightmaps or light probes. On top of that, I find Unity doesn't produce the results I want with regards to Lightmap on LOD buildings. Lightmaps apply to LOD0 - anything beyond that depends on Light Probes if I recall correctly. The end result was a "popping" between lightmap and light probe.
Is this based on the DOTS template?
No, it's not. Wish I'd known about that when I started working on this project because I'm sure it would have been helpful. Although I'm not certain that's production-ready yet. Maybe.
Wait how is Amplify Impostors cost you more performance? Its just a 2d sprite?
I probably should have been more clear in the video. My initial idea was to use Amplify Impostors for the highest-level LOD on my building segments, each of which segment is broken into 4 (ex: north, east, south, west). Then it's tiled vertically to make the building. Impostors were costing me more this way for a few factors. 1 was the additional LOD level, which accounted for about 20k new GameObjects all in. That wasn't as big a deal as the 4 textures per impostor material needed for each building multiplied by dozens of buildings. Since these are large segments, the textures needed to be at least 2k to be passable. That lead to 200+ new 2k textures (all of which could appear in a single frame), which can't really be atlassed since the Impostor system has certain requirements. Even with instancing, statically batching, etc, the draw call (set pass) became very big, slowing things down as the CPU prepared and passed them to the GPU. Instead I opted for single GameObject per building and 16 x 4k atlassed textures which accounts for the highest LOD for all buildings in the game.
All this said, I am in fact using Amplify Impostors in the game for some smaller static objects and plenty of dynamic objects as well. These items can all get by on 256px (4 texture Materials) impostor LOD levels. There's somewhere between 30-50 of them presently. That does take some CPU for the 30-50 draw calls prep, but they are GPU instanced since there are many multiples of each dynamic object, so there's definitely a savings in those cases. I have yet to fully validate that the GPU instancing is faster than the dynamic batching but so far my suspicion is that it is in my case.
Sorry for the long-winded answer.
So just plug occlusion culling in there and it works, great!
Often, but not always. Sometimes the occlusion process itself is more CPU-intensive than the resources you're trying to save. Always measure the results in a standalone build :)