optimisations skipping empty for loops

This commit is contained in:
DeMuenu
2026-03-28 17:15:19 +01:00
parent 79ad33c5f3
commit 1a30f72010
6 changed files with 7 additions and 6 deletions

View File

@@ -368,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

@@ -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