u/josh_the_dev

661 post karma · 2,874 comment karma · joined Mar 2021

josh_the_dev

How is this a tutorial or a resource?

Can you tell us about the techniques used behind the scenes?

josh_the_dev

If i understand your solution correct you use bone deformation as well as shapekeys at the same time. I was was thinking regarding performance in a game engine for example, why not use just shapekeys (no bones at all, do the entire deformation in shapekeys) or use only bones with no shapekeys as i described with two bones. Both will yield the almost the same result with nearly 0 volume loss.
I tried both and they work great and feel easier to me. Let me know if I missed something about your method.

There are many solutions how to create these but here are two easy ones.

Only using shapekeys:
- Create the same spring twice: One fully compressed, one fully extended.
- Select both and in the shapekey menu use the dropdown and choose "new from Objects"

For using only bones:
- create a spring that is halfway compressed (this is best so the tilt of the edgeloops is a good inbetween)
- create the same halfway compressed spring but with 0 profile radius (only the spine)
- add an armature with 2 bones one at the bottom, one at the top.
- for the spine one, create linear weights from top to bottom (ideally use geonodes, but if you want to do it manually use the gradient tool in weightpainting and set the falloff to linear)
- add a datatransfer modifier to the normal spring and copy weights from the spine. Use vertex data, vertex groups and mapping = nearest vertex.

I hope this makes sense to you

josh_the_dev

Why not use a shapekey for the full deformation at that point?

Or alternatively only use bones 2 bones and use movement instead of scale. You can weight every vertex so that the spring stays correct

josh_the_dev

In my opinion assembly in blender is really not the bottle neck. To be fair I am familiar with blender and other tools, but I believe anyone can learn the needed steps in one evening.

You will be more precise and likely even faster doing it by hand. It's a 5 min part of the task.

The only benefit I see is when you have to create a lot of characters (like 10+ in one go) and are more interested in automation of the workflow than pushing quality to the max for each model

josh_the_dev

Watch the gmtk (YouTube) series about stealth games. Good overall info for stealth game design

josh_the_dev

You can always use a 3D block out as basis for your 2D sprite. A lot of games actually have 3D models and just render them into sprites for more consistent 8 direction views for example. I'd say it depends on the game but generally speaking 2D is easier. It's always faster to make and you can get away with much more "cheating". Totally depends on the art style and game though

josh_the_dev

This is how every 3D program interpolates UVs. Linear per triangle. You could however build a custom shader that uses a different sampling. It's important that all 4 points are known. Then you could do a bilinear interpolation, that would look clean and undistorted but it's not a true perspective distortion since it ignores depth. A true perspective distortion has to infer depth e.g. by assuming your quad is always a rectangle in its imaginary world space. You can Google the formulas to make this in the shader graph

josh_the_dev

Something else

josh_the_dev

I think so yeah, but you can always just take these two nodes, make a node group and reuse it whenever you need! I have a small asset library with stuff I use commonly

josh_the_dev

The flip faces is important because I mirror the geo by scaling it -1 on x axis. This inverts the normals. So to fix it I flip the faces afterwards.

josh_the_dev

Similar to using the modifiers with mirror and array. It has no real benefit in this basic setup. But geometry nodes are nice if you need more flexibility. For me personally geo nodes are really great once you understand them a bit.

Regarding the screenshot: only the selected part is real. First I mirror the geometry and then do the radial symmetry.

https://preview.redd.it/7byjecczyevh1.png?width=1440&format=png&auto=webp&s=ffc20dc3249ebf20dafd16ba9c90b449bf108301

josh_the_dev

The array modifier is a great solution. Geometry nodes would be another very flexible solution.

Don't sweat it, any non destructive symmetry will be fine!

josh_the_dev

Honestly it's not that bad. Obviously learning programming on a professional level takes quite some time but then it's not that much slower, at least for me personally

josh_the_dev

Interesting! If we take the result from a video mocap and synthesize some marker positions could it be used to clean up the video mocap?

josh_the_dev

If you want to support bumping into each other etc I think it would be best to use physics. You can still use your idea with with hand authored tracks and smoothed out pathes. To make a physics driven vehicle follow a curve definitely check out PID controllers, should be a very good approach here. If the bot is bumped it can react completely natural with the physics and it would automatically try to get back on track

josh_the_dev

I use AI in some projects and I found that it is extremely important to be at least in camp 2. Otherwise it's almost impossible to build an actual system that works robust enough and that you can actually work with.

Understanding your every line of your code is not as important in my opinion. I am able to understand every line of my code in general but I don't necessarily check out every line of code unless I have to. This has not changed since AI, I always worked that way.

josh_the_dev

It's a bit unclear what you are asking. But Ill try my best to give some info: - scriptable objects should primarily used as static data containers (do not try to change values at runtime unless you know what you are doing) - scriptable objects (SO) are great for storing things like item name, item description, icon, item category or whatever you have. So you can have a scriptable object for apple, one for pistol, one for ammo for example. - you should not try to save amount, degradation state, current rounds loaded or any of these changing values on the scriptable object. - you could for example have a runtime inventory that has a list of ItemEntry or something like this. An item entry has the item type (you scriptable object) and a degradation state. In this runtime inventory you can now have 3 different apples with different degradation states depending on how long they each rot in you inventory for example. How you persist this runtime inventory is another problem but you could start with using just the JSON serializer (JsonUtility) built in with unity.

Hope this helps a bit

josh_the_dev

Good to know. Might take a look at mold for an upcoming project. Cheers!

josh_the_dev

Cool! Thanks for the info. I'm the creator of procedural UI image on the assetstore. Would you say you make my asset obsolete (since you have ugui support)?

josh_the_dev

Hey, looks nice I'm sure it's great and has its place! For me personally it looks like a copy of shapes (the one by Freya Holmer) on first glance. I think it's mainly because of how the marketing material is designed, it looks like you direktly took heavy inspiration from that asset. Just my feedback in case people don't see the differentiating factor

josh_the_dev

From what I can see there is only one relevant mechanic that player have to understand to play the game. They have to swipe to move the cube to a different lane. You don't need a full blown tutorial for that.

Ideally you have a main menu where the cube is already there, by swiping the cube over to a different lane the game starts. You can show this moving hand icon in the menu.

Everything else can be discovered during the game.

Alternatively if you don't want to / can't integrate this in the main menu just let players play immediately. If they die without having moved the cube at all, then display a short explanation that you have to swipe to move. People who get it, aren't bothered by a tutorial at all and people who don't get it get help after a first very short try.

josh_the_dev

Knife tool (K) or join two vertices (J) to create inner edges.

josh_the_dev

At that point why are you using unity?

I mean if you don't use scenes, prefabs, scriptable objects you are only really using the rendering system. (I assume you don't use the animation system either since it would be a pain without prefabs etc)

What is the reasoning? Do you not like unity's workflows? Do you want to stay independent of unity in case some weird pricing model gets introduced and you need to run to a different engine? Is it just the feeling of having to control everything? I'm genuinely curious?

josh_the_dev

Yes it is, see other comment. Actually that might work, give it a go!

josh_the_dev

Unfortunately it is no longer developed. But it's seriously the best out there in my opinion. You can still get it to work without many problems but I understand that you want a smoother experience especially as someone new to unity. Good luck!