赞
踩
当不要脸已成习惯,当山峰也没有了棱角,当招人这么困难的时候,我还是在篇头植入的招聘。
坐标山东青岛市北,招聘日系画师,其他岗位目前公司没有说,有意思的可以入群私聊。
然后再说一下QQ群,山东手游研发聚集地335772557,进群先看公告,要是抱着我要学习的心态进群的话,那你就失望了,因为是个死群。
偶尔心情好的是时候会发个技术链接。
接下来进入正题!!
这篇文章我只是写个想法,如果想360度的立体,自己根据思路自己实现一下吧,可以跟帖讨论,反正我的博客也是个坟。
先上效果图:
很多人一直都认为序列帧的用法就是一张一张的跑马灯,就像认为图片就是用来存储图像一样的认识短浅。
首先我们先来渲染序列帧图像,打开max,呀的一下就创建了一个teapot。
然后做个动画,渲染个序列帧出个图。
准备工作现在可以结束了
接下来我们进入Unity,准备工作(创建粒子系统等)就省略了
找到粒子系统的Renderer部分,勾选Custom Vertex Stream并添加Center(这个就是每粒子的世界位置)
然后创建Shader修改shader的两个struct,如下
然后在顶点函数里组建一下粒子系统的worldpos。
接下来我们就要开始计算视线与每粒子的角度问题了
首先我们计算一下入射向量
根据入射向量就可以得到弧度
atan2返回值是-pi~pi,但是我喜欢0-1,于是就有了
这样的话,角度问题就计算完成了,后来我自己希望除了视角旋转时可以控制之外,能有一个参数可手动调整。
在Properties中添加属性
并在vert函数前声明一下
然后我们修改一下获取角度的地方
至此,角度就OK了
然后我们就要计算序列帧相关参数的部分了
首先计算一下根据角度得到应显示序列帧的序号。
等一下,似乎我们忘记了什么。。。。。。
序列帧是?x?的问题。。。
添加Properties
并在vert前声明
好了,忘记的东西已经补上了,继续
这就就得到了要显示的序列帧某一帧的序号
但是问题我们是也要切分UV的啊,那么就要根据这个序号来求UV的部分了
UV也算好了,然后就往fragment里传参数吧
效果这这么结束了、、、、
等等,是不是有什么问题,序列帧在跳。。。。。。!!!!!!!
这个问题严重了。。。。其实把序列帧改成123456的UV格,就很容易看出来了,uv的y反了
修改一下
然后在测试,发现跟视图旋转方向相反,再次修改
上个全码
- Shader "Unlit/TestSheet"
- {
- Properties
- {
- _MainTex ("Texture", 2D) = "white" {}
- _Rotation("Rotation",Range(0,1)) = 0
- [Header(Rows Column)] _Param("",Vector) = (8,8,0,0)
- }
- SubShader
- {
- Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
- Blend SrcAlpha OneMinusSrcAlpha
- LOD 100
-
- Pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma multi_compile_particles
- #include "UnityCG.cginc"
-
- struct appdata
- {
- float4 vertex : POSITION;
- float4 uv : TEXCOORD0;
- float4 color:COLOR;
- float tmp : TEXCOORD1;
- };
-
- struct v2f
- {
- float2 uv : TEXCOORD0;
- float4 vertex : SV_POSITION;
- float4 color:COLOR;
- };
-
- sampler2D _MainTex;
- float4 _MainTex_ST;
- fixed _Rotation;
- float2 _Param;
-
- v2f vert (appdata v)
- {
- v2f o;
-
- float3 perParticleWorldPos = float3(v.uv.zw,v.tmp);
-
- float3 lookAt = normalize(_WorldSpaceCameraPos - perParticleWorldPos);
-
- float radius = atan2(lookAt.z,lookAt.x)/6.283 + 0.5;
- radius = -frac(radius + _Rotation);
-
- float Index = floor(_Param.x * _Param.y * radius);
-
- float2 SliceUV = v.uv.xy / _Param.xy;
- float2 ShiftUV = float2(Index,floor(Index/_Param.x))/_Param.xy;
- ShiftUV.y = 1-ShiftUV.y;
-
-
- o.vertex = UnityObjectToClipPos(v.vertex);
- o.uv = TRANSFORM_TEX(ShiftUV+SliceUV, _MainTex);
- o.color = v.color;
-
- return o;
- }
-
- fixed4 frag (v2f i) : SV_Target
- {
- fixed4 col = tex2D(_MainTex, i.uv);
- return col;
- }
- ENDCG
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。