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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unity-shader水中波光照射动物身上的效果
下一篇:unity-修改shader的默认值,纹理

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月01日 20时57分46秒