Browse Source

Reworked visual style setup, reducing entity materials to just one material for both alias models and brush models, and turning material creation into a separate step. This makes it more obvious when new materials are created, and allows for more potential customization in sub-classes.

console
Nico de Poel 5 years ago
parent
commit
b3175ebb3b
  1. 12
      Assets/Scripts/Game/Entity.cs
  2. 5
      Assets/Scripts/Game/GameState.cs
  3. 52
      Assets/Scripts/VisualStyle.cs
  4. 5
      Assets/Styles/GLQuake/GLQuake.asset

12
Assets/Scripts/Game/Entity.cs

@ -145,22 +145,24 @@ public class Entity
{
var skin = skins[skinNumber >= 0 && skinNumber < skins.Count ? skinNumber : 0];
if (skin.Frames.Count > 0)
visualStyle.SetAliasModelTextures(material, skin.Frames[0].MainTexture, skin.Frames[0].FullBrightTexture);
visualStyle.SetEntityTextures(material, skin.Frames[0].MainTexture, skin.Frames[0].FullBrightTexture);
}
}
private void AssignMeshRenderer()
{
material = visualStyle.CreateEntityMaterial();
if (aliasModel.IsAnimated)
{
visualStyle.SetupAliasModelRenderer(skinnedMeshRenderer);
material = skinnedMeshRenderer.material;
visualStyle.SetupEntityRenderer(skinnedMeshRenderer);
skinnedMeshRenderer.material = material;
skinnedMeshRenderer.enabled = true;
}
else
{
visualStyle.SetupAliasModelRenderer(meshRenderer);
material = meshRenderer.material;
visualStyle.SetupEntityRenderer(meshRenderer);
meshRenderer.material = material;
meshRenderer.enabled = true;
}

5
Assets/Scripts/Game/GameState.cs

@ -49,7 +49,8 @@ public class GameState
mf.sharedMesh = surfaceMesh.Mesh;
// TODO FIXME This is wrong for brush model entities
uq.CurrentStyle.SetupWorldModelRenderer(mr); // TODO FIXME this currently leaks Materials
uq.CurrentStyle.SetupWorldRenderer(mr);
mr.material = uq.CurrentStyle.CreateWorldMaterial(); // TODO FIXME this currently leaks Materials
uint texNum = surfaceMesh.TextureNum;
if (uq.GameAssets.TryGetTexture(texNum, out var texture))
@ -57,7 +58,7 @@ public class GameState
uint fbNum = surfaceMesh.FullBrightNum;
uq.GameAssets.TryGetTexture(fbNum, out var fullBright);
uq.CurrentStyle.SetWorldModelTextures(mr.material, texture, fullBright, null);
uq.CurrentStyle.SetWorldTextures(mr.material, texture, fullBright, null);
}
}

52
Assets/Scripts/VisualStyle.cs

@ -7,66 +7,48 @@ using UnityEngine.Rendering;
public class VisualStyle : ScriptableObject
{
[SerializeField]
protected Material aliasModelMaterial;
protected Material entityMaterial;
[SerializeField]
protected Material brushModelMaterial; // TODO: not sure if this should be separate or combined into one entityMaterial
[SerializeField]
protected Material worldModelMaterial; // TODO: split into wall, liquid, sky, etc
protected Material worldMaterial; // TODO: split into wall, liquid, sky, etc
// TODO: add particle effects
public virtual void SetupAliasModelRenderer(MeshRenderer meshRenderer)
public virtual Material CreateEntityMaterial()
{
return new Material(entityMaterial);
}
public virtual Material CreateWorldMaterial()
{
return new Material(worldMaterial);
}
public virtual void SetupEntityRenderer(MeshRenderer meshRenderer)
{
meshRenderer.material = new Material(aliasModelMaterial);
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
meshRenderer.receiveShadows = false;
meshRenderer.lightProbeUsage = LightProbeUsage.Off;
meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
}
public virtual void SetupAliasModelRenderer(SkinnedMeshRenderer skinnedMeshRenderer)
public virtual void SetupEntityRenderer(SkinnedMeshRenderer skinnedMeshRenderer)
{
skinnedMeshRenderer.material = new Material(aliasModelMaterial);
skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off;
skinnedMeshRenderer.receiveShadows = false;
skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off;
skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
}
public virtual void SetupBrushModelRenderer(MeshRenderer meshRenderer)
public virtual void SetupWorldRenderer(MeshRenderer meshRenderer)
{
meshRenderer.material = new Material(brushModelMaterial);
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
meshRenderer.receiveShadows = false;
meshRenderer.lightProbeUsage = LightProbeUsage.Off;
meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
}
public virtual void SetupWorldModelRenderer(MeshRenderer meshRenderer)
{
meshRenderer.material = new Material(worldModelMaterial);
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
meshRenderer.receiveShadows = false;
meshRenderer.lightProbeUsage = LightProbeUsage.Off;
meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
}
public virtual void SetAliasModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright)
{
material.mainTexture = mainTexture;
material.SetTexture("_EmissionMap", fullBright);
material.SetColor("_EmissionColor", Color.white);
if (fullBright != null)
material.EnableKeyword("_EMISSION");
else
material.DisableKeyword("_EMISSION");
}
public virtual void SetBrushModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright)
public virtual void SetEntityTextures(Material material, Texture2D mainTexture, Texture2D fullBright)
{
material.mainTexture = mainTexture;
@ -79,7 +61,7 @@ public class VisualStyle : ScriptableObject
material.DisableKeyword("_EMISSION");
}
public virtual void SetWorldModelTextures(Material material, Texture2D mainTexture, Texture2D fullBright, Texture2D lightmap)
public virtual void SetWorldTextures(Material material, Texture2D mainTexture, Texture2D fullBright, Texture2D lightmap)
{
material.mainTexture = mainTexture;

5
Assets/Styles/GLQuake/GLQuake.asset

@ -12,6 +12,5 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2df0cbad06a6ed5489201e395f9c5bb3, type: 3}
m_Name: GLQuake
m_EditorClassIdentifier:
aliasModelMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2}
brushModelMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2}
worldModelMaterial: {fileID: 2100000, guid: fcbaf32c00bea2344bbb1419c61364b6, type: 2}
entityMaterial: {fileID: 2100000, guid: 4d7703ac1adf3534f89b4041b779ff5e, type: 2}
worldMaterial: {fileID: 2100000, guid: fcbaf32c00bea2344bbb1419c61364b6, type: 2}
Loading…
Cancel
Save