73 lines
2.6 KiB
HLSL
73 lines
2.6 KiB
HLSL
|
// The following comment prevents Unity from auto upgrading the shader. Please keep it to keep backward compatibility.
|
||
|
// UNITY_SHADER_NO_UPGRADE
|
||
|
|
||
|
#ifndef _VLB_SHADER_SPECIFIC_INCLUDED_
|
||
|
#define _VLB_SHADER_SPECIFIC_INCLUDED_
|
||
|
|
||
|
/////////////////////////////////////////////////////
|
||
|
// Redefine missing functions from legacy pipeline
|
||
|
/////////////////////////////////////////////////////
|
||
|
inline float4 ComputeNonStereoScreenPos(float4 pos)
|
||
|
{
|
||
|
float4 o = pos * 0.5f;
|
||
|
o.xy = float2(o.x, o.y * _ProjectionParams.x) + o.w;
|
||
|
o.zw = pos.zw;
|
||
|
return o;
|
||
|
}
|
||
|
|
||
|
#define TransformStereoScreenSpaceTex(uv, w) uv
|
||
|
|
||
|
inline float4 ComputeScreenPos(float4 pos)
|
||
|
{
|
||
|
float4 o = ComputeNonStereoScreenPos(pos);
|
||
|
#if defined(UNITY_SINGLE_PASS_STEREO)
|
||
|
o.xy = TransformStereoScreenSpaceTex(o.xy, pos.w);
|
||
|
#endif
|
||
|
return o;
|
||
|
}
|
||
|
/////////////////////////////////////////////////////
|
||
|
|
||
|
// POSITION TRANSFORM
|
||
|
inline float4 VLBObjectToClipPos(in float3 pos) { return mul(UNITY_MATRIX_VP, mul(UNITY_MATRIX_M, float4(pos.xyz, 1.0))); }
|
||
|
|
||
|
// Don't use UNITY_MATRIX_M directly here, because ApplyCameraTranslationToMatrix has been applied to it to substract the camera position.
|
||
|
// But we can't use GetRawUnityObjectToWorld neither, since it doesn't work on Unity 2018.4.19 and HDRP 4.10.0 with GPUInstancing.
|
||
|
// So we counter the effect of ApplyCameraTranslationToMatrix by adding the _WorldSpaceCameraPos back.
|
||
|
inline float4 VLBObjectToWorldPos(in float4 pos)
|
||
|
{
|
||
|
float4x4 modelMatrix = UNITY_MATRIX_M;
|
||
|
|
||
|
#if (SHADEROPTIONS_CAMERA_RELATIVE_RENDERING != 0)
|
||
|
modelMatrix._m03_m13_m23 += _WorldSpaceCameraPos;
|
||
|
#endif
|
||
|
|
||
|
return mul(modelMatrix, pos);
|
||
|
}
|
||
|
|
||
|
#define VLBObjectToViewPos(pos) (mul(UNITY_MATRIX_V, mul(UNITY_MATRIX_M, float4(pos.xyz, 1.0))).xyz)
|
||
|
|
||
|
// FRUSTUM PLANES
|
||
|
#define VLBFrustumPlanes _FrustumPlanes
|
||
|
|
||
|
// CAMERA
|
||
|
inline float3 __VLBWorldToObjectPos(in float3 pos) { return mul(UNITY_MATRIX_I_M, float4(pos, 1.0)).xyz; }
|
||
|
inline float3 VLBGetCameraPositionObjectSpace(float3 scaleObjectSpace)
|
||
|
{
|
||
|
// getting access directly to _WorldSpaceCameraPos gives wrong values
|
||
|
return __VLBWorldToObjectPos(GetCurrentViewPosition()) * scaleObjectSpace;
|
||
|
}
|
||
|
|
||
|
// DEPTH
|
||
|
#define VLBSampleDepthTexture(/*float4*/uv) (SampleCameraDepth((uv.xy) / (uv.w)))
|
||
|
#define VLBLinearEyeDepth(depth) LinearEyeDepth((depth), _ZBufferParams)
|
||
|
|
||
|
|
||
|
inline void ApplyPipelineSpecificIntensityModifier(inout float intensity)
|
||
|
{
|
||
|
#if defined(UNITY_SHADER_VARIABLES_INCLUDED) && UNITY_VERSION >= 202110
|
||
|
intensity *= lerp(1.0, GetCurrentExposureMultiplier(), VLB_GET_PROP(_HDRPExposureWeight));
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
#endif // _VLB_SHADER_SPECIFIC_INCLUDED_
|
||
|
|