Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

UnlitGBufferPass.hlsl 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Unlit.hlsl"
  2. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl"
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl"
  4. void InitializeInputData(Varyings input, out InputData inputData)
  5. {
  6. inputData = (InputData)0;
  7. // InputData is only used for DebugDisplay purposes in Unlit, so these are not initialized.
  8. #if defined(DEBUG_DISPLAY)
  9. inputData.positionWS = input.positionWS;
  10. inputData.positionCS = input.positionCS;
  11. inputData.normalWS = NormalizeNormalPerPixel(input.normalWS);
  12. #else
  13. inputData.positionWS = half3(0, 0, 0);
  14. inputData.normalWS = NormalizeNormalPerPixel(input.normalWS);
  15. inputData.viewDirectionWS = half3(0, 0, 1);
  16. #endif
  17. inputData.shadowCoord = 0;
  18. inputData.fogCoord = 0;
  19. inputData.vertexLighting = half3(0, 0, 0);
  20. inputData.bakedGI = half3(0, 0, 0);
  21. inputData.normalizedScreenSpaceUV = 0;
  22. inputData.shadowMask = half4(1, 1, 1, 1);
  23. }
  24. PackedVaryings vert(Attributes input)
  25. {
  26. Varyings output = (Varyings)0;
  27. output = BuildVaryings(input);
  28. PackedVaryings packedOutput = PackVaryings(output);
  29. return packedOutput;
  30. }
  31. FragmentOutput frag(PackedVaryings packedInput)
  32. {
  33. Varyings unpacked = UnpackVaryings(packedInput);
  34. UNITY_SETUP_INSTANCE_ID(unpacked);
  35. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(unpacked);
  36. SurfaceDescription surfaceDescription = BuildSurfaceDescription(unpacked);
  37. SurfaceData surfaceData = (SurfaceData)0;
  38. surfaceData.alpha = 1;
  39. #if defined(_ALPHATEST_ON)
  40. surfaceData.alpha = AlphaDiscard(surfaceDescription.Alpha, surfaceDescription.AlphaClipThreshold);
  41. #endif
  42. #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE
  43. LODFadeCrossFade(unpacked.positionCS);
  44. #endif
  45. #if defined(_ALPHAMODULATE_ON)
  46. surfaceData.albedo = AlphaModulate(surfaceDescription.BaseColor, surfaceData.alpha);
  47. #else
  48. surfaceData.albedo = surfaceDescription.BaseColor;
  49. #endif
  50. #if defined(_DBUFFER)
  51. ApplyDecalToBaseColor(unpacked.positionCS, surfaceData.albedo);
  52. #endif
  53. InputData inputData;
  54. InitializeInputData(unpacked, inputData);
  55. #if defined(_SCREEN_SPACE_OCCLUSION) && !defined(_SURFACE_TYPE_TRANSPARENT)
  56. float2 normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(unpacked.positionCS);
  57. AmbientOcclusionFactor aoFactor = GetScreenSpaceAmbientOcclusion(normalizedScreenSpaceUV);
  58. surfaceData.albedo.rgb *= aoFactor.directAmbientOcclusion;
  59. #else
  60. surfaceData.occlusion = 1;
  61. #endif
  62. return SurfaceDataToGbuffer(surfaceData, inputData, float3(0,0,0), kLightingInvalid);
  63. }