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

桂林网站建设服务网站定制牛七科技

桂林网站建设服务,网站定制牛七科技,应用公园下载,深圳做网站开发公司作者说 本系列教程适用于有编程基础和图形学基础知识的读者.如果对您有所帮助,请点个免费的赞和关注,您的支持就是我更新最大的动力!如果你有任何想看的内容欢迎评论区留言!本系列教程Github : https://github.com/Sky0Master/Un…

作者说

  1. 本系列教程适用于有编程基础和图形学基础知识的读者.
  2. 如果对您有所帮助,请点个免费的赞和关注,您的支持就是我更新最大的动力!
  3. 如果你有任何想看的内容欢迎评论区留言!
  4. 本系列教程Github : https://github.com/Sky0Master/Unity-URP-Shader-Tutorial

效果预览

Before
在这里插入图片描述


准备工作

在Unity Assets文件夹里右键新建一个Unlit Shader
在这里插入图片描述

命名之后,再右键这个shader,create -> material
在这里插入图片描述
接着随便把这个材质应用到一个Renderer上就行,我这里应用到了一个Sprite Renderer上


动手写代码!

现在我们来实现一个对纹理施加漩涡效果的shader,其实这个效果的原理就是在fragment着色器中对uv坐标进行绕中心旋转的变换,使用变换后的uv坐标去采样。(如果对【采样】和【uv坐标】的概念比较熟悉的话应该能理解
每一行代码我都进行了详细的注释,如果对其中有任何不明白的地方请在评论区留言,我会据此对注释进行补充,感谢!

Shader "Unlit/SwirlEffect"
{Properties {_MainTex ("Base Texture", 2D) = "white" {}    // 基础纹理输入,用于最终颜色输出_Angle ("Rotation Angle", Range(0,10)) = 2    // 控制旋转强度的参数, Range(0,10)限制调节范围避免过度扭曲_Radius ("Effect Radius", Range(0,1)) = 0.5   // 效果作用半径,控制漩涡中心到边缘的衰减范围}SubShader{Tags { "RenderType"="Transparent" //着色器替换标签,这个部分建议参考https://docs.unity3d.com/cn/current/Manual/SL-ShaderReplacement.html"Queue"="Transparent"	//设置渲染队列为透明层级"RenderPipeline"="UniversalPipeline"  //声明使用的渲染管线}Pass{Blend SrcAlpha OneMinusSrcAlpha // 使用标准透明度混合 读者可以尝试注释掉这行会发生什么HLSLPROGRAM //使用URP标准的HLSL语法#pragma vertex vert // 声明顶点着色器#pragma fragment frag  // 声明片段着色器//#pragma multi_compile_fog //开启雾效支持//URP专用#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"struct Attributes { //输入数据结构 (URP命名规范)float4 positionOS : POSITION; //物体空间的顶点坐标float2 uv : TEXCOORD0;  //初始纹理坐标};struct Varyings {   //输出数据结构 (URP命名规范)float4 positionCS : SV_POSITION; //裁剪空间坐标(SV_前缀)float2 uv : TEXCOORD0;  //传递纹理坐标};TEXTURE2D(_MainTex);    //在HLSL中,TEXTURE2D是一个宏,用于声明纹理资源, 这行代码告诉Shader存在一个名为_MainTex的2D纹理,供后续采样使用SAMPLER(sampler_MainTex); //SAMPLER宏声明采样器状态,与纹理绑定。URP中,纹理和采样器通常是分开的,这样可以更灵活地重用采样器设置float _Angle;   //自定义的属性,在Properties块中声明后,需要在HLSL代码中再次声明,以便在着色器中使用. 这样可以在Properties和HLSL中同步变量,确保参数传递正确float _Radius;Varyings vert(Attributes IN) {Varyings OUT;OUT.positionCS = TransformObjectToHClip(IN.positionOS.xyz); // URP坐标变换OUT.uv = IN.uv;   // 直接传递UVreturn OUT;}half4 frag(Varyings IN) : SV_Target {// 计算中心偏移float2 centerOffset = IN.uv - float2(0.5,0.5);float distance = length(centerOffset);// 动态旋转计算float rotation = _Angle * saturate(1 - distance/_Radius); //基于自定义半径的衰减计算float sinRot, cosRot;   sincos(rotation, sinRot, cosRot); //性能优化,同时计算旋转角度的sin和cos而不是分开计算// UV变换矩阵float2x2 rotMatrix = float2x2(cosRot, -sinRot, sinRot, cosRot); //旋转矩阵构造float2 distortedUV = mul(rotMatrix, centerOffset) + 0.5;    //应用矩阵变换// 采样纹理half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, distortedUV); //使用变换后的uv坐标去采样纹理// 边缘淡化float fade = smoothstep(_Radius, _Radius * 0.8, distance); //边缘过渡优化return half4(color.rgb, color.a * fade);    //透明度混合}ENDHLSL}}
}
http://www.dtcms.com/a/418638.html

相关文章:

  • WebRTC 发送端 SSRC 生成流程总结
  • 客户标签自动管理:标签自动化运营,画像持久保鲜
  • 云原生架构与GitOps技术栈介绍
  • 智能外呼产品架构组成
  • 【深度学习新浪潮】如何提升agent的专业性?
  • AI排名查询工具如何助力GEO优化?生成引擎优化中的关键词竞争力分析
  • 福州有网站建设的公司网站都需要什么类别
  • Nginx 反向代理与负载均衡核心内容总结
  • JavaWeb 课堂笔记 —— 20 SpringBootWeb案例 配置文件
  • 算法练习题
  • 9.数组介绍和静态初始化
  • 无重复字符的最长子串_优选算法(C++)滑动窗口
  • 提升雾化片性能,关键是精密测量盲孔尺寸
  • Flannel工作原理-Flannel故障案例-镜像拉取策略-secret对接harbor及ServiceAccount实战
  • GitLab高危漏洞可致实例崩溃(CVE-2025-10858 和 CVE-2025-8014)
  • 中铁建设投资集团有限公司网站自己公司怎样做免费的网站
  • 安卓13_ROM修改定制化-----修改rom 实现支持原生安装器 破除厂商定制限制
  • android 字符串工具类(兼容 Android 16+ / API 16,无报错版)
  • 9.28 深度学习10
  • 数据安全合规行业实战解析:金融、医疗与智能网联汽车的破局之道
  • 汽车全景天窗生产线解决方案 - SNK施努卡
  • 汽车地带AutoZone EDI需求分析及对接指南
  • 如何给自己网站做反链家在深圳罗湖
  • 云手机在电商行业中的优势都有哪些
  • 微信小程序入门学习教程,从入门到精通,微信小程序页面制作(2)
  • 漳州本地网站宝安网站开发
  • Pytest框架速成
  • C++设计模式之结构型模式:代理模式(Proxy)
  • 八股已死、场景当立(分布式ID篇)
  • C++指针笔试题1