香港6合总彩透码主论坛
 找回密码
 注册帐号

扫一扫,访问微社区

蓬莱仙羽 【Aladdin-Unity3D-Shader编程】之七-波光粼粼的鱼

3
回复
1551
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
916
昨日变化

38

主题

524

帖子

2789

积分

Rank: 9Rank: 9Rank: 9

UID
1261
好友
38
蛮牛币
1907
威望
0
注册时间
2013-7-31
在线时间
673 小时
最后登录
2019-7-17

专栏作家?#29616;?#24320;发者

马?#29486;?#20876;,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐?#29275;?a href="member.php?mod=register" title="注册帐号">注册帐号

x
前言

通过shader实现一个波光粼粼的鱼的效果,效果如下图所示,鱼的游动是用的animator,我们也可以用shader通过模型vertex偏移来实现鱼儿的游动。

效果

代码
[AppleScript] ?#35838;?#26412;查看 复制代码
//-----------------------------------------------【Shader说明】----------------------------------------------
//     Shader功能:   波光粼粼的鱼
//     使用语言:   Shaderlab
//     开发所用IDE版本:Unity2018.3.6 、Visual Studio 2017
//     2016年9月16日  Created by Aladdin(阿拉丁)
//     更多内容或交流请访问我的博客:http://blog.csdn.net/s10141303/article/category/6670402
//---------------------------------------------------------------------------------------------------------------------


Shader "阿拉丁Shader编程/2-1.波光粼粼的鱼"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
                _SubTex("SubTex",2D) = "white"{}
                _Color("Color",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags{"RenderType"="Opaque"}
        LOD 100
        Pass 
                {
            CGPROGRAM
            #pragma vertex vert 
            #pragma fragment frag 

                        sampler2D _MainTex;
                        sampler2D _SubTex;
                        float4 _Color;

            struct a2v{
                fixed4 vertex:POSITION;
                fixed2 uv:TEXCOORD0;
            };

            struct v2f{
                fixed4 svPos:SV_POSITION;
                                float2 uv:TEXCOORD0;
            };

            v2f vert(a2v v)
            {
                v2f f;
                f.uv = v.uv;
                f.svPos = UnityObjectToClipPos(v.vertex);
                return f;
            }
            fixed4 frag(v2f f):SV_Target
            {
                float2 offset = float2(0,0);
                                offset.x = _Time.y * 0.3f;
                fixed4 col = tex2D(_MainTex, f.uv);
                                fixed subCol = tex2D(_SubTex, f.uv+ offset);
                                return (subCol + col) * _Color;
            }
            ENDCG
        }
    }
        FallBack  "Specular"
}



通过Shader实现鱼儿的游动

如果我们单纯用shader来实现鱼儿的游动,取消animator动画也?#24378;?#20197;的,效果如下图

代码:

[AppleScript] ?#35838;?#26412;查看 复制代码
//-----------------------------------------------【Shader说明】----------------------------------------------
//     Shader功能:   波光粼粼的鱼 shader控制鱼的游动
//     使用语言:   Shaderlab
//     开发所用IDE版本:Unity2018.3.6 、Visual Studio 2017
//     2019年4月10日  Created by Aladdin(阿拉丁)   
//     更多内容或交流请访问我的博客:http://blog.csdn.net/s10141303/article/category/6670402
//---------------------------------------------------------------------------------------------------------------------

Shader "阿拉丁Shader编程/2-2.波光粼粼的鱼(Shader控制鱼的游动)"
{
        Properties 
        {
                _MainTex ("MainTexture", 2D) = "white" {}
                _SubTexture("SubTexture",2D) = "white"{}
                _FlowColor("FlowColor",Color) = (1,0,0,1)
                _Speed("Speed",float) = 0.5
                _Frenquacy("Frenquacy",float) = 1
        }

        SubShader 
        {
                Tags { "RenderType"="Opaque" }
                LOD 100

                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #include"UnityCG.cginc"

                        sampler2D _MainTex;
                        float4 _MainTex_ST;

                        sampler2D _SubTexture;

                        float4 _FlowColor;
                        float _Speed;
                        float _Frenquacy;

                        struct a2v
                        {
                                float4 vertex:POSITION;
                                float2 uv:TEXCOORD0;
                        };

                        struct v2f
                        {
                                float2 uv:TEXCOORD0;
                                float4 vertex:SV_POSITION;
                        };

                        v2f vert(a2v v)
                        {
                                v2f o;
                                float timer = _Time.y * _Speed;
                                float waverX = cos(timer + v.vertex.x)*_Frenquacy;        //鱼游动 取代animator
                                v.vertex.x = v.vertex.x + waverX;
                                o.vertex = UnityObjectToClipPos(v.vertex);
                                o.uv = TRANSFORM_TEX(v.uv,_MainTex);  
                                return o;
                        }

                        fixed4 frag(v2f i) : SV_Target
                        {
                                float2 offset = float2(0,0);
                                offset.x = _Time.y * 0.1;
                                offset.y = _Time.y * 0.1;

                                fixed4 subCol = tex2D(_SubTexture,i.uv + offset) * _FlowColor;

                                fixed4 col = tex2D(_MainTex,i.uv);

                                return subCol + col;
                        }
                        ENDCG
                }//end Pass
        }//end SubShader
}//end Shader


对比效果图


前者是shader实现的动画效果,后者是unity的动画,但动画效果稍微好点,但可能更费?#38405;?#19968;点,前者是CPU去实现游动,后者是CPU去实现的游动。


案例Demo

https://github.com/dingxiaowei/AladdinShader






回复

使用道具 举报

4四处流浪
353/500
排名
16219
昨日变化

2

主题

37

帖子

353

积分

Rank: 4

UID
269716
好友
0
蛮牛币
1291
威望
0
注册时间
2018-2-27
在线时间
270 小时
最后登录
2019-8-20
沙发
2019-5-21 16:15:39 只看该作者
不会写shader,走流程,?#32676;?#19968;个666
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1094/1500
排名
10818
昨日变化

3

主题

820

帖子

1094

积分

Rank: 6Rank: 6Rank: 6

UID
310426
好友
0
蛮牛币
1467
威望
0
注册时间
2019-1-2
在线时间
175 小时
最后登录
2019-8-20
板凳
2019-5-24 08:51:53 只看该作者
波光粼粼的鱼
回复

使用道具 举报

4四处流浪
404/500
排名
14230
昨日变化

0

主题

199

帖子

404

积分

Rank: 4

UID
209003
好友
0
蛮牛币
383
威望
0
注册时间
2017-2-28
在线时间
147 小时
最后登录
2019-8-20
地板
2019-7-23 10:01:16 只看该作者
?#32676;?66666
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

香港6合总彩透码主论坛