- Home /
Need Help Getting RenderTexture & Graphics.Blit Working: Boosting Mobile Performance
I have a 2D game I'm that currently runs at ~55 FPS on an iPad Air.
I'm trying to add this nice new nebula effect to the game play background but it kills performance and drops it down to 13 FPS:
Looks beautiful right? It's a 3d object that's zoomed in. It's even better if you can see the distortion, swirl and rotation animations.
The shader I'm using is expensive so I'm aware of the reason why performance is impacted.
But I also noticed that when I zoom out of the 3D object and the area that it fills is smaller -- performance is only marginally impacted.
Now I want to use the approach of rendering the effect to a smaller render texture and then blit the image to the full screen to boost performance. I know the image might look blurrier but it's already blurry on it's own so that's OK. This is a 2D game so the user will not be moving "into" the background. I just want to render a nice animated background.
I've found several articles on how to render a camera to a smaller render texture and then use Graphics.Blit to fill the screen but everything I've been able to find has gaps in implementation.
Based on what I've found, I have the following script which is attached to the camera that is currently rendering the background but I get nothing, or black, or garbage.
#pragma strict
import UnityEngine;
var myCamera : Camera;
var postProcessMaterial : Material;
private var myRenderTexture : RenderTexture;
function Start () {
}
function Update () {
}
function OnPreRender() {
myRenderTexture = RenderTexture.GetTemporary(50, 26, 16); // super small render texture for testing
myCamera.targetTexture = myRenderTexture;
}
function OnPostRender() {
myCamera.targetTexture = null; // null means framebuffer
Graphics.Blit(myRenderTexture, null as RenderTexture);
RenderTexture.ReleaseTemporary(myRenderTexture);
}
I've been at this for several days now but am getting nowhere. Any help would be greatly appreciated.
Bonus appreciation points if we can achieve this using the Command Buffers (better performance?).
Thanks in advance, Manny
Also, read here for the reason it's slow, and a suggested generic solution. Look at the question "$$anonymous$$y existing particle systems seem to run very slowly on iOS. What should I do?"
Your answer
Follow this Question
Related Questions
Does Graphics.Blit affect performance much when used in image effects? 1 Answer
RenderTexture causes memory problems 2 Answers
Performance impact of OnMouse_ event handlers on mobile 1 Answer
Add 2d rigidbodies to moving objects to increase performance or not? 1 Answer
Detecting Input on ~100 Objects 2 Answers