unity 镜面 反射

URP 镜面

资源绑定 下载
在这里插入图片描述

namespace UnityEngine.Rendering.Universal
{       [ExecuteInEditMode]public class PlanarURP : MonoBehaviour{public bool VR = false;public int ReflectionTexResolution = 512;public float Offset = 0.0f;[Range(0, 1)]public float ReflectionAlpha = 0.5f;public bool BlurredReflection;public LayerMask LayersToReflect = -1;private Camera reflectionCamera;private RenderTexture reflectionTexture = null, reflectionTextureRight = null;private static bool isRendering = false;private Material material;private static readonly int reflectionTexString = Shader.PropertyToID("_ReflectionTex");private static readonly int reflectionTexRString = Shader.PropertyToID("_ReflectionTexRight");private static readonly int reflectionAlphaString = Shader.PropertyToID("_RefAlpha");private static readonly string blurString = "BLUR";private static readonly string vrString = "VRon";private Matrix4x4 reflectionMatrix;private Vector4 reflectionPlane;private Vector3 posistion;private Vector3 normal;private Matrix4x4 projection;private Vector4 oblique;private Matrix4x4 worldToCameraMatrix;private Vector3 clipNormal;private Vector4 clipPlane;private Vector3 oldPosition;Vector3 eulerAngles;void OnEnable(){RenderPipelineManager.beginCameraRendering += this.RenderObject;Start();}private void OnDisable(){RenderPipelineManager.beginCameraRendering -= this.RenderObject;if (reflectionTexture){RemoveObject(reflectionTexture);reflectionTexture = null;}if (reflectionTextureRight){RemoveObject(reflectionTextureRight);reflectionTextureRight = null;}if (reflectionCamera){RemoveObject(reflectionCamera.gameObject);reflectionCamera = null;}}public void Start(){material = GetComponent<Renderer>().sharedMaterials[0];QualitySettings.pixelLightCount = 0;var go = new GameObject(GetInstanceID().ToString(), typeof(Camera), typeof(Skybox));reflectionCamera = go.GetComponent<Camera>();var lwrpCamData = go.AddComponent(typeof(UniversalAdditionalCameraData)) as UniversalAdditionalCameraData;lwrpCamData.renderShadows = false;lwrpCamData.requiresColorOption = CameraOverrideOption.Off;lwrpCamData.requiresDepthOption = CameraOverrideOption.Off;reflectionCamera.enabled = false;reflectionCamera.transform.position = transform.position;reflectionCamera.transform.rotation = transform.rotation;reflectionCamera.cullingMask = ~(1 << 4) & LayersToReflect.value;reflectionCamera.cameraType = CameraType.Reflection;go.hideFlags = HideFlags.HideAndDontSave;if (reflectionTexture){RemoveObject(reflectionTexture);}reflectionTexture = new RenderTexture(ReflectionTexResolution, ReflectionTexResolution, 16){isPowerOfTwo = true,hideFlags = HideFlags.DontSave};if (reflectionTextureRight){RemoveObject(reflectionTextureRight);}reflectionTextureRight = new RenderTexture(ReflectionTexResolution, ReflectionTexResolution, 16){isPowerOfTwo = true,hideFlags = HideFlags.DontSave};}void RenderObject(ScriptableRenderContext context, Camera cam){if (isRendering){return;}isRendering = true;posistion = transform.position;normal = transform.up;reflectionCamera.clearFlags = cam.clearFlags;reflectionCamera.backgroundColor = cam.backgroundColor;reflectionCamera.farClipPlane = cam.farClipPlane;reflectionCamera.nearClipPlane = cam.nearClipPlane;reflectionCamera.orthographic = cam.orthographic;reflectionCamera.fieldOfView = cam.fieldOfView;reflectionCamera.aspect = cam.aspect;reflectionCamera.orthographicSize = cam.orthographicSize;if (cam.clearFlags == CameraClearFlags.Skybox){var sky = cam.GetComponent(typeof(Skybox)) as Skybox;var mysky = reflectionCamera.GetComponent(typeof(Skybox)) as Skybox;if (!sky || !sky.material){mysky.enabled = false;}else{mysky.enabled = true;mysky.material = sky.material;}}reflectionPlane = new Vector4(normal.x, normal.y, normal.z, -Vector3.Dot(normal, posistion) - Offset);reflectionMatrix.m00 = (1F - 2F * reflectionPlane[0] * reflectionPlane[0]);reflectionMatrix.m01 = (-2F * reflectionPlane[0] * reflectionPlane[1]);reflectionMatrix.m02 = (-2F * reflectionPlane[0] * reflectionPlane[2]);reflectionMatrix.m03 = (-2F * reflectionPlane[3] * reflectionPlane[0]);reflectionMatrix.m10 = (-2F * reflectionPlane[1] * reflectionPlane[0]);reflectionMatrix.m11 = (1F - 2F * reflectionPlane[1] * reflectionPlane[1]);reflectionMatrix.m12 = (-2F * reflectionPlane[1] * reflectionPlane[2]);reflectionMatrix.m13 = (-2F * reflectionPlane[3] * reflectionPlane[1]);reflectionMatrix.m20 = (-2F * reflectionPlane[2] * reflectionPlane[0]);reflectionMatrix.m21 = (-2F * reflectionPlane[2] * reflectionPlane[1]);reflectionMatrix.m22 = (1F - 2F * reflectionPlane[2] * reflectionPlane[2]);reflectionMatrix.m23 = (-2F * reflectionPlane[3] * reflectionPlane[2]);reflectionMatrix.m30 = 0F;reflectionMatrix.m31 = 0F;reflectionMatrix.m32 = 0F;reflectionMatrix.m33 = 1F;oldPosition = cam.transform.position;reflectionCamera.worldToCameraMatrix = cam.worldToCameraMatrix * reflectionMatrix;worldToCameraMatrix = reflectionCamera.worldToCameraMatrix;clipNormal = worldToCameraMatrix.MultiplyVector(normal).normalized;clipPlane = new Vector4(clipNormal.x, clipNormal.y, clipNormal.z, -Vector3.Dot(worldToCameraMatrix.MultiplyPoint(posistion + normal * Offset), clipNormal));if (!VR){RenderObjectCamera(cam.projectionMatrix, false);material.DisableKeyword(vrString);GL.invertCulling = true;reflectionCamera.transform.position = reflectionMatrix.MultiplyPoint(oldPosition);eulerAngles = cam.transform.eulerAngles;reflectionCamera.transform.eulerAngles = new Vector3(0, eulerAngles.y, eulerAngles.z);UniversalRenderPipeline.RenderSingleCamera(context, reflectionCamera);reflectionCamera.transform.position = oldPosition;GL.invertCulling = false;material.SetTexture(reflectionTexString, reflectionTexture);}else{RenderObjectCamera(cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left), false);material.EnableKeyword(vrString);GL.invertCulling = true;reflectionCamera.transform.position = reflectionMatrix.MultiplyPoint(oldPosition);eulerAngles = cam.transform.eulerAngles;reflectionCamera.transform.eulerAngles = new Vector3(0, eulerAngles.y, eulerAngles.z);UniversalRenderPipeline.RenderSingleCamera(context, reflectionCamera);reflectionCamera.transform.position = oldPosition;GL.invertCulling = false;material.SetTexture(reflectionTexString, reflectionTexture);RenderObjectCamera(cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right), true);GL.invertCulling = true;reflectionCamera.transform.position = reflectionMatrix.MultiplyPoint(oldPosition);eulerAngles = cam.transform.eulerAngles;reflectionCamera.transform.eulerAngles = new Vector3(0, eulerAngles.y, eulerAngles.z);UniversalRenderPipeline.RenderSingleCamera(context, reflectionCamera);reflectionCamera.transform.position = oldPosition;GL.invertCulling = false;material.SetTexture(reflectionTexRString, reflectionTextureRight);}material.SetFloat(reflectionAlphaString, ReflectionAlpha);if (BlurredReflection){material.EnableKeyword(blurString);}else{material.DisableKeyword(blurString);}isRendering = false;}void RemoveObject(Object obj){if (Application.isEditor){DestroyImmediate(obj);}else{Destroy(obj);}}private void RenderObjectCamera(Matrix4x4 projection, bool right){oblique = clipPlane * (2.0F / (Vector4.Dot(clipPlane, projection.inverse * new Vector4(sgn(clipPlane.x), sgn(clipPlane.y), 1.0f, 1.0f))));projection[2] = oblique.x - projection[3];projection[6] = oblique.y - projection[7];projection[10] = oblique.z - projection[11];projection[14] = oblique.w - projection[15];reflectionCamera.projectionMatrix = projection;reflectionCamera.targetTexture = right ? reflectionTextureRight : reflectionTexture;}private static float sgn(float a){return a > 0.0f ? 1.0f : a < 0.0f ? -1.0f : 0.0f;}}
}
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "SupGames/PlanarReflectionURP/Diffuse"
{Properties{_Color("Color", Color) = (1,1,1,1)_MainTex("Main Texture", 2D) = "white" {}_MaskTex("Mask Texture", 2D) = "white" {}_BlurAmount("Blur Amount", Range(0,7)) = 1[Toggle(RECEIVE_SHADOWS)]_ReceiveShadows("Recieve Shadows", Float) = 0}SubShader{Tags {"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "IgnoreProjector" = "True"}LOD 100Pass {Tags { "LightMode" = "UniversalForward" }Blend SrcAlpha OneMinusSrcAlphaHLSLPROGRAM#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"#pragma vertex vert#pragma fragment frag#pragma shader_feature_local BLUR#pragma shader_feature_local VRon#pragma shader_feature RECEIVE_SHADOWS#pragma multi_compile _ _MAIN_LIGHT_SHADOWS#pragma multi_compile _ LIGHTMAP_ON#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS#pragma multi_compile_instancing#pragma multi_compile_fogTEXTURE2D(_MainTex);SAMPLER(sampler_MainTex);TEXTURE2D(_ReflectionTex);SAMPLER(sampler_ReflectionTex);
#ifdef VRonTEXTURE2D(_ReflectionTexRight);SAMPLER(sampler_ReflectionTexRight);
#endifTEXTURE2D(_MaskTex);SAMPLER(sampler_MaskTex);half _BlurAmount;half _RefAlpha;half4 _MainTex_ST;half4 _Color;half4 _ReflectionTex_TexelSize;struct Attributes{half4 pos : POSITION;half4 uv : TEXCOORD0;half4 normal : NORMAL;UNITY_VERTEX_INPUT_INSTANCE_ID};struct Varyings{half4 pos : SV_POSITION;half4 uv : TEXCOORD0;half4 normal : TEXCOORD1;
#ifdef LIGHTMAP_ONhalf3 lightmapUV : TEXCOORD2;
#elsehalf4 vertexSH : TEXCOORD2;
#endif
#if defined(BLUR)half4 offset : TEXCOORD3;
#endif
#if defined(_MAIN_LIGHT_SHADOWS)half4 shadowCoord : TEXCOORD4;
#endif
#if defined(_ADDITIONAL_LIGHTS) || defined(_ADDITIONAL_LIGHTS_VERTEX)half3 lightData : TEXCOORD5;
#endifUNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO};Varyings vert(Attributes i){Varyings o = (Varyings)0;UNITY_SETUP_INSTANCE_ID(i);UNITY_TRANSFER_INSTANCE_ID(i, o);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);o.uv.xy = TRANSFORM_TEX(i.uv, _MainTex);o.normal.xyz = normalize(mul(i.normal, unity_WorldToObject).xyz);half4 ws = mul(unity_ObjectToWorld, i.pos);o.pos = mul(unity_MatrixVP, ws);half4 scrPos = ComputeScreenPos(o.pos);o.uv.zw = scrPos.xy;o.normal.w = scrPos.w;
#if defined(BLUR)half2 offset = _ReflectionTex_TexelSize.xy * _BlurAmount;o.offset = half4(-offset, offset);
#endif
#if defined(_MAIN_LIGHT_SHADOWS)o.shadowCoord = TransformWorldToShadowCoord(ws.xyz);
#endif
#ifdef LIGHTMAP_ONo.lightmapUV.xy = i.uv.zw * unity_LightmapST.xy + unity_LightmapST.zw;o.lightmapUV.z = ComputeFogFactor(o.pos.z);
#elseo.vertexSH.xyz = SampleSHVertex(i.normal.xyz);o.vertexSH.w = ComputeFogFactor(o.pos.z);
#endif
#ifdef _ADDITIONAL_LIGHTS_VERTEXo.lightData = half3(0.0h, 0.0h, 0.0h);uint lightsCount = GetAdditionalLightsCount();for (uint lightIndex = 0u; lightIndex < lightsCount; ++lightIndex){Light light = GetAdditionalLight(lightIndex, ws.xyz);o.lightData += light.color * light.distanceAttenuation * saturate(dot(o.normal.xyz, light.direction));}
#endif
#ifdef _ADDITIONAL_LIGHTSo.lightData = ws.xyz;
#endifreturn o;}half4 frag(Varyings i) : SV_Target{UNITY_SETUP_INSTANCE_ID(i);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);half3 diffuseReflection = _MainLightColor.rgb * dot(i.normal.xyz, _MainLightPosition.xyz);half3 bakedGI = SAMPLE_GI(i.lightmapUV.xy, i.vertexSH.xyz, i.normal.xyz);
#if defined(_MAIN_LIGHT_SHADOWS) && defined(RECEIVE_SHADOWS)half3 realtimeShadow = lerp(bakedGI, max(bakedGI - diffuseReflection * (1.0h - MainLightRealtimeShadow(i.shadowCoord)), _SubtractiveShadowColor.xyz), _MainLightShadowData.x);bakedGI = min(bakedGI, realtimeShadow);
#endifhalf4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv.xy);half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv.xy);i.uv.zw /= i.normal.w;half4 reflection = SAMPLE_TEXTURE2D(_ReflectionTex, sampler_ReflectionTex, i.uv.zw);
#if defined(BLUR)i.offset /= i.normal.w;i.offset = half4(i.uv.zz + i.offset.xz, i.uv.ww + i.offset.yw);reflection += SAMPLE_TEXTURE2D(_ReflectionTex, sampler_ReflectionTex, i.offset.xz);reflection += SAMPLE_TEXTURE2D(_ReflectionTex, sampler_ReflectionTex, i.offset.xw);reflection += SAMPLE_TEXTURE2D(_ReflectionTex, sampler_ReflectionTex, i.offset.yz);reflection += SAMPLE_TEXTURE2D(_ReflectionTex, sampler_ReflectionTex, i.offset.yw);reflection *= 0.2h;
#endif
#ifdef VRonhalf4 reflectionr = SAMPLE_TEXTURE2D(_ReflectionTexRight, sampler_ReflectionTexRight, i.uv.zw);
#ifdef BLURreflectionr += SAMPLE_TEXTURE2D(_ReflectionTexRight, sampler_ReflectionTexRight, i.offset.xz);reflectionr += SAMPLE_TEXTURE2D(_ReflectionTexRight, sampler_ReflectionTexRight, i.offset.xw);reflectionr += SAMPLE_TEXTURE2D(_ReflectionTexRight, sampler_ReflectionTexRight, i.offset.yz);reflectionr += SAMPLE_TEXTURE2D(_ReflectionTexRight, sampler_ReflectionTexRight, i.offset.yw);reflectionr *= 0.2h;
#endifreflection = lerp(reflection, reflectionr, unity_StereoEyeIndex);
#endif
#ifdef _ADDITIONAL_LIGHTSuint pixelLightCount = GetAdditionalLightsCount();for (uint lightIndex = 0u; lightIndex < pixelLightCount; ++lightIndex){Light light = GetAdditionalLight(lightIndex, i.lightData.xyz);diffuseReflection += light.color * light.distanceAttenuation * light.shadowAttenuation * saturate(dot(i.normal.xyz, light.direction));}
#endif
#ifdef _ADDITIONAL_LIGHTS_VERTEXdiffuseReflection += i.lightData;
#endifcolor.rgb *= (diffuseReflection + bakedGI);
#ifdef LIGHTMAP_ONcolor.rgb = MixFog(color.rgb, i.lightmapUV.z);
#elsecolor.rgb = MixFog(color.rgb, i.vertexSH.w);
#endifreturn (lerp(color, reflection, _RefAlpha * mask.r) + lerp(reflection, color, 1 - _RefAlpha * mask.r))*_Color * 0.5h;}ENDHLSL}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头&#xff0c;但以&#xff1b;结束&#xff0c;长度不限 3、以#开头&#xff0c;不以;结束&#xff0c;也不包含;&#xff0c;长…

leetcode 2043.简易银行系统

1.题目要求: 示例: 输入&#xff1a; ["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"] [[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]] 输出&#xff…

软件技术求职简历「优选篇」

【#软件技术简历#】一份精心撰写的简历是增加获得心仪职位的机会。那么&#xff0c;如何才能写出一份既全面又吸引人的软件技术简历呢&#xff1f;以下是幻主简历整理的软件技术简历「优选篇」&#xff0c;欢迎大家阅读收藏&#xff01; 软件技术简历范文&#xff1a; 求职意向…

GESP4级考试语法知识(算法概论(三))

爱因斯坦的阶梯代码&#xff1a; //算法1-12 #include<iostream> using namespace std; int main() {int n1; //n为所设的阶梯数while(!((n%21)&&(n%32)&&(n%54)&&(n%65)&&(n%70)))n; //判别是否满足一组同余式cout<<n<…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

美国历任总统特征数据-多个字段(1789-2024年)

数据简介&#xff1a;美国历任总统数据集是一个涵盖了从美国建国以来所有总统的详细信息的综合性数据集。该数据集不仅包含了每位总统的基本信息&#xff08;如姓名、任期、党派等&#xff09;&#xff0c;还涵盖了他们在任期间的重要政策、经济指标、国内外事件等关键数据。通…

视频QoE测量学习笔记(二)

A Survey on Bitrate Adaptation Schemes for Streaming Media Over HTTP论文学习笔记 自适应比特率&#xff08;ABH或ABS&#xff09; 是一种旨在通过 HTTP 网络有效地流式传输文件的技术。向用户的视频播放器提供多个相同内容、不同大小文件的文件&#xff0c;然后客户端选…

HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解

文章目录 1. 标题标签2. 段落标签3. 文本格式化标签4. 列表标签4.1 无序列表 `<ul>`4.2 有序列表 `<ol>`5. 引用标签5.1 块引用 `<blockquote>`5.2 行内引用 `<q>`5.3 作品引用 `<cite>`6. 代码和预格式文本标签6.1 代码标签 `<code>`6.2 …

论文阅读笔记-Get To The Point: Summarization with Pointer-Generator Networks

前言 最近看2021ACL的文章&#xff0c;碰到了Copying Mechanism和Coverage mechanism两种技巧&#xff0c;甚是感兴趣的翻阅了原文进行阅读&#xff0c;Copying Mechanism的模型CopyNet已经进行阅读并写了阅读笔记&#xff0c;如下&#xff1a; 论文阅读笔记&#xff1a;Copyi…

PDF多功能工具箱 PDF Shaper v14.6

如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验&#xff0c;因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper&#xff0c;你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

【算法】(Python)贪心算法

贪心算法&#xff1a; 又称贪婪算法&#xff0c;greedy algorithm。贪心地追求局部最优解&#xff0c;即每一步当前状态下最优选择。试图通过各局部最优解达到最终全局最优解。但不从整体最优上考虑&#xff0c;不一定全局最优解。步骤&#xff1a;从初始状态拆分成一步一步的…

vue常见题型(1-10)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式&#xff0c;由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…

论文阅读:人工智能赋能源网荷储协同互动的应用及展望

论文阅读&#xff1a;人工智能赋能源网荷储协同互动的应用及展望 [1]王继业.人工智能赋能源网荷储协同互动的应用及展望[J].中国电机工程学报,2022,42(21):7667-7682.DOI:10.13334/j.0258-8013.pcsee.220538. 文章目录 论文阅读&#xff1a;人工智能赋能源网荷储协同互动的应用…

虚幻引擎5(UE5)学习教程

虚幻引擎5&#xff08;UE5&#xff09;学习教程 引言 虚幻引擎5&#xff08;Unreal Engine 5&#xff0c;简称UE5&#xff09;是Epic Games开发的一款强大的游戏引擎&#xff0c;广泛应用于游戏开发、影视制作、建筑可视化等多个领域。UE5引入了许多先进的技术&#xff0c;如…

Golang | Leetcode Golang题解之第543题二叉树的直径

题目&#xff1a; 题解&#xff1a; func diameterOfBinaryTree(root *TreeNode) int {var (dfs func(node *TreeNode) int // node节点深度ans int)dfs func(node *TreeNode) int {//边界if node nil {return -1}//求左右子树深度leftDepth : dfs(node.Left)rightDepth : d…

【TS】九天学会TS语法——3.TypeScript 函数

今天学习 TypeScript 的函数&#xff0c;包括函数类型、可选参数、默认参数、剩余参数。 函数声明和表达式函数类型可选参数和默认参数剩余参数 在 TypeScript 中&#xff0c;函数是编程的核心概念之一。它们允许我们将代码组织成可重用的块&#xff0c;并提供了强大的抽象能力…

解决程序因缺少xinput1_3.dll无法运行的有效方法,有效修复丢失xinput1_3.dll

如果你的电脑在运行某些应用程序或游戏时提示“xinput1_3.dll丢失”或“找不到xinput1_3.dll”的错误消息&#xff0c;那么很可能是因为你的系统中缺少这个重要的DLL文件而导致的问题。那么电脑出现xinput1_3.dll丢失的问题时有哪些方法进行修复呢&#xff1f; 如何确定电脑是否…

Golang--面向对象

Golang语言面向对象编程说明&#xff1a; Golang也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。Golang没有类(class)&#xff0c;Go语言的结构体(struct)和其…

语音识别中的RPM技术:原理、应用与发展趋势

目录 引言1. RPM技术的基本原理2. RPM的应用领域3. RPM技术的挑战与发展趋势4. 总结 引言 在语音识别和音频处理领域&#xff0c;RPM&#xff08;Recurrent Phase Model&#xff0c;递归相位模型&#xff09;技术正逐渐崭露头角。它作为一种创新的信号处理方法&#xff0c;通过…

IntelliJ Idea设置自定义快捷键

我IDEA的快捷键是自己修改成了和Eclipse相似&#xff0c;然后想要跳转到某个方法的上层抽象方法没有对应的快捷键&#xff0c;IDEA默认的是Ctrl U &#xff08;Windows/Linux 系统&#xff09; 或 Command U &#xff08;Mac 系统&#xff09;&#xff0c;但是我的不起作用&a…