Advertisement
Guest User

Untitled

a guest
Jan 15th, 2013
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.36 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement