mirror of
https://github.com/DCFApixels/Unity-DebugX.git
synced 2025-09-18 18:14:36 +08:00
update shaders
This commit is contained in:
parent
964ba7e3df
commit
e3341988b0
@ -31,15 +31,23 @@ Shader "DCFApixels/DebugX/Handles"
|
|||||||
#pragma instancing_options procedural:setup
|
#pragma instancing_options procedural:setup
|
||||||
|
|
||||||
#include "UnityCG.cginc"
|
#include "UnityCG.cginc"
|
||||||
|
#include "HandlesLibrary.cginc"
|
||||||
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||||
struct InstanceData
|
struct InstanceData
|
||||||
{
|
{
|
||||||
float4x4 m;
|
float4x4 m;
|
||||||
float4 color;
|
float4 color;
|
||||||
};
|
};
|
||||||
StructuredBuffer<InstanceData> _DataBuffer;
|
StructuredBuffer<InstanceData> _DataBuffer;
|
||||||
#endif
|
void setup()
|
||||||
|
{
|
||||||
|
InstanceData data = _DataBuffer[unity_InstanceID];
|
||||||
|
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
||||||
|
_Color = data.color;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct appdata_t
|
struct appdata_t
|
||||||
{
|
{
|
||||||
float4 vertex : POSITION;
|
float4 vertex : POSITION;
|
||||||
@ -58,55 +66,14 @@ Shader "DCFApixels/DebugX/Handles"
|
|||||||
half4 color : COLOR;
|
half4 color : COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
float4 _Color;
|
|
||||||
float4 _DebugX_GlobalColor;
|
float4 _DebugX_GlobalColor;
|
||||||
|
|
||||||
void setup()
|
|
||||||
{
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
|
||||||
InstanceData data = _DataBuffer[unity_InstanceID];
|
|
||||||
|
|
||||||
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
|
||||||
_Color = data.color;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if _DOT_ON
|
|
||||||
float _DebugX_GlobalDotSize;
|
|
||||||
float GetHandleSize(float3 objectPosition)
|
|
||||||
{
|
|
||||||
float3 viewDir = normalize(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
|
|
||||||
float distance = length(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
float isOrthographic = UNITY_MATRIX_P[3][3];
|
|
||||||
distance = lerp(distance, 1, isOrthographic);
|
|
||||||
|
|
||||||
float fov = radians(UNITY_MATRIX_P[1][1] * 2.0);
|
|
||||||
float scale = distance * (1 / fov) * 0.015;
|
|
||||||
|
|
||||||
|
|
||||||
return scale * _DebugX_GlobalDotSize;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v2f vert (appdata_t v)
|
v2f vert (appdata_t v)
|
||||||
{
|
{
|
||||||
v2f o;
|
v2f o;
|
||||||
UNITY_SETUP_INSTANCE_ID(v);
|
UNITY_SETUP_INSTANCE_ID(v);
|
||||||
|
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||||
float4x4 M = UNITY_MATRIX_M;
|
|
||||||
#if _DOT_ON
|
|
||||||
float scaleMultiplier = GetHandleSize(mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)).xyz);
|
|
||||||
M._m00 *= scaleMultiplier;
|
|
||||||
M._m11 *= scaleMultiplier;
|
|
||||||
M._m22 *= scaleMultiplier;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if _BILLBOARD_ON
|
#if _BILLBOARD_ON
|
||||||
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
||||||
|
47
Runtime/Shaders/HandlesLibrary.cginc
Normal file
47
Runtime/Shaders/HandlesLibrary.cginc
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float GetHandleSize(float3 objectPosition, float scaleM)
|
||||||
|
{
|
||||||
|
float3 viewDir = normalize(_WorldSpaceCameraPos - objectPosition);
|
||||||
|
|
||||||
|
float distance = length(_WorldSpaceCameraPos - objectPosition);
|
||||||
|
float isOrthographic = UNITY_MATRIX_P[3][3];
|
||||||
|
distance = lerp(distance, 1, isOrthographic);
|
||||||
|
|
||||||
|
float fov = radians(UNITY_MATRIX_P[1][1] * 2.0);
|
||||||
|
float scale = distance * (1 / fov) * 0.015;
|
||||||
|
|
||||||
|
return scale * scaleM;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4x4 GetHandleSizeMatrix(float3 objectPosition, float scaleM)
|
||||||
|
{
|
||||||
|
float4x4 M = UNITY_MATRIX_M;
|
||||||
|
|
||||||
|
float scale = GetHandleSize(objectPosition, scaleM);
|
||||||
|
M._m00 *= scale;
|
||||||
|
M._m11 *= scale;
|
||||||
|
M._m22 *= scale;
|
||||||
|
|
||||||
|
return M;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Macros
|
||||||
|
#if _DOT_ON
|
||||||
|
float _DebugX_GlobalDotSize;
|
||||||
|
#endif
|
||||||
|
float4 _Color;
|
||||||
|
|
||||||
|
float4x4 GET_HANDLE_UNITY_MATRIX_M()
|
||||||
|
{
|
||||||
|
#if _DOT_ON
|
||||||
|
return GetHandleSizeMatrix(mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)).xyz, _DebugX_GlobalDotSize);
|
||||||
|
#else
|
||||||
|
return UNITY_MATRIX_M;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
7
Runtime/Shaders/HandlesLibrary.cginc.meta
Normal file
7
Runtime/Shaders/HandlesLibrary.cginc.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 728ffe8b3d2321e45a960a3a90e65bc6
|
||||||
|
ShaderIncludeImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -33,15 +33,23 @@ Shader "DCFApixels/DebugX/Handles Overwrite"
|
|||||||
#pragma instancing_options procedural:setup
|
#pragma instancing_options procedural:setup
|
||||||
|
|
||||||
#include "UnityCG.cginc"
|
#include "UnityCG.cginc"
|
||||||
|
#include "HandlesLibrary.cginc"
|
||||||
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||||
struct InstanceData
|
struct InstanceData
|
||||||
{
|
{
|
||||||
float4x4 m;
|
float4x4 m;
|
||||||
float4 color;
|
float4 color;
|
||||||
};
|
};
|
||||||
StructuredBuffer<InstanceData> _DataBuffer;
|
StructuredBuffer<InstanceData> _DataBuffer;
|
||||||
#endif
|
void setup()
|
||||||
|
{
|
||||||
|
InstanceData data = _DataBuffer[unity_InstanceID];
|
||||||
|
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
||||||
|
_Color = data.color;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct appdata_t
|
struct appdata_t
|
||||||
{
|
{
|
||||||
float4 vertex : POSITION;
|
float4 vertex : POSITION;
|
||||||
@ -60,54 +68,13 @@ Shader "DCFApixels/DebugX/Handles Overwrite"
|
|||||||
half4 color : COLOR;
|
half4 color : COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
float4 _Color;
|
|
||||||
float4 _DebugX_GlobalColor;
|
float4 _DebugX_GlobalColor;
|
||||||
|
|
||||||
void setup()
|
|
||||||
{
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
|
||||||
InstanceData data = _DataBuffer[unity_InstanceID];
|
|
||||||
|
|
||||||
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
|
||||||
_Color = data.color;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if _DOT_ON
|
|
||||||
float _DebugX_GlobalDotSize;
|
|
||||||
float GetHandleSize(float3 objectPosition)
|
|
||||||
{
|
|
||||||
float3 viewDir = normalize(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
|
|
||||||
float distance = length(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
float isOrthographic = UNITY_MATRIX_P[3][3];
|
|
||||||
distance = lerp(distance, 1, isOrthographic);
|
|
||||||
|
|
||||||
float fov = radians(UNITY_MATRIX_P[1][1] * 2.0);
|
|
||||||
float scale = distance * (1 / fov) * 0.015;
|
|
||||||
|
|
||||||
return scale * _DebugX_GlobalDotSize;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v2f vert (appdata_t v)
|
v2f vert (appdata_t v)
|
||||||
{
|
{
|
||||||
v2f o;
|
v2f o;
|
||||||
UNITY_SETUP_INSTANCE_ID(v);
|
UNITY_SETUP_INSTANCE_ID(v);
|
||||||
|
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||||
float4x4 M = UNITY_MATRIX_M;
|
|
||||||
#if _DOT_ON
|
|
||||||
float scaleMultiplier = GetHandleSize(mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)).xyz);
|
|
||||||
M._m00 *= scaleMultiplier;
|
|
||||||
M._m11 *= scaleMultiplier;
|
|
||||||
M._m22 *= scaleMultiplier;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if _BILLBOARD_ON
|
#if _BILLBOARD_ON
|
||||||
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
||||||
|
@ -32,15 +32,24 @@ Shader "DCFApixels/DebugX/Handles Wire"
|
|||||||
#pragma instancing_options procedural:setup
|
#pragma instancing_options procedural:setup
|
||||||
|
|
||||||
#include "UnityCG.cginc"
|
#include "UnityCG.cginc"
|
||||||
|
#include "HandlesLibrary.cginc"
|
||||||
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||||
struct InstanceData
|
struct InstanceData
|
||||||
{
|
{
|
||||||
float4x4 m;
|
float4x4 m;
|
||||||
float4 color;
|
float4 color;
|
||||||
};
|
};
|
||||||
StructuredBuffer<InstanceData> _DataBuffer;
|
StructuredBuffer<InstanceData> _DataBuffer;
|
||||||
#endif
|
void setup()
|
||||||
|
{
|
||||||
|
InstanceData data = _DataBuffer[unity_InstanceID];
|
||||||
|
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
||||||
|
_Color = data.color;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct appdata_t
|
struct appdata_t
|
||||||
{
|
{
|
||||||
float4 vertex : POSITION;
|
float4 vertex : POSITION;
|
||||||
@ -64,54 +73,14 @@ Shader "DCFApixels/DebugX/Handles Wire"
|
|||||||
float4 color : COLOR;
|
float4 color : COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
float4 _Color;
|
|
||||||
float4 _DebugX_GlobalColor;
|
float4 _DebugX_GlobalColor;
|
||||||
|
|
||||||
void setup()
|
|
||||||
{
|
|
||||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
|
||||||
InstanceData data = _DataBuffer[unity_InstanceID];
|
|
||||||
|
|
||||||
UNITY_MATRIX_M = data.m; //UNITY_MATRIX_M
|
|
||||||
_Color = data.color;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if _DOT_ON
|
|
||||||
float _DebugX_GlobalDotSize;
|
|
||||||
float GetHandleSize(float3 objectPosition)
|
|
||||||
{
|
|
||||||
float3 viewDir = normalize(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
|
|
||||||
float distance = length(_WorldSpaceCameraPos - objectPosition);
|
|
||||||
float isOrthographic = UNITY_MATRIX_P[3][3];
|
|
||||||
distance = lerp(distance, 1, isOrthographic);
|
|
||||||
|
|
||||||
float fov = radians(UNITY_MATRIX_P[1][1] * 2.0);
|
|
||||||
float scale = distance * (1 / fov) * 0.015;
|
|
||||||
|
|
||||||
return scale * _DebugX_GlobalDotSize;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v2g vert (appdata_t v)
|
v2g vert (appdata_t v)
|
||||||
{
|
{
|
||||||
v2g o;
|
v2g o;
|
||||||
UNITY_SETUP_INSTANCE_ID(v);
|
UNITY_SETUP_INSTANCE_ID(v);
|
||||||
|
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||||
float4x4 M = UNITY_MATRIX_M;
|
|
||||||
#if _DOT_ON
|
|
||||||
float scaleMultiplier = GetHandleSize(mul(UNITY_MATRIX_M, float4(0, 0, 0, 1)).xyz);
|
|
||||||
M._m00 *= scaleMultiplier;
|
|
||||||
M._m11 *= scaleMultiplier;
|
|
||||||
M._m22 *= scaleMultiplier;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if _BILLBOARD_ON
|
#if _BILLBOARD_ON
|
||||||
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
||||||
|
Loading…
Reference in New Issue
Block a user