- Home /
 
Need help porting shader to CG
Hi all,
my knowledge about shaders is very limited... Anyway I need some help porting a SSAO shader from this guy : http://www.theorangeduck.com/page/pure-depth-ssao to unity CG
This is what I have done so far... I don't know if I'm on the right approuch:
 Shader "Custom/SSAOTest" {
     Properties {
         _MainTex ("Base (RGB)", 2D) = "white" {}
         _DepthTextureSampler("Depth Texture", 2D) = "black" {}
         _RandomTextureSampler("Random Texture", 2D) = "grey" {}
     }
     
     CGINCLUDE
     #include "UnityCG.cginc"
     
     sampler2D _MainTex;
     sampler2D _DepthTextureSampler;
     sampler2D _RandomTextureSampler;
     
     struct v2f {
         float4 pos : POSITION;
         float2 uv[8] : TEXCOORD0;
     };
 
     float3 normal_from_depth(float depth, float2 texcoords) {
         const float2 offset1 = float2(0.0,0.001);
         const float2 offset2 = float2(0.001,0.0);
 
         float depth1 = tex2D(_DepthTextureSampler, texcoords + offset1).r;
         float depth2 = tex2D(_DepthTextureSampler, texcoords + offset2).r;
 
         float3 p1 = float3(offset1, depth1 - depth);
         float3 p2 = float3(offset2, depth2 - depth);
 
         float3 normal = cross(p1, p2);
         normal.z = -normal.z;
 
         return normalize(normal);
     }
     
     
     //PS_OUTPUT ps_ssao(VS_OUT_SSAO In)
         half4 frag (v2f In) : COLOR
     { 
         //PS_OUTPUT Output;
 
         const float total_strength = 1.0;
         const float base = 0.2;
 
         const float area = 0.0075;
         const float falloff = 0.000001;
 
         const float radius = 0.0002;
 
         const int samples = 16;
         float3 sample_sphere[samples] = {
             float3( 0.5381, 0.1856,-0.4319), float3( 0.1379, 0.2486, 0.4430),
             float3( 0.3371, 0.5679,-0.0057), float3(-0.6999,-0.0451,-0.0019),
             float3( 0.0689,-0.1598,-0.8547), float3( 0.0560, 0.0069,-0.1843),
             float3(-0.0146, 0.1402, 0.0762), float3( 0.0100,-0.1924,-0.0344),
             float3(-0.3577,-0.5301,-0.4358), float3(-0.3169, 0.1063, 0.0158),
             float3( 0.0103,-0.5869, 0.0046), float3(-0.0897,-0.4940, 0.3287),
             float3( 0.7119,-0.0154,-0.0918), float3(-0.0533, 0.0596,-0.5411),
             float3( 0.0352,-0.0631, 0.5460), float3(-0.4776, 0.2847,-0.0271)
             };
 
         float3 random = normalize( tex2D(_RandomTextureSampler, In.uv/*In.Tex0 * 4.0)*/).rgb );
 
         float depth = tex2D(_DepthTextureSampler, In.uv).r;
 
         float3 position = float3(In.uv, depth);
         float3 normal = normal_from_depth(depth, In.uv);
 
         float radius_depth = radius/depth;
         float occlusion = 0.0;
         
         for(int i=0; i < samples; i++) {
             float3 ray = radius_depth * reflect(sample_sphere[i], random);
             float3 hemi_ray = position + sign(dot(ray,normal)) * ray;
 
             float occ_depth = tex2D(_DepthTextureSampler, saturate(hemi_ray.xy)).r;
             float difference = depth - occ_depth;
 
             occlusion += step(falloff, difference) * (1.0-smoothstep(falloff, area, difference));
         }
 
         float ao = 1.0 - total_strength * occlusion * (1.0 / samples);
         Output.RGBColor = saturate(ao + base);
 
         return Output;
     }
     
     ENDCG
     
     
     SubShader {
         blend off
         pass {
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma target 3.0
             ENDCG
         }
     }
 }
 
               Errors occur in line 66 and 95:
-Shader error in 'Custom/SSAOTest': Program 'vert', invalid type in type constructor at line 66
-Shader error in 'Custom/SSAOTest': Program 'frag', invalid type in type constructor at line 66
-Shader error in 'Custom/SSAOTest': Shader program had errors at line 95
I'll would be glad for any help
Best 0tacun
Your answer
 
             Follow this Question
Related Questions
How to force the compilation of a shader in Unity? 5 Answers
Shader Not Blending Textures on Mobile 1 Answer
Shader error in ... : Syntax error at line 30 1 Answer
CG Programming, Points Lights attenuation and light range 3 Answers
Multiple tex2D commands in fragment shader needed, is there a workaround? 0 Answers