mirror of
https://github.com/DCFApixels/Unity-DebugX.git
synced 2025-09-18 01:54:37 +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
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
#include "HandlesLibrary.cginc"
|
||||
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
struct InstanceData
|
||||
{
|
||||
float4x4 m;
|
||||
float4 color;
|
||||
};
|
||||
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
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
@ -58,55 +66,14 @@ Shader "DCFApixels/DebugX/Handles"
|
||||
half4 color : COLOR;
|
||||
};
|
||||
|
||||
float4 _Color;
|
||||
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 o;
|
||||
UNITY_SETUP_INSTANCE_ID(v);
|
||||
|
||||
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
|
||||
|
||||
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||
|
||||
#if _BILLBOARD_ON
|
||||
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
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
#include "HandlesLibrary.cginc"
|
||||
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
struct InstanceData
|
||||
{
|
||||
float4x4 m;
|
||||
float4 color;
|
||||
};
|
||||
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
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
@ -60,54 +68,13 @@ Shader "DCFApixels/DebugX/Handles Overwrite"
|
||||
half4 color : COLOR;
|
||||
};
|
||||
|
||||
float4 _Color;
|
||||
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 o;
|
||||
UNITY_SETUP_INSTANCE_ID(v);
|
||||
|
||||
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
|
||||
|
||||
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||
|
||||
#if _BILLBOARD_ON
|
||||
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
||||
|
@ -32,15 +32,24 @@ Shader "DCFApixels/DebugX/Handles Wire"
|
||||
#pragma instancing_options procedural:setup
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
#include "HandlesLibrary.cginc"
|
||||
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
#if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
|
||||
struct InstanceData
|
||||
{
|
||||
float4x4 m;
|
||||
float4 color;
|
||||
};
|
||||
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
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
@ -64,54 +73,14 @@ Shader "DCFApixels/DebugX/Handles Wire"
|
||||
float4 color : COLOR;
|
||||
};
|
||||
|
||||
float4 _Color;
|
||||
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 o;
|
||||
UNITY_SETUP_INSTANCE_ID(v);
|
||||
|
||||
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
|
||||
|
||||
float4x4 M = GET_HANDLE_UNITY_MATRIX_M();
|
||||
|
||||
#if _BILLBOARD_ON
|
||||
float4 worldOrigin = mul(M, float4(0, 0, 0, 1));
|
||||
|
Loading…
Reference in New Issue
Block a user