Files
SVSimServer/SVSim.BattleEngine/Engine/Class3dPostImageEffect.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

340 lines
12 KiB
C#

using UnityEngine;
[ExecuteInEditMode]
public class Class3dPostImageEffect : MonoBehaviour
{
public int BLOOM_DIVIDER = 4;
public float BLOOM_WIDTHMOD = 0.5f;
private const int PASS_FASTBLOOM_DOWNSAMPLE = 1;
private const int PASS_FASTBLOOM_VERTICALBLUR = 2;
private const int PASS_FASTBLOOM_HORIZONTALBLUR = 3;
private const int PASS_POSTDIFFUSIONBLOOM_VERTICALGAUSS = 0;
private const int PASS_POSTDIFFUSIONBLOOM_HORIZONGAUSS = 1;
private const int PASS_POSTDIFFUSIONBLOOM_BLOOM = 2;
private const int PASS_POSTDIFFUSIONBLOOM_OVERLAY1 = 3;
private const int PASS_POSTDIFFUSIONBLOOM_OVERLAY2 = 5;
private const int PASS_POSTDIFFUSIONDOFBLOOM_APPLYBG = 0;
private const int PASS_POSTDIFFUSIONDOFBLOOM_APPLYBGDEBUG = 1;
private const int PASS_POSTDIFFUSIONDOFBLOOM_COC2ALPHA = 2;
private const int PASS_POSTDIFFUSIONDOFBLOOM_DOWNSAMPLE = 3;
private const int PASS_POSTDIFFUSIONDOFBLOOM_FOGBLOOM = 4;
private const int PASS_POSTDIFFUSIONDOFBLOOM_BLOOMCOLOR = 5;
private const int PASS_POSTDIFFUSIONDOFBLOOM_VERTICALGAUSS = 6;
private const int PASS_POSTDIFFUSIONDOFBLOOM_HORIZONGAUSS = 7;
private const int PASS_POSTDIFFUSIONDOFBLOOM_BLOOM = 8;
private const int PASS_POSTDIFFUSIONDOFBLOOM_COCBG_RICH = 9;
private const int PASS_POSTDIFFUSIONDOFBLOOM_COCBGFG = 10;
private const int PASS_POSTDIFFUSIONDOFBLOOM_OVERLAY1 = 11;
private const int PASS_POSTDIFFUSIONDOFBLOOM_OVERLAY1_INVERSE = 12;
private const int PASS_POSTDIFFUSIONDOFBLOOM_OVERLAY2 = 13;
private const int PASS_POSTDIFFUSIONDOFBLOOM_OVERLAY2_INVERSE = 14;
private const int PASS_POSTDIFFUSIONDOFBLOOM_COCFG = 15;
private const float DOF_HEIGHT_BASE_SIZE_HORIZONTAL = 0.0034722222f;
private const float DOF_HEIGHT_BASE_SIZE_VERTICAL = 0.0010986328f;
private const float DIVIDE_SCREEN = 1f;
private const float DOFONEOVERBASESIZE = 0.001953125f;
private const float DOFBASESIZE = 512f;
private float _dofWidthOverHeight = 1.25f;
private float _dofHeightBaseSize = 0.0024414062f;
private int _rezworkWidth;
private int _rezworkHeight;
[SerializeField]
public DofDiffusionBloomOverlayParam _param = new DofDiffusionBloomOverlayParam();
[SerializeField]
private Material _postDiffusionBloomMaterial;
[SerializeField]
private Material _postDiffusionDofBloomMaterial;
[SerializeField]
private Material _fastBloomMaterial;
[Header("Antialiasing")]
public bool EnableAntialiasing = true;
public float edgeThresholdMin = 0.05f;
public float edgeThreshold = 0.2f;
public float edgeshilhouette = 4f;
private Material antialiasingMaterial;
public void Initialize()
{
_postDiffusionDofBloomMaterial = (_postDiffusionBloomMaterial = new Material(Shader.Find("Class3D/ImageEffects/Rich/PostDiffusionDofBloom_Rich")));
_fastBloomMaterial = new Material(Shader.Find("Class3D/ImageEffects/FastBloom"));
Shader shader = Shader.Find("Hidden/FXAA III (Console)");
if (shader != null && shader.isSupported)
{
antialiasingMaterial = new Material(shader);
}
_param.TargetCamera = GetComponent<Camera>();
}
public void Destroy()
{
if (_fastBloomMaterial != null)
{
Object.Destroy(_fastBloomMaterial);
_fastBloomMaterial = null;
}
if (_postDiffusionBloomMaterial != null)
{
Object.Destroy(_postDiffusionBloomMaterial);
_postDiffusionBloomMaterial = null;
}
if (_postDiffusionDofBloomMaterial != null)
{
Object.Destroy(_postDiffusionDofBloomMaterial);
_postDiffusionDofBloomMaterial = null;
}
if (antialiasingMaterial != null)
{
Object.Destroy(antialiasingMaterial);
antialiasingMaterial = null;
}
}
private static float GetLowResolutionDividerBasedOnQuality(float baseDivider)
{
return baseDivider * 0.5f;
}
private RenderTexture CreateBloomTexture(RenderTexture source, RenderTexture downSample)
{
RenderTexture renderTexture = null;
int width = source.width / BLOOM_DIVIDER;
int height = source.height / BLOOM_DIVIDER;
if (_param.BloomBlurSize > 0f)
{
Vector4 zero = Vector4.zero;
bool flag = false;
RenderTexture renderTexture2 = downSample;
if (renderTexture2 == null)
{
zero.z = 0f;
zero.w = 1f;
_fastBloomMaterial.SetVector("_Parameter", zero);
renderTexture2 = RenderTexture.GetTemporary(width, height, 0);
renderTexture2.filterMode = FilterMode.Bilinear;
Graphics.Blit(source, renderTexture2, _fastBloomMaterial, 1);
flag = true;
}
float num = 1f * (float)source.width / (1f * (float)source.height);
float bloomBlurSize = _param.BloomBlurSize;
float num2 = 0.001953125f;
zero.x = bloomBlurSize / num * num2;
zero.y = bloomBlurSize * num2;
zero.z = _param.BloomThreshold;
zero.w = _param.BloomIntensity;
_fastBloomMaterial.SetVector("_Parameter", zero);
RenderTexture temporary = RenderTexture.GetTemporary(width, height, 0);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture2, temporary, _fastBloomMaterial, 2);
renderTexture = temporary;
temporary = RenderTexture.GetTemporary(width, height, 0);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture, temporary, _fastBloomMaterial, 3);
renderTexture.DiscardContents();
RenderTexture.ReleaseTemporary(renderTexture);
if (flag)
{
renderTexture2.DiscardContents();
RenderTexture.ReleaseTemporary(renderTexture2);
}
return temporary;
}
Vector4 zero2 = Vector4.zero;
zero2.z = _param.BloomThreshold;
zero2.w = _param.BloomIntensity;
_fastBloomMaterial.SetVector("_Parameter", zero2);
RenderTexture temporary2 = RenderTexture.GetTemporary(width, height, 0);
temporary2.filterMode = FilterMode.Bilinear;
Graphics.Blit(source, temporary2, _fastBloomMaterial, 1);
return temporary2;
}
private RenderTexture OnRenderImageDiffusionDofBloom(RenderTexture source, RenderTexture destination)
{
PrepareDofParam(source, _postDiffusionDofBloomMaterial);
int num = 2;
RenderTexture temporary = RenderTexture.GetTemporary(source.width, source.height, 0);
RenderTexture temporary2 = RenderTexture.GetTemporary(_rezworkWidth, _rezworkHeight, 0);
RenderTexture temporary3 = RenderTexture.GetTemporary(_rezworkWidth, _rezworkHeight, 0);
RenderTexture temporary4 = RenderTexture.GetTemporary(_rezworkWidth, _rezworkHeight, 0);
num = 9;
if (_param.DofQualityType == DepthBlurAndBloom.DofQuality.BackgroundAndForeground)
{
_postDiffusionDofBloomMaterial.SetFloat("_dofForegroundSize", _param.DofForegroundSize);
num = 10;
}
Graphics.Blit(source, temporary, _postDiffusionDofBloomMaterial, num);
Graphics.Blit(temporary, temporary4, _postDiffusionDofBloomMaterial, 3);
BlurBlt(temporary4, temporary2, _param.DofMaxBlurSpread);
DiffusionFilterProcess(temporary2, temporary3);
_postDiffusionDofBloomMaterial.SetTexture("_TapLowBackground", temporary3);
RenderTexture renderTexture = null;
if (_param.IsEnableBloom)
{
renderTexture = CreateBloomTexture(temporary, temporary4);
_postDiffusionDofBloomMaterial.SetTexture("_Bloom", renderTexture);
_postDiffusionDofBloomMaterial.SetFloat("_BloomIsScreenBlend", (_param.BloomBlendMode == DofDiffusionBloomOverlayParam.BloomScreenBlendMode.Screen) ? 1f : 0f);
_param.ScreenOverlay.PostFilmBlit(temporary, destination, _postDiffusionDofBloomMaterial, 8, 11, 13);
}
else
{
_postDiffusionDofBloomMaterial.SetFloat("_BloomIsScreenBlend", 0f);
_param.ScreenOverlay.PostFilmBlit(temporary, destination, _postDiffusionDofBloomMaterial, -1, 11, 13);
}
if (renderTexture != null)
{
renderTexture.DiscardContents();
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = null;
}
if (temporary != source)
{
temporary.DiscardContents();
RenderTexture.ReleaseTemporary(temporary);
temporary = null;
}
if (temporary2 != null)
{
temporary2.DiscardContents();
RenderTexture.ReleaseTemporary(temporary2);
temporary2 = null;
}
if (temporary3 != null)
{
temporary3.DiscardContents();
RenderTexture.ReleaseTemporary(temporary3);
temporary3 = null;
}
if (temporary4 != null)
{
temporary4.DiscardContents();
RenderTexture.ReleaseTemporary(temporary4);
temporary4 = null;
}
return destination;
}
private void PrepareDofParam(RenderTexture source, Material mtrl)
{
source.filterMode = FilterMode.Bilinear;
source.wrapMode = TextureWrapMode.Clamp;
Camera targetCamera = _param.TargetCamera;
float num = targetCamera.farClipPlane - targetCamera.nearClipPlane;
float num2 = 0.1f;
Vector4 zero = Vector4.zero;
switch (_param.DofFocalType)
{
case DepthBlurAndBloom.DofFocalType.Transform:
num2 = ((!(_param.DofFocalTransfrom != null)) ? FocalDistance01(_param.DofFocalPoint) : (targetCamera.WorldToViewportPoint(_param.DofFocalTransfrom.position).z / num));
break;
case DepthBlurAndBloom.DofFocalType.Position:
num2 = targetCamera.WorldToViewportPoint(_param.DofFocalPosition).z / num;
break;
case DepthBlurAndBloom.DofFocalType.Point:
num2 = FocalDistance01(_param.DofFocalPoint);
break;
}
if (num2 < 0f)
{
num2 = 0f;
}
if (_param.DofSmoothness < 0.1f)
{
_param.DofSmoothness = 0.1f;
}
zero.x = 1f / (float)source.width;
zero.y = 1f / (float)source.height;
mtrl.SetVector("_InvRenderTargetSize", zero);
float num3 = num2 * _param.DofSmoothness;
float num4 = num3;
_dofWidthOverHeight = (float)source.width / (float)source.height;
_dofHeightBaseSize = ((source.width > source.height) ? 0.0034722222f : 0.0010986328f);
float num5 = 1E-06f;
zero.x = ((num3 < num5) ? 0f : (1f / num3));
zero.y = ((num4 < num5) ? 0f : (1f / num4));
zero.z = _param.DofFocalSize / num * 0.5f + num2;
mtrl.SetVector("_CurveParams", zero);
mtrl.SetFloat("_bloomDofWeight", _param.BloomDofWeight);
float lowResolutionDividerBasedOnQuality = GetLowResolutionDividerBasedOnQuality(1f);
_rezworkWidth = (int)((float)source.width * lowResolutionDividerBasedOnQuality);
_rezworkHeight = (int)((float)source.height * lowResolutionDividerBasedOnQuality);
}
private float FocalDistance01(float worldDist)
{
return _param.TargetCamera.WorldToViewportPoint((worldDist - _param.TargetCamera.nearClipPlane) * _param.TargetCamera.transform.forward + _param.TargetCamera.transform.position).z / (_param.TargetCamera.farClipPlane - _param.TargetCamera.nearClipPlane);
}
private void DiffusionFilterProcess(RenderTexture source, RenderTexture destination)
{
float lowResolutionDividerBasedOnQuality = GetLowResolutionDividerBasedOnQuality(1f);
RenderTexture temporary = RenderTexture.GetTemporary(_rezworkWidth, _rezworkHeight, 0);
Vector4 zero = Vector4.zero;
zero.x = _param.DiffusionBlurSize * lowResolutionDividerBasedOnQuality / (float)_rezworkWidth;
zero.y = _param.DiffusionBlurSize * lowResolutionDividerBasedOnQuality / (float)_rezworkHeight;
_postDiffusionDofBloomMaterial.SetVector("_PixelSize", zero);
zero.x = _param.DiffusionBright;
zero.y = _param.DiffusionSaturation;
zero.z = _param.DiffusionContrast;
zero.w = _param.DiffusionThreshold;
_postDiffusionDofBloomMaterial.SetVector("_ColorParam", zero);
_postDiffusionDofBloomMaterial.mainTexture = source;
Graphics.Blit(null, temporary, _postDiffusionDofBloomMaterial, 6);
_postDiffusionDofBloomMaterial.mainTexture = temporary;
Graphics.Blit(null, destination, _postDiffusionDofBloomMaterial, 7);
_postDiffusionDofBloomMaterial.mainTexture = null;
if (temporary != null)
{
temporary.DiscardContents();
RenderTexture.ReleaseTemporary(temporary);
temporary = null;
}
}
private void BlurBlt(RenderTexture from, RenderTexture to, float spread)
{
}
}