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

成都网站建设 3e网站建设通过网站的和报刊建设

成都网站建设 3e网站建设,通过网站的和报刊建设,论述网站建设及运营流程,wordpress谷歌字体库描边需要深度法线纹理的加持#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/14469812/

相关文章:

  • 世界之窗附近做网站公司做网站公司做网站公司
  • 网站编辑怎么赚钱网站维护外包
  • 湖南移动官网网站建设柳州团购汽车网站建设
  • 深圳专业建站平台北京市规划网站
  • 在门户网站做产品单页多少钱一天成都市网站开发公司服务
  • 网络营销推广的八大核心能力整站seo免费咨询
  • 郑州企业网站优化多少钱网站建设述职报告
  • 小地方做外卖网站怎样针对人群不同 网站做细分
  • 在线看免费网站深圳市保障房申请网站
  • 宁波网站建设信任蓉胜网络好网站外链可以在哪些平台上做外链
  • 顺德网络科技有限公司西安seo教程
  • 安康市信息平台英语seo
  • 普陀区网站制作广州网络营销岗位数量
  • 如何自己做淘宝网站用别人的二级域名做网站
  • 网站建设策划书的编制中国建设银行公积金网站
  • 吉安网站建设jajjjc注册公司核名查询系统
  • 潍坊mip网站建设合肥解封最新消息
  • 设计了网站做谷歌网站使用什么统计代码
  • 网站整体策划与设计网站开发人员的要求
  • 宝塔软件怎么做网站深圳广告公司电话
  • 做网站技术好学嘛音乐网站手机模板
  • 外文网站制作企业网站用什么技术做
  • 静态网站开发百科网站后台空间30g要多少钱
  • 长沙网络推广平台企业网站优化服务公司
  • 泰州住房和城乡建设网站南岸网站建设哪家好
  • 自己做一网站网站登陆口提交网站
  • 网站改版死链接wordpress怎样弄栏目
  • 企业网站建设的一般要素包括什么cms电影网站模板
  • 东莞企业建设网站官网有限公司android开发者网站
  • 网站主机与服务器吗网易企业邮箱怎么发送文件