Shader Coding 之 特效越跑越慢

这篇具有很好参考价值的文章主要介绍了Shader Coding 之 特效越跑越慢。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Shader  特效越跑越慢问题的排查

问题

某屏幕特效 shader 逻辑是呈现自上而下或自左而右的扫描线效果,其核心
逻辑大致如下

float t = fract(time/3.6);
t = (t-0.5)*4.0-1.0;
t = abs(x-t);
t = 1.0-smoothstep(0.005,0.008,t) + (1.0-smoothstep(0.002,0.04,t))*0.4;

out_color.rgb = vec3(0.8, 0.6, 0.8);
out_color.a = t;

问题现象为:在运行一段时间后,出现卡顿表现,原本连续运动的扫描线
呈现出一种间断性步进的效果,而非平滑地移动。

分析与解决

面对此问题,首先需要确认是否是渲染帧率下降,经简单的代码内 Fps 计
算得整体 Fps 保持在 60 无误。使用相关的帧率监控 profiler 也能得到
一致的结果。为确认帧率,使用 System trace 工具抓帧查看,确认每帧
绘制时间并无 delay, 整体渲染并无问题。

排除帧率因素,那么渲染卡顿原因可能来自逻辑错误,而非性能不足,即
计算出现误差而呈现出卡顿或间断性移动的现象。由于在 shader 内对平
移的计算主要使用 time 时间这个数值来计算,而这个数值在 CPU 端一直
累加,数值持续变大,有理由怀疑该浮点数值足够大时会产生误差。

根据对代码分析和试验,最终找到误差的来源是下面这一行代码

float t = fract(time/3.6);

当 time 较大,除以 3.6 再取小数,会带来较大的误差。这里误差的来源
必须是除法和取小数共存,若直接取小数 fract(time) 则其并无较大误差。

针对这个问题,目前的解决方法是 time 的更新以 90 秒为一个循环,在 0-90
之间循环,避免出现较大的浮点数。文章来源地址https://www.toymoban.com/news/detail-623599.html

到了这里,关于Shader Coding 之 特效越跑越慢的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity极坐标Shader特效,以及使用Instanced Property实现相同材质不同参数

    先看看效果 Unity极坐标Shader特效 有时候我们需要在场景中摆放一些热点,用户点击之后出现互动,当然实现这个功能的方法有很多,作为一名程序员,当然是要用最简单的实现。用shader程序化实现它。 啥是极坐标 极坐标,又称极座标系。它是一种表示平面直角坐标系中点的

    2024年02月09日
    浏览(42)
  • 【unity插件】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件

    一般的shader无法直接使用在UI上,需要在shader中定义特定的面板参数,今天就来推荐github上大佬做的一套开源的一系列UGUI,Shader实现的特效——UIEffect 为 Unity UI 提供视觉效果组件。 https://github.com/Ankh4396/UIEffect 让我们用效果来装饰你的UI!您可以根据需要从脚本和检查器中控

    2024年02月04日
    浏览(46)
  • 为什么电脑越用越慢!

    电脑随着时间推移逐渐变慢是一个常见的现象,其背后涉及多种原因。以下是导致电脑运行速度变慢的几个主要因素: 系统资源消耗增加 软件更新与新增应用: 随着软件版本的更新和新应用程序的安装,它们往往对硬件资源的需求更高,尤其是对处理器、内存和硬盘的要求

    2024年04月14日
    浏览(38)
  • 【2023最新版】腾讯云CODING平台使用教程(Pycharm/命令:本地项目推送到CODING)

    目录 一、CODING简介 网址 二、CODING使用 1. 创建项目 2. 创建代码仓库 三、PyCharm:本地项目推送到CODING 1. 管理远程 2. 提交 3. 推送 4. 结果 四、使用命令推送 1. 打开终端 2. 初始化 Git 仓库 3. 添加远程仓库 4. 添加文件到暂存区 5. 提交更改 6. 推送         腾讯云 CODING 平台是

    2024年02月09日
    浏览(82)
  • 每日coding

    给你一个字符串 word ,你可以向其中任何位置插入 \\\"a\\\"、\\\"b\\\" 或 \\\"c\\\" 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 \\\"abc\\\" 串联多次得到,则认为该字符串 有效 。 示例 1: 示例 2: 示例 3: 提示: 1 = word.length = 50 word 仅由字母 \\\"a\\\"、\\\"b\\\" 和 \\\"c\\\" 组成。 这道题目

    2024年01月19日
    浏览(62)
  • 如何从Coding拉取代码

    加入团队项目获取权限(之加入团队是看不到代码的); 下载git; windows+r,打开cmd,选择文件夹位置,输入 ssh-keygen -t rsa -C + \\\"自己邮箱号\\\" ,一直点击“enter”键即可 找到 id_rsa.pub 文件,拷贝所有内容(上图第三行会显示文件位置); 打开Coding,找到个人账户设置-SSH公钥-粘

    2024年02月09日
    浏览(37)
  • coding 自定义节点服务器

    在root账号下  选择手动接入 安装客户前,请检查环境依赖。如何安装环境依赖? · Python 3.6, 3.7, 3.8, 3.9 · Git = 2.8 · Java 8 或 11 以及 Jenkins 1. 创建工作目录并进入工作目录 创建 codingci/tools 进入 codingci/tools  安装java11 (Python和git 系统自带 查看版本是否支持)  2.在上述工作

    2024年02月09日
    浏览(55)
  • 游程编码(Run Length Coding)

    游程编码(Run Length Coding,简称RLC)又称游程编码、行程长度编码、变动长度编码 等,是一种统计编码。主要技术是检测重复的比特或字符序列,并用它们的出现次数取而代之。比较适合于二值图像的编码,但是不适用于连续色调阁像的压缩,例如日常生活中的照 片。为了达

    2024年02月04日
    浏览(117)
  • CODING DevOps产品认证笔记

    第一章敏捷软件开发背景 背景:乌卡时代 易变性:当今世界的变化越来越多越来越快,越来越不可预测。 不确定性:历史上的任何一个时代所带来的经验已经无法为当今世界的所有变化提供参照。 复杂性:事物间的交融越来越密切各种问题的改生原因,其带来的影响和反应会受

    2024年02月03日
    浏览(39)
  • 【论文阅读笔记】Contrastive Multiview Coding

     这篇文章主要探讨人类通过多种感官通道来观察世界,比如左眼观察到的长波长光通道,或右耳听到的高频振动通道。每个观察角度都带有噪音且是不完整的,但一些重要的因素,如物理、几何和语义,往往在所有观点之间共享(例如,“狗”可以被看到、听到和感受到)

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包