Better normal map handling for parts with no normals

feature-multiSDF
Andrew Cassidy 4 years ago
parent b24a2c1bbe
commit 3ab1414a19

@ -7,15 +7,25 @@ using UnityEngine.Rendering;
namespace ConformalDecals.MaterialModifiers { namespace ConformalDecals.MaterialModifiers {
public class MaterialPropertyCollection : ScriptableObject, ISerializationCallbackReceiver { public class MaterialPropertyCollection : ScriptableObject, ISerializationCallbackReceiver {
public int RenderQueue {
get => _renderQueue;
set {
_renderQueue = value;
if (_decalMaterial != null) _decalMaterial.renderQueue = value;
}
}
[SerializeField] private Shader _shader; [SerializeField] private Shader _shader;
[SerializeField] private MaterialTextureProperty _mainTexture; [SerializeField] private MaterialTextureProperty _mainTexture;
[SerializeField] private string[] _serializedNames; [SerializeField] private string[] _serializedNames;
[SerializeField] private MaterialProperty[] _serializedProperties; [SerializeField] private MaterialProperty[] _serializedProperties;
private Dictionary<string, MaterialProperty> _materialProperties; private Dictionary<string, MaterialProperty> _materialProperties;
private Material _decalMaterial; private Material _decalMaterial;
private Material _previewMaterial; private Material _previewMaterial;
private int _renderQueue = 2100;
public Shader DecalShader => _shader; public Shader DecalShader => _shader;
@ -25,6 +35,7 @@ namespace ConformalDecals.MaterialModifiers {
_decalMaterial = new Material(_shader); _decalMaterial = new Material(_shader);
_decalMaterial.SetInt(DecalPropertyIDs._Cull, (int) CullMode.Off); _decalMaterial.SetInt(DecalPropertyIDs._Cull, (int) CullMode.Off);
_decalMaterial.renderQueue = RenderQueue;
} }
return _decalMaterial; return _decalMaterial;
@ -185,10 +196,6 @@ namespace ConformalDecals.MaterialModifiers {
_previewMaterial = null; _previewMaterial = null;
} }
public void SetRenderQueue(int queue) {
DecalMaterial.renderQueue = queue;
}
public void UpdateScale(Vector2 scale) { public void UpdateScale(Vector2 scale) {
foreach (var entry in _materialProperties) { foreach (var entry in _materialProperties) {
if (entry.Value is MaterialTextureProperty textureProperty && textureProperty.autoScale) { if (entry.Value is MaterialTextureProperty textureProperty && textureProperty.autoScale) {

@ -250,6 +250,10 @@ namespace ConformalDecals {
UpdateMaterials(); UpdateMaterials();
if (HighLogic.LoadedSceneIsEditor) {
UpdateTweakables();
}
if (HighLogic.LoadedSceneIsGame) { if (HighLogic.LoadedSceneIsGame) {
UpdateScale(); UpdateScale();
} }
@ -278,7 +282,7 @@ namespace ConformalDecals {
UpdateTweakables(); UpdateTweakables();
} }
materialProperties.SetRenderQueue(DecalQueue); materialProperties.RenderQueue = DecalQueue;
UpdateMaterials(); UpdateMaterials();

@ -34,19 +34,16 @@ namespace ConformalDecals {
_decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal); _decalMPB.SetVector(DecalPropertyIDs._DecalNormal, decalNormal);
_decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent); _decalMPB.SetVector(DecalPropertyIDs._DecalTangent, decalTangent);
if (useBaseNormal) { if (useBaseNormal && targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) {
if (targetMaterial.HasProperty(DecalPropertyIDs._BumpMap)) { _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);
var normalOffset = targetMaterial.GetTextureOffset(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 { else {
Debug.Log("Using blank normal"); _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal);
_decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal);
}
} }
} }

Loading…
Cancel
Save