Unity中Shader的_Time精度问题

文章目录

  • 前言
  • 一、U方向上优化
  • 二、V方向上优化
    • 在这里插入图片描述
  • 三、最终代码
    • 1、效果
    • 2、Shader


前言

在Unity的Shader中,使用了_Time来达到UV的流动效果,普遍会出现一个问题。我们的UV值会随着时间一直增加(uv值增加了,但是因为超过1就会重复,不影响效果),在一些较老的移动端上,存储不下那么大的值,就会导致精度丢失。

  • 精度丢失前
    请添加图片描述
  • 精度丢失后(有特别明显的像素点质感)
    请添加图片描述
    我们对上一篇文章中,使用到的序列帧动画Shader,进行_Time相加后的精度优化。
  • Unity中Shader序列帧动画(U、V方向的走格)

一、U方向上优化

  • 对之前的公式取小数部分
  • u ( t ) = g ( C o l u m n ⋅ t ) C o l u m n = ⌊ C o l u m n ⋅ t ⌋ C o l u m n u(t) = \frac{g(Column·t)}{Column} = \frac{\lfloor Column·t \rfloor}{Column} u(t)=Columng(Columnt)=ColumnColumnt
  • u 2 ( t ) = f r a c ( u ( t ) ) = f r a c ( ⌊ C o l u m n ⋅ t ⌋ C o l u m n ) u_2(t) = frac(u(t)) =frac(\frac{\lfloor Column·t \rfloor}{Column}) u2(t)=frac(u(t))=frac(ColumnColumnt)
    在这里插入图片描述

o.uv.x += frac(floor(_Time.y *_Sequence.y * _Sequence.z)/_Sequence.y);


二、V方向上优化

  • 对之前的公式取小数部分
  • v ( t ) = u ( t C o l u m n ) = ⌊ C o l u m n ⋅ t C o l u m n ⌋ C o l u m n v(t) = u(\frac{t}{Column}) = \frac{\lfloor \frac{Column·t}{Column} \rfloor}{Column} v(t)=u(Columnt)=ColumnColumnColumnt
  • v 2 ( t ) = f r a c ( v ( t ) ) = f r a c ( ⌊ C o l u m n ⋅ t C o l u m n ⌋ C o l u m n ) v_2(t) = frac(v(t)) = frac(\frac{\lfloor \frac{Column·t}{Column} \rfloor}{Column}) v2(t)=frac(v(t))=frac(ColumnColumnColumnt)

在这里插入图片描述

三、最终代码

1、效果

请添加图片描述

2、Shader

