daily pastebin goal
67%
SHARE
TWEET

Untitled

a guest Jan 15th, 2013 353 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifndef TESS_CG_INCLUDED
  2. #define TESS_CG_INCLUDED
  3.  
  4. #include "UnityCG.cginc"
  5. #include "AutoLight.cginc"
  6. #include "HLSLSupport.cginc"
  7.  
  8.                         float _TessEdge;
  9.                         float _Displacement;
  10.                         float _distFalloff;
  11.                         float _fadeDist;
  12.  
  13.                          uniform float4 _LightColor0;
  14.                        
  15.                         Texture2D _MainTex;
  16.                         SamplerState    sampler_MainTex;
  17.                         uniform float4 _MainTex_ST;
  18.                         uniform float4 _BumpMap_ST;
  19.                        
  20.                         Texture2D _DispTex;
  21.                         SamplerState    sampler_DispTex;
  22.                         Texture2D _BumpMap;
  23.                         SamplerState    sampler_BumpMap;
  24.                         //Texture2D _SpecMap;
  25.                         //SamplerState  sampler_SpecMap;
  26.                         struct appdata
  27.                         {
  28.                                 float4 position   : POSITION;
  29.                                 float3 normal     : NORMAL;
  30.                                 float4 tangent     : TANGENT;
  31.                                 float2 uv   : TEXCOORD;
  32.                                 float3 lightDir : TEXCOORD1;
  33.                                 float3 viewDir : COLOR;
  34.                         };
  35.                         struct PS_INPUT
  36.                         {
  37.                                 float4 position   : POSITION;
  38.                                 float3 normal     : NORMAL;
  39.                                 float4 tangent     : TANGENT;
  40.                                 float2 uv   : TEXCOORD;
  41.                                 float3 lightDir : TEXCOORD1;
  42.                                 float3 viewDir : COLOR;
  43.                         };
  44.                         struct PS_RenderOutput{
  45.                                 float4 f4Color      : SV_Target0;
  46.                         };
  47.                         struct HS_CONSTANT_OUTPUT
  48.                         {
  49.                                 float edges[4]  : SV_TessFactor;
  50.                                 float inside[2] : SV_InsideTessFactor;
  51.                         };
  52.  
  53.                         struct HS_OUTPUT
  54.                         {
  55.                                 float3 position  : POS;
  56.                                 float3 normal : NORMAL;
  57.                                 float2 uv : TEXCOORD;
  58.                                 float4 tangent: TANGENT;
  59.                                 float3 lightDir : TEXTCOORD1;
  60.                                 float3 viewDir : COLOR;
  61.                         };
  62.  
  63.                         void vert(inout appdata v){
  64.                                 TANGENT_SPACE_ROTATION;
  65.                                 // To view space
  66.                                 v.position = mul(UNITY_MATRIX_MV, v.position);
  67.                                 v.normal = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
  68.                                 //v.uv = TRANSFORM_TEX(v.uv, _MainTex);
  69.                                 v.lightDir = mul(rotation, ObjSpaceLightDir(v.position));
  70.                                 v.viewDir = mul(rotation, ObjSpaceViewDir(v.position));
  71.                                 //input.uv = I.uv;
  72.                         }
  73.                         HS_CONSTANT_OUTPUT HSConstant( InputPatch<appdata, 4> ip, uint pid : SV_PrimitiveID )
  74.                         {
  75.                                 HS_CONSTANT_OUTPUT output;
  76.  
  77.                                 //float4 viewPos = mul(glstate.matrix.modelview[0], v.vertex);
  78.                                 float distCoeff = (-ip[0].position.z * _distFalloff - _ProjectionParams.y)/_fadeDist; //ip[0].position.z * _distFalloff;//(ip[0].position.z  - _ProjectionParams.y) * _distFalloff;
  79.                                 output.edges[0] = _TessEdge / ((-ip[0].position.z - _ProjectionParams.y)/_fadeDist);
  80.                                 output.edges[1] = _TessEdge / ((-ip[1].position.z - _ProjectionParams.y)/_fadeDist);
  81.                                 output.edges[2] = _TessEdge / ((-ip[2].position.z - _ProjectionParams.y)/_fadeDist);
  82.                                 output.edges[3] = _TessEdge / ((-ip[3].position.z - _ProjectionParams.y)/_fadeDist);
  83.  
  84.                                 output.inside[0] = _TessEdge / ((-ip[0].position.z - _ProjectionParams.y)/_fadeDist);
  85.                                 output.inside[1] = _TessEdge / ((-ip[0].position.z - _ProjectionParams.y)/_fadeDist);
  86.  
  87.                                 return output;
  88.                         }
  89.  
  90.                         [domain("quad")]
  91.                         [partitioning("integer")]
  92.                         [outputtopology("triangle_cw")]
  93.                         [outputcontrolpoints(4)]
  94.                         [patchconstantfunc("HSConstant")]
  95.                         HS_OUTPUT hull( InputPatch<appdata, 4> ip, uint cpid : SV_OutputControlPointID, uint pid : SV_PrimitiveID )
  96.                         {
  97.                                 HS_OUTPUT Output;
  98.                                 Output.position = ip[cpid].position;
  99.                                 Output.normal = ip[cpid].normal;
  100.                                 Output.uv = ip[cpid].uv;
  101.                                 Output.lightDir = ip[cpid].lightDir;
  102.                                 Output.tangent = ip[cpid].tangent;
  103.                                 return Output;
  104.                         }
  105.  
  106.                         [domain("quad")]
  107.                         appdata domain( HS_CONSTANT_OUTPUT input, float2 UV : SV_DomainLocation, const OutputPatch<HS_OUTPUT, 4> patch )
  108.                         {
  109.                                 appdata Output;
  110.                                 float3 topMidpoint = lerp(patch[0].position, patch[1].position, UV.x);
  111.                                 float3 bottomMidpoint = lerp(patch[3].position, patch[2].position, UV.x);
  112.                                
  113.                                 float3 position = lerp(topMidpoint, bottomMidpoint, UV.y);
  114.  
  115.                                 //Output.position = float4(lerp(topMidpoint, bottomMidpoint, UV.y), 1);
  116.                                 //
  117.                                 //O.f4Diffuse.a = 1.0f;
  118.                                 float2 uvtopMidpoint = lerp(patch[0].uv, patch[1].uv, UV.x);
  119.                                 float2 uvbottomMidpoint = lerp(patch[3].uv, patch[2].uv, UV.x);
  120.                                
  121.                                 Output.uv = lerp(uvtopMidpoint, uvbottomMidpoint, UV.y);
  122.  
  123.                                 float3 normaltopMidpoint = lerp(patch[0].normal, patch[1].normal, UV.x);
  124.                                 float3 normalbottomMidpoint = lerp(patch[3].normal, patch[2].normal, UV.x);
  125.                                
  126.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  127.  
  128.                                 float3 normal = lerp(normaltopMidpoint, normalbottomMidpoint, UV.y);
  129.                                 Output.normal= unity_LightColor[0].rgb * max( 0, dot( normal, unity_LightPosition[0].xyz ) ) + UNITY_LIGHTMODEL_AMBIENT.rgb;
  130.                                
  131.                                 float disp = _DispTex.SampleLevel (sampler_DispTex, Output.uv, 0).r * _Displacement;
  132.                                 position += normal * disp;
  133.  
  134.                                 Output.position = mul (UNITY_MATRIX_P, float4(position, 1));
  135.                                
  136.                                 float3 lighttopMidpoint = lerp(patch[0].lightDir, patch[1].lightDir, UV.x);
  137.                                 float3 lightbottomMidpoint = lerp(patch[3].lightDir, patch[2].lightDir, UV.x);
  138.                                
  139.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  140.  
  141.                                 Output.lightDir = lerp(lighttopMidpoint, lightbottomMidpoint, UV.y);
  142.                                
  143.                                 float4 tangenttopMidpoint = lerp(patch[0].tangent, patch[1].tangent, UV.x);
  144.                                 float4 tangentbottomMidpoint = lerp(patch[3].tangent, patch[2].tangent, UV.x);
  145.                                
  146.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  147.  
  148.                                 Output.tangent = lerp(tangentbottomMidpoint, tangenttopMidpoint, UV.y);
  149.  
  150.                                 return Output;    
  151.                         }
  152.                        
  153.                         [domain("quad")]
  154.                         appdata vec_domain( HS_CONSTANT_OUTPUT input, float2 UV : SV_DomainLocation, const OutputPatch<HS_OUTPUT, 4> patch )
  155.                         {
  156.                                 appdata Output;
  157.                                 float3 topMidpoint = lerp(patch[0].position, patch[1].position, UV.x);
  158.                                 float3 bottomMidpoint = lerp(patch[3].position, patch[2].position, UV.x);
  159.                                
  160.                                 float3 position = lerp(topMidpoint, bottomMidpoint, UV.y);
  161.  
  162.                                 //Output.position = float4(lerp(topMidpoint, bottomMidpoint, UV.y), 1);
  163.                                 //
  164.                                 //O.f4Diffuse.a = 1.0f;
  165.                                 float2 uvtopMidpoint = lerp(patch[0].uv, patch[1].uv, UV.x);
  166.                                 float2 uvbottomMidpoint = lerp(patch[3].uv, patch[2].uv, UV.x);
  167.                                
  168.                                 Output.uv = lerp(uvtopMidpoint, uvbottomMidpoint, UV.y);
  169.  
  170.                                 float3 normaltopMidpoint = lerp(patch[0].normal, patch[1].normal, UV.x);
  171.                                 float3 normalbottomMidpoint = lerp(patch[3].normal, patch[2].normal, UV.x);
  172.                                
  173.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  174.  
  175.                                 float3 normal = lerp(normaltopMidpoint, normalbottomMidpoint, UV.y);
  176.                                 Output.normal= unity_LightColor[0].rgb * max( 0, dot( normal, unity_LightPosition[0].xyz ) ) + UNITY_LIGHTMODEL_AMBIENT.rgb;
  177.                                
  178.                                 float disp = _DispTex.SampleLevel (sampler_DispTex, Output.uv, 0).r * _Displacement;
  179.                                 position += normal * disp;
  180.  
  181.                                 Output.position = mul (UNITY_MATRIX_P, float4(position, 1));
  182.                                
  183.                                 float3 lighttopMidpoint = lerp(patch[0].lightDir, patch[1].lightDir, UV.x);
  184.                                 float3 lightbottomMidpoint = lerp(patch[3].lightDir, patch[2].lightDir, UV.x);
  185.                                
  186.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  187.  
  188.                                 Output.lightDir = lerp(lighttopMidpoint, lightbottomMidpoint, UV.y);
  189.                                
  190.                                 float4 tangenttopMidpoint = lerp(patch[0].tangent, patch[1].tangent, UV.x);
  191.                                 float4 tangentbottomMidpoint = lerp(patch[3].tangent, patch[2].tangent, UV.x);
  192.                                
  193.                                 //float4 pNormal = _BumpMap.Sample( sampler_BumpMap, input.uv );
  194.  
  195.                                 Output.tangent = lerp(tangentbottomMidpoint, tangenttopMidpoint, UV.y);
  196.  
  197.                                 return Output;    
  198.                         }
  199.                         float4 frag( PS_INPUT input) : SV_TARGET{
  200.                                
  201.                                 //float3 lightDir = normalize( _WorldSpaceLightPos0);
  202.                                 half3 normal = UnpackNormal(_BumpMap.Sample( sampler_BumpMap, TRANSFORM_TEX(input.uv, _BumpMap) ));
  203.                                 float4 Albedo = _MainTex.Sample( sampler_MainTex, TRANSFORM_TEX(input.uv, _MainTex) );
  204.                                 float pxlAtten = dot( normal, normalize(input.lightDir ));
  205.                                 float3 diff = Albedo * pxlAtten;
  206.                                 //half4 c = SpecularColorLight( input.lightDir, input.viewDir, normal, Albedo, Albedo.rgb, Albedo.r, pxlAtten );
  207.                                 return float4( diff, 1 ) * 0.5;
  208.                                 //return Albedo;
  209.                                
  210.                                 // float3 lightColor = float3(0,0,0);
  211.          
  212.                                 // float4 c = _MainTex.Sample( sampler_MainTex, TRANSFORM_TEX(input.uv, _MainTex) );
  213.                                 // float3 n =  UnpackNormal(_BumpMap.Sample( sampler_BumpMap, input.uv ));
  214.                                 // float lengthSq = dot(input.lightDir, input.lightDir);
  215.                                 // float atten = 1.0 / (1.0 + lengthSq * unity_LightAtten[0].z);
  216.                                 // Angle to the light
  217.                                 // float diff = saturate (dot (n, normalize(input.lightDir)));  
  218.                                 // lightColor += _LightColor0.rgb * (diff * atten);
  219.                                 // c.rgb = lightColor * c.rgb;
  220.                                 // return c;
  221.                                
  222.                         }
  223.  
  224.  
  225. #endif
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top