Skip to content

Commit

Permalink
Fix Dissolve breaking stencil masking + Undo Redo functionality for P…
Browse files Browse the repository at this point in the history
…ost script
  • Loading branch information
Melioli committed Apr 28, 2024
1 parent 8b7cae8 commit 13739b4
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 159 deletions.
3 changes: 2 additions & 1 deletion Post Processing.prefab
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,10 @@ MonoBehaviour:
bloomIntensity: 1
bloomWeights: {x: 0.1, y: 0.2, z: 0.3, w: 0.4}
bloomColor: {r: 1, g: 1, b: 1, a: 0}
blurSamples: 10
blurWeight: 1
downsampleValue: 0.5
toneMode: 3
toneMode: 1
exposure: 1
contrast: 1
saturation: 1
Expand Down
9 changes: 5 additions & 4 deletions Resources/StarRail/Materials/Mat_FaceMask.mat
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ Material:
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2010
stringTagMap: {}
stringTagMap:
RenderType: Opaque
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
Expand Down Expand Up @@ -297,7 +298,7 @@ Material:
- _StencilCompB: 5
- _StencilPassA: 0
- _StencilPassB: 2
- _StencilRef: 100
- _StencilRef: 97
- _StockDarkWidth: 0.5
- _StockRoughness: 1
- _StockSP: 0.25
Expand Down Expand Up @@ -376,14 +377,14 @@ Material:
- m_start_renderingOptions: 0
- m_start_rimhue: 0
- m_start_secondarymain: 0
- m_start_specialeffects: 0
- m_start_specialeffects: 1
- m_start_specialeffectsemission: 0
- m_start_specular: 0
- m_start_specularcolor: 0
- m_start_specularintensity: 0
- m_start_specularroughness: 0
- m_start_specularshininess: 0
- m_start_stencilfade: 0
- m_start_stencilfade: 1
- m_start_stockings: 0
- shader_is_using_HoyoToon_editor: 69
- shader_is_using_hoyeditor: 0
Expand Down
5 changes: 5 additions & 0 deletions Scripts/Post Processing/HoyoToonPostEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public override void OnInspectorGUI()
{
HoyoToonPostProcess script = (HoyoToonPostProcess)target;

// Record the target object before making changes
Undo.RecordObject(script, "Modify HoyoToonPostProcess");

// Load and draw logo;
Texture2D logo = Resources.Load<Texture2D>("UI/hoyotoon");
if (logo != null)
Expand All @@ -38,6 +41,8 @@ public override void OnInspectorGUI()
script.bloomIntensity = EditorGUILayout.FloatField("Bloom Intensity", script.bloomIntensity);
script.bloomWeights = EditorGUILayout.Vector4Field("Bloom Weights", script.bloomWeights);
script.bloomColor = EditorGUILayout.ColorField("Bloom Color", script.bloomColor);
script.blurSamples = EditorGUILayout.FloatField("Blur Samples", script.blurSamples);
script.blurWeight = EditorGUILayout.FloatField("Blur Weight", script.blurWeight);
script.downsampleValue = EditorGUILayout.Slider("Downsample Value", script.downsampleValue, 0.1f, 1.0f);

EditorGUI.indentLevel--;
Expand Down
32 changes: 5 additions & 27 deletions Scripts/Post Processing/HoyoToonPostProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public enum BloomMode
public float bloomIntensity = 1.5f;
public Vector4 bloomWeights = new(0.1f, 0.2f, 0.3f, 0.4f);
public Color bloomColor = Color.white;
public float blurSamples = 10;
public float blurWeight = 0.5f;
[Range(0.1f, 1.0f)]
public float downsampleValue = 0.5f;
Expand Down Expand Up @@ -77,6 +78,7 @@ void OnRenderImage(RenderTexture source, RenderTexture destination)
postMaterial.SetFloat("_BloomIntensity", bloomIntensity);
postMaterial.SetVector("_BloomWeights", bloomWeights);
postMaterial.SetColor("_BloomColor", bloomColor);
postMaterial.SetFloat("_BlurSamples", blurSamples);
postMaterial.SetFloat("_BlurWeight", blurWeight);
postMaterial.SetFloat("_Exposure", exposure);
postMaterial.SetFloat("_Contrast", contrast);
Expand All @@ -92,41 +94,17 @@ void OnRenderImage(RenderTexture source, RenderTexture destination)

int width = Mathf.RoundToInt(source.width * downsampleValue);
int height = Mathf.RoundToInt(source.height * downsampleValue);
var bloomPre = RenderTexture.GetTemporary(source.width, source.height, 0, source.format);
var bloomA = RenderTexture.GetTemporary(width, height, 0, source.format);
var bloomB = RenderTexture.GetTemporary(width, height, 0, source.format);
var bloomC = RenderTexture.GetTemporary(width, height, 0, source.format);
var bloomD = RenderTexture.GetTemporary(width, height, 0, source.format);
var bloomUp = RenderTexture.GetTemporary(source.width, source.height, 0, source.format);
var bloomPre = RenderTexture.GetTemporary(width, height, 0, source.format);

Graphics.Blit(source, bloomPre);
Graphics.Blit(null, bloomPre);
Graphics.Blit(null, bloomA);
Graphics.Blit(null, bloomB);
Graphics.Blit(null, bloomC);
Graphics.Blit(null, bloomD);
Graphics.Blit(null, bloomUp);

Graphics.Blit(source, bloomPre, postMaterial, 0); // prefilter
postMaterial.SetTexture("_BloomTexturePre", bloomPre);
RenderTexture.ReleaseTemporary(bloomPre);
Graphics.Blit(bloomPre, bloomA, postMaterial, 1); // prefilter
postMaterial.SetTexture("_BloomTextureA", bloomA);
RenderTexture.ReleaseTemporary(bloomA);
Graphics.Blit(bloomA, bloomB, postMaterial, 2); // horizontal A
postMaterial.SetTexture("_BloomTextureB", bloomB);
RenderTexture.ReleaseTemporary(bloomB);
Graphics.Blit(bloomB, bloomC, postMaterial, 3); // horisontal B
postMaterial.SetTexture("_BloomTextureC", bloomC);
RenderTexture.ReleaseTemporary(bloomC);
Graphics.Blit(bloomC, bloomD, postMaterial, 4); // vertical A
postMaterial.SetTexture("_BloomTextureD", bloomD);
RenderTexture.ReleaseTemporary(bloomD);
Graphics.Blit(bloomD, bloomUp, postMaterial, 5); // vertical A
postMaterial.SetTexture("_BloomTextureUp", bloomUp);
RenderTexture.ReleaseTemporary(bloomUp);

Graphics.Blit(source, destination, postMaterial, 6);

Graphics.Blit(source, destination, postMaterial, 1);
}

void OnDisable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ void simple_dissolve(in float4 primary_diffuse, in float2 uv0, in float2 uv1, in

if(_InvertGradient) gradient = 1.0f - gradient;

out_alpha = gradient.x;
out_alpha = out_alpha * gradient.x;
}

float3 DecodeLightProbe( float3 N )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -793,8 +793,11 @@ float4 ps_base(vs_out i, bool vface : SV_IsFrontFace) : SV_Target
if(_DissoveONM && (_DissolveMode == 2.0)) out_color.xyzw = dissolve_color(i.ws_pos, i.dis_pos, i.dis_uv, i.uv.zw, out_color);
if((_DissoveONM) && (_DissolveMode == 1.0f))
{
simple_dissolve(out_color.xyzw, i.uv.xy, i.uv.zw, i.dis_uv.xy, i.dis_pos, out_color.xyz, out_color.w);
float alpha = 1.0f;
simple_dissolve(out_color.xyzw, i.uv.xy, i.uv.zw, i.dis_uv.xy, i.dis_pos, out_color.xyz, alpha);
clip(out_color.w - _DissolveClipRate);
out_color.w = out_color.w * alpha;

}

return out_color;
Expand Down
165 changes: 40 additions & 125 deletions Shaders/Post Processing/HoyoToonPostProcessing.shader
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,38 @@ Shader "Hidden/HoyoToon/Post Processing"
return f_x;
}

float _BlurSamples;
static float pi = 3.1415926;
static int samples = _BlurSamples;
static float sigma = (float)samples * 0.25;
static float s = 2 * sigma * sigma;

float gauss(float2 i)
{
return exp(-(i.x * i.x + i.y * i.y) / s) / (pi * s);
}

float3 gaussianBlur(SamplerState sp, Texture2D tx, float2 uv, float2 scale)
{
float3 pixel = (float3)0.0f;
float weightSum = 0.0f;
float weight;
float2 offset;


for(int i = -samples / 2; i < samples / 2; i++)
{
for(int j = -samples / 2; j < samples / 2; j++)
{
offset = float2(i, j);
weight = gauss(offset);
pixel += tx.Sample(sp, float4(uv + scale * offset, 0.0f, 1.0f)).rgb * weight;
weightSum += weight;
}
}
return pixel / weightSum;
}

// basic vertex program and structs since they will all use the same ones :
struct VertexData {
float4 vertex : POSITION;
Expand Down Expand Up @@ -180,80 +212,6 @@ Shader "Hidden/HoyoToon/Post Processing"
return color;
}

float4 fp_hora(v2f i) : SV_TARGET
{
float2 uv = (i.uv);
float2 offset = _BlurWeight * _MainTex_TexelSize * float2(1.0f, 0.0);
half4 color = 0.0;

[unroll]
for (int i = 0; i < kernelSize; i++)
{
float2 sampleUV = uv + kernelOffsets[i] * offset;
color += kernel[i] * _MainTex.Sample(sampler_MainTex, sampleUV);
}

return color;
}

