ShaderSpecificHDRP.hlsl 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // The following comment prevents Unity from auto upgrading the shader. Please keep it to keep backward compatibility.
  2. // UNITY_SHADER_NO_UPGRADE
  3. #ifndef _VLB_SHADER_SPECIFIC_INCLUDED_
  4. #define _VLB_SHADER_SPECIFIC_INCLUDED_
  5. /////////////////////////////////////////////////////
  6. // Redefine missing functions from legacy pipeline
  7. /////////////////////////////////////////////////////
  8. inline float4 ComputeNonStereoScreenPos(float4 pos)
  9. {
  10. float4 o = pos * 0.5f;
  11. o.xy = float2(o.x, o.y * _ProjectionParams.x) + o.w;
  12. o.zw = pos.zw;
  13. return o;
  14. }
  15. #define TransformStereoScreenSpaceTex(uv, w) uv
  16. inline float4 ComputeScreenPos(float4 pos)
  17. {
  18. float4 o = ComputeNonStereoScreenPos(pos);
  19. #if defined(UNITY_SINGLE_PASS_STEREO)
  20. o.xy = TransformStereoScreenSpaceTex(o.xy, pos.w);
  21. #endif
  22. return o;
  23. }
  24. /////////////////////////////////////////////////////
  25. // POSITION TRANSFORM
  26. inline float4 VLBObjectToClipPos(in float3 pos) { return mul(UNITY_MATRIX_VP, mul(UNITY_MATRIX_M, float4(pos.xyz, 1.0))); }
  27. // Don't use UNITY_MATRIX_M directly here, because ApplyCameraTranslationToMatrix has been applied to it to substract the camera position.
  28. // But we can't use GetRawUnityObjectToWorld neither, since it doesn't work on Unity 2018.4.19 and HDRP 4.10.0 with GPUInstancing.
  29. // So we counter the effect of ApplyCameraTranslationToMatrix by adding the _WorldSpaceCameraPos back.
  30. inline float4 VLBObjectToWorldPos(in float4 pos)
  31. {
  32. float4x4 modelMatrix = UNITY_MATRIX_M;
  33. #if (SHADEROPTIONS_CAMERA_RELATIVE_RENDERING != 0)
  34. modelMatrix._m03_m13_m23 += _WorldSpaceCameraPos;
  35. #endif
  36. return mul(modelMatrix, pos);
  37. }
  38. #define VLBObjectToViewPos(pos) (mul(UNITY_MATRIX_V, mul(UNITY_MATRIX_M, float4(pos.xyz, 1.0))).xyz)
  39. // FRUSTUM PLANES
  40. #define VLBFrustumPlanes _FrustumPlanes
  41. // CAMERA
  42. inline float3 __VLBWorldToObjectPos(in float3 pos) { return mul(UNITY_MATRIX_I_M, float4(pos, 1.0)).xyz; }
  43. inline float3 VLBGetCameraPositionObjectSpace(float3 scaleObjectSpace)
  44. {
  45. // getting access directly to _WorldSpaceCameraPos gives wrong values
  46. return __VLBWorldToObjectPos(GetCurrentViewPosition()) * scaleObjectSpace;
  47. }
  48. // DEPTH
  49. #define VLBSampleDepthTexture(/*float4*/uv) (SampleCameraDepth((uv.xy) / (uv.w)))
  50. #define VLBLinearEyeDepth(depth) LinearEyeDepth((depth), _ZBufferParams)
  51. #endif // _VLB_SHADER_SPECIFIC_INCLUDED_