unity shader序列帧动画代码,顺便吐槽一下unity shader系统
看到UNITY论坛里有些人求unity shader序列帧动画,写shader我擅长啊,就顺势写了个CG的shader。
代码很简单,就是变换UV采样序列帧贴图,美术配置行数列数以及变换速度。
Shader "HELLOHUAN/Hello_Sequence" {
Properties {
_Color ("Main Color", Color) = (,,,)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_SizeX ("列数", Float) =
_SizeY ("行数", Float) =
_Speed ("播放速度", Float) =
} SubShader {
Tags { "RenderType"="Opaque"}
LOD CGPROGRAM
#pragma surface surf Lambert alpha sampler2D _MainTex;
fixed4 _Color; uniform fixed _SizeX;
uniform fixed _SizeY;
uniform fixed _Speed; struct Input {
float2 uv_MainTex;
}; void surf (Input IN, inout SurfaceOutput o) { int index = floor(_Time .x * _Speed);
int indexY = index/_SizeX;
int indexX = index - indexY*_SizeX;
float2 testUV = float2(IN.uv_MainTex.x /_SizeX, IN.uv_MainTex.y /_SizeY); testUV.x += indexX/_SizeX;
testUV.y += indexY/_SizeY; fixed4 c = tex2D(_MainTex, testUV) * _Color;
o.Albedo = c.rgb; o.Alpha = c.a;
//o.Albedo = float3( floor(_Time .x * _Speed) , 1.0, 1.0);
}
ENDCG
} Fallback "Transparent/VertexLit"
}
shader,UI如下:
二、
下午看到美术场景中有透明排序的问题,随即询问他们为啥地面一个大片儿要用透明材质,使用镂空多爽快,一会儿美术跑来问我,unity里没提供镂空的shader,我打开编辑器愁了一眼,还真的基本都是透明材质,QQ上密了专家答道,在某些移动平台中,镂空会比透明更费一些,搞了几年渲染,这世界观崩溃的,专家的这话空穴来风,其在各种真机上有过测试,给出的理由是:OPENGLES2标准没有支持AlphaTest,都是在Shader里面用discare搞,移动硬件实现千奇百怪,至少IPHONE4这样的基线机器镂空效率非常惨淡。专家还给了一张benchMark图标为证。
写Shader过程我的感觉,为啥渲染状态没有暴漏在外边给美术调节,非得写在Shader里么?unity渲染也支持透明排序补间,但是必须在Shader中写明“transparence + 1”的代码。这尼玛我要写N个Shader来实现相同的Shader计算,但是不同的渲染状态的效果么?增加了文件资源的数量不说,这Shader切换的消耗可比渲染状态切换的消耗大吧,难道移动显卡架构?OGL与DIRECTX绘制差别这么大?unity好歹也是跨平台的引擎啊。
不得不赞叹起在以前公司参与写过的Shader系统,想念那个虽然是抄袭Unreal,让美术所见所得有写程序般快感的通过拉结点连线连拓扑关系来写Shader的Shader模版编辑器,还有个可以具体实例资源单独配置的Shader实例编辑器,调控某些shader变量及渲染状态,渲染时按shader类型排序渲染。还是自己写引擎效率高啊。
不过当时的Shader编辑器一出,也出现了制作上的问题,一是:美术创造能力太强大了,颜色贴图的RGB都能进行矩阵变换,最后连得算法无法理解却可以有其认为“炫酷”的效果。二是,shader创造的太多不好管理了,改动起来对现有资源影响较大,增加审核模版的工作和添加新的模版的工作又光荣的落在了我等图形程序员的肩上,工具化后还是苦逼。
unity shader序列帧动画代码,顺便吐槽一下unity shader系统的更多相关文章
- Unity Shader序列帧动画学习笔记
Unity Shader序列帧动画学习笔记 关于无限播放序列帧动画的一点问题 在学shader的序列帧动画时,书上写了这样一段代码: fixed4 frag(v2f i){ // 获得整数时间 flo ...
- Unity Shader 序列帧动画
shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分. Unity Shader 内置时间变量 名称 类型 描述 _Time floa ...
- iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)
一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...
- UnityShader 序列帧动画效果
实现原理:主要思想是设置显示uv纹理的大小,并逐帧修改图片的uv坐标. 实现步骤 1.我们首先用_Time.y和速度属性_Speed相乘得到模拟的时间. 2.然后我们用time除以_Horizonta ...
- cocos2d-x 2.0 序列帧动画 深入分析
转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...
- [Cocos2d-x v3.x]序列帧动画
简单介绍 Cocos2d-x中.动画的详细内容是依靠精灵显示出来的,为了显示动态图片,我们须要不停切换精灵显示的内容.通过把静态的精灵变为动画播放器从而实现动画效果. 动画由帧组成,每一帧都是一个 ...
- Unity MegaFiers 顶点动画
使用 MegaFiers 插件,能够使得Unity支持顶点动画的播放. 官方视频教程例如以下: 在这里简单測试使用下,环境例如以下: Blender 2.72 Unity 4.5.4 Mega ...
随机推荐
- 7z 7zip 日期、时间,文件名
from: http://hi.baidu.com/guicomeon/item/c0957c373972fbc52f8ec26e 先说明一点,要注意区分当前所使用的系统,中文系统和英文系统是有区别的 ...
- ruby里面的毒瘤
转自https://ruby-china.org/topics/26120 由于ruby的灵活性,如何很好的使用,其实是比较有技巧的,其实总结起来,可以大概归类如下 常规业务,不到万不得已,不使用元编 ...
- HDU-6156 Palindrome Function(数位DP)
一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...
- fiddler工具条、状态栏、请求信息栏各按钮的作用
1.fiddler工具条 2.fiddler状态栏 3.请求信息栏
- Request模块(八)
Requests: 让 HTTP 服务人类 虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “ ...
- java递归之“二叉树”
物有本末,事有始终,知所先后,则近道矣.-----题记. BotWong半路入行it做码农,也就半年时间,竟“不知天高地厚”地来到了深圳闯天下.一口气投了百个简历,一周后终于有公司邀约面试,除了基础的 ...
- Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态
by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确): 瞬时状态(transient): 不被session接管,且不存在 ...
- leetcode475
public class Solution { public int FindRadius(int[] houses, int[] heaters) { houses = houses.Distinc ...
- 跟我学算法-吴恩达老师(mini-batchsize,指数加权平均,Momentum 梯度下降法,RMS prop, Adam 优化算法, Learning rate decay)
1.mini-batch size 表示每次都只筛选一部分作为训练的样本,进行训练,遍历一次样本的次数为(样本数/单次样本数目) 当mini-batch size 的数量通常介于1,m 之间 当 ...
- js 和 java互调
Java调JS JDK1.8 中Nashorn 比JavaScript性能更好 public static void main(String[] args) { long s = System.cur ...