【Unity】Unity Shader样例:顶点根据时间放大缩小

embedded/2024/12/22 9:12:52/

文章目录

  • 案例说明
  • 效果展示
  • 适用模型范围
  • 代码示例


案例说明

本案例提供一个单独的Shader,使得模型顶点(仅渲染)根据时间放大缩小,往复循环。

效果展示

在这里插入图片描述

适用模型范围

全部

代码示例

Shader "Unlit/Sha_TestScale"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags{"RenderType"="Opaque"}LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag// make fog work#pragma multi_compile_fog#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert(appdata v){v2f o;// 根据时间计算缩放系数float scaleFactor = sin(_Time.y * 0.5 * 3.14) * 0.5 + 0.5;// 修改顶点位置实现大小变化,在模型空间转换到投影空间之前先改变顶点渲染位置o.vertex = UnityObjectToClipPos(v.vertex * scaleFactor * 3);o.uv = TRANSFORM_TEX(v.uv, _MainTex);// 修改UV坐标来模拟缩放效果,物体大小不变// o.uv = TRANSFORM_TEX(v.uv, _MainTex) * scaleFactor;return o;}fixed4 frag(v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}}
}

功能比较简单,代码中有注释,此处不过多解释了。关键内容为 _Time.y ,这个数值是游戏开始到现在的总秒数,类型为float。根据这个秒数在 Sin 函数的波形中获取某一时间点的数值作为基础系数,再用这个系数来改变顶点在模型空间内的位置即可。


更多内容请查看总目录【Unity】Unity学习笔记目录整理


http://www.ppmy.cn/embedded/111520.html

相关文章

基于UDP的简易网络通信程序

目录 0.前言 1.前置知识 网络通信的大致流程 IP地址 端口号(port) 客户端如何得知服务器端的IP地址和端口号? 服务器端如何得知客户端的IP地址和端口号? 2.实现代码 代码模块的设计 服务器端代码 成员说明 成员实现 U…

使用Spring Boot集成Nacos进行配置管理

引言 随着微服务架构的普及,服务之间的解耦以及服务治理成为了软件开发中的重要组成部分。一个强大的服务治理平台不仅能够帮助我们更好地管理各个服务实例,还能有效地处理服务间的依赖关系,提升系统的可维护性和扩展性。Nacos(原…

【机器学习】迁移学习概论

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 迁移学习概论什么是迁移学习?为什么需要迁移学习?迁移学习的应用场景和优势迁…

软件项目上线发布流程是怎么样的?

(1)项目流程发布,一般是在我们完成测试之后,我们这边会出一个测试报告,然后报告确定我们是否通过; (2)如果通过的话,运维那边就可以开始去打包然后发布项目了&#xff0c…

STL02——手写简单版本的list

手写一个简单版本的list 设计一个名为 List 的 List 类,该类具有以下功能和特性: 1、基础成员函数 构造函数:初始化 List 实例析构函数:清理资源,确保无内存泄露 2、核心功能 在 List 末尾添加元素在 List 开头添…

如何在C++中使用mupdf操作pdf文件(一)

部署 mupdf是一个pdf库,不仅可以显示pdf文件,还可以创建、分割、合并、更改pdf文件。而且,除了pdf以外,它还支持mobi、epub、fb2等其它文件。 所以,如果我们有操作pdf等电子书的开发需求,使用mupdf是一个…

JavaScript如何制作轮播图

在JavaScript中实现轮播图可以通过多种方式&#xff0c;但最常见的方式是使用数组来存储图片&#xff0c;然后使用setInterval函数定期更改显示的图片。下面是一个简单的例子&#xff1a; 首先&#xff0c;你需要在HTML中设置一些用于显示图片的<img>标签&#xff0c;以…

Java多态

多态 多态是建立在继承和封装的基础之上 多态&#xff08;Polymorphism&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一个核心概念&#xff0c;它允许同一个接口被不同的底层形式&#xff08;数据类型&#xff09;使用。多态使得我们能够通过一个通用的接口来引…