unity-shader水中波光照射动物身上的效果
发布日期:2021-05-07 17:59:08 浏览次数:9 分类:技术文章

本文共 1877 字,大约阅读时间需要 6 分钟。

首先要知道,如果想要制作阳光照射到水中动物的效果,我们需要的贴图纹理要有两张,一张是动物的皮肤纹理,另一张是波光的纹理,我是用的是下面的两张贴图纹理

在这里插入图片描述
在这里插入图片描述
解释一下为什么要是用背景为黑色的波光纹理,因为黑色的RGB值是(0.0,0.0,0.0),这样在两种贴图相叠加的时候不会因为背景颜色的RGB值而发生我们不愿看到的变化,

在上一篇博客的基础上

继续添加

Shader "Custom/uv_shader"{
Properties {
//需要两个纹理,一个是鱼的纹理一个是波光的纹理 _MainTex ("Texture", 2D) = "white" {
} _SubTex("Texture", 2D) = "white"{
} } SubShader {
Tags {
"RenderType"="Opaque" } LOD 100 Pass {
CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #include "UnityCG.cginc" struct appdata {
float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f {
float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex;//鱼纹理 sampler2D _SubTex;//波光纹理 float4 _MainTex_ST; v2f vert (appdata v) {
v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);//用于将顶点/项链坐标转换成剪裁空间的坐标 o.uv = TRANSFORM_TEX(v.uv, _MainTex);//将坐标转换成真正的uv坐标(在屏幕中的坐标)返回的是uv坐标 return o; } fixed4 frag (v2f i) : SV_Target {
float2 uv_offset = float2(0,0); uv_offset.x = _Time.y*0.25;//随着时间的变化,uv_offset的x,y值不断变化 uv_offset.y = _Time.y*0.25; // sample the texture //这种用法仅仅是将两张纹理直接粘合到一起并没有真正的场景意义,我们真正要做的是将两张纹理粘合到一起让后让波光动起来 fixed4 linght_color = tex2D(_SubTex, i.uv+uv_offset);//这样在贴图上寻找的像素点不同,贴上去的也就不同 fixed4 col = tex2D(_MainTex, i.uv) + linght_color;//为什么要选择黑色背景的波光图?,因为黑色的rgb值是0,0,0,添加之后并不改变元贝的颜色 return col; //不断改变uv坐标,这样的化,在贴图上找到的uv像素点就随着时间不同而不同,可以模拟波光在水下动物身上的真是感觉 } ENDCG } }}

相关注释在代码中,不懂可自行查看,最终效果如下

在这里插入图片描述

转载地址:https://blog.csdn.net/lfanyize/article/details/104099960 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unity-表面shader需要具备的基本知识
下一篇:unity-关于shader海平面制作

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月18日 22时12分02秒