- Home /
Graphics/RenderTexture Alpha Brush
I'm creating a minigame in which the user clears an area to uncover stuff underneath. I was using a texture and nested loops to modify the alpha value of each pixel, but that method was far too slow. I decided to try Graphics and RenderTextures, but I have no experience with them. I copied this code from another question's answer, but it doesn't do exactly what I want.
void AddToStencil(Texture2D stencil, Texture2D brush, Vector2 brushPosition, int brushSizePixels)
{
//Create temporary render texture
int width = stencil.width;
int height = stencil.height;
RenderTexture rt = RenderTexture.GetTemporary(width, height, 0, RenderTextureFormat.ARGB32);
//Copy existing stencil to render texture (blit sets the active RenderTexture)
Graphics.Blit(stencil, rt);
//Apply brush
RenderTexture.active = rt;
float bs2 = brushSizePixels / 2f;
Graphics.DrawTexture(new Rect(brushPosition.x - bs2, brushPosition.y - bs2, brushSizePixels, brushSizePixels), brush);
//Read texture back to stencil
stencil.ReadPixels(new Rect(0, 0, width, height), 0, 0, true);
stencil.Apply();
RenderTexture.active = null;
rt.Release();
}
I have an Alpha 8 texture that is used as the brush, and an RGBA sand texture used as the target. It partially works, in that the centre of the brush makes the target texture transparent, but it doesn't blend at all and just makes the rest of the area solid black. How do I have just the subtraction of alpha and none of the addition?
Your answer
Follow this Question
Related Questions
The alpha value in the RenderTexture are not the same in Editor mode and Build mode. 2 Answers
How can i set transparent pixels on a RenderTexture? 1 Answer
Render a camera multiple times in a single frame? 1 Answer
Graphics.DrawTexture() not displaying in HDRP 0 Answers
Depth sorting objects with #pragma alpha in Surface Shader 0 Answers