Shader "MyShader/URP/P3_9"
{Properties{_Color("Color",Color) = (1,1,1,1)_MainTex("MainTex",2D) = "white"{}_Sequence("Row(X) Column(Y) Speed(Z)",Vector) = (1,1,1,1)}SubShader{Tags{//告诉引擎,该Shader只用于 URP 渲染管线"RenderPipeline"="UniversalPipeline"//渲染类型"RenderType"="Transparent"//渲染队列"Queue"="Transparent"}Blend SrcAlpha OneMinusSrcAlpha Zwrite OnPass{HLSLPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fog#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"struct Attribute{float3 vertexOS : POSITION;float2 uv : TEXCOORD0;};struct Varying{float4 vertexCS : SV_POSITION;float2 uv : TEXCOORD1;float fogCoord : TEXCOORD2;};CBUFFER_START(UnityPerMaterial)float4 _Color;float4 _MainTex_ST;half4 _Sequence;CBUFFER_ENDTEXTURE2D(_MainTex);SAMPLER(sampler_MainTex);Varying vert(Attribute v){Varying o;o.vertexCS = TransformObjectToHClip(v.vertexOS);o.uv = float2(v.uv.x/_Sequence.y,v.uv.y/_Sequence.x + (_Sequence.x - 1)/_Sequence.x);o.uv.x += frac(floor(_Time.y *_Sequence.y * _Sequence.z)/_Sequence.y);o.uv.y -= frac(floor(_Time.y *_Sequence.y * _Sequence.z / _Sequence.y)/_Sequence.x);//o.uv.x += floor(_Time.y);//o.uv = float2(v.uv.x/4,v.uv.y/4);//o.uv = TRANSFORM_TEX(v.uv,_MainTex);o.fogCoord = ComputeFogFactor(o.vertexCS.z);return o;}half4 frag(Varying i) : SV_Target{float4 mainTex = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,i.uv);float4 col = mainTex * _Color;col.rgb = MixFog(col,i.fogCoord);return col;}ENDHLSL}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webpack5 常用优化总结

本文主要总结经常用到的一些代码性能优化、减小代码体积、提升webpack打包构建速度等内容的方法。具体的实现可参考webpack官网查看相关示例。 注:如果读者还未接触过webpack,请先了解webpack的基本使用。 正文: SourceMap ---- 提升开发体…

3元一平方公里的在线卫星影像

我们为大家分享了免费下载卫星影像的方法。 但让人遗憾的是,该影像的最高分辨率只有10米,需要更高清且比较新的卫星影像,看来还是得付费购买才比较靠谱。 自助选择区县范围 商业卫星影像主要面向企事业单位,一般来讲都比较贵&a…

0-自然语言处理基础知识

目录 1 transformers1.1 什么是transformers1.2 优缺点和使用场景是什么?优点缺点使用场景 1 transformers 1.1 什么是transformers transformers 是由 Hugging Face 团队开发的一个非常流行的开源库,它为自然语言处理(NLP)提供…

55、交叉熵损失函数和softmax

上一节介绍了softmax函数,这里插一篇关于损失函数的介绍,看一看softmax和损失函数是如何结合的。 在很多分类任务中,损失函数使用的是交叉熵损失。 作为一种损失函数,它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比,从而输出 loss 值,直到 loss 值收敛,…

Windows安装DolphinDB,配置单节点启动与GUI

1. 安装Java 首先,进入网址:jdk11 下载jdk-11.0.20_windows-x64_bin.exe,然后安装即可 安装完成后,打开命令提示符,输入: java javac如果这两个命令都出现一大堆东西,而不是找不到指令的提示的…

智创有术软件开发公司:开发完整流程--------整体介绍

智创有术,深耕互联网领域八年,软件开发、平台运营、营销推广、整套解决方案,以“让产品更有价值”为自身使命,打造以原创开发为核心的技术生态体系。 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程&#xff0c…

物联网云平台源码,Spring Cloud智慧工地源码,建筑施工智能化管理

智慧工地以物联网云平台为核心,基于智慧工地物联网云平台与现场多个子系统的互联,实现现场各类工况数据采集,存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块,根据现场管理实际需求灵活组合,实现一体…

玩转Python:用Python处理文档,5个必备的库,特别实用,附代码

在Python中,有几个流行的库用于处理文档,包括解析、生成和操作文档内容。以下是一些常用的库及其简介和简单的代码示例: PyPDF2 - 用于处理PDF文件。 简介:PyPDF2是一个纯Python库,用于分割、合并、转换和提取PDF文件中…

Pod的生命周期

Pod生命周期 pod创建过程运行初始化容器(init container)过程运行主容器(main container)过程 容器启动后钩子(post start)、容器终止前钩子(pre stop) 容器的存活性探测(Liveness probe)、就绪性探测(readiness probe)pod终止过程在整个生命周期中,Pod会出现5种…

深入理解JVM虚拟机--3.3垃圾收集算法

深入理解JVM虚拟机--3.3垃圾收集算法 1 标记-清除算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了。 它…

Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

ABSTRACT 现代大规模视觉-语言模型(LVLMs)采用了相同的视觉词汇-CLIP,可以涵盖大多数常见的视觉任务。然而,对于一些需要密集和细粒度视觉感知的特殊视觉任务,例如文档级OCR或图表理解,尤其是在非英语环境…

react:ffcreator中FFCreatorCenter视频队例

最近项目要求,一键生成房子的推荐视频,选几张图,加上联系人的方式就是一个简单的视频,因为有web端、小程序端,为了多端口用,决定放在服务器端生成。 目前用的是react中的nextjs来开发项目。 nextjs中怎样用ffcreator上一章有讲到过,这里不再详细说了,考虑多端口用,并…

卷积神经网络(CNN)、循环神经网络(RNN)和自注意力(self-attention)对比

考虑同一个的问题:将由个词元组成的序列映射到另一个长度相同的序列,其中的每个输入词元或输出词元由维向量表示。 我们将比较能够解决上述问题的三种常用方法:卷积神经网络(CNN)、循环神经网络(RNN&#x…

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者,其自2017年以来,已知专注于构建前沿的可验证证书(Verifiable Credentials)技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…

掌握 gRPC:从安装到构建第一个C++ 和Python微服务

文章目录 一、前言1. gRPC的概念和用途2. gRPC的优势3. gRPC的应用场景 二、gRPC的基本原理1. RPC(远程过程调用)简介2. Protocol Buffers的作用3. gRPC与传统HTTP/REST服务的比较 三、安装gRPC1. 系统要求和前置条件2. 安装步骤概述 四、创建第一个gRPC…

单元测试、系统测试、集成测试知识总结

一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法,有可能对应多个程序文件中的一组函数。 单元也具有一些基本的属性。比如:明确的功能、规格定义&#…

【python爬虫】设计自己的爬虫 4. 封装模拟浏览器 PyppeteerSimulate

Pyppeteer是Puppeteer的Python版实现 Pyppeteer的背后实际上有一个类似于Chrome的浏览器–Chromium class PyppeteerSimulate(BrowserSimulateBase):def __init__(self):self.browser Noneself.page None# 启动浏览器# is_headless 是否开启无头模式# is_cdp 是否使用cdp (C…

win10报错“api-ms-win-crt-string-l1-1-0.dll文件丢失,软件无法启动”,快速修复方法,亲测有效

api-ms-win-crt-string-l1-1-0.dll是Windows操作系统中的一个动态链接库文件,属于Microsoft C Runtime Library。它包含了Windows操作系统需要运行C程序的一些基本系统函数,比如字符串处理、内存分配等。 它的作用主要是提供一些基本的、用于支持C语言编…

go语言gin框架的基本使用

1.首先在linux环境上安装go环境,这个网上搜搜就行 2.初始化一个go mod,网上搜搜怎么初始化 3.下面go代码的网址和端口绑定自己本机的就行 4.与另一篇CSDN一起食用,效果更好哟---> libcurl的get、post的使用-CSDN博客 package mainimpo…

算法每日一题: 被列覆盖的最多行数 | 二进制 - 状态压缩

大家好,我是星恒 今天的题目又是一道有关二进制的题目,有我们之前做的那道 参加考试的最大学生数的 感觉,哈哈,当然,比那道题简单多了,这道题感觉主要的考点就是二进制,大家可以好好总结一下这道…