Tweak the tree hiding shader

This commit is contained in:
Lucien
2026-08-03 15:28:37 +02:00
parent a01e19e5fe
commit 3cd1ca53fd
17 changed files with 4694 additions and 30 deletions
@@ -600,7 +600,7 @@
"m_ZTestMode": 4, "m_ZTestMode": 4,
"m_ZWriteControl": 0, "m_ZWriteControl": 0,
"m_AlphaMode": 0, "m_AlphaMode": 0,
"m_RenderFace": 2, "m_RenderFace": 0,
"m_AlphaClip": true, "m_AlphaClip": true,
"m_CastShadows": true, "m_CastShadows": true,
"m_ReceiveShadows": true, "m_ReceiveShadows": true,
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ccdcac42b05760c45af223f433b33db7
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3}
@@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 84c706bc73fc93344972b30d598a0b81, type: 3}
m_Name: DefaultDitherFade
m_EditorClassIdentifier:
verticalOffset: 0.75
cameraDistanceRange: {x: 1, y: 35}
hideRadiusRange: {x: 0.6, y: 0.2}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cddf83aa7585c1a4a8a34e8383f52f44
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -5,10 +5,14 @@ using UnityEngine;
namespace Toria.Game namespace Toria.Game
{ {
[RequireComponent(typeof(CapsuleCollider))] [RequireComponent(typeof(CapsuleCollider))]
public class LeavesHidingDither : MonoBehaviour public class DitherFade : MonoBehaviour
{ {
public DitherFadeSettings settings;
public List<Renderer> targetRenderers;
public bool makeShadowClones = true;
[NonSerialized] [NonSerialized]
List<Material> treeMaterials; List<Material> fadeMaterials;
static RPGController player = null; static RPGController player = null;
static new Camera camera = null; static new Camera camera = null;
@@ -18,38 +22,44 @@ namespace Toria.Game
void Start() void Start()
{ {
treeMaterials = new List<Material>(); fadeMaterials = new List<Material>();
foreach (Renderer renderer in GetComponentsInChildren<Renderer>()) foreach (Renderer renderer in targetRenderers)
{ {
if (makeShadowClones)
MakeShadowClone(renderer); MakeShadowClone(renderer);
Material mat = Instantiate(renderer.sharedMaterial); Material mat = Instantiate(renderer.sharedMaterial);
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
renderer.sharedMaterial = mat; renderer.sharedMaterial = mat;
treeMaterials.Add(mat); fadeMaterials.Add(mat);
} }
} }
void MakeShadowClone(Renderer renderer) void MakeShadowClone(Renderer renderer)
{ {
GameObject shadowClone = Instantiate(renderer.gameObject); if (!renderer.TryGetComponent(out MeshFilter filter))
return;
for (int i = shadowClone.transform.childCount - 1; i >= 0; i--) GameObject shadowClone = new GameObject("Shadow clone");
Destroy(shadowClone.transform.GetChild(i).gameObject);
shadowClone.name = "Shadow clone";
shadowClone.transform.SetParent(renderer.transform); shadowClone.transform.SetParent(renderer.transform);
shadowClone.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); shadowClone.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
shadowClone.transform.localScale = Vector3.one; shadowClone.transform.localScale = Vector3.one;
MeshRenderer shadowRenderer = shadowClone.AddComponent<MeshRenderer>();
MeshFilter shadowFilter = shadowClone.AddComponent<MeshFilter>();
shadowRenderer.sharedMaterial = renderer.sharedMaterial;
shadowRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
shadowFilter.sharedMesh = filter.sharedMesh;
foreach (Component comp in shadowClone.GetComponents<Component>()) foreach (Component comp in shadowClone.GetComponents<Component>())
{ {
if (comp is not MeshRenderer && comp is not MeshFilter && comp is not Transform) if (comp is not MeshRenderer && comp is not MeshFilter && comp is not Transform)
Destroy(comp); Destroy(comp);
} }
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
shadowClone.GetComponent<Renderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
} }
void Update() void Update()
@@ -59,10 +69,14 @@ namespace Toria.Game
if (shouldHide) if (shouldHide)
{ {
Vector2 viewPortPoint = camera.WorldToViewportPoint(player.transform.position); Vector2 viewPortPoint = camera.WorldToViewportPoint(player.transform.position + Vector3.up * settings.verticalOffset);
float hideRadius = settings.GetHideRadius(player.transform, camera.transform);
foreach (Material mat in treeMaterials) foreach (Material mat in fadeMaterials)
{
mat.SetVector("_PlayerPosition", viewPortPoint); mat.SetVector("_PlayerPosition", viewPortPoint);
mat.SetFloat("_HideRadius", hideRadius);
}
} }
if (!camera) if (!camera)
@@ -98,7 +112,7 @@ namespace Toria.Game
shouldHide = enabled; shouldHide = enabled;
foreach (Material mat in treeMaterials) foreach (Material mat in fadeMaterials)
mat.SetFloat("_ShouldHide", enabled ? 1 : 0); mat.SetFloat("_ShouldHide", enabled ? 1 : 0);
} }
} }
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2dcaa5393f14a8846841c6152807c45c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- settings: {fileID: 11400000, guid: cddf83aa7585c1a4a8a34e8383f52f44, type: 2}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,18 @@
using UnityEngine;
namespace Toria.Game
{
[CreateAssetMenu(menuName = "Toria/VFX/DitherFadeSettings")]
public class DitherFadeSettings : ScriptableObject
{
public float verticalOffset;
public Vector2 cameraDistanceRange;
public Vector2 hideRadiusRange;
public float GetHideRadius(Transform player, Transform camera)
{
float normalizedDist = Mathf.InverseLerp(cameraDistanceRange.x, cameraDistanceRange.y, Vector3.Distance(player.position, camera.position));
return Mathf.Lerp(hideRadiusRange.x, hideRadiusRange.y, normalizedDist);
}
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 2dcaa5393f14a8846841c6152807c45c guid: 84c706bc73fc93344972b30d598a0b81
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2
@@ -26,7 +26,7 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1039442533851207357} m_GameObject: {fileID: 1039442533851207357}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -68.79, y: 0, z: -64.92} m_LocalPosition: {x: -68.79, y: 0, z: -64.92}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
@@ -53,10 +53,10 @@ CapsuleCollider:
m_ProvidesContacts: 0 m_ProvidesContacts: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Radius: 9.151004 m_Radius: 5.8130083
m_Height: 31.86838 m_Height: 19.023537
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: 7.3658094, z: -0.0993824} m_Center: {x: 0, y: 3.54018, z: -0.0993824}
--- !u!114 &4980157383177651523 --- !u!114 &4980157383177651523
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -69,6 +69,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2dcaa5393f14a8846841c6152807c45c, type: 3} m_Script: {fileID: 11500000, guid: 2dcaa5393f14a8846841c6152807c45c, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
settings: {fileID: 11400000, guid: cddf83aa7585c1a4a8a34e8383f52f44, type: 2}
targetRenderers:
- {fileID: 7876065896566112407}
- {fileID: 4481655811856365335}
- {fileID: 4416556660280699394}
makeShadowClones: 1
--- !u!1001 &3904717291067529535 --- !u!1001 &3904717291067529535
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -82,10 +88,25 @@ PrefabInstance:
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalScale.x
value: 21.7
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalScale.y
value: 21.7
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalScale.z
value: 21.7
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: -0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
@@ -132,6 +153,26 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: -7210020099500196006, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -7210020099500196006, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -7210020099500196006, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
@@ -140,33 +181,53 @@ PrefabInstance:
- target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0.0012807982 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: -5085938754545767860, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: -0.0012301941 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
value: 0.00043 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0.00572 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: 278488560405935532, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
value: -0.00596 value: 0
objectReference: {fileID: 0}
- target: {fileID: 417973690112246159, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 417973690112246159, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 417973690112246159, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 577126538355715624, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: 577126538355715624, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_Materials.Array.data[0] propertyPath: m_Materials.Array.data[0]
value: value:
objectReference: {fileID: 2100000, guid: f39ec3c48bfa5cd4b9cffd8d7c47189d, type: 2} objectReference: {fileID: 2100000, guid: f39ec3c48bfa5cd4b9cffd8d7c47189d, type: 2}
- target: {fileID: 827137660325557053, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 7eb2639ac0e990c4d807b154bbfdada9, type: 2}
- target: {fileID: 919132149155446097, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39, - target: {fileID: 919132149155446097, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3} type: 3}
propertyPath: m_Name propertyPath: m_Name
@@ -197,6 +258,11 @@ PrefabInstance:
propertyPath: m_Materials.Array.data[0] propertyPath: m_Materials.Array.data[0]
value: value:
objectReference: {fileID: 2100000, guid: cd2cd815992f0d345a1fbb5bd8460928, type: 2} objectReference: {fileID: 2100000, guid: cd2cd815992f0d345a1fbb5bd8460928, type: 2}
- target: {fileID: 6592495265742297512, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: cd2cd815992f0d345a1fbb5bd8460928, type: 2}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
@@ -241,3 +307,21 @@ CapsuleCollider:
m_Height: 0.54222345 m_Height: 0.54222345
m_Direction: 1 m_Direction: 1
m_Center: {x: 0.0034041244, y: 0.22888854, z: -0.0061077503} m_Center: {x: 0.0034041244, y: 0.22888854, z: -0.0061077503}
--- !u!23 &4416556660280699394 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 827137660325557053, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
m_PrefabInstance: {fileID: 3904717291067529535}
m_PrefabAsset: {fileID: 0}
--- !u!23 &4481655811856365335 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 577126538355715624, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
m_PrefabInstance: {fileID: 3904717291067529535}
m_PrefabAsset: {fileID: 0}
--- !u!23 &7876065896566112407 stripped
MeshRenderer:
m_CorrespondingSourceObject: {fileID: 6592495265742297512, guid: 0c9b3a2c8a0e5fd4ca9c49b5c5c08c39,
type: 3}
m_PrefabInstance: {fileID: 3904717291067529535}
m_PrefabAsset: {fileID: 0}
@@ -0,0 +1,77 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Chestnut_trunk_Hideable
m_Shader: {fileID: -6465566751694194690, guid: ccdcac42b05760c45af223f433b33db7,
type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 2800000, guid: dad6befa52e5c76418f231f1a631792a, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: e6f7757b223f60e49a7a5e9b1485a675, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SampleTexture2D_caf4b53b3d8d4bb9ba908e00160c7c78_Texture_1_Texture2D:
m_Texture: {fileID: 2800000, guid: e04f2329a01d8134397222796ed92f4c, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _HeightMultiplier: 0.06
- _HideRadius: 0.3
- _Metallic: 0
- _NormalStrength: 1
- _QueueControl: 0
- _QueueOffset: 0
- _ShouldHide: 0
- _Smoothness: 0
m_Colors:
- _PlayerPosition: {r: 0, g: 0, b: 0, a: 0}
- _Tint: {r: 0.90588236, g: 0.83137256, b: 0.83137256, a: 1}
m_BuildTextureStacks: []
--- !u!114 &3103991028694557381
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7eb2639ac0e990c4d807b154bbfdada9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.