Assets
Code
Editor
Editor Default Resources
GameAssets
ExportResources
RawResources
app
monster
mount
object
player
scene
shader
Ares
Animation
Entity
EntityState
Gonbest
Particle
PostEffect
Scene
SceneT4M
SkyBox
Special
UI
Water
FXWaterPro.shader
FXWaterPro.shader.meta
Water.shader
Water.shader.meta
Water01.shader
Water01.shader.meta
Water02.shader
Water02.shader.meta
Water03.shader
Water03.shader.meta
WaterComplex_AlphaBlend.shader
WaterComplex_AlphaBlend.shader.meta
WaterComplex_NoAlpha.shader
WaterComplex_NoAlpha.shader.meta
WaterMiddle.shader
WaterMiddle.shader.meta
Animation.meta
Entity.meta
EntityState.meta
Gonbest.meta
Particle.meta
PostEffect.meta
Scene.meta
SceneT4M.meta
SkyBox.meta
Special.meta
UI.meta
Water.meta
External
Ares.meta
External.meta
study
timeline
uinew
uiscene
vfx
vfxtitle
app.meta
monster.meta
mount.meta
object.meta
player.meta
scene.meta
shader.meta
show.meta
study.meta
timeline.meta
uinew.meta
uiscene.meta
vfx.meta
vfxtitle.meta
Resources
ExportResources.meta
RawResources.meta
Resources.meta
Launcher
Plugins
SkillEditor
Standard Assets
Test
UWA
_TerrainAutoUpgrade
Code.meta
DefaultVolumeProfile.asset
DefaultVolumeProfile.asset.meta
Editor Default Resources.meta
Editor.meta
GameAssets.meta
Launcher.meta
Plugins.meta
SkillEditor.meta
Standard Assets.meta
StreamingAssets.meta
Test.meta
UWA.meta
UniversalRenderPipelineGlobalSettings.asset
UniversalRenderPipelineGlobalSettings.asset.meta
_TerrainAutoUpgrade.meta
gmcs.rsp
gmcs.rsp.meta
smcs.rsp
smcs.rsp.meta
Packages
ProjectSettings
.gitattributes
.gitignore
.vsconfig
ComplieCore.bat
MainLua.code-workspace
MainShader.code-workspace
178 lines
6.5 KiB
Plaintext
178 lines
6.5 KiB
Plaintext
|
|
|||
|
/*
|
|||
|
一个水的效果,这个用于晚上的水效果比较好.
|
|||
|
*/
|
|||
|
Shader "Ares/Water/Water02"
|
|||
|
{
|
|||
|
Properties
|
|||
|
{
|
|||
|
_Color("_Color",Color) = (0.084,0.175,0.221,0.716)
|
|||
|
_MainTex ("Texture", 2D) = "white" {}
|
|||
|
_BumpMap("Normal Map",2D) = "black"{}
|
|||
|
_BumpScale1("BumpScale1",float) = 0.3
|
|||
|
_BumpScale2("BumpScale2",float) = 0.9
|
|||
|
_WaterShadowColor("WaterShadowColor",Color) = (0.11,0.118,0.141,1)
|
|||
|
_DiffusePower("DiffusePower",float) = 0.125
|
|||
|
_RimAlpha("RimAlpha",float) = 0
|
|||
|
_SpecularColor("SpecularColor",Color) = (0.639,0.689,0.741,1)
|
|||
|
_SpecPower("SpecPower",float) = 0.9
|
|||
|
_Gloss1("Gloss1",float) = 50
|
|||
|
_Gloss2("Gloss2",float) = 50
|
|||
|
_Gloss3("Gloss3",float) = 90
|
|||
|
_Gloss4("Gloss4",float) = 10
|
|||
|
_WaveDir("WaveDir",Vector) = (1.5,4,0.5,4)
|
|||
|
_WaveSpeed("WaveSpeed",Vector) = ( 0.1,0.1,0.1,0.1 )
|
|||
|
}
|
|||
|
SubShader
|
|||
|
{
|
|||
|
Tags { "Queue" = "Transparent" "GonbestBloomType"="BloomMask"}
|
|||
|
LOD 100
|
|||
|
|
|||
|
Pass
|
|||
|
{
|
|||
|
|
|||
|
Tags { "LightMode" = "ForwardBase" }
|
|||
|
ZWrite Off
|
|||
|
Blend SrcAlpha OneMinusSrcAlpha,Zero OneMinusSrcAlpha
|
|||
|
CGPROGRAM
|
|||
|
#pragma vertex vert
|
|||
|
#pragma fragment frag
|
|||
|
// make fog work
|
|||
|
#pragma multi_compile_fog
|
|||
|
|
|||
|
#include "UnityCG.cginc"
|
|||
|
#include "../Gonbest/Include/Base/MathCG.cginc"
|
|||
|
|
|||
|
struct appdata
|
|||
|
{
|
|||
|
float4 vertex : POSITION;
|
|||
|
float4 uv : TEXCOORD0;
|
|||
|
float4 color:COLOR;
|
|||
|
float3 normal:NORMAL;
|
|||
|
float4 tangent:TANGENT;
|
|||
|
};
|
|||
|
|
|||
|
struct v2f
|
|||
|
{
|
|||
|
float2 uv : TEXCOORD0;
|
|||
|
UNITY_FOG_COORDS(1)
|
|||
|
float4 vertex : SV_POSITION;
|
|||
|
float4 wn:TEXCOORD2;
|
|||
|
float4 wt:TEXCOORD3;
|
|||
|
float4 wb:TEXCOORD4;
|
|||
|
float4 vcolor:TEXCOORD5;
|
|||
|
};
|
|||
|
|
|||
|
sampler2D _MainTex;
|
|||
|
sampler2D _BumpMap;
|
|||
|
float4 _MainTex_ST;
|
|||
|
float4 _Color; //5
|
|||
|
float4 _WaterShadowColor; //6
|
|||
|
float _RimAlpha; //7
|
|||
|
float _DiffusePower; //9
|
|||
|
float _BumpScale1; //10
|
|||
|
float _BumpScale2; //11
|
|||
|
float4 _SpecularColor; //12
|
|||
|
float _SpecPower; //13
|
|||
|
float _Gloss1; //14
|
|||
|
float _Gloss2; //15
|
|||
|
float _Gloss3; //16
|
|||
|
float _Gloss4; //17
|
|||
|
float4 _WaveSpeed; //18
|
|||
|
float4 _WaveDir; //19
|
|||
|
|
|||
|
v2f vert (appdata v)
|
|||
|
{
|
|||
|
v2f o;
|
|||
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|||
|
o.uv = v.uv;
|
|||
|
float3 wp = mul(unity_ObjectToWorld,v.vertex);
|
|||
|
o.wn.xyz = GBNormalizeSafe(mul(float4(v.normal,0),unity_WorldToObject).xyz);
|
|||
|
o.wt.xyz = GBNormalizeSafe(mul(unity_ObjectToWorld,float4(v.tangent.xyz,1)).xyz);
|
|||
|
o.wb.xyz = cross(o.wn.xyz,o.wt.xyz) * v.tangent.w;
|
|||
|
o.wt.w = wp.x;
|
|||
|
o.wb.w = wp.y;
|
|||
|
o.wn.w = wp.z;
|
|||
|
o.vcolor = v.color;
|
|||
|
UNITY_TRANSFER_FOG(o,o.vertex);
|
|||
|
return o;
|
|||
|
}
|
|||
|
|
|||
|
fixed4 frag (v2f i) : SV_Target
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
float3 WN0 = GBNormalizeSafe(i.wn.xyz);
|
|||
|
|
|||
|
float3 V = GBNormalizeSafe(_WorldSpaceCameraPos - float3(i.wt.w,i.wb.w,i.wn.w));
|
|||
|
|
|||
|
float3 L = GBNormalizeSafe(_WorldSpaceLightPos0);
|
|||
|
|
|||
|
float NoV = max(0, dot(V,WN0));
|
|||
|
|
|||
|
float3 H = GBNormalizeSafe(L+V);
|
|||
|
|
|||
|
float NoH = max(0,dot(WN0,H));
|
|||
|
|
|||
|
float spec4 = pow(NoH,_Gloss4)*_SpecPower;
|
|||
|
|
|||
|
float2 uv = TRANSFORM_TEX(i.uv,_MainTex);
|
|||
|
|
|||
|
float4 wDir = _WaveDir * _Time.y;
|
|||
|
|
|||
|
float2 uv1 = _WaveSpeed.xy * wDir.xy + uv;
|
|||
|
|
|||
|
float2 uv2 = _WaveSpeed.zw * wDir.zw * 1.2 + uv;
|
|||
|
|
|||
|
//基础纹理
|
|||
|
float2 mainBG1 = tex2D(_MainTex,uv1).yz;
|
|||
|
float2 mainBG2 = tex2D(_MainTex,uv2).yz;
|
|||
|
mainBG2 = mainBG2 * mainBG1;
|
|||
|
|
|||
|
//法线混合
|
|||
|
float4 norm = (float4)0;
|
|||
|
float4 r8 = (float4)0;
|
|||
|
norm.xy = tex2D(_BumpMap,uv1).xy;
|
|||
|
norm.xyzw = norm.xyxy * 2 - 1;
|
|||
|
norm.xyzw = tex2D(_BumpMap,uv2).xyxy * 2 - 1 + norm.xyzw;
|
|||
|
norm.xyzw *= float4(_BumpScale1.xx,_BumpScale2.xx);
|
|||
|
|
|||
|
//N2
|
|||
|
float3 TN1 = float3(norm.zw,sqrt(1 - min(dot(norm.zw,norm.zw),1)));
|
|||
|
|
|||
|
float3 WN1 = GBNormalizeSafe(TN1.x*i.wt.xyz+TN1.y*i.wb.xyz+TN1.z*i.wn.xyz);
|
|||
|
|
|||
|
float diff = dot(L,WN1)*_DiffusePower - _DiffusePower + 1;
|
|||
|
|
|||
|
float spec3 = pow(max(dot(H,WN1),0),_Gloss3) * _SpecPower;
|
|||
|
|
|||
|
float3 specColor0 = spec4 * spec3 * _SpecularColor * mainBG2.y * mainBG1.y ;
|
|||
|
|
|||
|
//N2
|
|||
|
float3 TN2 = float3(norm.xy,sqrt(1 - min(dot(norm.xy,norm.xy),1)));
|
|||
|
float3 WN2 = GBNormalizeSafe(TN2.x*i.wt.xyz+TN2.y*i.wb.xyz+TN2.z*i.wn.xyz);
|
|||
|
|
|||
|
float spec1 = pow(max(0,dot(WN2,H)),_Gloss1) * _SpecPower;
|
|||
|
float spec2 = pow(max(0,dot(WN2,H)),_Gloss1) * _SpecPower;
|
|||
|
|
|||
|
float3 specColor1 = spec1*_SpecularColor * spec2 * _SpecularColor;
|
|||
|
specColor1 += specColor0;
|
|||
|
|
|||
|
float3 diffColor = mainBG2.x * mainBG1.x * mainBG1.y * mainBG2.y * _DiffusePower * 3;
|
|||
|
|
|||
|
float3 envColor = (_Color - _WaterShadowColor) * NoV * NoV * NoV;
|
|||
|
|
|||
|
diffColor = (envColor + _WaterShadowColor)* diff + diffColor;
|
|||
|
|
|||
|
float3 fColor = UNITY_LIGHTMODEL_AMBIENT * _WaterShadowColor * 2 + diffColor + specColor1;
|
|||
|
|
|||
|
float a = specColor1.z + _Color.w - NoV + 1;
|
|||
|
a = (1- _RimAlpha * i.vcolor.a )* a;
|
|||
|
|
|||
|
return float4(fColor,a);
|
|||
|
}
|
|||
|
ENDCG
|
|||
|
}
|
|||
|
}
|
|||
|
}
|