commit 263bb68686394654cdfba1d1520ba3ad1bef86eb
Author: LiRuoChen <571244399@qq.com>
Date: Fri Jun 5 14:35:42 2026 +0800
�始化�处�阶段�幕处�器
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..b78670b
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Changelog
+
+## [Unreleased]
+
+* built-in ½×¶ÎµÄ¼òÒ×´¦ÀíÆ÷
+* URP ½×¶ÎµÄ´¦ÀíÆ÷
+
diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta
new file mode 100644
index 0000000..189ec46
--- /dev/null
+++ b/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8c252a65d20865247a6d3cc2ba1f0075
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Documentation.meta b/Documentation.meta
new file mode 100644
index 0000000..542131f
--- /dev/null
+++ b/Documentation.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7d673101928967242bf6cdfa9cb0ccc2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Editor.meta b/Editor.meta
new file mode 100644
index 0000000..a535c67
--- /dev/null
+++ b/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6760f91188a394147b91452bfe315216
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef b/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef
new file mode 100644
index 0000000..e22d85c
--- /dev/null
+++ b/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef
@@ -0,0 +1,22 @@
+{
+ "name": "Lrss3.ScreendetectiongrolayerpickerUrp.Editor",
+ "rootNamespace": "",
+ "references": [
+ "Lrss3.ScreendetectiongrolayerpickerUrp",
+ "Unity.RenderPipelines.Universal.Runtime",
+ "Unity.RenderPipelines.Universal.Editor",
+ "Unity.RenderPipelines.Core.Runtime",
+ "Unity.RenderPipelines.Core.Editor"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef.meta b/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef.meta
new file mode 100644
index 0000000..fccf10a
--- /dev/null
+++ b/Editor/Lrss3.ScreendetectiongrolayerpickerUrp.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 655ba29a1fbde0447bf386c055e931eb
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..23dd411
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+# Unity �幕空间�处�阶段检查器-模型数���器
+
diff --git a/README.md.meta b/README.md.meta
new file mode 100644
index 0000000..6d97bfa
--- /dev/null
+++ b/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: abe80e4311f5be343adfcf420b846c0a
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime.meta b/Runtime.meta
new file mode 100644
index 0000000..c7292da
--- /dev/null
+++ b/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a825232565e66c0469f297525ad1e8cb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef b/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef
new file mode 100644
index 0000000..a2ab97a
--- /dev/null
+++ b/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef
@@ -0,0 +1,17 @@
+{
+ "name": "Lrss3.ScreendetectiongrolayerpickerUrp",
+ "rootNamespace": "",
+ "references": [
+ "Unity.RenderPipelines.Core.Runtime",
+ "Unity.RenderPipelines.Universal.Runtime"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef.meta b/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef.meta
new file mode 100644
index 0000000..b35c441
--- /dev/null
+++ b/Runtime/Lrss3.ScreendetectiongrolayerpickerUrp.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bbdbb3efc0f815a488c85c3dcb7a6151
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/MeshDetection_Builtin.meta b/Runtime/MeshDetection_Builtin.meta
new file mode 100644
index 0000000..8ccbd86
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e1ea6370245890746869db987244b160
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs b/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs
new file mode 100644
index 0000000..50e72f9
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs
@@ -0,0 +1,119 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+using XericLibrary.Runtime.Type;
+
+namespace Deconstruction.ScreenDetection.MeshDetection
+{
+ ///
+ /// 在�幕上截�模型的表�属性
+ ///
+ ///
+ public class GeoLayerPicker : MonoBehaviour
+ {
+ public Camera targetCamera;
+ public Material pickMaterial;
+ public MeshFilter[] geoMeshes; // 外部å�ªéœ€æ‹–å…¥åœ°è´¨å±‚ç½‘æ ¼
+
+ public Vector2Int pickRTSize = new Vector2Int(64, 64);
+ public Bool2 pickRTAdapt = new Bool2(false, true);
+
+ private RenderTexture pickRT;
+ private Texture2D readTex;
+ private CommandBuffer cmd;
+ private float nextCheckTime;
+
+ private static readonly int MatID = Shader.PropertyToID("_MatID");
+
+ // ã€�æ ¸å¿ƒã€‘ç¼“å˜å±•å¹³å�Žçš„绘制数æ�®
+ private struct SubMeshDrawData
+ {
+ public Mesh mesh;
+ public Matrix4x4 matrix;
+ public int subMeshIndex;
+ public int uniqueMatID; // 分�给这个�槽的唯一ID
+ }
+
+ private List drawList = new List();
+
+ void Start()
+ {
+ // 1. å±•å¹³æ‰€æœ‰ç½‘æ ¼çš„ SubMesh
+ if (geoMeshes != null)
+ {
+ int globalIDCounter = 1; // ID从1开始,0留给背景
+ foreach (var mf in geoMeshes)
+ {
+ if (mf == null || mf.sharedMesh == null) continue;
+
+ Mesh mesh = mf.sharedMesh;
+ Matrix4x4 matrix = mf.transform.localToWorldMatrix;
+
+ // é��åŽ†è¿™ä¸ªç½‘æ ¼ä¸Šçš„æ¯�一个æ��è´¨æ�’æ§½
+ for (int sub = 0; sub < mesh.subMeshCount; sub++)
+ {
+ drawList.Add(new SubMeshDrawData
+ {
+ mesh = mesh,
+ matrix = matrix,
+ subMeshIndex = sub,
+ uniqueMatID = globalIDCounter++
+ });
+ }
+ }
+ }
+
+ // 2. �始化 RT 和 CommandBuffer
+ pickRT = new RenderTexture(pickRTSize.x, pickRTSize.y, 0, RenderTextureFormat.ARGB32);
+ pickRT.Create();
+ readTex = new Texture2D(pickRTSize.x, pickRTSize.y, TextureFormat.RGBA32, false);
+
+ cmd = new CommandBuffer();
+ cmd.name = "GeoLayerPickBuffer";
+ targetCamera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, cmd);
+ }
+
+ void Update()
+ {
+ // if (Time.time < nextCheckTime) return;
+ // nextCheckTime = Time.time + 0.2f;
+
+ cmd.Clear();
+
+ // 视�设置
+ var screenSize = new Vector2(Screen.width, Screen.height);
+ var screenStart = (screenSize - pickRTSize) / 2;
+ Rect pickRect = new Rect(pickRTAdapt.X * screenStart.x, pickRTAdapt.Y * screenStart.y, pickRTAdapt.x ? Screen.width : pickRTSize.x,
+ pickRTAdapt.x ? Screen.height : pickRTSize.y);
+ cmd.SetViewport(pickRect);
+ cmd.SetRenderTarget(pickRT);
+ cmd.ClearRenderTarget(true, true, Color.clear);
+
+ // ã€�æ ¸å¿ƒã€‘é��历展平å�Žçš„ SubMesh 列表进行绘制
+ for (int i = 0; i < drawList.Count; i++)
+ {
+ var data = drawList[i];
+ pickMaterial.SetInt(MatID, data.uniqueMatID);
+
+ // 使用带 submeshIndex �数的 DrawMesh �载
+ cmd.DrawMesh(data.mesh, data.matrix, pickMaterial, data.subMeshIndex);
+ }
+
+ // 读å�–åƒ�ç´
+ RenderTexture.active = pickRT;
+ readTex.ReadPixels(new Rect(0, 0, pickRTSize.x, pickRTSize.y), 0, 0);
+ readTex.Apply();
+ RenderTexture.active = null;
+
+ ProcessPickedData();
+ }
+
+ void ProcessPickedData()
+ {
+ Color32[] pixels = readTex.GetPixels32();
+ // è§£ç � pixels ä¸çš„ uniqueMatID å’Œ WorldPos
+ // æ ¹æ�® uniqueMatID å��查地质层信æ�¯å¹¶æ›´æ–° UI...
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs.meta b/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs.meta
new file mode 100644
index 0000000..7bc6af7
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/GeoLayerPicker.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 04e13623766d409e9c979b15693bb2dd
+timeCreated: 1780626411
\ No newline at end of file
diff --git a/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader b/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader
new file mode 100644
index 0000000..86abbcc
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader
@@ -0,0 +1,62 @@
+Shader "XericLibrary/ScreenDectection/MeshPicking"
+{
+ Properties
+ {
+ // ´«Èë²ÄÖÊID
+ _MatID ("Material ID", Int) = 0
+ }
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" }
+ LOD 100
+
+ Pass
+ {
+ // ¹Ø±Õ¹âÕÕºÍÎíЧ£¬´¿Êý¾ÝÊä³ö
+ Lighting Off
+ Fog { Mode Off }
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #include "UnityCG.cginc"
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ float3 worldPos : TEXCOORD0; // ´«µÝÊÀ½ç×ø±ê¸øÆ¬¶Î×ÅÉ«Æ÷
+ };
+
+ int _MatID; // ½ÓÊÕ²ÄÖÊID
+
+ v2f vert (appdata v)
+ {
+ v2f o;
+ o.vertex = UnityObjectToClipPos(v.vertex);
+ // ¼ÆËãÊÀ½ç×ø±ê²¢´«µÝ
+ o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
+ return o;
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ // 1. ½«ÊÀ½ç×ø±ê±àÂëµ½ RGB ͨµÀ
+ // ¼ÙÉèÄãµÄµØÖÊÄ£ÐÍÊÀ½ç×ø±ê·¶Î§ÔÚ -1000 µ½ 1000 Ö®¼ä
+ // ¼ÓÉÏ 1000 ±ä³É 0~2000£¬ÔÙ³ýÒÔ 2000 ±ä³É 0~1
+ float3 encodedPos = (i.worldPos + 1000.0) / 2000.0;
+
+ // 2. ½«²ÄÖÊID±àÂëµ½ Alpha ͨµÀ (¼ÙÉèID²»³¬¹ý255)
+ float encodedID = _MatID / 255.0;
+
+ // Êä³ö RGBA = (PosX, PosY, PosZ, MatID)
+ return fixed4(encodedPos.x, encodedPos.y, encodedPos.z, encodedID);
+ }
+ ENDCG
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader.meta b/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader.meta
new file mode 100644
index 0000000..3b20cd5
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/ScreenMeshPicking.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 624bb1fb3e89c5342ba64aec70bfd6af
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/MeshDetection_Builtin/XMeshPicking.mat b/Runtime/MeshDetection_Builtin/XMeshPicking.mat
new file mode 100644
index 0000000..dc5eb48
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/XMeshPicking.mat
@@ -0,0 +1,30 @@
+%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: XMeshPicking
+ m_Shader: {fileID: 4800000, guid: 624bb1fb3e89c5342ba64aec70bfd6af, type: 3}
+ m_Parent: {fileID: 0}
+ m_ModifiedSerializedProperties: 0
+ m_ValidKeywords: []
+ m_InvalidKeywords: []
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs: []
+ m_Ints: []
+ m_Floats:
+ - _MatID: 73
+ m_Colors: []
+ m_BuildTextureStacks: []
diff --git a/Runtime/MeshDetection_Builtin/XMeshPicking.mat.meta b/Runtime/MeshDetection_Builtin/XMeshPicking.mat.meta
new file mode 100644
index 0000000..bef56e2
--- /dev/null
+++ b/Runtime/MeshDetection_Builtin/XMeshPicking.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ed648077cd0dc06418a72fd06e15af7b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/MeshDetection_URP.meta b/Runtime/MeshDetection_URP.meta
new file mode 100644
index 0000000..dc2b6c2
--- /dev/null
+++ b/Runtime/MeshDetection_URP.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9ca912e2c263eab47b131fc429db0a39
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs
new file mode 100644
index 0000000..f1d8638
--- /dev/null
+++ b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs
@@ -0,0 +1,143 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Rendering;
+using UnityEngine.Rendering.Universal;
+
+#if UNITY_2022_1_OR_NEWER // urp 13
+namespace XericLibrary.PostProcess
+{
+ // ¶¨ÒåÊý¾Ý½á¹¹£¬ÓÃÀ´´æ´¢Õ¹Æ½ºóµÄ SubMesh ÐÅÏ¢
+ [System.Serializable]
+ public struct SubMeshDrawData
+ {
+ public Mesh mesh;
+ public Matrix4x4 matrix;
+ public int subMeshIndex;
+ public int uniqueMatID;
+ }
+
+ public class GeoLayerPickerRenderPassFeature : ScriptableRendererFeature
+ {
+
+ // ÔÚ Feature ÍⲿÀàÖУ¬Ìí¼Ó Inspector Ãæ°åÐèÒªµÄÅäÖòÎÊý
+ [Header("ʰȡÉèÖÃ")]
+ public Material pickMaterial;
+ public MeshFilter[] geoMeshes;
+ public Vector2Int pickRTSize = new Vector2Int(64, 64);
+
+ // ÄÚ²¿³ÖÓеÄ×ÊÔ´
+ private RenderTexture m_PickRT;
+ private List m_DrawList = new List();
+
+ class GeoLayerPickerRenderPass : ScriptableRenderPass
+ {
+ public Material passMaterial;
+ public RenderTexture passRT;
+ public List passDrawList;
+
+ private int m_MatIDProperty = Shader.PropertyToID("_MatID");
+
+ public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
+ {
+ // ÔÚ URP ÖУ¬±ØÐëÔÚÕâÀï¸æËß¹ÜÏßÎÒÃÇÒªäÖȾµ½ÄÄÕÅ RT ÉÏ
+ if (passRT != null)
+ {
+ ConfigureTarget(new RenderTargetIdentifier(passRT));
+ ConfigureClear(ClearFlag.All, Color.clear);
+ }
+ }
+
+ public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
+ {
+ // °²È«¼ì²é
+ if (passMaterial == null || passRT == null || passDrawList == null || passDrawList.Count == 0)
+ return;
+
+ // ´Ó¶ÔÏ󳨻ñÈ¡ CommandBuffer (ÐÔÄܸüºÃ)
+ CommandBuffer cmd = CommandBufferPool.Get("GeoLayerPickBuffer");
+
+ // ÔÚ URP 13 ÖУ¬¾ø¶Ô²»ÄÜÔÚ Execute ÀïÓà cmd.SetRenderTarget()¡£±ØÐëÖØÐ´ OnCameraSetup£¬Ê¹Óà ConfigureTarget() ¸æËß URP Õâ¸ö Pass µÄÊä³öÄ¿±êÊÇÄã´´½¨µÄ m_PickRT¡£
+ // ÉèÖÃÊÓ¿ÚΪ RT µÄ³ß´ç (64x64)
+ cmd.SetViewport(new Rect(0, 0, passRT.width, passRT.height));
+
+ // ¡¾ºËÐÄ¡¿±éÀú»æÖÆÃ¿Ò»¸ö SubMesh
+ for (int i = 0; i < passDrawList.Count; i++)
+ {
+ var data = passDrawList[i];
+ cmd.SetGlobalInt(m_MatIDProperty, data.uniqueMatID);
+ // ×¢ÒâµÚËĸö²ÎÊý submeshIndex£¬ÕâÊǶà²ÄÖʲå²ÛµÄ¹Ø¼ü
+ cmd.DrawMesh(data.mesh, data.matrix, passMaterial, data.subMeshIndex);
+ }
+
+ // Ìá½»ÃüÁî¸ø GPU Ö´ÐÐ
+ context.ExecuteCommandBuffer(cmd);
+ CommandBufferPool.Release(cmd);
+ }
+
+ public override void OnCameraCleanup(CommandBuffer cmd)
+ {
+ }
+ }
+
+ GeoLayerPickerRenderPass m_ScriptablePass;
+
+ public override void Create()
+ {
+ m_ScriptablePass = new GeoLayerPickerRenderPass();
+
+ m_ScriptablePass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
+
+ // ¡¾²½Öè 4¡¿ÔÚ Create Öгõʼ»¯ RT£¬²¢Õ¹Æ½ SubMesh Êý¾Ý
+ if (m_PickRT != null) m_PickRT.Release();
+ m_PickRT = new RenderTexture(pickRTSize.x, pickRTSize.y, 0, RenderTextureFormat.ARGB32);
+ m_PickRT.Create();
+
+ RebuildDrawList();
+ }
+
+
+ // Ìṩһ¸ö¹«¿ª·½·¨£¬·½±ãÔËÐÐʱ¶¯Ì¬Ë¢ÐÂÍø¸ñÁбí
+ public void RebuildDrawList()
+ {
+ m_DrawList.Clear();
+ if (geoMeshes == null)
+ return;
+
+ int globalIDCounter = 1; // ID ´Ó 1 ¿ªÊ¼£¬0 Áô¸ø±³¾°
+ foreach (var mf in geoMeshes)
+ {
+ if (mf == null || mf.sharedMesh == null) continue;
+
+ // ±éÀúÍø¸ñµÄÿһ¸ö²ÄÖʲå²Û (SubMesh)
+ for (int sub = 0; sub < mf.sharedMesh.subMeshCount; sub++)
+ {
+ m_DrawList.Add(new SubMeshDrawData
+ {
+ mesh = mf.sharedMesh,
+ matrix = mf.transform.localToWorldMatrix,
+ subMeshIndex = sub,
+ uniqueMatID = globalIDCounter++
+ });
+ }
+ }
+ }
+
+ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
+ {
+ // ½«ÍⲿÊý¾Ý´«µÝ¸øÄÚ²¿µÄ Pass£¬²¢×¢Èë¹ÜÏß
+ if (m_ScriptablePass != null)
+ {
+ m_ScriptablePass.passMaterial = pickMaterial;
+ m_ScriptablePass.passRT = m_PickRT;
+ m_ScriptablePass.passDrawList = m_DrawList;
+
+ renderer.EnqueuePass(m_ScriptablePass);
+ }
+ }
+
+
+ // ±©Â¶ RT ¸øÍⲿ¶ÁÈ¡ÏñËØÓÃ
+ public RenderTexture GetPickRT() => m_PickRT;
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs.meta b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs.meta
new file mode 100644
index 0000000..d31e1a9
--- /dev/null
+++ b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 743401b70b599714a91857602199159a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..798fb3a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "com.lrss3.screendetectiongrolayerpicker-urp",
+ "displayName": "ScreenDetectionGroLayerPicker-URP",
+ "version": "0.1.0",
+ "unity": "2022.1",
+ "description": "\u6293\u53d6\u5c4f\u5e55\u4e2d\u770b\u5230\u7684\u6a21\u578b\u4fe1\u606f"
+}
\ No newline at end of file
diff --git a/package.json.meta b/package.json.meta
new file mode 100644
index 0000000..446dc5f
--- /dev/null
+++ b/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b4f64761718f61141ba89ea791fe26e0
+PackageManifestImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: