summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assets/Bundle/Scenes/Demo/AnimationEditScene.unity4
-rw-r--r--Assets/Bundle/Shaders/Common/Image/common_img_blur.shader9
-rw-r--r--Assets/Scripts/Camera/CameraUtility.cs49
-rw-r--r--Assets/Scripts/Camera/CameraUtility.cs.meta11
-rw-r--r--Assets/Scripts/Rendering/RenderingUtility.cs27
-rw-r--r--Assets/Scripts/Unit/Components/UnitLensEffect.cs4
-rw-r--r--Assets/Scripts/Unit/Controller/UnitController.cs32
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffectBase.cs2
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs76
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs.meta11
-rw-r--r--Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs4
-rw-r--r--Assets/Scripts/Utils/VectorUtility.cs32
-rw-r--r--Assets/Scripts/Utils/VectorUtility.cs.meta11
-rw-r--r--Documents/灵感.xlsxbin25850570 -> 25850569 bytes
-rw-r--r--ProjectSettings/ProjectSettings.asset5
15 files changed, 271 insertions, 6 deletions
diff --git a/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity b/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity
index 2ab354bf..b7daf697 100644
--- a/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity
+++ b/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity
@@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
+ m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
@@ -57534,7 +57534,7 @@ Light:
m_Enabled: 1
serializedVersion: 8
m_Type: 1
- m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Color: {r: 0.6415094, g: 0.59685767, b: 0.4750801, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
diff --git a/Assets/Bundle/Shaders/Common/Image/common_img_blur.shader b/Assets/Bundle/Shaders/Common/Image/common_img_blur.shader
index c7e3891d..f6c016b3 100644
--- a/Assets/Bundle/Shaders/Common/Image/common_img_blur.shader
+++ b/Assets/Bundle/Shaders/Common/Image/common_img_blur.shader
@@ -42,7 +42,7 @@
float _Angle;
- float4 _ScaleOffset; // 角色的范围
+ float4 _TileOffset; // 角色的范围
fixed _Distance;
@@ -57,7 +57,7 @@
fixed4 frag(v2f i) : SV_Target
{
_Angle = 0;
- _Distance = 0.05f;
+ _Distance = 0;
fixed2 uv = i.uv;
fixed2 offset = fixed2(0.05, 0.05);
@@ -72,6 +72,11 @@
color += tex2D(_MainTex,float2(uv.x + dx,uv.y + dy)) * (1 / sampleCount);
}
//color = tex2D(_MainTex, uv);
+ if(uv.x > _TileOffset.z && uv.x < _TileOffset.x + _TileOffset.z
+ && uv.y > _TileOffset.w && uv.y < _TileOffset.w + _TileOffset.y) {
+ color = fixed4(1,0,0,0);
+ }
+
return color;
}
ENDCG
diff --git a/Assets/Scripts/Camera/CameraUtility.cs b/Assets/Scripts/Camera/CameraUtility.cs
new file mode 100644
index 00000000..1f6c10e6
--- /dev/null
+++ b/Assets/Scripts/Camera/CameraUtility.cs
@@ -0,0 +1,49 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class CameraExtend
+{
+
+ public static Vector3 WorldToCameraSpace(this Camera camera, Vector3 worldPos)
+ {
+ Vector4 camPos = camera.worldToCameraMatrix * worldPos.ToVector4();
+ return camPos.ToVector3();
+ }
+
+ public static Vector3 CameraToViewportSpace(this Camera camera, Vector3 camPos)
+ {
+ Matrix4x4 proj = GL.GetGPUProjectionMatrix(camera.projectionMatrix, false);
+ Vector4 clipPos = proj * camPos.ToVector4();
+ Vector3 ndcPos = (clipPos / clipPos.w);
+ Vector3 viewPos = (ndcPos + Vector3.one) / 2f;
+ return viewPos;
+ }
+
+ public static Vector3 CameraToScreenSpace(this Camera camera, Vector3 camPos)
+ {
+ Vector3 viewPos = camera.CameraToViewportSpace(camPos);
+ Vector3 screenPos = new Vector3(
+ viewPos.x * camera.pixelWidth,
+ viewPos.y * camera.pixelHeight,
+ viewPos.z
+ );
+ return screenPos;
+ }
+
+}
+
+public class CameraUtility : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Camera/CameraUtility.cs.meta b/Assets/Scripts/Camera/CameraUtility.cs.meta
new file mode 100644
index 00000000..bd11b826
--- /dev/null
+++ b/Assets/Scripts/Camera/CameraUtility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6797331b02de5684ab22aeafac41d2c5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Rendering/RenderingUtility.cs b/Assets/Scripts/Rendering/RenderingUtility.cs
index 297a9b79..90ef84fd 100644
--- a/Assets/Scripts/Rendering/RenderingUtility.cs
+++ b/Assets/Scripts/Rendering/RenderingUtility.cs
@@ -63,4 +63,31 @@ public static class RenderingUtility
{
return renderingEventToCameraEventDic[e];
}
+
+ /// <summary>
+ /// 计算在rt里面的区域
+ /// </summary>
+ /// <param name="camera">相机</param>
+ /// <param name="worldPos">世界空间坐标</param>
+ /// <param name="size">异体矩形(billboard)的相机空间大小</param>
+ /// <returns></returns>
+ public static Vector4 GetTillingOffset(Camera camera, Vector3 worldPos, float size)
+ {
+ Vector4 tileOffset = new Vector4(1,1,0,0);
+ Vector3 camPos = camera.WorldToCameraSpace(worldPos);
+
+ Vector3 bottomLeft = new Vector3(camPos.x - size / 2, camPos.y - size / 2, camPos.z);
+ Vector3 topRight = new Vector3(camPos.x + size / 2, camPos.y + size / 2, camPos.z);
+ Vector2 blViewPos = camera.CameraToViewportSpace(bottomLeft);
+ Vector2 trViewPos = camera.CameraToViewportSpace(topRight);
+ float width = trViewPos.x - blViewPos.x;
+ float height = trViewPos.y - blViewPos.y;
+
+ tileOffset.x = width;
+ tileOffset.y = height;
+ tileOffset.z = blViewPos.x;
+ tileOffset.w = blViewPos.y;
+ return tileOffset;
+ }
+
}
diff --git a/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Assets/Scripts/Unit/Components/UnitLensEffect.cs
index a61955f7..394a0b92 100644
--- a/Assets/Scripts/Unit/Components/UnitLensEffect.cs
+++ b/Assets/Scripts/Unit/Components/UnitLensEffect.cs
@@ -57,7 +57,8 @@ public class UnitLensEffect : UnitComponent
MainCamera.Instance.customRenderingPipeline.onPostRender += OnRenderUnit;
/////
- m_Effects.Add(new LensEffect_MotionBlur());
+ //m_Effects.Add(new LensEffect_MotionBlur());
+ m_Effects.Add(new LensEffect_BlurRim());
}
public override void Release()
@@ -90,6 +91,7 @@ public class UnitLensEffect : UnitComponent
MethodInfo method = eff.GetType().GetMethod(re.ToString(), BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(LensEffectBase.EStage), typeof(CommandBuffer) }, null);
if (method == null)
continue;
+ eff.owner = owner;
method.Invoke(eff, new object[] { LensEffectBase.EStage.Before, cb.Value });
for (int j = 0; j < body.renderers.Length; ++j)
{
diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs
index 6ccf124b..3b4ab12d 100644
--- a/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -106,6 +106,38 @@ public class UnitController : MonoBehaviour/*, Interactable*/
}
}
+ public virtual Vector3 position
+ {
+ get
+ {
+ return transform.position;
+ }
+ set
+ {
+ transform.position = value;
+ }
+ }
+
+ public virtual Quaternion rotation
+ {
+ get
+ {
+ return transform.rotation;
+ }
+ set
+ {
+ transform.rotation = value;
+ }
+ }
+
+ public virtual Vector3 lossyScale
+ {
+ get
+ {
+ return transform.lossyScale;
+ }
+ }
+
public virtual void Initialize( GameObject obj , string folder)
{
unitObj = obj;
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs
index 8457a959..36bde0e3 100644
--- a/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs
+++ b/Assets/Scripts/Unit/LensEffect/LensEffectBase.cs
@@ -9,6 +9,7 @@ public class MaterialEntry
public Material material;
}
+// unit 镜头效果,和image effect的区别在于不光是后处理
public abstract class LensEffectBase : MonoBehaviour
{
public enum EStage
@@ -27,6 +28,7 @@ public abstract class LensEffectBase : MonoBehaviour
#region upvalues
public BodyPartRenderer curBodypartRenderer;
+ public UnitController owner;
#endregion
private static MaterialEntry _ClaimMaterial(string shader)
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs
new file mode 100644
index 00000000..4f90a777
--- /dev/null
+++ b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs
@@ -0,0 +1,76 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+public class LensEffect_BlurRim : LensEffectBase
+{
+ public override ERenderingEvent renderingEvents => ERenderingEvent.AfterForwardOpaque;
+
+ int tempID;
+
+ public override void AfterForwardOpaque(EStage stage, CommandBuffer cb)
+ {
+ if (stage == EStage.Before)
+ {
+ tempID = Shader.PropertyToID("_Temp1");
+
+ cb.GetTemporaryRT(tempID, -1, -1, 24, FilterMode.Bilinear);
+ cb.SetRenderTarget(tempID);
+ cb.ClearRenderTarget(true, true, new Color(0, 0, 0, 0));
+ }
+ else if (stage == EStage.Iterate)
+ {
+ Matrix4x4 obj2Wod = Matrix4x4.identity;
+ int subMeshCount = 0;
+ if (curBodypartRenderer.renderer is SkinnedMeshRenderer)
+ {
+ SkinnedMeshRenderer smr = curBodypartRenderer.renderer as SkinnedMeshRenderer;
+ Vector3 pos = smr.rootBone.transform.position;
+ Quaternion rot = smr.rootBone.transform.rotation;
+ obj2Wod = MatrixUtility.RotateAndTranslate(pos, rot);
+ subMeshCount = smr.sharedMesh.subMeshCount;
+ }
+ else if (curBodypartRenderer.renderer is MeshRenderer)
+ {
+ obj2Wod = curBodypartRenderer.renderer.transform.localToWorldMatrix;
+ subMeshCount = curBodypartRenderer.renderer.GetComponent<MeshFilter>().sharedMesh.subMeshCount;
+ }
+
+ for (int i = 0; i < subMeshCount; ++i)
+ {
+ MaterialEntry mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
+ mat.material.SetColor("_Color", Color.red);
+ mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
+ cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
+
+ mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
+ mat.material.SetColor("_Color", Color.red);
+ obj2Wod = Matrix4x4.Translate(new Vector3(1,0,0)) * obj2Wod;
+ mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
+ cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
+
+ mat = ClaimMaterial(StaticDefine.shaders[EShader.SolidColor].name);
+ mat.material.SetColor("_Color", Color.red);
+ obj2Wod = Matrix4x4.Translate(new Vector3(-2, 0, 0)) * obj2Wod;
+ mat.material.SetMatrix("_ObjectToWorld", obj2Wod);
+ cb.DrawRenderer(curBodypartRenderer.renderer, mat.material, i);
+ }
+ }
+ else if (stage == EStage.After)
+ {
+ MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name);
+
+ Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound);
+ blur.material.SetVector("_TileOffset", tileOffset);
+
+ cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material);
+ tempID = Shader.PropertyToID("_Temp1");
+ cb.ReleaseTemporaryRT(tempID);
+ }
+ else if (stage == EStage.Finished)
+ {
+ }
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs.meta b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs.meta
new file mode 100644
index 00000000..3a2e02ef
--- /dev/null
+++ b/Assets/Scripts/Unit/LensEffect/LensEffect_BlurRim.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f49dbf9002764be4aa6ca79b78052d7a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs b/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs
index decee999..3e5ee4f1 100644
--- a/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs
+++ b/Assets/Scripts/Unit/LensEffect/LensEffect_MotionBlur.cs
@@ -53,6 +53,10 @@ public class LensEffect_MotionBlur : LensEffectBase
else if(stage == EStage.After)
{
MaterialEntry blur = ClaimMaterial(StaticDefine.shaders[EShader.Blur].name);
+
+ Vector4 tileOffset = RenderingUtility.GetTillingOffset(MainCamera.Instance.camera, owner.center, owner.unitDetail.snapshotBound);
+ blur.material.SetVector("_TileOffset", tileOffset);
+
cb.Blit(tempID, BuiltinRenderTextureType.CameraTarget, blur.material);
tempID = Shader.PropertyToID("_Temp1");
cb.ReleaseTemporaryRT(tempID);
diff --git a/Assets/Scripts/Utils/VectorUtility.cs b/Assets/Scripts/Utils/VectorUtility.cs
new file mode 100644
index 00000000..b0e857e7
--- /dev/null
+++ b/Assets/Scripts/Utils/VectorUtility.cs
@@ -0,0 +1,32 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class VectorExtend
+{
+
+ public static Vector4 ToVector4(ref this Vector3 v3, float w = 1)
+ {
+ Vector4 v4 = new Vector4(v3.x, v3.y, v3.z, 1);
+ return v4;
+ }
+
+ public static Vector3 ToVector3(ref this Vector4 v4)
+ {
+ Vector3 v3 = new Vector3(v4.x, v4.y, v4.z);
+ return v3;
+ }
+
+ public static Vector2 ToVector2(ref this Vector3 v3)
+ {
+ Vector2 v2 = new Vector2(v3.x, v3.y);
+ return v2;
+ }
+
+}
+
+public class VectorUtility
+{
+
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Utils/VectorUtility.cs.meta b/Assets/Scripts/Utils/VectorUtility.cs.meta
new file mode 100644
index 00000000..32a9937b
--- /dev/null
+++ b/Assets/Scripts/Utils/VectorUtility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2ee12b1cbc903254a8f8328d26b267c7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Documents/灵感.xlsx b/Documents/灵感.xlsx
index dd0d2242..54ae3a64 100644
--- a/Documents/灵感.xlsx
+++ b/Documents/灵感.xlsx
Binary files differ
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index 441a99e3..48ad7459 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -47,7 +47,7 @@ PlayerSettings:
defaultScreenWidthWeb: 960
defaultScreenHeightWeb: 600
m_StereoRenderingPath: 0
- m_ActiveColorSpace: 1
+ m_ActiveColorSpace: 0
m_MTRendering: 1
m_StackTraceTypes: 010000000100000001000000010000000100000001000000
iosShowActivityIndicatorOnLoading: -1
@@ -295,6 +295,9 @@ PlayerSettings:
- m_BuildTarget: WebGLSupport
m_APIs: 0b000000
m_Automatic: 1
+ - m_BuildTarget: WindowsStandaloneSupport
+ m_APIs: 1100000002000000
+ m_Automatic: 0
m_BuildTargetVRSettings:
- m_BuildTarget: Standalone
m_Enabled: 0