暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NormalReconstruction.cs 3.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using UnityEngine.Experimental.Rendering;
  2. namespace UnityEngine.Rendering.Universal.Internal
  3. {
  4. /// <summary>
  5. /// Util class for normal reconstruction.
  6. /// </summary>
  7. public static class NormalReconstruction
  8. {
  9. private static readonly int s_NormalReconstructionMatrixID = Shader.PropertyToID("_NormalReconstructionMatrix");
  10. private static Matrix4x4[] s_NormalReconstructionMatrix = new Matrix4x4[2];
  11. /// <summary>
  12. /// Setup properties needed for normal reconstruction from depth using shader functions in NormalReconstruction.hlsl
  13. /// </summary>
  14. /// <param name="cmd">Command Buffer used for properties setup.</param>
  15. /// <param name="cameraData">CameraData containing camera matrices information.</param>
  16. public static void SetupProperties(CommandBuffer cmd, in CameraData cameraData)
  17. {
  18. SetupProperties(CommandBufferHelpers.GetRasterCommandBuffer(cmd), cameraData);
  19. }
  20. /// <summary>
  21. /// Setup properties needed for normal reconstruction from depth using shader functions in NormalReconstruction.hlsl
  22. /// </summary>
  23. /// <param name="cmd">Raster Command Buffer used for properties setup.</param>
  24. /// <param name="cameraData">CameraData containing camera matrices information.</param>
  25. public static void SetupProperties(RasterCommandBuffer cmd, in CameraData cameraData)
  26. {
  27. var universalCameraData = cameraData.universalCameraData;
  28. SetupProperties((RasterCommandBuffer)cmd, in universalCameraData);
  29. }
  30. /// <summary>
  31. /// Setup properties needed for normal reconstruction from depth using shader functions in NormalReconstruction.hlsl
  32. /// </summary>
  33. /// <param name="cmd">Command Buffer used for properties setup.</param>
  34. /// <param name="cameraData">CameraData containing camera matrices information.</param>
  35. public static void SetupProperties(CommandBuffer cmd, UniversalCameraData cameraData)
  36. {
  37. SetupProperties(CommandBufferHelpers.GetRasterCommandBuffer(cmd), cameraData);
  38. }
  39. /// <summary>
  40. /// Setup properties needed for normal reconstruction from depth using shader functions in NormalReconstruction.hlsl
  41. /// </summary>
  42. /// <param name="cmd">Raster Command Buffer used for properties setup.</param>
  43. /// <param name="cameraData">CameraData containing camera matrices information.</param>
  44. public static void SetupProperties(RasterCommandBuffer cmd, in UniversalCameraData cameraData)
  45. {
  46. #if ENABLE_VR && ENABLE_XR_MODULE
  47. int eyeCount = cameraData.xr.enabled && cameraData.xr.singlePassEnabled ? 2 : 1;
  48. #else
  49. int eyeCount = 1;
  50. #endif
  51. for (int eyeIndex = 0; eyeIndex < eyeCount; eyeIndex++)
  52. {
  53. Matrix4x4 view = cameraData.GetViewMatrix(eyeIndex);
  54. Matrix4x4 proj = cameraData.GetProjectionMatrix(eyeIndex);
  55. s_NormalReconstructionMatrix[eyeIndex] = proj * view;
  56. // camera view space without translation, used by SSAO.hlsl ReconstructViewPos() to calculate view vector.
  57. Matrix4x4 cview = view;
  58. cview.SetColumn(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
  59. Matrix4x4 cviewProj = proj * cview;
  60. Matrix4x4 cviewProjInv = cviewProj.inverse;
  61. s_NormalReconstructionMatrix[eyeIndex] = cviewProjInv;
  62. }
  63. cmd.SetGlobalMatrixArray(s_NormalReconstructionMatrixID, s_NormalReconstructionMatrix);
  64. }
  65. }
  66. }