Files
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

99 lines
3.9 KiB
HLSL

// WaterCausticsModules
// Copyright (c) 2021 Masataka Hakozaki
#ifndef WCECF_SYNC_COMMON_INCLUDED
#define WCECF_SYNC_COMMON_INCLUDED
#include "../../Effect/Shaders/WaterCausticsEffectCommon.hlsl"
CBUFFER_START(_WCECF_)
float _WCECF_Density;
int3 _WCECF_TexChannels;
float2 _WCECF_TexRotateSinCos;
int _WCECF_TilingSeed;
float _WCECF_TilingRot;
float _WCECF_TilingHard;
float _WCECF_SurfaceY;
float _WCECF_SurfFadeStart;
float _WCECF_SurfFadeCoef;
float _WCECF_DepthFadeStart;
float _WCECF_DepthFadeCoef;
float _WCECF_DistanceFadeStart;
float _WCECF_DistanceFadeCoef;
half _WCECF_IntensityMainLit;
half _WCECF_IntensityAddLit;
float2 _WCECF_ColorShift;
half _WCECF_LitSaturation;
half _WCECF_MultiplyIntensity;
half _WCECF_NormalAtten;
half _WCECF_NormalAttenRate;
half _WCECF_TransparentBack;
half _WCECF_BacksideShadow;
half _WCECF_ShadowIntensity;
int _WCECF_ClipOutside;
int _WCECF_UseImageMask;
float4x4 _WCECF_WorldToObjMatrix;
CBUFFER_END
#if defined(WCE_USE_SAMPLER2D_INSTEAD_TEXTURE2D)
sampler2D _WCECF_CausticsTex;
sampler2D _WCECF_ImageMaskTex;
#define WCE_TEX_PARAMS_RAW(texName) texName
#define WCE_TEX_SAMPLE_RAW(texName, uv) tex2D(texName, uv)
#else
TEXTURE2D(_WCECF_CausticsTex);
TEXTURE2D(_WCECF_ImageMaskTex);
SAMPLER(sampler_WCECF_CausticsTex);
SAMPLER(sampler_WCECF_ImageMaskTex);
#define WCE_TEX_PARAMS_RAW(texName) texName, sampler##texName
#define WCE_TEX_SAMPLE_RAW(texName, uv) texName.Sample(sampler##texName, (uv))
#endif
half3 WCECF_syncCore(float3 WorldPos, half3 NormalWS, float2 ScreenUV, half3 BaseColor, half aten) {
half3 c = WCE_EffectCore(WorldPos, NormalWS, ScreenUV, WCE_TEX_PARAMS_RAW(_WCECF_CausticsTex), _WCECF_TexRotateSinCos, _WCECF_TexChannels, _WCECF_TilingSeed, _WCECF_TilingRot, _WCECF_TilingHard, _WCECF_Density, _WCECF_SurfaceY, _WCECF_SurfFadeStart, _WCECF_SurfFadeCoef, _WCECF_DepthFadeStart, _WCECF_DepthFadeCoef, _WCECF_IntensityMainLit * aten, _WCECF_IntensityAddLit * aten, _WCECF_ShadowIntensity, _WCECF_ColorShift, _WCECF_LitSaturation, _WCECF_NormalAtten, _WCECF_NormalAttenRate, _WCECF_TransparentBack, _WCECF_BacksideShadow);
c *= 1 - (1 - BaseColor) * _WCECF_MultiplyIntensity;
return c;
}
half3 WCECF_SyncCommon(float3 WorldPos, half3 NormalWS, float2 ScreenUV, half3 BaseColor) {
#if defined(_WCE_DISABLED)
return half3(0, 0, 0);
#elif defined(SHADERGRAPH_PREVIEW)
return WCECF_syncCore(WorldPos, NormalWS, ScreenUV, BaseColor, 1);
#else
float atten = 1;
const float ATTEN_TH = 0.001;
// Distance Fade
float3 viewDir = WorldPos - _WorldSpaceCameraPos; // ←ifに入れるとVR SinglePassでエラー
[branch] if (_WCECF_DistanceFadeCoef > 0.0001) {
atten *= smoothstep(0, 1, 1 - (length(viewDir) - _WCECF_DistanceFadeStart) * _WCECF_DistanceFadeCoef);
}
// Volume & Image Mask
[branch] if (atten > ATTEN_TH && (_WCECF_ClipOutside != 0 || _WCECF_UseImageMask != 0)) {
float3 posES = mul(_WCECF_WorldToObjMatrix, float4(WorldPos, 1)).xyz;
[branch] if (atten > ATTEN_TH && _WCECF_ClipOutside != 0 && (abs(posES.x) > 0.5 || abs(posES.y) > 0.5 || abs(posES.z) > 0.5)) {
atten = 0;
}
[branch] if (atten > ATTEN_TH && _WCECF_UseImageMask != 0) {
atten *= WCE_TEX_SAMPLE_RAW(_WCECF_ImageMaskTex, posES.xz + 0.5).r;
}
}
[branch] if (atten > ATTEN_TH) {
return WCECF_syncCore(WorldPos, NormalWS, ScreenUV, BaseColor, atten);
} else {
return half3(0, 0, 0);
}
#endif
}
// for ShaderGraph
void WCECF_SyncForShaderGraph_float(float3 WorldPos, half3 NormalWS, float2 ScreenUV, half3 BaseColor, out half3 EmissionColor) {
EmissionColor = WCECF_SyncCommon(WorldPos, NormalWS, ScreenUV, BaseColor);
}
#endif