暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

VFXLitPixelOutput.hlsl 3.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef SHADERPASS
  2. #error SHADERPASS must be defined
  3. #endif
  4. #ifndef UNIVERSAL_SHADERPASS_INCLUDED
  5. #error ShaderPass has to be included
  6. #endif
  7. #if (SHADERPASS == SHADERPASS_FORWARD)
  8. float4 VFXCalcPixelOutputForward(const SurfaceData surfaceData, const InputData inputData)
  9. {
  10. #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE
  11. float4 color = UniversalFragmentSixWay(inputData, surfaceData);
  12. #else
  13. float4 color = UniversalFragmentPBR(inputData, surfaceData);
  14. #endif
  15. color.rgb = MixFog(color.rgb, inputData.fogCoord);
  16. #if IS_OPAQUE_PARTICLE
  17. bool isTransparent = false;
  18. #else
  19. bool isTransparent = true;
  20. #endif
  21. color.a = OutputAlpha(color.a, isTransparent);
  22. return color;
  23. }
  24. #ifndef VFX_SHADERGRAPH
  25. #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE
  26. #define SurfaceData SixWaySurfaceData
  27. #endif
  28. float4 VFXGetPixelOutputForward(const VFX_VARYING_PS_INPUTS i, float3 normalWS, const VFXUVData uvData, bool frontFace)
  29. {
  30. SurfaceData surfaceData;
  31. InputData inputData;
  32. VFXGetURPLitData(surfaceData, inputData, i, normalWS, uvData, frontFace, (uint2)0);
  33. return VFXCalcPixelOutputForward(surfaceData, inputData);
  34. }
  35. #else
  36. float4 VFXGetPixelOutputForwardShaderGraph(const VFX_VARYING_PS_INPUTS i, SurfaceData surfaceData, float3 normalWS)
  37. {
  38. float3 posRWS = VFXGetPositionRWS(i);
  39. float4 posSS = i.VFX_VARYING_POSCS;
  40. PositionInputs posInput = GetPositionInput(posSS.xy, _ScreenSize.zw, posSS.z, posSS.w, posRWS, (uint2)0);
  41. VFXUVData uvData = (VFXUVData)0;
  42. InputData inputData = VFXGetInputData(i, posInput, normalWS, true);
  43. return VFXCalcPixelOutputForward(surfaceData, inputData);
  44. }
  45. #endif
  46. #elif (SHADERPASS == SHADERPASS_GBUFFER)
  47. #ifndef VFX_SHADERGRAPH
  48. void VFXComputePixelOutputToGBuffer(const VFX_VARYING_PS_INPUTS i, const float3 normalWS, const VFXUVData uvData, out FragmentOutput gBuffer)
  49. {
  50. SurfaceData surfaceData;
  51. InputData inputData;
  52. VFXGetURPLitData(surfaceData, inputData, i, normalWS, uvData, true, (uint2)0);
  53. BRDFData brdfData;
  54. InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);
  55. half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surfaceData.occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
  56. gBuffer = BRDFDataToGbuffer(brdfData, inputData, surfaceData.smoothness, surfaceData.emission + color, surfaceData.occlusion);
  57. }
  58. #else
  59. void VFXComputePixelOutputToGBufferShaderGraph(const VFX_VARYING_PS_INPUTS i, SurfaceData surfaceData, const float3 normalWS, out FragmentOutput gBuffer)
  60. {
  61. float3 posRWS = VFXGetPositionRWS(i);
  62. float4 posSS = i.VFX_VARYING_POSCS;
  63. PositionInputs posInput = GetPositionInput(posSS.xy, _ScreenSize.zw, posSS.z, posSS.w, posRWS, (uint2)0);
  64. VFXUVData uvData = (VFXUVData)0;
  65. InputData inputData = VFXGetInputData(i, posInput, normalWS, true);
  66. BRDFData brdfData;
  67. InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);
  68. half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surfaceData.occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
  69. gBuffer = BRDFDataToGbuffer(brdfData, inputData, surfaceData.smoothness, surfaceData.emission + color, surfaceData.occlusion);
  70. }
  71. #endif
  72. #endif