mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
Add culling for offscreen decals
This commit is contained in:
parent
b247e9af4e
commit
f195fc4c19
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:8af8a41d215556458e4f1a77bfd22aaf749c44eb427c1867e5cf8e84fbdaeb37
|
oid sha256:2f6b1f01873a50d91f3af3f0452e49f1819bbd3438383c88e2d23d74fae3e3ee
|
||||||
size 5164
|
size 5172
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:347ae98aa8eb27d0d16974c06ea444d2d6fb72893797ab9201a0fa1ca822f6fb
|
oid sha256:f7fcc42c1ba59a7694df18c60f827f5fd98113ce3471dc01dab37bb67b2d63e5
|
||||||
size 37888
|
size 38400
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="DecalBoundsBehaviour.cs" />
|
||||||
<Compile Include="DecalConfig.cs" />
|
<Compile Include="DecalConfig.cs" />
|
||||||
<Compile Include="DecalIconFixer.cs" />
|
<Compile Include="DecalIconFixer.cs" />
|
||||||
<Compile Include="DecalPropertyIDs.cs" />
|
<Compile Include="DecalPropertyIDs.cs" />
|
||||||
|
|
12
Source/ConformalDecals/DecalBoundsBehaviour.cs
Normal file
12
Source/ConformalDecals/DecalBoundsBehaviour.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace ConformalDecals {
|
||||||
|
public class DecalBoundsBehaviour : MonoBehaviour {
|
||||||
|
public ModuleConformalDecal decalRenderer;
|
||||||
|
|
||||||
|
private void OnWillRenderObject() {
|
||||||
|
decalRenderer._shouldRender = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,6 +48,8 @@ namespace ConformalDecals {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
[KSPField] public string decalProjector = "Decal-Projector";
|
[KSPField] public string decalProjector = "Decal-Projector";
|
||||||
|
|
||||||
|
[KSPField] public string decalBounds = "Decal-Bounds";
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
|
|
||||||
[KSPField] public bool scaleAdjustable = true;
|
[KSPField] public bool scaleAdjustable = true;
|
||||||
|
@ -124,7 +126,8 @@ namespace ConformalDecals {
|
||||||
[KSPField] public Transform decalBackTransform;
|
[KSPField] public Transform decalBackTransform;
|
||||||
[KSPField] public Transform decalModelTransform;
|
[KSPField] public Transform decalModelTransform;
|
||||||
[KSPField] public Transform decalProjectorTransform;
|
[KSPField] public Transform decalProjectorTransform;
|
||||||
|
[KSPField] public Transform decalBoundsTransform;
|
||||||
|
|
||||||
[KSPField] public Material backMaterial;
|
[KSPField] public Material backMaterial;
|
||||||
[KSPField] public Vector2 backTextureBaseScale;
|
[KSPField] public Vector2 backTextureBaseScale;
|
||||||
|
|
||||||
|
@ -139,6 +142,8 @@ namespace ConformalDecals {
|
||||||
|
|
||||||
private Material _decalMaterial;
|
private Material _decalMaterial;
|
||||||
private Material _previewMaterial;
|
private Material _previewMaterial;
|
||||||
|
|
||||||
|
internal bool _shouldRender;
|
||||||
|
|
||||||
private int DecalQueue {
|
private int DecalQueue {
|
||||||
get {
|
get {
|
||||||
|
@ -203,6 +208,15 @@ namespace ConformalDecals {
|
||||||
decalProjectorTransform = part.FindModelTransform(decalProjector);
|
decalProjectorTransform = part.FindModelTransform(decalProjector);
|
||||||
if (decalProjectorTransform == null) throw new FormatException($"Could not find decalProjector transform: '{decalProjector}'.");
|
if (decalProjectorTransform == null) throw new FormatException($"Could not find decalProjector transform: '{decalProjector}'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find bounds transform
|
||||||
|
if (string.IsNullOrEmpty(decalBounds)) {
|
||||||
|
decalBoundsTransform = part.transform;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
decalBoundsTransform = part.FindModelTransform(decalBounds);
|
||||||
|
if (decalBoundsTransform == null) throw new FormatException($"Could not find decalBounds transform: '{decalBounds}'.");
|
||||||
|
}
|
||||||
|
|
||||||
// get back material if necessary
|
// get back material if necessary
|
||||||
if (updateBackScale) {
|
if (updateBackScale) {
|
||||||
|
@ -303,6 +317,9 @@ namespace ConformalDecals {
|
||||||
|
|
||||||
materialProperties.RenderQueue = DecalQueue;
|
materialProperties.RenderQueue = DecalQueue;
|
||||||
|
|
||||||
|
var boundsBehaviour = decalBoundsTransform.gameObject.AddComponent<DecalBoundsBehaviour>();
|
||||||
|
boundsBehaviour.decalRenderer = this;
|
||||||
|
|
||||||
UpdateMaterials();
|
UpdateMaterials();
|
||||||
|
|
||||||
if (HighLogic.LoadedSceneIsGame) {
|
if (HighLogic.LoadedSceneIsGame) {
|
||||||
|
@ -419,6 +436,10 @@ namespace ConformalDecals {
|
||||||
UpdateScale();
|
UpdateScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void Update() {
|
||||||
|
_shouldRender = false;
|
||||||
|
}
|
||||||
|
|
||||||
protected void UpdateScale() {
|
protected void UpdateScale() {
|
||||||
var aspectRatio = materialProperties.AspectRatio;
|
var aspectRatio = materialProperties.AspectRatio;
|
||||||
Vector2 size;
|
Vector2 size;
|
||||||
|
@ -592,9 +613,9 @@ namespace ConformalDecals {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void Render(Camera camera) {
|
public void Render(Camera camera) {
|
||||||
if (!_isAttached) return;
|
if (!_isAttached) return;
|
||||||
|
|
||||||
// render on each target object
|
// render on each target object
|
||||||
foreach (var target in _targets) {
|
foreach (var target in _targets) {
|
||||||
target.Render(_decalMaterial, part.mpb, camera);
|
target.Render(_decalMaterial, part.mpb, camera);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user