Files
MinFt/Client/Assets/Plugins/URPWater/Shaders/HLSL/Includes/URPWaterScattering.hlsl
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

68 lines
1.9 KiB
HLSL

//-----------------------------------------------------------------------------
// Copyright(C) Yan Verde - All Rights Reserved
// Copyright protected under Unity Asset Store EULA
// Refer to https://unity3d.com/legal/as_terms for more informations
// -----------------------------------------------------------------------------
// URP Water
// Author : Yan Verde
// Date : April 10, 2021
// -----------------------------------------------------------------------------
#ifndef URPWATER_SCATTERING_INCLUDED
#define URPWATER_SCATTERING_INCLUDED
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "URPWaterVariables.hlsl"
#include "URPWaterHelpers.hlsl"
void ComputeScattering(inout GlobalData data, Varyings IN)
{
#if _SCATTERING_ON
Light mainLight = data.mainLight;
float3 lightColor = mainLight.color;
// --- Translucency ---
float3 L = mainLight.direction;
float3 V = data.worldViewDir;
float3 N = IN.worldNormal;// data.worldNormal;
#if _DOUBLE_SIDED_ON
L.y = lerp(-L.y, L.y, data.vFace);
#endif
float3 H = normalize(L + N * _ScatteringRangeMin);
float VdotH = pow(saturate(max(0, dot(V, -H))), _ScatteringRangeMax);
float scatterMask = saturate(VdotH) * _ScatteringIntensity;
#if _DISPLACEMENTMODE_GERSTNER && _CAPS_SCATTERING_ON
float3 worldN = lerp(N, data.worldNormal, _CapsScatterNormals);
float NdotV = dot(worldN, V);
float waveScatter = smoothstep(_CapsScatteringRangeMin, _CapsScatteringRangeMax, saturate(IN.texcoord3.y));
float fresnel = max(0, NdotV * NdotV);
fresnel *= 1- dot(float3(0,1,0), V);
scatterMask += saturate(fresnel) * waveScatter * _CapsScatteringIntensity;
#endif
float3 scatterColor = _ScatteringColor.rgb * saturate(scatterMask);
data.scattering = scatterColor * saturate(lightColor);
#if _DOUBLE_SIDED_ON
data.scattering = lerp(data.scattering * 0.25, data.scattering, data.vFace);
#endif
#endif
}
#endif