当前位置: 首页 > news >正文

成都网站建设 3e网站建设湛江专业建站联系方式

成都网站建设 3e网站建设,湛江专业建站联系方式,旧域名找新域名的方法,安庆网站建设价格描边需要深度法线纹理的加持#xff0c;效果才能达到最好#xff0c;但URP下很多版本不支持直接获取_CameraNormalsTexture#xff0c;而我本人也尝试了一下在12.1.7下偷懒直接拿SSAO里的Depth Normal图#xff0c; 虽然也能实现吧#xff0c;但是需要打开SSAO的同时…描边需要深度法线纹理的加持效果才能达到最好但URP下很多版本不支持直接获取_CameraNormalsTexture而我本人也尝试了一下在12.1.7下偷懒直接拿SSAO里的Depth Normal图 虽然也能实现吧但是需要打开SSAO的同时再在shader中加入指定的Tag为DepthNormals的Pass才能实现 稍微有点麻烦而且总有种用别人东西的感觉。 那就尝试一下自己动手吧动手造一个获取深度法线纹理的轮子 贴一下项目环境 URP12.1.7 Unity2021.3.8f1 浅看两篇手动获取深度法线纹理的文章URP深度法线纹理 - 简书 (jianshu.com)和雪风大佬的urp管线的自学hlsl之路 第二十四篇 科幻扫描效果后篇 - 哔哩哔哩 (bilibili.com)实现都是依靠build-in底下的shader然后将绘制出来的纹理传递给URP下自己项目定义的shader使用。 1 定义RenderFeature获取法线深度图 这个是参考了上述的过程说实话内容太过复杂。只有不断多学习多做每次都好好做备注总有一天会完全理解的 using Unity.VisualScripting; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal;public class DepthNormalsFeature : ScriptableRendererFeature {// 定义3个共有变量public class Settings{//public Shader shader; // 设置后处理shaderpublic Material material; //后处理Materialpublic RenderPassEvent renderPassEvent RenderPassEvent.BeforeRenderingPostProcessing; // 定义事件位置放在了官方的后处理之前}// 初始化一个刚刚定义的Settings类public Settings settings new Settings();// 初始化PassDepthNormalsPass depthNormalsPass;// 初始化纹理RenderTargetHandle depthNormalsTexture;// 材质Material depthNormalsMaterial;// 给pass传递变量并加入渲染管线中public override void Create(){// 通过Built-it管线中的Shader创建材质最重要的一步depthNormalsMaterial CoreUtils.CreateEngineMaterial(Hidden/Internal-DepthNormalsTexture);// 获取Pass渲染队列渲染对象材质depthNormalsPass new DepthNormalsPass(RenderQueueRange.opaque, -1, depthNormalsMaterial);// 设置渲染时机 预渲染通道后depthNormalsPass.renderPassEvent RenderPassEvent.AfterRenderingPrePasses;// 设置纹理名depthNormalsTexture.Init(_CameraDepthNormalsTexture);}//这里你可以在渲染器中注入一个或多个渲染通道。//这个方法在设置渲染器时被调用。public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData){// 对Pass进行参数设置当前渲染相机信息深度法线纹理depthNormalsPass.Setup(renderingData.cameraData.cameraTargetDescriptor, depthNormalsTexture);// 写入渲染管线队列renderer.EnqueuePass(depthNormalsPass);}}public class DepthNormalsPass : ScriptableRenderPass {int kDepthBufferBits 32; // 缓冲区大小private RenderTargetHandle Destination { get; set; } // 深度法线纹理private Material DepthNormalsMaterial null; // 材质private FilteringSettings m_FilteringSettings; // 筛选设置static readonly string m_ProfilerTag Depth Normals Pre Pass; // 定义渲染TagShaderTagId m_ShaderTagId new ShaderTagId(MyDepthOnly); // 绘制标签Shader需要声明这个标签的tag/// summary/// 构造函数Pass/// /summary/// param namerenderQueueRange/param/// param namelayerMask/param/// param namematerial/parampublic DepthNormalsPass(RenderQueueRange renderQueueRange, LayerMask layerMask, Material material){m_FilteringSettings new FilteringSettings(renderQueueRange, layerMask);DepthNormalsMaterial material;}/// summary/// 参数设置/// /summary/// param namebaseDescriptor/param/// param nameDestination/parampublic void Setup(RenderTextureDescriptor baseDescriptor, RenderTargetHandle Destination){// 设置纹理this.Destination Destination;}/// summary/// 配置渲染目标可创建临时纹理/// /summary/// param namecmd/param/// param namecameraTextureDescriptor/parampublic override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor){// 设置渲染目标信息RenderTextureDescriptor descriptor cameraTextureDescriptor;descriptor.depthBufferBits kDepthBufferBits;descriptor.colorFormat RenderTextureFormat.ARGB32;// 创建一个临时的RT储存深度法线纹理、目标信息和滤波模式cmd.GetTemporaryRT(Destination.id, descriptor, FilterMode.Point);// 配置ConfigureTarget(Destination.Identifier());// 清楚未渲染时配置为黑色ConfigureClear(ClearFlag.All, Color.black);}// /// summary/// 后处理逻辑和渲染核心函数相当于build-in 的OnRenderImage()/// 实现渲染逻辑/// /summary/// param namecontext/param/// param namerenderingData/parampublic override void Execute(ScriptableRenderContext context, ref RenderingData renderingData){var cmd CommandBufferPool.Get(m_ProfilerTag); // 设置渲染标签using (new ProfilingSample(cmd, m_ProfilerTag)){// 执行命令缓存context.ExecuteCommandBuffer(cmd);// 清楚数据缓存cmd.Clear();// 相机的排序标志var sortFlags renderingData.cameraData.defaultOpaqueSortFlags;// 创建绘制设置var drawSettings CreateDrawingSettings(m_ShaderTagId, ref renderingData, sortFlags);// 设置对象数据drawSettings.perObjectData PerObjectData.None;// 设置覆盖材质drawSettings.overrideMaterial DepthNormalsMaterial;// 绘制渲染器context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings);// 设置全局纹理cmd.SetGlobalTexture(_CameraDepthNormalsTexture, Destination.id);}// 执行命令缓冲区context.ExecuteCommandBuffer(cmd);CommandBufferPool.Release(cmd);}// 清除此呈现传递执行期间创建的任何已分配资源。public override void FrameCleanup(CommandBuffer cmd){if (Destination ! RenderTargetHandle.CameraTarget){cmd.ReleaseTemporaryRT(Destination.id);Destination RenderTargetHandle.CameraTarget;}} } 2 在Shader中使用 上述RenderFeature我们获得了一个全局的_CameraDepthNormalsTexture变量我们就可以像Build-in下一样访问啦 但是一些之前固定管线下的一些采样、解码Texture函数在URP下不能直接用要自己定义主要需要一个解码函数。固定管线下函数 其中 直接搬运完全没问题~ 我给他合起来了合成了一个函数返回的时候用就行 还要注意采样要是屏幕空间的UV不然乱七八糟。 然后shader后面必须也要加上一个自定义的LightTag 突然发现这个复杂程度跟SSAO那个差不多。。。 看看效果我们单独输出深度和法线 一切正常终于可以进行下一步了。 参考 URP深度法线纹理 - 简书 (jianshu.com)
http://www.hkea.cn/news/14380912/

