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

【Unity】URP中的UGUIShader实现

【Unity】URP 中的 UGUIShader 实现

参考官方 Shader 代码实现:

https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/DefaultResourcesExtra/UI/UI-Default.shader

Shader "UI/Template"
{Properties{// PerRendererData 表明纹理由每个渲染器提供,似乎是起某种优化作用。[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}_Color ("Tint", Color) = (1,1,1,1)_StencilComp ("Stencil Comparison", Float) = 8_Stencil ("Stencil ID", Float) = 0_StencilOp ("Stencil Operation", Float) = 0_StencilWriteMask ("Stencil Write Mask", Float) = 255_StencilReadMask ("Stencil Read Mask", Float) = 255_ColorMask ("Color Mask", Float) = 15// 启用Clip功能,Clip掉的像素将不会参与模板测试等。[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0}SubShader{LOD 100 //内置无光照系列Shader的LOD一般为100Tags{"Queue"="Transparent" // 渲染顺序为透明队列"PreviewType"="Plane" // 材质预览效果为平面"RenderType"="Transparent" // 渲染类型为透明"CanUseSpriteAtlas"="True" // 表明兼容 LegacySpritePacker 图集功能。"IgnoreProjector"="True" // 表明不受内置管线中投影器功能的影响。}//UI利用模板功能实现遮罩效果Stencil{Ref [_Stencil]Comp [_StencilComp]Pass [_StencilOp]ReadMask [_StencilReadMask]WriteMask [_StencilWriteMask]}//渲染器将自动排序,再加上UI都是半透明物体,所以无需深度功能ZWrite OffZTest [unity_GUIZTestMode] // unity_GUIZTestMode 根据当前画布的渲染模式自动设置Blend SrcAlpha OneMinusSrcAlphaColorMask [_ColorMask]Pass{HLSLPROGRAM#pragma vertex VertexPass#pragma fragment PixelPass#pragma shader_feature _ UNITY_UI_ALPHACLIP#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"cbuffer UnityPerMaterial{sampler2D _MainTex;float4 _MainTex_ST;float4 _Color;}struct Vertex{float3 positionOS:POSITION;float4 color : COLOR;float2 uv:TEXCOORD0;};struct Pixel{float4 positionCS:SV_POSITION;float4 color : COLOR;float2 uv:TEXCOORD0;};Pixel VertexPass(const Vertex vertex){Pixel pixel;pixel.positionCS = TransformObjectToHClip(vertex.positionOS);pixel.color = vertex.color * _Color;pixel.uv = TRANSFORM_TEX(vertex.uv, _MainTex);return pixel;}float4 PixelPass(const Pixel pixel):SV_TARGET{float4 color = tex2D(_MainTex, pixel.uv) * pixel.color;#ifdef UNITY_UI_ALPHACLIPclip (pixel.color.a - 0.001);#endifreturn color;}ENDHLSL}}
}
http://www.rkmt.cn/news/143445.html

相关文章:

  • 【VSCode】插件开发笔记
  • Apache Ignite 广告实时竞拍系统架构全攻略
  • 实用指南:云计算与边缘计算:协同合作助力智慧城市建设
  • 全阶段字帖电子版合集:幼儿/学生/成人可打印练字字帖
  • Advantageous 英文单词学习
  • 1.2 python及pycharm的安装
  • 【生活杂谈】突破自己可解锁人生隐藏内容
  • C++ 偏特化详解
  • Android Compose 界面架构 : 基于单向数据流 - 指南
  • windows比较好用的翻译软件
  • VL-JEPA: Joint Embedding Predictive Architecture for Vision-language
  • GLOW:基于图-语言协同推理的Agentic工作流性能预测
  • 破局成长:陈昌昊的软工实践之旅
  • 秒级筛查+94.7%精准!华为Atlas 200 DK边缘设备解锁糖尿病视网膜病变检测新范式
  • 基于SpringBoot的老人健康信息管理系统计算机毕业设计项目源码文档
  • CAXA 3D 实体设计 2025:国产三维 CAD 的全流程研发升级下载安装
  • 经典算法题型之复数乘法(一)
  • 基于langchain1.X构建企业级智能体开发平台之环境和项目搭建
  • 导游证教程资源合集
  • 【技术美术】D3D中GPU渲染管线流程详解
  • AI智能预警系统:矿山、工厂与油气站安全管理架构浅析
  • 【排序算法全家桶 Level 2】选择排序:从“双向奔赴”的陷阱到堆排序的“降维打击”
  • HarmonyOS 5开发从入门到精通(十六):天气应用实战(下)
  • 8088单板机 8253定时器实验
  • 计算机Java毕设实战-基于springboot的传媒公司传媒直播管理系统设计与实现基于SpringBoot+Vue的传媒公司主播招募管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【软件开发】正则表达式
  • 记录我的niri安装
  • 计算机Java毕设实战-基于springboot+vue的社区资源共享系统设计与实现邻里社交与资源共享【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • HarmonyOS 5开发从入门到精通(十五):天气应用实战(上)
  • 3.框架设计