From b09695d602a083519f6f73165677077da38069c6 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Thu, 11 Jun 2020 21:01:01 -0700 Subject: [PATCH] Use bounds to choose projection targets --- .../Plugins/ConformalDecals.dll | Bin 38400 -> 38400 bytes .../ConformalDecals/ModuleConformalDecal.cs | 5 ++- Source/ConformalDecals/ProjectionTarget.cs | 37 ++++++++++-------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll index c3aa17a51ad467b7cf025b5e6e255a2caf735ee8..d26d9ad57a0c9b91ac11dc9fae449e913cfe2c97 100644 GIT binary patch delta 16034 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 delta 15988 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 x{$04U6D;6i?-qB{{q-fFFybP diff --git a/Source/ConformalDecals/ModuleConformalDecal.cs b/Source/ConformalDecals/ModuleConformalDecal.cs index 3d4f3ae..04097b7 100644 --- a/Source/ConformalDecals/ModuleConformalDecal.cs +++ b/Source/ConformalDecals/ModuleConformalDecal.cs @@ -142,6 +142,7 @@ namespace ConformalDecals { private Material _decalMaterial; private Material _previewMaterial; + private BoxCollider _boundsCollider; internal bool _shouldRender; @@ -320,6 +321,8 @@ namespace ConformalDecals { var boundsBehaviour = decalBoundsTransform.gameObject.AddComponent(); boundsBehaviour.decalRenderer = this; + _boundsCollider = decalBoundsTransform.GetComponent(); + UpdateMaterials(); if (HighLogic.LoadedSceneIsGame) { @@ -481,7 +484,7 @@ namespace ConformalDecals { // update projection foreach (var target in _targets) { - target.Project(_orthoMatrix, decalProjectorTransform, useBaseNormal); + target.Project(_orthoMatrix, decalProjectorTransform, _boundsCollider.bounds, useBaseNormal); } } else { diff --git a/Source/ConformalDecals/ProjectionTarget.cs b/Source/ConformalDecals/ProjectionTarget.cs index 5b8adae..621c56b 100644 --- a/Source/ConformalDecals/ProjectionTarget.cs +++ b/Source/ConformalDecals/ProjectionTarget.cs @@ -20,30 +20,35 @@ namespace ConformalDecals { _decalMPB = new MaterialPropertyBlock(); } - public void Project(Matrix4x4 orthoMatrix, Transform projector, bool useBaseNormal) { - _projectionEnabled = true; + public void Project(Matrix4x4 orthoMatrix, Transform projector, Bounds projectorBounds, bool useBaseNormal) { - var targetMaterial = _targetRenderer.sharedMaterial; - var projectorToTargetMatrix = target.worldToLocalMatrix * projector.localToWorldMatrix; + if (projectorBounds.Intersects(_targetRenderer.bounds)) { + _projectionEnabled = true; + var targetMaterial = _targetRenderer.sharedMaterial; + var projectorToTargetMatrix = target.worldToLocalMatrix * projector.localToWorldMatrix; - var projectionMatrix = orthoMatrix * projectorToTargetMatrix.inverse; - var decalNormal = projectorToTargetMatrix.MultiplyVector(Vector3.back).normalized; - var decalTangent = projectorToTargetMatrix.MultiplyVector(Vector3.right).normalized; + var projectionMatrix = orthoMatrix * projectorToTargetMatrix.inverse; + var decalNormal = projectorToTargetMatrix.MultiplyVector(Vector3.back).normalized; + var decalTangent = projectorToTargetMatrix.MultiplyVector(Vector3.right).normalized; - _decalMPB.SetMatrix(DecalPropertyIDs._ProjectionMatrix, projectionMatrix); - _decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal); - _decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent); + _decalMPB.SetMatrix(DecalPropertyIDs._ProjectionMatrix, projectionMatrix); + _decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal); + _decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent); - if (useBaseNormal && targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) { - _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, targetMaterial.GetTexture(DecalPropertyIDs._BumpMap)); + if (useBaseNormal && targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) { + _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, targetMaterial.GetTexture(DecalPropertyIDs._BumpMap)); - var normalScale = targetMaterial.GetTextureScale(DecalPropertyIDs._BumpMap); - var normalOffset = targetMaterial.GetTextureOffset(DecalPropertyIDs._BumpMap); + var normalScale = targetMaterial.GetTextureScale(DecalPropertyIDs._BumpMap); + var normalOffset = targetMaterial.GetTextureOffset(DecalPropertyIDs._BumpMap); - _decalMPB.SetVector(DecalPropertyIDs._BumpMap_ST, new Vector4(normalScale.x, normalScale.y, normalOffset.x, normalOffset.y)); + _decalMPB.SetVector(DecalPropertyIDs._BumpMap_ST, new Vector4(normalScale.x, normalScale.y, normalOffset.x, normalOffset.y)); + } + else { + _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal); + } } else { - _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal); + _projectionEnabled = false; } }