相关文章:

  • 网站建设方案书个人怎样可以做网站
  • 龙口建设公司网站云和数据培训机构怎么样
  • 网页在线生成网站成都市住房和城乡建设厅官网
  • 梅州免费建站开源门户系统
  • php网站建设用什么织梦栏目页不显示网站描述
  • 电子工程网官方网站辽宁工程建设信息网站
  • 站长工具怎么关掉太原规划网站
  • 丽水公司做网站郑州企业网站优化
  • 兰溪市网站建设公司白酒网站模板
  • 网站搭建教学网广州品牌网站建设
  • 网站备案在哪里杭州建设工程招标网新址
  • 网站空间不续费泰兴中信建设有限责任公司
  • 县级门户网站用什么源码好运维有限公司
  • 深圳市网站建设外包公司哪个网站兼职做图好
  • 容桂低价网站建设医疗保健网站前置审批文件
  • 最贵网站建设多少钱设计图片素材
  • 站长工具在线免费正确认识部门网站建设
  • 网站开发用什么电脑网站建设这个职业是什么意思
  • 手机网站开发解决方案新网站如何做网站优化
  • 房产最新消息今天新闻大连网站优化多少钱
  • 久商推网站建设怎样免费做一个网站
  • 网站站外优化推广方式以企业介绍为主做外贸网站好吗
  • 栖霞建设官方网站网站建设需求发布
  • 淄博网站建设好的公司乐陵seo外包
  • 手机上能不能制作网站开发互联网行业现状分析
  • 大连网站建设兼职电子商务网站建设的总体目标
  • 在线免费视频网站推广网络安全服务机构
  • 永久免费自助建站系统网络营销推广的主要特点
  • 企业的网站建设与设计论文wordpress 更新用户名
  • 地方生活门户信息网站源码网站开发 知乎