Compare commits

...

2 Commits

Author SHA1 Message Date
DeMuenu
1a30f72010 optimisations skipping empty for loops 2026-03-28 17:15:19 +01:00
DeMuenu
79ad33c5f3 Fix Gemini stuff 2026-03-26 23:01:38 +01:00
9 changed files with 19 additions and 13 deletions

View File

@@ -85,7 +85,7 @@ public static class LightUpdaterPreview
static void PushFromBehaviour(LightUpdater src) static void PushFromBehaviour(LightUpdater src)
{ {
int max = Mathf.Max(1, src.maxLights); int max = Mathf.Max(1, LightUpdater.maxLights);
EnsureArrays(src, max); EnsureArrays(src, max);
var c = _cache[src]; var c = _cache[src];

View File

@@ -1,5 +1,5 @@
// Assets/Lighting/Scripts/LightUpdater.Editor.cs // Assets/Lighting/Scripts/LightUpdater.Editor.cs
#if UNITY_EDITOR #if !COMPILER_UDONSHARP && UNITY_EDITOR
using UnityEngine; using UnityEngine;
public partial class LightUpdater public partial class LightUpdater

View File

@@ -47,9 +47,9 @@ public partial class LightUpdater : UdonSharpBehaviour
[Tooltip("float array: shadow map index (0=none, 1-4=shadow map index)")] [Tooltip("float array: shadow map index (0=none, 1-4=shadow map index)")]
public string shadowMapIndexProperty = "_Udon_ShadowMapIndex"; public string shadowMapIndexProperty = "_Udon_ShadowMapIndex";
[Header("Max Lights (advanced users)")] [Header("Max Lighetts (advanced users)")]
[Tooltip("Hard cap / array size. 80 = default cap")] [Tooltip("Hard cap / array size. 80 = default cap")]
public int maxLights = 80; public const int maxLights = 80;
@@ -66,7 +66,7 @@ public partial class LightUpdater : UdonSharpBehaviour
private float[] _ShadowMapArray; private float[] _ShadowMapArray;
private bool _ShadowMap_isDirty = false; private bool _ShadowMap_isDirty = false;
private LightdataStorage[] _sceneLights; private LightdataStorage[] _sceneLights = new LightdataStorage[maxLights];
private int _sceneLightCount = 0; private int _sceneLightCount = 0;
private VRCPlayerApi[] _players; private VRCPlayerApi[] _players;
@@ -85,14 +85,12 @@ public partial class LightUpdater : UdonSharpBehaviour
void Start() void Start()
{ {
if (maxLights < 1) maxLights = 1;
_positions = new Vector4[maxLights]; _positions = new Vector4[maxLights];
_lightColors = new Vector4[maxLights]; _lightColors = new Vector4[maxLights];
_directions = new Vector4[maxLights]; _directions = new Vector4[maxLights];
_TypeArray = new float[maxLights]; _TypeArray = new float[maxLights];
_ShadowMapArray = new float[maxLights]; _ShadowMapArray = new float[maxLights];
_sceneLights = new LightdataStorage[maxLights];
_players = new VRCPlayerApi[maxLights]; _players = new VRCPlayerApi[maxLights];
@@ -370,7 +368,7 @@ public partial class LightUpdater : UdonSharpBehaviour
if (pushShadowMap) VRCShader.SetGlobalFloatArray(UdonID_ShadowMapIndex, _ShadowMapArray); if (pushShadowMap) VRCShader.SetGlobalFloatArray(UdonID_ShadowMapIndex, _ShadowMapArray);
VRCShader.SetGlobalFloat(UdonID_LightCount, currentCount); VRCShader.SetGlobalFloat(UdonID_LightCount, currentCount);
Debug.Log($"[MoonlightVRC] Pushed {currentCount} lights to shader."); //Debug.Log($"[MoonlightVRC] Pushed {currentCount} lights to shader.");
// Only now mark them clean // Only now mark them clean
if (pushPositions) { _positons_isDirty = false; } if (pushPositions) { _positons_isDirty = false; }

View File

@@ -6,7 +6,7 @@
{ \ { \
float distAtten = max(1.0, distanceFromLight - radius) * invSqMul; \ float distAtten = max(1.0, distanceFromLight - radius) * invSqMul; \
contrib = _Udon_LightColors[LightCounter].a / max(1e-4, distAtten * distAtten); \ contrib = _Udon_LightColors[LightCounter].a / max(1e-4, distAtten * distAtten); \
\ if (contrib == 0.0) continue;\
dIntensity += contrib; \ dIntensity += contrib; \
} \ } \
else if (typeId == 1) \ else if (typeId == 1) \
@@ -18,6 +18,7 @@
contrib = smoothstep(radius,_Udon_LightDirections[LightCounter].w, contrib); \ contrib = smoothstep(radius,_Udon_LightDirections[LightCounter].w, contrib); \
\ \
contrib = contrib * invSq; \ contrib = contrib * invSq; \
if (contrib == 0.0) continue;\
dIntensity += contrib; \ dIntensity += contrib; \
} \ } \
half3 LightColor = _Udon_LightColors[LightCounter].xyz; \ half3 LightColor = _Udon_LightColors[LightCounter].xyz; \

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1193ddffee5ac344ea57d621ec8150f6
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -105,7 +105,7 @@ Shader "DeMuenu/World/Hoppou/Particles/LitParticles_2SP"
OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity
[loop] [loop]
for (int LightCounter = 0; LightCounter < MAX_LIGHTS; LightCounter++) for (int LightCounter = 0; LightCounter < count; LightCounter++)
{ {
InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib

View File

@@ -130,7 +130,7 @@ Shader "DeMuenu/World/Hoppou/Standard_2SP"
OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity
[loop] [loop]
for (int LightCounter = 0; LightCounter < MAX_LIGHTS; LightCounter++) for (int LightCounter = 0; LightCounter < count; LightCounter++)
{ {
InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib

View File

@@ -142,7 +142,7 @@ Shader "DeMuenu/World/Hoppou/Standard_Lightmap_2SP"
OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity
[loop] [loop]
for (int LightCounter = 0; LightCounter < MAX_LIGHTS; LightCounter++) for (int LightCounter = 0; LightCounter < count; LightCounter++)
{ {
InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib

View File

@@ -175,7 +175,7 @@ Shader "DeMuenu/World/Hoppou/WaterFlat_2SP"
OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity OutLoopSetup(i, _Udon_PlayerCount) //defines count, N, dmax, dIntensity
[loop] [loop]
for (int LightCounter = 0; LightCounter < MAX_LIGHTS; LightCounter++) for (int LightCounter = 0; LightCounter < count; LightCounter++)
{ {
InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib InLoopSetup(_Udon_LightPositions, LightCounter, count, i); //defines distanceFromLight, contrib