Heavy processing of asset "Outline Effect" - c#

I'm trying to show the outline of a 3D object using an Outline Effect.
I actually installed the assets and included them in my project.
However, when the component "Outline Effect" was added to the camera, the FPS of the game was reduced by about 20%.
Also,as confirmed by the Profiler window, approximately 50% or more of the processing of the game was used by Outline's Renderer.
The number of objects is not very large.
I feel like I'm using it the right way, but I'm doing one exceptional thing, which is to make the Outline a prefab and generate it.
Is this the reason for heavy processing?
Also, "Outline Effect" must be a great asset, but if you know of any other way you can dynamically show / hide contours, please let me know.

Related

How to make soft body (jello) objects or arrays? [duplicate]

I am currently using the NVIDIA FleX package in Unity3D to create soft-bodied, jelly objects. I'm using Unity for animation only, not game dev.
What I am aiming to make is a transparent, jello sphere that retains its spherical shape with elasticity.
The first way I've tried to achieve this is using Flex Array + fluid setting. I've been playing with the settings but I can't get it to remain a sphere, it just becomes a more/less viscous fluid blob.
The second way is using the Flex Soft + fluid setting. It is much better in terms of physics but even with "draw particles" off, but the water droplets are each separated and not one jelly sphere.
This is what it looks like before hitting play, where the left is with Flex Array and the right is Flex Soft. The particles for Array are visible but not for Soft.
This is after hitting play, where the Array becomes one viscous fluid, but not a sphere, and the Soft is very jello-like but the water droplets are all separated.
A solution for either of the two ways would be much appreciated!
the standard approach is to create an Nvidia Flex Controller first...
Then you should also create a Flex Soft Asset...
Then you should create or select a game object and through the Add Component tab in the game object's inspector, find the Flex Soft Actor component [see it loaded up in the image below]...
Ensure your Soft Actor Asset mentioned previously has your required mesh type selected in the inspector option [I chose sphere in the image here] and check to see it looks something like the image below to be sure...
So after that, hopefully, you can just press play and see it in action as it drops and contorts for you.
If not, I have created a quick example for you to download as a unitypackage.
It may still require further resolution with the package manager as the Flex plugin is already inside the package I'm providing here[Using Unity 2020.3.5f1]
Flex in unity package
Anyway, hope this gets you started and somewhere towards your goal with Flex.
As a bonus, I've added a small script to move the flex object as this is outside of the usual approach as we have to call to the NVidia Flex component class of choice and invoke the ApplyImpulse method.
Cheers :)
Edit: There are a small 3 set of tutorials from NV Gameworks on integrating the plugin with Unity and exampling some stuff - this "stuff" is included in my downloadable package provided above.
Here is the youtube link to the 3 set:
Nvidia Gameworks FleX tutorials on Youtube
Edit 2: rereading your question made me think I hadnt really given you the definitive answer as to using a cloth actor and having the mesh renderer deform via the flex cloth deform component.
I am providing another link to another unity package here that will show this in action also allowing you to see the game object and how the cloth component from NVIDIA Flex works with the standard mesh filter and mesh renderer. Hope this more accurately answers your question :)
Example also using Cloth Actors as well as Soft Actors in NVIDIA FleX

How to set graphics for just part of the screen? - Unity

I have a really peculiar question. I want to deteriorate the graphics in Unity of just a part of the screen. For example, if I'm playing a game with the screen split in two, one player can be playing with ultra graphics and the other, low ones. Is there a simple way of doing this, like setting the graphics quality on each camera? Thank you so much for your help!
I don't imagine and easy way to do that.
Graphics are the conglomerate of multiple things (at least for me); the number of polygons of an object, the size of the textures, etc.
So the only thing I know you can do, is to duplicate the scene (like if you are making and on-line game) and load this duplicate scene with different materials, models and textures on one player scene. Then synchronize the rest of the scene, so both players are looking the "same" scene.
Also you can "deform" the image, with shaders or camera filters, like a Blurr effect! But this won't really affect the "graphics".
I don't think that's currently possible. The game would have to render the same objects on 2 different ways, but that's just not possible in a good-performance scenario. You could very simple use prefabs with a lower quality on one of the screens or images with a lower resolution in the UI.
Do you really need this for your game? If u do some changes in the quality settings or change your game core mechanics, maybe the performance becomes good enough to skip this.

