CRT Shader how optimize?!
Hi everyone,
I'm working on a new update of "Space Squids" for mobile plattforms and i have a big problem with a image effect it returns me a black screen on Windows Phone 8.1 (lumia 925) but everythig is working on an iphone 4s and 6s.
I've followed the instructions of this post on Gamasutra to create the "CRT" shader (because i'm a noob with shaders and image effects), and i've attached it and 2 other image effects to my camera.
this is the result in game:
Shader:
Shader "Custom/CRTShader"
{
Properties{
_MainTex("Base (RGB)", 2D) = "white" {}
_VertsColor("Verts fill color", Float) = 0
_VertsColor2("Verts fill color 2", Float) = 0
_Contrast("Contrast", Float) = 0
_Br("Brightness", Float) = 0
}
SubShader{
Pass{
ZTest Always Cull Off ZWrite Off Fog{ Mode off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
#pragma target 3.0
struct v2f
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
float4 scr_pos : TEXCOORD1;
};
uniform sampler2D _MainTex;
uniform float _VertsColor;
uniform float _VertsColor2;
uniform float _Contrast;
uniform float _Br;
v2f vert(appdata_img v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord);
o.scr_pos = ComputeScreenPos(o.pos);
return o;
}
half4 frag(v2f i) : COLOR
{
half4 color = tex2D(_MainTex, i.uv);
float2 ps = i.scr_pos.xy *_ScreenParams.xy / i.scr_pos.w;
int pp = ps.x % 3;
float4 muls = float4(0, 0, 0, 1);
if (pp == 1) { muls.r = 1; muls.g = _VertsColor2; }
else
if (pp == 2) { muls.g = 1; muls.b = _VertsColor2; }
else
{
muls.b = 1; muls.r = _VertsColor2;
}
color = color * muls;
color += (_Br / 255);
color = color - _Contrast * (color - 1.0) * color *(color - 0.5);
return color;
}
ENDCG
}
}
FallBack "Diffuse"
}
c# script effect
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class TVShader : MonoBehaviour
{
public Shader shader;
private Material _material;
[Range(0, 1)]
public float verts_force = 0.0f;
[Range(0, 1)]
public float verts_force_2 = 0.0f;
[Range(-3, 20)]
public float contrast = 0.0f;
[Range(-200, 200)]
public float brightness = 0.0f;
protected Material material
{
get
{
if (_material == null)
{
_material = new Material(shader);
_material.hideFlags = HideFlags.HideAndDontSave;
}
return _material;
}
}
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (shader == null) return;
Material mat = material;
mat.SetFloat("_VertsColor", 1 - verts_force);
mat.SetFloat("_VertsColor2", 1 - verts_force_2);
mat.SetFloat("_Contrast", contrast);
mat.SetFloat("_Br", brightness);
Graphics.Blit(source, destination, mat,0);
}
void OnDisable()
{
if (_material)
{
DestroyImmediate(_material);
}
}
}
i've read in the last lines on the post that i can optimize the shader with a texture "method" how can i do that??
I NEED to fix it on windows phone? anyone can help me?
i'd like to optimize this "camera settings" but without modify the result.
Thanks guys! (srry for my terrible english)
Your answer
Follow this Question
Related Questions
Multiple stacked cameras + Edge Detection Image Effect? 0 Answers
Shader normals modification different in build 1 Answer
Render Texture not capturing Image Effect Shaders on ARCamera 1 Answer
Image effects not applying to FPS controller camera in run mode 0 Answers
Can an image effect work on vertices displaced by other shaders? 0 Answers