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

Unity 流光shader的思路

先看一下直线方程:

1.x+0.5y=0:

2.x+0.5y=20:

 3.由上面的函数图像可以看出 z=x+ky (k是常量),表示所有斜率为k的直线集合,z是直线在x轴的截距,每个z的取值都确定一条唯一的斜率为k的直线。

4.那么给z一个取值范围就可以画出一条斜的条纹,下面我们根据这个思路,用shader在图片上画一条静态的条纹光线:

float _Speed; 
float _Width; 
float _Angle; 	//光的倾斜角度
float _Intensity;  //光的强度
float4 _LightColor; //光的颜色fixed4 frag (v2f i) : SV_Target
{fixed4 col = tex2D(_MainTex, i.uv);float z = i.uv.x + i.uv.y * _Angle;if(z>0.6&& z<0.8){float3 target = _LightColor.rgb + col.rgb;col.rgb = lerp(col.rgb, target, _Intensity);}return col;
}

 效果如下:

 让光线动起来就简单了只需要让z随着时间不断增加或减少,完整代码如下:

Shader "Unlit/liuguang"
{Properties{_MainTex ("Texture", 2D) = "white" {}// 速度 默认左->右_Speed ("Speed", range(-2, 2)) = 1.04// 宽度_Width ("Width", range(1, 10)) = 5.83// 角度_Angle ("Angle", range(-1, 1)) = 0.33// 亮度_Intensity ("Intensity", range(0, 1)) = 0.51_LightColor ("LightColor", Color) = (1,1,1,1)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}float _Speed; float _Width; float _Angle; 	//光的倾斜角度float _Intensity;  //光的强度float4 _LightColor; //光的颜色fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);float z = i.uv.x + i.uv.y * _Angle;//z + _Time.w * _Speed 可以修改光流动方向,也可以通过_Speed的正负改变float flowX = sin(z - _Time.w * _Speed);if(flowX>0.1&& flowX<0.1+_Width*0.1){float3 target = _LightColor.rgb + col.rgb;col.rgb = lerp(col.rgb, target, _Intensity);}return col;}ENDCG}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开源模型应用落地-LangChain高阶-记忆组件-RedisChatMessageHistory正确使用(八)
  • java注解(实现原理及自定义注解)
  • Flask获取请求信息
  • Stable Diffusion绘画 | ControlNet应用-NormalMap(法线贴图)
  • WPF APP生命周期和全局异常捕获
  • 使用Qdrant+FastText实现向量存储和检索
  • YOLO基础-目标检测的性能指标详解与计算方法
  • vulnhub系列:devguru
  • [SWPUCTF 2021 新生赛]PseudoProtocols(构造伪协议)
  • C# 计算两两坐标之间的距离(SIMD加速)
  • 常用的数据结构有哪些?
  • Docker 部署RocketMQ
  • 若依框架将Mybatis改成MybatisPlus
  • RabbitMQ面试题汇总
  • 【数学建模】介绍论文书写格式
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • Python中eval与exec的使用及区别
  • spring学习第二天
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 闭包--闭包之tab栏切换(四)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用common-codec进行md5加密
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • Prometheus VS InfluxDB
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​queue --- 一个同步的队列类​
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ![CDATA[ ]] 是什么东东
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (3) cmake编译多个cpp文件
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (c语言)strcpy函数用法
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (LeetCode) T14. Longest Common Prefix
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (pycharm)安装python库函数Matplotlib步骤
  • (二)测试工具
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (译)计算距离、方位和更多经纬度之间的点
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET 8 跨平台高性能边缘采集网关
  • .NET WPF 抖动动画
  • .NET 读取 JSON格式的数据
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET企业级应用架构设计系列之应用服务器
  • @GetMapping和@RequestMapping的区别