Advertisement
Guest User

Untitled

a guest
Aug 31st, 2018
1,933
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.46 KB | None | 0 0
  1. // Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
  2.  
  3. /*=============================================================================
  4.     LandscapeGrassWeightVertexShader.usf: Vertex shader to dump the weight map for Landscape Grass
  5. =============================================================================*/
  6.  
  7. #define RENDERING_LANDSCAPE_GRASS 1
  8.  
  9. #include "Common.ush"
  10. #include "/Engine/Generated/Material.ush"
  11. #include "/Engine/Generated/VertexFactory.ush"
  12.  
  13. struct FLandscapeGrassWeightInterpolantsVSToPS
  14. {
  15.     FVertexFactoryInterpolantsVSToPS FactoryInterpolants;
  16.     float  Height           : TEXCOORD9;
  17.     float4 Position : SV_POSITION;
  18. };
  19.  
  20. #if VERTEXSHADER
  21.  
  22. float2 RenderOffset;
  23.  
  24. /** Vertex Shader */
  25. void VSMain(
  26.     FVertexFactoryInput Input,
  27.     out FLandscapeGrassWeightInterpolantsVSToPS Output
  28.     )
  29. {
  30.     ResolvedView = ResolveView();
  31.  
  32.     FVertexFactoryIntermediates VFIntermediates = GetVertexFactoryIntermediates(Input);
  33.     float4 WorldPositionExcludingWPO = VertexFactoryGetWorldPosition(Input, VFIntermediates);
  34.     float4 WorldPosition = WorldPositionExcludingWPO;
  35.     float4 RasterizedWorldPosition = VertexFactoryGetRasterizedWorldPosition(Input, VFIntermediates, WorldPosition);
  36.     Output.Position = mul(RasterizedWorldPosition, ResolvedView.TranslatedWorldToClip);
  37.  
  38.     half3x3 TangentToLocal = VertexFactoryGetTangentToLocal(Input, VFIntermediates);
  39.     FMaterialVertexParameters VertexParameters = GetMaterialVertexParameters(Input, VFIntermediates, WorldPosition.xyz, TangentToLocal);
  40.     Output.FactoryInterpolants = VertexFactoryGetInterpolantsVSToPS(Input, VFIntermediates, VertexParameters);
  41.  
  42.     float2 Height2 = LandscapeVertexFactorySampleHeight(Input, VFIntermediates);
  43.     float Height = DecodePackedTwoChannelValue(Height2);
  44.  
  45.     half3 WorldPositionOffset = GetMaterialWorldPositionOffset(VertexParameters);
  46.     Height = Height + mul(WorldPositionOffset, (MaterialFloat3x3)(Primitive.WorldToLocal)).z / TERRAIN_ZSCALE;
  47.     Output.Height = Height;
  48.  
  49.     Output.Position.xy += RenderOffset;
  50. }
  51.  
  52. #elif PIXELSHADER
  53.  
  54. int OutputPass;
  55.  
  56. // Pixel Shader
  57. void PSMain(
  58.     FLandscapeGrassWeightInterpolantsVSToPS Interpolants,
  59.     in float4 SvPosition : SV_Position
  60.     OPTIONAL_IsFrontFace,
  61.     out half4 OutColor  : SV_Target0
  62.     )
  63. {
  64.     ResolvedView = ResolveView();
  65.  
  66.     FMaterialPixelParameters MaterialParameters = GetMaterialPixelParameters(Interpolants.FactoryInterpolants, SvPosition);
  67.     FPixelMaterialInputs PixelMaterialInputs;
  68.     CalcMaterialParameters(MaterialParameters, PixelMaterialInputs, SvPosition, bIsFrontFace);
  69.  
  70.     float Height = clamp(round(Interpolants.Height), 0, 65535);
  71.     float2 PackedHeight = float2(floor(Height / 256), fmod(Height, 256)) / 255;
  72.  
  73. #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 2
  74.     switch(OutputPass)
  75.     {
  76.     case 0:
  77. #endif
  78.         // Height, outputs 1 & 2
  79.         OutColor.xy = PackedHeight;
  80.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 0
  81.             OutColor.z = GetGrassWeight0(MaterialParameters);
  82.             #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 1
  83.                 OutColor.w = GetGrassWeight1(MaterialParameters);
  84.             #else
  85.                 OutColor.w = 0;
  86.             #endif
  87.         #else
  88.             OutColor.z = 0;
  89.             OutColor.w = 0;
  90.         #endif
  91. #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 2
  92.         break;
  93.     case 1:
  94.         OutColor.x = GetGrassWeight2(MaterialParameters);
  95.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 3
  96.             OutColor.y = GetGrassWeight3(MaterialParameters);
  97.         #else
  98.             OutColor.y = 0;
  99.         #endif
  100.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 4
  101.             OutColor.z = GetGrassWeight4(MaterialParameters);
  102.         #else
  103.             OutColor.z = 0;
  104.         #endif
  105.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 5
  106.             OutColor.w = GetGrassWeight5(MaterialParameters);
  107.         #else
  108.             OutColor.w = 0;
  109.         #endif
  110.         break;
  111. #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 6
  112.     case 2:
  113.         OutColor.x = GetGrassWeight6(MaterialParameters);
  114.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 7
  115.             OutColor.y = GetGrassWeight7(MaterialParameters);
  116.         #else
  117.             OutColor.y = 0;
  118.         #endif
  119.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 8
  120.             OutColor.z = GetGrassWeight8(MaterialParameters);
  121.         #else
  122.             OutColor.z = 0;
  123.         #endif
  124.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 9
  125.             OutColor.w = GetGrassWeight9(MaterialParameters);
  126.         #else
  127.             OutColor.w = 0;
  128.         #endif
  129.         break;
  130. #endif // NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 6
  131.  
  132. #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 10
  133.     case 3:
  134.         OutColor.x = GetGrassWeight10(MaterialParameters);
  135.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 11
  136.             OutColor.y = GetGrassWeight11(MaterialParameters);
  137.         #else
  138.             OutColor.y = 0;
  139.         #endif
  140.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 12
  141.             OutColor.z = GetGrassWeight12(MaterialParameters);
  142.         #else
  143.             OutColor.z = 0;
  144.         #endif
  145.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 13
  146.             OutColor.w = GetGrassWeight13(MaterialParameters);
  147.         #else
  148.             OutColor.w = 0;
  149.         #endif
  150.         break;
  151. #endif // NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 10
  152.  
  153. #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 14
  154.     case 4:
  155.         OutColor.x = GetGrassWeight14(MaterialParameters);
  156.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 15
  157.             OutColor.y = GetGrassWeight15(MaterialParameters);
  158.         #else
  159.             OutColor.y = 0;
  160.         #endif
  161.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 16
  162.             OutColor.z = GetGrassWeight16(MaterialParameters);
  163.         #else
  164.             OutColor.z = 0;
  165.         #endif
  166.         #if NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 17
  167.             OutColor.w = GetGrassWeight17(MaterialParameters);
  168.         #else
  169.             OutColor.w = 0;
  170.         #endif
  171.         break;
  172. #endif // NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 14
  173.  
  174.     default:
  175.         OutColor = float4(0,0,0,0);
  176.         break;
  177.     }
  178. #endif // NUM_MATERIAL_OUTPUTS_GETGRASSWEIGHT > 2
  179. }
  180. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement