Hi, I'm trying to create for a VR game a mobile shader (as they are optimized). The challenge is to take the built-in BumpSpecular one and and tweak it to multiply the reflection by a "fresnel" ramp. I don't know what's wrong, I'm not a shader developer but I need it to process on a Single Pass VR. The commented lines are which break the shader. Anyone can help me? Thanks on advance, Code (CSharp): Shader "Reflect-BumpSpec" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _ReflectColor ("Reflection Color", Color) = (1,1,1,0.5) _Fresnel ("Fresnel", Range(0.0,8.0)) = 2.0 _MainTex ("Base (RGB) RefStrGloss (A)", 2D) = "white" {} _Cube ("Reflection Cubemap", Cube) = "" {} _BumpMap ("Normalmap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 400 CGPROGRAM #pragma surface surf BlinnPhong #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; samplerCUBE _Cube; fixed4 _Color; fixed4 _ReflectColor; half _Shininess; struct Input { float2 uv_MainTex; float2 uv_BumpMap; float3 worldRefl; float3 viewDir; INTERNAL_DATA }; void surf (Input IN, inout SurfaceOutput o) { fixed4 tex = tex2D(_MainTex, IN.uv_MainTex); fixed4 c = tex * _Color; o.Albedo = c.rgb; o.Gloss = tex.a; o.Specular = _Shininess; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); half rim = 1-saturate(dot(normalize(IN.viewDir), o.Normal)); float3 worldRefl = WorldReflectionVector (IN, o.Normal); fixed4 reflcol = texCUBE (_Cube, worldRefl); half refl_lum = _ReflectColor.r * 0.3 + _ReflectColor.g * 0.59 + _ReflectColor.b * 0.11; //reflcol *= (_Fresnel * pow(rim,refl_lum)); //reflcol *= _RimPower; reflcol *= tex.a; o.Emission = reflcol.rgb * _ReflectColor.rgb; o.Alpha = reflcol.a * _ReflectColor.a; } ENDCG } FallBack "Legacy Shaders/Reflective/Bumped Diffuse" }
You haven't declared your variables. line 27 add: Code (csharp): float _Fresnel; float _RimPower; You also don't have _RimPower declared in your properties block so you won't get any input options in the inspector.