之前在学习HLSL常用函数时就有涉及到范围相关的函数,但是最近做的东西发现step,lerp和smoothstep这三个函数总是一直在用,总是会在用的时候突然忘记他们分别是干啥的,这里就记录一下方便查看吧,形式大部分参考Unity Shader 极简实践3——step,lerp 和 smoothstep 应用

1 step

// x <a,返回0
// x>=0,返回1
step(a,x);

通常用来代替if else。

shader中的表现

要么是0要么是1,非此即彼的感觉,所以如果写进shader中与颜色挂钩,表现出的颜色变化效果很“硬”,颜色变化突兀,没有过渡感。

            fixed4 frag (v2f i) : SV_Target{// stepfixed4 col = step(_Amount, length(i.uv - 0.5)) * _Color;return col;}ENDCG

2 lerp

// w是一个百分比,表示从a到b之间按照w来取值
// w = 0,返回a
// w = 1,返回b
lerp(a, b, w);

例如lerp(0, 100, 0.2),返回20

shader中的表现

                // lerpfixed4 col = lerp(0, 1, length(i.uv - 0.5)) * _Color;return col;

与step相比,lerp是有个过渡的。代码中的i.uv - 0.5表示的是着色点与中心的距离,也就是从中心向外出发,距离越远这个百分比越大,意味着lerp的结果越接近1,从而实现了颜色从中心向外由黑色--> _Color(白色)的效果。

3 smoothstep

这是稍微复杂一点的范围函数,用来生成0到1的平滑过渡值,如下:如果x在[a,b]范围内,则返回介于0和1之间的平滑插值,使用smoothstep在两个值之间创建平滑过渡。

smoothstep(a, b, x);

这是之前我在HLSL函数那篇文章展示的一个函数图,最下面两条就是smoothstep()

如果两个smoothstep作减法还会有一些波形图效果。

shader中的表现

            fixed4 singleSmoothStep(float _Start, float _End, v2f i) {return smoothstep(_Start, _End, length(i.uv - 0.5));}fixed4 doubleSmoothStep(float _Start, float _End, float _Inner, float _Outer, v2f i) {float res = smoothstep(_Start, _Inner, length(i.uv - 0.5));float res2 = smoothstep(_Outer, _End, length(i.uv - 0.5));return res - res2;}fixed4 frag (v2f i) : SV_Target{// step//fixed4 col = step(_Amount, length(i.uv - 0.5)) * _Color;// lerp//fixed4 col = lerp(0, 1, length(i.uv - 0.5)) * _Color;// smoothstep//fixed4 col = singleSmoothStep(_End, _Start, i) * _Color;fixed4 col = doubleSmoothStep(_Start, _End, _Inner, _Outer, i) * _Color;return col;}

波形图和shader中的着色效果一起来看:

singleSmoothStep(0.1,0.35, i)

singleSmoothStep(0.35,0.1, i)

doubleSmoothStep(0.1, 0.5, 0.2, 0.3, i)

【Unity云消散】巩固step,lerp和smoothstep相关推荐

  1. 【Unity云消散】理论基础:实现边缘光

    写在前面 既然想要实现云的消散效果,那么边缘光如何计算也是一个重点. 在Unity Shader入门精要的14章,介绍轮廓线渲染就介绍了--轮廓边检测,而边缘光也是需要先检测出轮廓边再进行的. Uni ...

  2. 【Unity云消散】理论基础:实现SDF的8SSEDT算法

    距离元旦假期已经过去5天了(从31号算起!),接着开始学习! 游戏中的很多渲染效果都离不开SDF,那么SDF究竟是什么呢?到底是个怎么样的技术?为什么能解决那么多问题? 1 SDF SDF,即sign ...

  3. Unity 云构建 云打包项目 Unity Cloud Build

    没事逛unity官网,发现了个有趣的东西,Unity云构建. 顾名思义是云打包,将项目从本地上传到云端,或者提供项目仓库信息,就可以进行云打包了.还可以通过微信小程序查看打包进度,还可以分享下载链接, ...

  4. Unity云渲染技术

    目前,Unity云渲染虽然没有正式发布,但是功能还是满足大部分需求.官方地址:GitHub - Unity-Technologies/UnityRenderStreaming: Streaming s ...

  5. 《UnityAPI.Vector2二维向量》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Vector2+Normalized+Lerp+Dot+立钻哥哥++OK++)

    <UnityAPI.Vector2二维向量> 版本 作者 参与者 完成日期 备注 UnityAPI_Vector2_V01_1.0 严立钻 2020.07.09 #<UnityAPI ...

  6. Unity云渲染开源框架UnityRenderStreaming使用说明

    目录 一.前言 二.实现 2.2.先安装依赖组件WebRTC和InputSystem 2.3.安装Unity Render Stream包并且导入案例工程 2.4.安装WebServer并运行 2.5 ...

  7. Unity云渲染搭建二(Unity2019.4)开发版本的webapp服务

    Unity Render Streaming是Unity开源的一个高质量.高复杂的3D模型在云端渲染,手机端侧.浏览器显示的解决方案.此解决方案的流技术利用了WebRTC,开发人员甚至可以使用WebR ...

  8. Unity云渲染搭建一 Webrtc环境搭建(Unity2019.4)

    目录 一.前言 二.实现 2.2.先安装依赖组件WebRTC和InputSystem 2.3.安装Unity Render Stream包并且导入案例工程 2.4.安装WebServer并运行 2.5 ...

  9. Unity(九):Lerp线性插值、SmoothDamp

    Mathf.Lerp /*** Mathf.Lerp 函数接受 3 个 float (from, to, 插值)* 参数:* 一个 float 参数表示要进行插值的起始值* 另一个 float 参数表 ...

最新文章

  1. 01、WPF 中 URI 解析
  2. 千万级并发HAproxy均衡负载系统介绍
  3. 学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录
  4. 一次kvm嵌套虚拟化踩坑经历
  5. Linux系统如何安装VMware(虚拟机)
  6. Android service 和 client的进程通信和消息回调--AIDL
  7. Oracle脚本(二)
  8. 把数字倒序的几种方法(二更,增加了负数反序的情况)(c++)
  9. jquery对象与js对象的相互转换
  10. java 封装返回json数据
  11. 局域网屏幕共享_我把手机、平板、笔记本,变成了电脑的第二屏幕。
  12. 请简述GC(垃圾回收)产生的原因,并描述如何避免?
  13. Inside Real-Time Linux
  14. 网络安全之密码安全基础
  15. 【联盛德W806上手笔记】九、DMA
  16. trian和val结果相差很大。
  17. 【C++】(九)作用域、生命期、头文件和工程文件
  18. Python 之CV2详解
  19. windows下安装ppocr服务 paddlehub方式
  20. paramiko的安装

热门文章

  1. c语言a =1,c语言 a=1与a1有什么区别?
  2. HTML5重构互联网:浏览器将部分替代操作系统
  3. 新世纪计算机专业英语,新世纪研究生公共英语教材阅读A课文翻译完整版.pdf
  4. 在饥荒服务器中添加并更新mod
  5. 开源NoSQL数据库介绍
  6. PaddlePaddle 深度学习实战(第三部分)
  7. 该页面仅以HTML格式保存_轻松实现页面自动刷新功能,提高前端开发效率
  8. 资源之基础知识(一)
  9. python数据分析-分组把DataFrame列转行
  10. 搭建:直播软件环境搭建(FFmpeg+nginx+rtmp+vlc)