In Unity, is UI system much worse in terms of performance than using 2D sprite?

I'm making a card game(such as Hearthstone) with Unity, since there're many texts, I'm using the UI system to make the whole game, meaning each card is an UIImage with an animator on it.
My game is kind of slow when running on old cell phones such as iPhone 6S. I'm not sure if it's caused by not using sprite system with UI texts' transforms attached to the card sprites.
So as the title says, is UI system much worse in terms of performance than using 2D sprite?
Yes, in general, UI is worse.
This opinion is based on the Unity optimization videos and articles.
where they mention things like:
When one or more elements change on a Canvas, the whole Canvas has to be re-analyzed to figure out how to optimally draw its elements.. and other similar performance issues (see article link below)
references:
https://create.unity3d.com/Unity-UI-optimization-tips
https://youtu.be/_wxitgdx-UI?t=1418 (lots of details about why its slow)
But of course you should use profiler your app in device to see whats the actual cause for slow down.

how to create a responsive scene

I'm currently creating a 2D Android and iOS game using Unity3D engine. I'm testing the game on a nexus 5, and an iPhone 5s device. Everything until now is working fine and I am pretty happy with the result, but when I test that application on an iPad or a Samsung tablet all the objects in my game scene are not in the correct position anymore. Is this a common problem in Unity3D ?
I know I am missing something but I tried to do some research and what I found is only by changing the orthographic camera scale might fix this problem, but I found it as a big amount of code to write as my game have not only one scene but multiple scenes and every scene have it's own game objects.
Is there any other method to do, a good and simple work around for this problem?
It's all about setting the Anchors right.
If you're using the new UI System, make sure you anchor the objects where you want them to be, that's how you will achieve resolution independence.
For more information about anchoring, see this tutorial
Don't have separate scenes for separate devices. You can use the Screen object to check the height and width of your display. Then you can use this to set the orthographic size of your camera to something that makes everything visible as expected.
Update: I misunderstood your question, you say GameObject, i understand UI.
Please check this. I don't have this issue on my game. But when i try it with mac or windows machines, it is problematic. So maybe this can solve.
Other solution is more common which is you and Agumander say, change orthographic size of Camera.
This Is for UI
You can use Unity UI, and don't need to seperate. There are so many different resolution and density devices, you need to create so many scenes. So it is meanless separating scenes.
Unity UI has pixel based solutions which can be very helpfull for many density and resolution options. Forexample, It has VerticalLayoutGroup and HorizontalLayoutGroup for easy list like element visulation.
Most important thing is: Do you want to change UI for different screen size or resolutions? For example iPad has larger screen so user can be see more content. This change UX. Maybe you need to consider this.

Multiple objects of Breakout in a single Picture Box

I'm creating a program that simulates that of the Breakout Game using C#.
I've been learning various techniques on how to create the bricks, paddle and ball for the game but cannot work out on how to add them all into one picture box in Visual Studio.
The main issue I'm facing is that in order to move the ball for example, I have to clear the 'canvas' by using the following section of code:
paper.Clear(Color.White); This basically clears the picture box to the colour white in order for the new coordinate (of the ball for example) to be dawn within the picture box and this is where my issue begins.
Each of the components within the Breakout game (that I have practised) all use the paper.Clear(Color.White); code. This means that if for example I want to move the paddle, display the bricks and bounce the ball simultaneously, the program just decides to do one function at a time. If I remove paper.Clear(Color.White); from one of my assets then the program just won't function in the way I want it to.
Is there a way for all these components to run simultaneously within the game without missing any of them out completely?
At its simplest you need to change your approach to have the 'layouting' or 'painting' be centrally controlled, presumably on a timer or similar, and do a single 'clear' operation and then redraw all your components. In other words, do not have each component clear the canvas, they should just be concerned with their own rendering.
The above is the simplest approach. Beyond that you could take an approach of only redrawing what has changed from one frame to another. This can make for much more optimized performance, especially if your game canvas is large or has many components. However it requires a completely different, and in some ways more complex design. You would need to determine the rectangle / rectangles that have had 'movement' or other modifications to them from the prior frame, clear only those rectangles and ask those components that are wholly or partially in those rectangles to re-draw themselves.

Categories