float4 fp_horb(v2f i) : SV_TARGET
{
float2 uv = (i.uv);
float2 offset = _BlurWeight * _MainTex_TexelSize * float2(2.0f, 0.0);
half4 color = 0.0;
[unroll]
for (int i = 0; i < kernelSize; i++)
{
float2 sampleUV = uv + kernelOffsets[i] * offset;
color += kernel[i] * _MainTex.Sample(sampler_MainTex, sampleUV);
}

return color;
}

float4 fp_vera(v2f i) : SV_TARGET
{
float2 uv = (i.uv);
float2 offset = _BlurWeight * _MainTex_TexelSize * float2(0.0f, 1.0);
half4 color = 0.0;

[unroll]
for (int i = 0; i < kernelSize; i++)
{
float2 sampleUV = uv + kernelOffsets[i] * offset;
color += kernel[i] * _MainTex.Sample(sampler_MainTex, sampleUV);
}

return color;
}

float4 fp_verb(v2f i) : SV_TARGET
{
float2 uv = (i.uv);
float2 offset = _BlurWeight * _MainTex_TexelSize * float2(0.0f, 2.0);
half4 color = 0.0;
[unroll]
for (int i = 0; i < kernelSize; i++)
{
float2 sampleUV = uv + kernelOffsets[i] * offset;
color += kernel[i] * _MainTex.Sample(sampler_MainTex, sampleUV);
}

return color;
}

float4 fp_up(v2f i) : SV_TARGET
{
float2 uv = i.uv;
float4 color = (float4)0.0f;

color = color + _BloomTextureA.Sample(sampler_BloomTextureA, uv) * _BloomWeights.x;
color = color + _BloomTextureB.Sample(sampler_BloomTextureB, uv) * _BloomWeights.y;
color = color + _BloomTextureC.Sample(sampler_BloomTextureC, uv) * _BloomWeights.z;
color = color + _BloomTextureD.Sample(sampler_BloomTextureD, uv) * _BloomWeights.w;

return color;
}

float4 fp_tone(v2f i) : SV_TARGET
{
Expand All @@ -264,11 +222,13 @@ Shader "Hidden/HoyoToon/Post Processing"
float4 toned = (float4)1.0f;
toned.xyz = original;

float3 bloom = 0.0f;

if(_BloomMode > 0 && !(_UseTonemap == 3))
{
float3 bloomed = _BloomTextureUp.Sample(sampler_BloomTextureUp, uv);
bloomed = bloomed * _BloomIntensity * _BloomColor;
toned.xyz = toned.xyz + bloomed;
bloom = gaussianBlur(sampler_BloomTexturePre, _BloomTexturePre, uv, _BlurWeight * _MainTex_TexelSize);
bloom = (bloom * _BloomIntensity) * _BloomColor;
toned.xyz = toned.xyz + bloom;
}

toned.xyz = toned.xyz * _Exposure;
Expand All @@ -286,9 +246,9 @@ Shader "Hidden/HoyoToon/Post Processing"
toned.xyz = CustomACESTonemapping(toned.xyz);
if(_BloomMode > 0)
{
float3 bloomed = _BloomTextureUp.Sample(sampler_BloomTextureUp, uv);
bloomed = bloomed * _BloomIntensity * _BloomColor;
toned.xyz = toned.xyz + bloomed;
bloom = gaussianBlur(sampler_BloomTexturePre, _BloomTexturePre, uv, _BlurWeight * _MainTex_TexelSize);
bloom = (bloom * _BloomIntensity) * _BloomColor;
toned.xyz = toned.xyz + bloom;
}
}

Expand Down Expand Up @@ -318,51 +278,6 @@ Shader "Hidden/HoyoToon/Post Processing"
ENDHLSL
}

Pass
{
Name "Bloom Horizontal A"
HLSLPROGRAM
#pragma vertex vp
#pragma fragment fp_hora
ENDHLSL
}

Pass
{
Name "Bloom Horizontal B"
HLSLPROGRAM
#pragma vertex vp
#pragma fragment fp_horb
ENDHLSL
}

Pass
{
Name "Bloom Vertical A"
HLSLPROGRAM
#pragma vertex vp
#pragma fragment fp_vera
ENDHLSL
}

Pass
{
Name "Bloom Vertical B"
HLSLPROGRAM
#pragma vertex vp
#pragma fragment fp_verb
ENDHLSL
}

Pass
{
Name "Bloom Upsample"
HLSLPROGRAM
#pragma vertex vp
#pragma fragment fp_up
ENDHLSL
}

Pass
{
Name "Color Grading"
Expand Down

0 comments on commit 13739b4

Please sign in to comment.