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.
 
 
 
 

126 lines
4.9 KiB

#ifndef UNITY_PICKING_SPACE_TRANSFORMS_INCLUDED
#define UNITY_PICKING_SPACE_TRANSFORMS_INCLUDED
#if defined(SCENEPICKINGPASS) || defined(SCENESELECTIONPASS)
// The picking pass uses custom matrices defined directly from the c++
// So we have to redefine the space transform functions to overwrite the used matrices
// For the selection pass, we want to use the non jittered projection matrix to avoid object outline flickering
#undef SHADEROPTIONS_CAMERA_RELATIVE_RENDERING
// Define the correct matrices
#if defined(DOTS_INSTANCING_ON)
#undef unity_ObjectToWorld
#undef unity_MatrixPreviousM
#undef UNITY_MATRIX_M
#define UNITY_MATRIX_M UNITY_DOTS_MATRIX_M
#undef UNITY_MATRIX_I_M
#define UNITY_MATRIX_I_M Inverse(UNITY_DOTS_MATRIX_M)
#undef UNITY_PREV_MATRIX_M
#define UNITY_PREV_MATRIX_M UNITY_DOTS_PREV_MATRIX_M
#undef UNITY_PREV_MATRIX_I_M
#define UNITY_PREV_MATRIX_I_M Inverse(UNITY_DOTS_PREV_MATRIX_M)
#elif !defined(HAVE_VFX_MODIFICATION)
#undef unity_ObjectToWorld
#undef unity_MatrixPreviousM
#undef UNITY_MATRIX_M
#define UNITY_MATRIX_M unity_ObjectToWorld
#undef UNITY_MATRIX_I_M
#define UNITY_MATRIX_I_M Inverse(unity_ObjectToWorld)
#undef UNITY_PREV_MATRIX_M
#define UNITY_PREV_MATRIX_M unity_MatrixPreviousM
#undef UNITY_PREV_MATRIX_I_M
#define UNITY_PREV_MATRIX_I_M Inverse(unity_MatrixPreviousM)
#endif
#undef unity_MatrixVP
float4x4 unity_MatrixV;
float4x4 unity_MatrixVP;
float4x4 glstate_matrix_projection;
#undef UNITY_MATRIX_V
#define UNITY_MATRIX_V unity_MatrixV
#undef UNITY_MATRIX_VP
#define UNITY_MATRIX_VP unity_MatrixVP
#undef UNITY_MATRIX_P
#define UNITY_MATRIX_P glstate_matrix_projection
// Overwrite the SpaceTransforms functions
#define GetObjectToWorldMatrix GetObjectToWorldMatrix_Picking
#define GetWorldToObjectMatrix GetWorldToObjectMatrix_Picking
#define GetPrevObjectToWorldMatrix GetPrevObjectToWorldMatrix_Picking
#define GetPrevWorldToObjectMatrix GetPrevWorldToObjectMatrix_Picking
#define GetWorldToViewMatrix GetWorldToViewMatrix_Picking
#define GetViewToWorldMatrix GetViewToWorldMatrix_Picking
#define GetWorldToHClipMatrix GetWorldToHClipMatrix_Picking
#define GetViewToHClipMatrix GetViewToHClipMatrix_Picking
#define GetAbsolutePositionWS GetAbsolutePositionWS_Picking
#define GetCameraRelativePositionWS GetCameraRelativePositionWS_Picking
#define GetOddNegativeScale GetOddNegativeScale_Picking
#define TransformObjectToWorld TransformObjectToWorld_Picking
#define TransformWorldToObject TransformWorldToObject_Picking
#define TransformWorldToView TransformWorldToView_Picking
#define TransformViewToWorld TransformViewToWorld_Picking
#define TransformObjectToHClip TransformObjectToHClip_Picking
#define TransformWorldToHClip TransformWorldToHClip_Picking
#define TransformWViewToHClip TransformWViewToHClip_Picking
#define TransformObjectToWorldDir TransformObjectToWorldDir_Picking
#define TransformWorldToObjectDir TransformWorldToObjectDir_Picking
#define TransformWorldToViewDir TransformWorldToViewDir_Picking
#define TransformViewToWorldDir TransformViewToWorldDir_Picking
#define TransformWorldToHClipDir TransformWorldToHClipDir_Picking
#define TransformObjectToWorldNormal TransformObjectToWorldNormal_Picking
#define TransformWorldToObjectNormal TransformWorldToObjectNormal_Picking
#define CreateTangentToWorld CreateTangentToWorld_Picking
#define TransformTangentToWorld TransformTangentToWorld_Picking
#define TransformWorldToTangent TransformWorldToTangent_Picking
#define TransformTangentToObject TransformTangentToObject_Picking
#define TransformObjectToTangent TransformObjectToTangent_Picking
#define TransformWorldToViewNormal TransformWorldToViewNormal_Picking
#define TransformViewToWorldNormal TransformViewToWorldNormal_Picking
#define TransformWorldToTangentDir TransformWorldToTangentDir_Picking
#define TransformTangentToWorldDir TransformTangentToWorldDir_Picking
float4x4 ScenePickingGetCameraViewProjMatrix()
{
float4x4 translationMatrix = {
{ 1.0 ,0.0 , 0.0, -_WorldSpaceCameraPos.x },
{ 0.0 ,1.0 , 0.0, -_WorldSpaceCameraPos.y },
{ 0.0 ,0.0 , 1.0, -_WorldSpaceCameraPos.z },
{ 0.0 ,0.0 , 0.0, 1.0} };
return mul(_CameraViewProjMatrix, translationMatrix);
}
#define _CameraViewProjMatrix ScenePickingGetCameraViewProjMatrix()
// Redefine the functions using the new macros
#undef UNITY_SPACE_TRANSFORMS_INCLUDED
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
#if defined(HAVE_VFX_MODIFICATION)
#define VFX_HAS_PICKING_MATRIX_CORRECTION 1
#define GetSGVFXUnityObjectToWorld GetSGVFXUnityObjectToWorld_Picking
#define GetSGVFXUnityWorldToObject GetSGVFXUnityWorldToObject_Picking
float4x4 GetSGVFXUnityObjectToWorld() { return RevertCameraTranslationFromMatrix(GetSGVFXUnityObjectToWorldBackup()); }
float4x4 GetSGVFXUnityWorldToObject() { return RevertCameraTranslationFromInverseMatrix(GetSGVFXUnityWorldToObjectBackup()); }
#endif
#endif
#endif