SHARE
TWEET

Untitled

a guest Jan 15th, 2013 320 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
Top