diff --git a/Assets/Material/PixelBlit.mat b/Assets/Material/PixelBlit.mat deleted file mode 100644 index f9440db..0000000 --- a/Assets/Material/PixelBlit.mat +++ /dev/null @@ -1,166 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-4790970344126815099 -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: 5 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: PixelBlit - m_Shader: {fileID: 4800000, guid: c4d7011496fb8f34ead8b47276ae3f0a, type: 3} - m_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BASE_COLOR_MAP: - m_Texture: {fileID: 2800000, guid: 116e65d2b34493c439f545f71aa487b5, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EMISSION_COLOR_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _METALNESS_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 8.38, y: 5.31} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NORMAL_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SPECULAR_COLOR_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SPECULAR_IOR_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SPECULAR_ROUGHNESS_MAP: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - 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: - - _AlphaClip: 0 - - _Blend: 0 - - _BlendOp: 0 - - _BumpScale: 1 - - _CellSizeX: 2 - - _CellSizeY: 2 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _METALNESS: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueControl: 0 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _SPECULAR_IOR: 1.5 - - _SPECULAR_ROUGHNESS: 0 - - _SampleGI: 0 - - _ScreenHeight: 480 - - _ScreenWidth: 640 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _Surface: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 - m_Colors: - - _BASE_COLOR: {r: 1, g: 1, b: 1, a: 1} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EMISSION_COLOR: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SPECULAR_COLOR: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] diff --git a/Assets/Prefabs/SHADER_VOLUME.prefab b/Assets/Prefabs/SHADER_VOLUME.prefab new file mode 100644 index 0000000..ee43ea6 --- /dev/null +++ b/Assets/Prefabs/SHADER_VOLUME.prefab @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8571637250638348962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8571637250638348960} + - component: {fileID: 8571637250638348961} + m_Layer: 0 + m_Name: SHADER_VOLUME + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8571637250638348960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8571637250638348962} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 62.8, y: 2.4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8571637250638348961 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8571637250638348962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: c3b45ae649e3364408bb0986304f0649, type: 2} diff --git a/Assets/Prefabs/SHADER_VOLUME.prefab.meta b/Assets/Prefabs/SHADER_VOLUME.prefab.meta new file mode 100644 index 0000000..d6076c4 --- /dev/null +++ b/Assets/Prefabs/SHADER_VOLUME.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7febab9e1a84fa449991f0126f4eccbc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..d8a7409 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3de31d3e69a654c4999f95940625905a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Shaders.meta b/Assets/Resources/Shaders.meta new file mode 100644 index 0000000..99b6025 --- /dev/null +++ b/Assets/Resources/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00d569a294992684ba612017925c2752 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Shaders/CustomPostProcessingMaterials.asset b/Assets/Resources/Shaders/CustomPostProcessingMaterials.asset new file mode 100644 index 0000000..bf84749 --- /dev/null +++ b/Assets/Resources/Shaders/CustomPostProcessingMaterials.asset @@ -0,0 +1,15 @@ +%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: 0517c7201b6a73841950436abd2ee35f, type: 3} + m_Name: CustomPostProcessingMaterials + m_EditorClassIdentifier: + crtEffect: {fileID: 2100000, guid: a110daba21b580f4898ccf841727c0c2, type: 2} diff --git a/Assets/Material/PixelBlit.mat.meta b/Assets/Resources/Shaders/CustomPostProcessingMaterials.asset.meta similarity index 64% rename from Assets/Material/PixelBlit.mat.meta rename to Assets/Resources/Shaders/CustomPostProcessingMaterials.asset.meta index 86b1fe0..a798608 100644 --- a/Assets/Material/PixelBlit.mat.meta +++ b/Assets/Resources/Shaders/CustomPostProcessingMaterials.asset.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: bc45e5f0151133446b26221ec8ea680c +guid: 16065ebec4184e14899a6c11cf5d403a NativeFormatImporter: externalObjects: {} - mainObjectFileID: 2100000 + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity index ac6e3f2..80137e6 100644 --- a/Assets/Scenes/MainMenu.unity +++ b/Assets/Scenes/MainMenu.unity @@ -496,6 +496,7 @@ GameObject: - component: {fileID: 212203381} - component: {fileID: 212203380} - component: {fileID: 212203383} + - component: {fileID: 212203384} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -602,6 +603,23 @@ MonoBehaviour: m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 +--- !u!114 &212203384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212203379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: c3b45ae649e3364408bb0986304f0649, type: 2} --- !u!1 &574174948 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Volume.meta b/Assets/Scenes/Volume.meta new file mode 100644 index 0000000..f4c46f4 --- /dev/null +++ b/Assets/Scenes/Volume.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d27f805e90d2bc4080f4f2ab821159b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Volume/crtVolme.asset b/Assets/Scenes/Volume/crtVolme.asset new file mode 100644 index 0000000..b5351dd --- /dev/null +++ b/Assets/Scenes/Volume/crtVolme.asset @@ -0,0 +1,98 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7215673028686694159 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 0} + m_Name: CRTEffectComponent + m_EditorClassIdentifier: Assembly-CSharp::CRTEffectComponent + active: 1 + k__BackingField: + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-4031894175476099154 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 2dce45078901e8743bb35a183fe9b463, type: 3} + m_Name: CustomEffectComponent + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !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: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: crtVolme + m_EditorClassIdentifier: + components: + - {fileID: 6751770758831210905} +--- !u!114 &1967504787037751920 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 0} + m_Name: CrtEffectComponent + m_EditorClassIdentifier: Assembly-CSharp:Shaders:CrtEffectComponent + active: 1 + k__BackingField: + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &3324731303086568795 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 2dce45078901e8743bb35a183fe9b463, type: 3} + m_Name: CustomEffectComponent + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &6751770758831210905 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 2dce45078901e8743bb35a183fe9b463, type: 3} + m_Name: CustomEffectComponent + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 1 diff --git a/Assets/Scenes/Volume/crtVolme.asset.meta b/Assets/Scenes/Volume/crtVolme.asset.meta new file mode 100644 index 0000000..fbd6b75 --- /dev/null +++ b/Assets/Scenes/Volume/crtVolme.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3b45ae649e3364408bb0986304f0649 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Shaders.meta b/Assets/Scripts/Shaders.meta new file mode 100644 index 0000000..008e797 --- /dev/null +++ b/Assets/Scripts/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c25c3458146a19a42898a05920f05bcf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Blit.cs b/Assets/Scripts/Shaders/Blit.cs similarity index 99% rename from Assets/Shaders/Blit.cs rename to Assets/Scripts/Shaders/Blit.cs index bc9262e..ef2b7bc 100644 --- a/Assets/Shaders/Blit.cs +++ b/Assets/Scripts/Shaders/Blit.cs @@ -4,6 +4,9 @@ using UnityEngine.Rendering.Universal; /* * https://cyangamedev.wordpress.com/2020/06/22/urp-post-processing/ + * + * FIRST TRY NOT USING + * 29 octobre */ namespace Shaders diff --git a/Assets/Shaders/Blit.cs.meta b/Assets/Scripts/Shaders/Blit.cs.meta similarity index 100% rename from Assets/Shaders/Blit.cs.meta rename to Assets/Scripts/Shaders/Blit.cs.meta diff --git a/Assets/Scripts/Shaders/CustomEffectComponent.cs b/Assets/Scripts/Shaders/CustomEffectComponent.cs new file mode 100644 index 0000000..f6f6b3b --- /dev/null +++ b/Assets/Scripts/Shaders/CustomEffectComponent.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + + +/** + * https://www.febucci.com/2022/05/custom-post-processing-in-urp/ + */ + +namespace Shaders +{ + [Serializable, + VolumeComponentMenuForRenderPipeline("Custom/CustomEffectComponent", typeof(UniversalRenderPipeline))] + public class CustomEffectComponent : VolumeComponent, IPostProcessComponent + { + // For example, an intensity parameter that goes from 0 to 1 + public ClampedFloatParameter intensity = + new ClampedFloatParameter(value: 1, min: 0, max: 1, overrideState: true); + + // Other 'Parameter' variables you might have + + public bool IsActive() => intensity.value > 0; + + // I have no idea what this does yet but I'll update the post once I find an usage + public bool IsTileCompatible() => true; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Shaders/CustomEffectComponent.cs.meta b/Assets/Scripts/Shaders/CustomEffectComponent.cs.meta new file mode 100644 index 0000000..24201a4 --- /dev/null +++ b/Assets/Scripts/Shaders/CustomEffectComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dce45078901e8743bb35a183fe9b463 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Shaders/CustomPostProcessPass.cs b/Assets/Scripts/Shaders/CustomPostProcessPass.cs new file mode 100644 index 0000000..2b757dd --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessPass.cs @@ -0,0 +1,118 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +/** + * https://www.febucci.com/2022/05/custom-post-processing-in-urp/ + * + */ + +namespace Shaders +{ + [System.Serializable] + public class CustomPostProcessPass : ScriptableRenderPass + { + // Used to render from camera to post processings + // back and forth, until we render the final image to + // the camera + RenderTargetIdentifier source; + RenderTargetIdentifier destinationA; + RenderTargetIdentifier destinationB; + RenderTargetIdentifier latestDest; + + readonly int temporaryRTIdA = Shader.PropertyToID("_TempRT"); + readonly int temporaryRTIdB = Shader.PropertyToID("_TempRTB"); + + public CustomPostProcessPass() + { + // Set the render pass event + renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing; + } + + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + // Grab the camera target descriptor. We will use this when creating a temporary render texture. + RenderTextureDescriptor descriptor = renderingData.cameraData.cameraTargetDescriptor; + descriptor.depthBufferBits = 0; + + var renderer = renderingData.cameraData.renderer; + source = renderer.cameraColorTarget; + + // Create a temporary render texture using the descriptor from above. + cmd.GetTemporaryRT(temporaryRTIdA , descriptor, FilterMode.Bilinear); + destinationA = new RenderTargetIdentifier(temporaryRTIdA); + cmd.GetTemporaryRT(temporaryRTIdB , descriptor, FilterMode.Bilinear); + destinationB = new RenderTargetIdentifier(temporaryRTIdB); + } + + // The actual execution of the pass. This is where custom rendering occurs. + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + // Skipping post processing rendering inside the scene View + if(renderingData.cameraData.isSceneViewCamera) + return; + + // Here you get your materials from your custom class + // (It's up to you! But here is how I did it) + var materials = CustomPostProcessingMaterials.Instance; + if (materials == null) + { + Debug.LogError("Custom Post Processing Materials instance is null"); + return; + } + + CommandBuffer cmd = CommandBufferPool.Get("Custom Post Processing"); + cmd.Clear(); + + // This holds all the current Volumes information + // which we will need later + var stack = VolumeManager.instance.stack; + + #region Local Methods + + // Swaps render destinations back and forth, so that + // we can have multiple passes and similar with only a few textures + void BlitTo(Material mat, int pass = 0) + { + var first = latestDest; + var last = first == destinationA ? destinationB : destinationA; + Blit(cmd, first, last, mat, pass); + + latestDest = last; + } + + #endregion + + // Starts with the camera source + latestDest = source; + + //---Custom effect here--- + var customEffect = stack.GetComponent(); + // Only process if the effect is active + if (customEffect.IsActive()) + { + var crtMaterial = materials.crtEffect; + // P.s. optimize by caching the property ID somewhere else + crtMaterial.SetFloat(Shader.PropertyToID("_Intensity"), customEffect.intensity.value); + + BlitTo(crtMaterial); + } + + // Add any other custom effect/component you want, in your preferred order + // Custom effect 2, 3 , ... + + + // DONE! Now that we have processed all our custom effects, applies the final result to camera + Blit(cmd, latestDest, source); + + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + + //Cleans the temporary RTs when we don't need them anymore + public override void OnCameraCleanup(CommandBuffer cmd) + { + cmd.ReleaseTemporaryRT(temporaryRTIdA); + cmd.ReleaseTemporaryRT(temporaryRTIdB); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Shaders/CustomPostProcessPass.cs.meta b/Assets/Scripts/Shaders/CustomPostProcessPass.cs.meta new file mode 100644 index 0000000..94be8ae --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37e69f1d36604e44e8313672cbb7efd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs b/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs new file mode 100644 index 0000000..a34ec98 --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs @@ -0,0 +1,20 @@ +using UnityEngine.Rendering.Universal; + +namespace Shaders +{ + [System.Serializable] + public class CustomPostProcessRenderer : ScriptableRendererFeature + { + CustomPostProcessPass pass; + + public override void Create() + { + pass = new CustomPostProcessPass(); + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(pass); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs.meta b/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs.meta new file mode 100644 index 0000000..1366f12 --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4a5752e025fc3d4c98d3aad409aac42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs b/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs new file mode 100644 index 0000000..6f859fe --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs @@ -0,0 +1,35 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; + +/** + * https://www.febucci.com/2022/05/custom-post-processing-in-urp/ + */ + +namespace Shaders +{ + [System.Serializable, + CreateAssetMenu(fileName = "CustomPostProcessingMaterials", menuName = "CustomMaterial/CustomPostProcessingMaterials")] + public class CustomPostProcessingMaterials : UnityEngine.ScriptableObject + { + //---Your Materials--- + public Material crtEffect; + + //---Accessing the data from the Pass--- + static CustomPostProcessingMaterials _instance; + + public static CustomPostProcessingMaterials Instance + { + get + { + if (_instance != null) return _instance; + // TODO check if application is quitting + // and avoid loading if that is the case + + _instance = + UnityEngine.Resources.Load("Shaders/CustomPostProcessingMaterials") as CustomPostProcessingMaterials; + return _instance; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs.meta b/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs.meta new file mode 100644 index 0000000..5387a5c --- /dev/null +++ b/Assets/Scripts/Shaders/CustomPostProcessingMaterials.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0517c7201b6a73841950436abd2ee35f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/URP-HighFidelity-Renderer.asset b/Assets/Settings/URP-HighFidelity-Renderer.asset index 907ec01..5533c98 100644 --- a/Assets/Settings/URP-HighFidelity-Renderer.asset +++ b/Assets/Settings/URP-HighFidelity-Renderer.asset @@ -40,8 +40,8 @@ MonoBehaviour: type: 3} m_RendererFeatures: - {fileID: -1878332245247344467} - - {fileID: 6059349672888060108} - m_RendererFeatureMap: adc0de57c6d2eee5cc485f766c221754 + - {fileID: 7294651837198521499} + m_RendererFeatureMap: adc0de57c6d2eee59b545e7c32cf3b65 m_UseNativeRenderPass: 0 postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} @@ -81,7 +81,7 @@ MonoBehaviour: m_ClusteredRendering: 0 m_TileSize: 32 m_IntermediateTextureMode: 1 ---- !u!114 &6059349672888060108 +--- !u!114 &7294651837198521499 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -90,14 +90,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d2d5de177d814a8d8c64638ad49b1b1d, type: 3} - m_Name: CRTPass + m_Script: {fileID: 11500000, guid: e4a5752e025fc3d4c98d3aad409aac42, type: 3} + m_Name: CustomPostProcessRenderer m_EditorClassIdentifier: m_Active: 1 - settings: - Event: 550 - blitMaterial: {fileID: 2100000, guid: a110daba21b580f4898ccf841727c0c2, type: 2} - blitMaterialPassIndex: -1 - destination: 0 - textureId: _BlitPassTexture - alwaysRender: 1 diff --git a/Assets/Material/CRTBlit.mat b/Assets/Shaders/CRTMaterialShader.mat similarity index 92% rename from Assets/Material/CRTBlit.mat rename to Assets/Shaders/CRTMaterialShader.mat index 2d3ac3a..5cdd772 100644 --- a/Assets/Material/CRTBlit.mat +++ b/Assets/Shaders/CRTMaterialShader.mat @@ -20,7 +20,7 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: CRTBlit + m_Name: CRTMaterialShader m_Shader: {fileID: 4800000, guid: 7d830e9754227db4b89bacfdc753e135, type: 3} m_ValidKeywords: [] m_InvalidKeywords: [] @@ -105,6 +105,7 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 + - _Intensity: 1 - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 @@ -117,24 +118,24 @@ Material: - _Surface: 0 - _WorkflowMode: 1 - _ZWrite: 1 - - u_bend: 6.82 - - u_blue_offset_y: 0.0006 + - u_bend: 4.84 + - u_blue_offset_y: 0.0042 - u_green_offset_y: 0 - - u_noise_amount: 0.01 + - u_noise_amount: 0.015 - u_noise_size: 417 - - u_red_offset_y: -0.0004 - - u_scanlin_transparence1: 0.011 - - u_scanlin_transparence2: 0.008 + - u_red_offset_y: -0.0042 + - u_scanlin_transparence1: 0.024 + - u_scanlin_transparence2: 0.024 - u_scanline_amount: 0.047 - u_scanline_size_1: 277 - u_scanline_size_2: 521 - u_scanline_speed_1: 94.13 - u_scanline_speed_2: 30 - - u_space_bend: 2.022 + - u_space_bend: 2 - u_time: 15.95 - u_vignette_edge_round: 6 - - u_vignette_size: 1.8 - - u_vignette_smoothness: 0.26 + - u_vignette_size: 1.81 + - u_vignette_smoothness: 0.51 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Material/CRTBlit.mat.meta b/Assets/Shaders/CRTMaterialShader.mat.meta similarity index 100% rename from Assets/Material/CRTBlit.mat.meta rename to Assets/Shaders/CRTMaterialShader.mat.meta diff --git a/Assets/Shaders/CRTShader.shader b/Assets/Shaders/CRTShader.shader index 109652d..7589a92 100644 --- a/Assets/Shaders/CRTShader.shader +++ b/Assets/Shaders/CRTShader.shader @@ -23,9 +23,6 @@ Shader "CRTShader" u_blue_offset_y("Blue Offset",range(-0.01,0.01)) = 0 } - // The Unity Editor uses the class ExampleCustomEditor to configure the Inspector for this shader asset - CustomEditor "Shaders.BlitShaderGUI" - SubShader { // No culling or depth @@ -94,7 +91,7 @@ Shader "CRTShader" uv.y *= 1. + pow(abs(uv.x) / bend, 2.); uv /= u_space_bend; - return uv + .5; + return (uv + .5); } float vignette(half2 uv, float size, float smoothness, float edgeRounding) @@ -128,7 +125,7 @@ Shader "CRTShader" half2 u = smoothstep(0., 1., f); - return lerp(a, b, u.x) + (c - a) * u.y * (1. - u.x) + (d - b) * u.x * u.y; + return (lerp(a, b, u.x) + (c - a) * u.y * (1. - u.x) + (d - b) * u.x * u.y); } fixed4 frag(v2f i) : SV_Target diff --git a/Assets/Shaders/PixelShader.shader b/Assets/Shaders/PixelShader.shader deleted file mode 100644 index e97241f..0000000 --- a/Assets/Shaders/PixelShader.shader +++ /dev/null @@ -1,62 +0,0 @@ -Shader "PixelShader" -{ - Properties - { - _MainTex("Texture", 2D) = "white" {} - _ScreenWidth("screen width", float) = 320.0 - _ScreenHeight("screen height", float) = 240.0 - _CellSizeX("size of x cell", float) = 4.0 - _CellSizeY("size of y cell", float) = 4.0 - } - SubShader - { - // No culling or depth - Cull Off ZWrite Off ZTest Always - - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata - { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - }; - - struct v2f - { - float2 uv : TEXCOORD0; - float4 vertex : SV_POSITION; - }; - - v2f vert(appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - return o; - } - - sampler2D _MainTex; - float _ScreenWidth; - float _ScreenHeight; - float _CellSizeX; - float _CellSizeY; - - fixed4 frag(v2f i) : SV_Target - { - float2 uv = i.uv; - - float pixelX = _ScreenWidth / _CellSizeX; - float pixelY = _ScreenHeight / _CellSizeY; - - return tex2D(_MainTex, float2(floor(pixelX * uv.x) / pixelX, floor(pixelY * uv.y) / pixelY)); - } - ENDCG - } - } -} \ No newline at end of file diff --git a/Assets/Shaders/PixelShader.shader.meta b/Assets/Shaders/PixelShader.shader.meta deleted file mode 100644 index 16c238b..0000000 --- a/Assets/Shaders/PixelShader.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c4d7011496fb8f34ead8b47276ae3f0a -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: