unity-关于shader海平面制作
发布日期:2021-05-07 17:59:08
浏览次数:12
分类:技术文章
本文共 2304 字,大约阅读时间需要 7 分钟。
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/sin_shader"{ Properties { _MainTex ("Texture", 2D) = "white" { } } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" //使用unity自带的库文件,常用的内置函数在里面 struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0;//绑定第一张纹理图 }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : POSITION; }; sampler2D _MainTex;//2D纹理图片 float4 _MainTex_ST;//而_MainTex_ST的ST是SamplerTexture的意思 ,就是声明_MainTex是一张采样图,也就是会进行UV运算。 如果没有这句话,是不能进行TRANSFORM_TEX的运算的。 //下面的两个函数是等价的o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); //o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; //_MainTex_ST中的ST是Sampler texture ,声明这个变量是为了告诉编译器_Main_TEX是一张纹理采样图,如果没有这句话,_Main_TEX是不能参与运算的。 v2f vert (appdata v) { v2f o; float dist = distance(v.vertex.xyz, float3(0, 0, 0)); float h = sin(dist*20 + _Time.z); o.vertex = mul(unity_ObjectToWorld, v.vertex);//先把模型坐标转换成世界坐标,在世界空间震荡,所以要在世界空间例修改 o.vertex.y = h;//将顶点赋值 o.vertex = mul(unity_WorldToObject, o.vertex);//将点的世界坐标转换成模型坐标 o.vertex = mul(UNITY_MATRIX_MVP,o.vertex);//用于将顶点/方向矢量坐标从模型空间变换成剪裁空间,在显示器上显示 o.uv = TRANSFORM_TEX(v.uv,_MainTex);//将坐标转换成真正的uv坐标(在屏幕中的坐标)返回的是uv坐标 return o;//保存的v2f } //这里的i就是承接上一个函数中路下一个工位的o fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv);//tex2D(sampler2D tex, float2 s)函数, //这是CG程序中用来在一张贴图中对一个点进行采样的方法,返回一个float4。这里对 _MainTex在输入点 //上进行了采样,并将其颜色的rbg值赋予了输出的像素颜色,将a值赋予透明度。于是, //着色器就明白了应当怎样工作:即找到贴图上 对应的uv点,直接使用颜色信息来进行着色,over。 return col; } ENDCG } }}
不懂可以看后面的注释
shader中做成unity_ObjectToWorld矩阵来实现局部转世界的转换 tex2D(sampler2D tex, float2 s)函数是shader中用来在一张贴图中对一个点进行采样的方法,返回一个float4,在上面的代码中是对_MainTex在输入点上进行了采样,并将其颜色的rgb值赋予了输出的像素颜色。 distance(float3 x,float3 y),计算两个点的距离 sin()计算两点之间的正弦值转载地址:https://blog.csdn.net/lfanyize/article/details/104099209 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月01日 20时57分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Android平台】 Alljoyn学习笔记四 Android Core API参考
2019-04-26
【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析
2019-04-26
【Alljoyn】 Alljoyn学习笔记六 Alljoyn基本概念
2019-04-26
【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍
2019-04-26
【Android】Activity生命周期
2019-04-26
【Android】Activity的四种launchMode
2019-04-26
【Android】Activity的task相关
2019-04-26
【Android】 Intent应用详解
2019-04-26
【Android】 Intent详解
2019-04-26
【Android】 常用的Intent
2019-04-26
Android中AsyncTask的简单用法
2019-04-26
【Android】 Android中Log调试详解
2019-04-26
【Android】Android中WIFI开发总结(一)
2019-04-26
【Android】Android中WIFI开发总结(二)
2019-04-26
【Android】Android之WiFi开发应用示例
2019-04-26
【Android】 Android adb常见问题整理
2019-04-26
【Android】 Android体系结构图
2019-04-26
【Android】 Android中spinner下拉列表的使用
2019-04-26
说说在 python 中,如何删除左右两边不需要的字符
2019-04-26