mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
Fix tile parsing and decal rotation
• Decals now respond to rotation and offset tools again • Fix tile value parsing • Fix broken normals when projecting on parts with no normal maps
This commit is contained in:
parent
86f68b3bf8
commit
e2f54cb4f7
Binary file not shown.
@ -1,9 +1,13 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Experimental.Rendering;
|
||||||
|
|
||||||
namespace ConformalDecals {
|
namespace ConformalDecals {
|
||||||
public static class DecalConfig {
|
public static class DecalConfig {
|
||||||
|
private static Texture2D _blankNormal;
|
||||||
private static List<string> _shaderBlacklist;
|
private static List<string> _shaderBlacklist;
|
||||||
|
|
||||||
|
public static Texture2D BlankNormal => _blankNormal;
|
||||||
|
|
||||||
public static bool IsBlacklisted(Shader shader) {
|
public static bool IsBlacklisted(Shader shader) {
|
||||||
return IsBlacklisted(shader.name);
|
return IsBlacklisted(shader.name);
|
||||||
@ -21,6 +25,24 @@ namespace ConformalDecals {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Texture2D MakeBlankNormal() {
|
||||||
|
Debug.Log("ConformalDecals: Generating neutral normal map texture");
|
||||||
|
var width = 2;
|
||||||
|
var height = 2;
|
||||||
|
var color = new Color32(255, 128, 128, 128);
|
||||||
|
var colors = new Color32[] { color, color, color, color };
|
||||||
|
|
||||||
|
var tex = new Texture2D(width, height, TextureFormat.RGBA32, false);
|
||||||
|
for (var x = 0; x <= width; x++) {
|
||||||
|
for (var y = 0; y < height; y++) {
|
||||||
|
tex.SetPixels32(colors);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tex.Apply();
|
||||||
|
|
||||||
|
return tex;
|
||||||
|
}
|
||||||
|
|
||||||
public static void ModuleManagerPostLoad() {
|
public static void ModuleManagerPostLoad() {
|
||||||
_shaderBlacklist = new List<string>();
|
_shaderBlacklist = new List<string>();
|
||||||
|
|
||||||
@ -32,6 +54,8 @@ namespace ConformalDecals {
|
|||||||
ParseConfig(config.config);
|
ParseConfig(config.config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_blankNormal = MakeBlankNormal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -228,6 +228,12 @@ namespace ConformalDecals {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle texture tiling parameters
|
// handle texture tiling parameters
|
||||||
|
var tileString = node.GetValue("tile");
|
||||||
|
this.Log(tileString);
|
||||||
|
if (!string.IsNullOrEmpty(tileString)) {
|
||||||
|
var tileValid = ParseExtensions.TryParseRect(tileString, out tileRect);
|
||||||
|
if (!tileValid) throw new FormatException($"Invalid rect value for tile '{tileString}'");
|
||||||
|
}
|
||||||
if (tileRect.x >= 0) {
|
if (tileRect.x >= 0) {
|
||||||
materialProperties.UpdateTile(tileRect);
|
materialProperties.UpdateTile(tileRect);
|
||||||
}
|
}
|
||||||
@ -338,6 +344,7 @@ namespace ConformalDecals {
|
|||||||
break;
|
break;
|
||||||
case ConstructionEventType.PartOffsetting:
|
case ConstructionEventType.PartOffsetting:
|
||||||
case ConstructionEventType.PartRotating:
|
case ConstructionEventType.PartRotating:
|
||||||
|
UpdateScale();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
using ConformalDecals.Util;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering;
|
using UnityEngine.Rendering;
|
||||||
|
|
||||||
@ -35,10 +34,8 @@ namespace ConformalDecals {
|
|||||||
_decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal);
|
_decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal);
|
||||||
_decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent);
|
_decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent);
|
||||||
|
|
||||||
if (useBaseNormal && targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) {
|
if (useBaseNormal) {
|
||||||
var normal = targetMaterial.GetTexture(DecalPropertyIDs._BumpMap);
|
if (targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) {
|
||||||
if (normal != null) {
|
|
||||||
|
|
||||||
_decalMPB.SetTexture(DecalPropertyIDs._BumpMap, targetMaterial.GetTexture(DecalPropertyIDs._BumpMap));
|
_decalMPB.SetTexture(DecalPropertyIDs._BumpMap, targetMaterial.GetTexture(DecalPropertyIDs._BumpMap));
|
||||||
|
|
||||||
var normalScale = targetMaterial.GetTextureScale(DecalPropertyIDs._BumpMap);
|
var normalScale = targetMaterial.GetTextureScale(DecalPropertyIDs._BumpMap);
|
||||||
@ -46,6 +43,10 @@ namespace ConformalDecals {
|
|||||||
|
|
||||||
_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 {
|
||||||
|
Debug.Log("Using blank normal");
|
||||||
|
_decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user