Skip to content

Commit d371908

Browse files
committed
feat(unityengine); add songs of silence shaders
1 parent 7fcf470 commit d371908

4 files changed

Lines changed: 257 additions & 0 deletions

File tree

src/games/unityengine/addon.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,8 @@ const ShaderItem INITIAL_SHADERS[] = {
11761176
UberHDLinearOnDraw(0x0E7B6A15),
11771177
UberHDLinearOnDraw(0x0E883404),
11781178
UberHDLinearOnDraw(0x0EC64D75),
1179+
UberHDLinearOnDraw(0x0D429D27),
1180+
UberHDLinearOnDraw(0xBCC1D592),
11791181
UberHDGammaOnDraw(0x0F750BE1),
11801182
UberHDLinearOnDraw(0x0F4188A5),
11811183
UberHDGammaOnDraw(0x1C581A77),
@@ -2195,6 +2197,7 @@ const ShaderItem INITIAL_SHADERS[] = {
21952197
CustomShaderEntryCallback(0xE96B977C, &CountLinear),
21962198
CustomShaderEntryCallback(0xB1DF8B20, &CountLinear),
21972199
CustomShaderEntryCallback(0x1F20DEB9, &Count),
2200+
CustomShaderEntryCallback(0x1F20DEB9, &Count),
21982201
CustomShaderEntryCallback(0x0D4651C9, &CountLinear), // gamesfarm postfx
21992202
CustomShaderEntryCallback(0x0299214E, &CountLinear), // gamesfarm postfx
22002203
CustomShaderEntryCallback(0x244A72BB, &CountLinear), // gamesfarm postfx
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include "../../common.hlsl"
2+
3+
Texture2D<float4> t2 : register(t2);
4+
Texture2D<float4> t1 : register(t1);
5+
Texture2D<float4> t0 : register(t0);
6+
SamplerState s0_s : register(s0);
7+
cbuffer cb0 : register(b0){
8+
float4 cb0[147];
9+
}
10+
11+
// Songs of Silence
12+
13+
void main(
14+
float4 v0 : SV_POSITION0,
15+
float2 v1 : TEXCOORD0,
16+
out float4 o0 : SV_Target0)
17+
{
18+
float4 r0,r1,r2,r3,r4;
19+
uint4 bitmask, uiDest;
20+
float4 fDest;
21+
22+
r0.xy = -cb0[132].xy * float2(0.5,0.5) + cb0[28].xy;
23+
r0.xy = min(v1.xy, r0.xy);
24+
r0.xyzw = t0.SampleBias(s0_s, r0.xy, cb0[4].x).xyzw;
25+
if (injectedData.countOld < injectedData.countNew) {
26+
r0.xyz = InvertToneMapScale(r0.xyz);
27+
}
28+
if (cb0[146].z > 0) {
29+
r1.xy = -cb0[146].xy + v1.xy;
30+
r1.yz = cb0[146].zz * abs(r1.xy) * min(1.f, injectedData.fxVignette);
31+
r1.x = cb0[145].w * r1.y;
32+
r0.w = dot(r1.xz, r1.xz);
33+
r0.w = 1 + -r0.w;
34+
r0.w = max(0, r0.w);
35+
r0.w = log2(r0.w);
36+
r0.w = cb0[146].w * r0.w * max(1.f, injectedData.fxVignette);
37+
r0.w = exp2(r0.w);
38+
r1.xyz = float3(1,1,1) + -cb0[145].xyz;
39+
r1.xyz = r0.www * r1.xyz + cb0[145].xyz;
40+
r0.xyz = r1.xyz * r0.xyz;
41+
}
42+
r0.xyz = cb0[137].www * r0.zxy;
43+
r0.yzx = lutShaper(r0.yzx);
44+
if (injectedData.colorGradeLUTSampling == 0.f) {
45+
r0.yzw = cb0[137].zzz * r0.xyz;
46+
r0.y = floor(r0.y);
47+
r1.xy = float2(0.5,0.5) * cb0[137].xy;
48+
r1.yz = r0.zw * cb0[137].xy + r1.xy;
49+
r1.x = r0.y * cb0[137].y + r1.y;
50+
r2.xyzw = t1.SampleLevel(s0_s, r1.xz, 0).xyzw;
51+
r3.x = cb0[137].y;
52+
r3.y = 0;
53+
r0.zw = r3.xy + r1.xz;
54+
r1.xyzw = t1.SampleLevel(s0_s, r0.zw, 0).xyzw;
55+
r0.x = r0.x * cb0[137].z + -r0.y;
56+
r0.yzw = r1.xyz + -r2.xyz;
57+
r0.xyz = r0.xxx * r0.yzw + r2.xyz;
58+
} else {
59+
r0.xyz = renodx::lut::SampleTetrahedral(t1, r0.yzx, cb0[137].z + 1u);
60+
}
61+
if (cb0[138].w > 0) {
62+
r1.xyz = renodx::color::srgb::EncodeSafe(r0.xyz);
63+
r2.xyz = handleUserLUT(r0.xyz, t2, s0_s, cb0[138].xyz);
64+
r2.xyz = r2.xyz + -r1.xyz;
65+
r1.xyz = cb0[138].www * r2.xyz + r1.xyz;
66+
r0.xyz = renodx::color::srgb::DecodeSafe(r1.xyz);
67+
}
68+
if(injectedData.countOld <= injectedData.countNew) {
69+
r0.xyz = PostToneMapScale(r0.xyz);
70+
}
71+
o0.xyz = r0.xyz;
72+
o0.w = 1;
73+
return;
74+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include "../../common.hlsl"
2+
3+
Texture2D<float4> t3 : register(t3);
4+
Texture2D<float4> t2 : register(t2);
5+
Texture2D<float4> t1 : register(t1);
6+
Texture2D<float4> t0 : register(t0);
7+
SamplerState s0_s : register(s0);
8+
cbuffer cb0 : register(b0){
9+
float4 cb0[147];
10+
}
11+
12+
// Songs of Silence
13+
14+
void main(
15+
float4 v0 : SV_POSITION0,
16+
float2 v1 : TEXCOORD0,
17+
out float4 o0 : SV_Target0)
18+
{
19+
float4 r0,r1,r2,r3,r4;
20+
uint4 bitmask, uiDest;
21+
float4 fDest;
22+
23+
r0.xy = -cb0[132].xy * float2(0.5,0.5) + cb0[28].xy;
24+
r0.xy = min(v1.xy, r0.xy);
25+
r0.xyzw = t0.SampleBias(s0_s, r0.xy, cb0[4].x).xyzw;
26+
r1.xy = -cb0[136].xy * float2(0.5,0.5) + cb0[28].xy;
27+
r1.xy = min(v1.xy, r1.xy);
28+
r1.xyzw = t1.SampleBias(s0_s, r1.xy, cb0[4].x).xyzw;
29+
r1.xyz = cb0[139].xxx * r1.xyz * injectedData.fxBloom;
30+
r0.xyz = r1.xyz * cb0[139].yzw + r0.xyz;
31+
if (cb0[146].z > 0) {
32+
r1.xy = -cb0[146].xy + v1.xy;
33+
r1.yz = cb0[146].zz * abs(r1.xy) * min(1.f, injectedData.fxVignette);
34+
r1.x = cb0[145].w * r1.y;
35+
r0.w = dot(r1.xz, r1.xz);
36+
r0.w = 1 + -r0.w;
37+
r0.w = max(0, r0.w);
38+
r0.w = log2(r0.w);
39+
r0.w = cb0[146].w * r0.w * max(1.f, injectedData.fxVignette);
40+
r0.w = exp2(r0.w);
41+
r1.xyz = float3(1,1,1) + -cb0[145].xyz;
42+
r1.xyz = r0.www * r1.xyz + cb0[145].xyz;
43+
r0.xyz = r1.xyz * r0.xyz;
44+
}
45+
r0.xyz = cb0[137].www * r0.zxy;
46+
r0.yzx = lutShaper(r0.yzx);
47+
if (injectedData.colorGradeLUTSampling == 0.f) {
48+
r0.yzw = cb0[137].zzz * r0.xyz;
49+
r0.y = floor(r0.y);
50+
r1.xy = float2(0.5,0.5) * cb0[137].xy;
51+
r1.yz = r0.zw * cb0[137].xy + r1.xy;
52+
r1.x = r0.y * cb0[137].y + r1.y;
53+
r2.xyzw = t2.SampleLevel(s0_s, r1.xz, 0).xyzw;
54+
r3.x = cb0[137].y;
55+
r3.y = 0;
56+
r0.zw = r3.xy + r1.xz;
57+
r1.xyzw = t2.SampleLevel(s0_s, r0.zw, 0).xyzw;
58+
r0.x = r0.x * cb0[137].z + -r0.y;
59+
r0.yzw = r1.xyz + -r2.xyz;
60+
r0.xyz = r0.xxx * r0.yzw + r2.xyz;
61+
} else {
62+
r0.xyz = renodx::lut::SampleTetrahedral(t2, r0.yzx, cb0[137].z + 1u);
63+
}
64+
if (cb0[138].w > 0) {
65+
r1.xyz = renodx::color::srgb::EncodeSafe(r0.xyz);
66+
r2.xyz = cb0[138].zzz * r1.zxy;
67+
r0.w = floor(r2.x);
68+
r2.xw = float2(0.5,0.5) * cb0[138].xy;
69+
r2.yz = r2.yz * cb0[138].xy + r2.xw;
70+
r2.x = r0.w * cb0[138].y + r2.y;
71+
r3.xyzw = t3.SampleLevel(s0_s, r2.xz, 0).xyzw;
72+
r4.x = cb0[138].y;
73+
r4.y = 0;
74+
r2.xy = r4.xy + r2.xz;
75+
r2.xyzw = t3.SampleLevel(s0_s, r2.xy, 0).xyzw;
76+
r0.w = r1.z * cb0[138].z + -r0.w;
77+
r2.xyz = r2.xyz + -r3.xyz;
78+
r2.xyz = r0.www * r2.xyz + r3.xyz;
79+
r2.xyz = handleUserLUT(r0.xyz, t3, s0_s, cb0[138].xyz);
80+
r2.xyz = r2.xyz + -r1.xyz;
81+
r1.xyz = cb0[138].www * r2.xyz + r1.xyz;
82+
r0.xyz = renodx::color::srgb::DecodeSafe(r1.xyz);
83+
}
84+
if(injectedData.countOld <= injectedData.countNew) {
85+
r0.xyz = PostToneMapScale(r0.xyz);
86+
}
87+
o0.xyz = r0.xyz;
88+
o0.w = 1;
89+
return;
90+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include "../../common.hlsl"
2+
3+
Texture2D<float4> t0 : register(t0);
4+
cbuffer cb0 : register(b0){
5+
float4 cb0[147];
6+
}
7+
8+
// Songs of Silence
9+
10+
void main(
11+
float4 v0 : SV_POSITION0,
12+
float2 v1 : TEXCOORD0,
13+
out float4 o0 : SV_Target0)
14+
{
15+
float4 r0,r1,r2,r3,r4,r5,r6,r7,r8;
16+
uint4 bitmask, uiDest;
17+
float4 fDest;
18+
19+
r0.zw = float2(0,0);
20+
r1.xy = cb0[136].xy * v1.xy;
21+
r1.xy = (int2)r1.xy;
22+
r2.xyzw = (int4)r1.xyxy + int4(0,-1,-1,0);
23+
r0.xy = r2.zw;
24+
r0.xyz = t0.Load(r0.xyz).xyz;
25+
r3.xyzw = (int4)r1.xyxy + int4(0,1,1,0);
26+
r4.xy = r3.zw;
27+
r4.zw = float2(0,0);
28+
r4.xyz = t0.Load(r4.xyz).xyz;
29+
r2.zw = float2(0,0);
30+
r2.xyz = t0.Load(r2.xyz).xyz;
31+
r3.zw = float2(0,0);
32+
r3.xyz = t0.Load(r3.xyz).xyz;
33+
r1.zw = float2(0,0);
34+
r1.xyz = t0.Load(r1.xyz).xyz;
35+
if (injectedData.toneMapType >= 2.f) {
36+
r0.xyz /= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
37+
r4.xyz /= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
38+
r2.xyz /= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
39+
r3.xyz /= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
40+
r1.xyz /= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
41+
} else if (injectedData.toneMapType == 1.f) {
42+
r0.xyz /= 50.f;
43+
r4.xyz /= 50.f;
44+
r2.xyz /= 50.f;
45+
r3.xyz /= 50.f;
46+
r1.xyz /= 50.f;
47+
}
48+
r5.xyz = max(r4.xyz, r0.xyz);
49+
r5.xyz = max(r2.xyz, r5.xyz);
50+
r5.xyz = max(r5.xyz, r3.xyz);
51+
r6.xyz = max(r5.xyz, r1.xyz);
52+
r5.xyz = float3(4,4,4) * r5.xyz;
53+
r5.xyz = rcp(r5.xyz);
54+
r6.xyz = float3(1,1,1) + -r6.xyz;
55+
r7.xyz = min(r4.xyz, r0.xyz);
56+
r7.xyz = min(r7.xyz, r2.xyz);
57+
r7.xyz = min(r7.xyz, r3.xyz);
58+
r8.xyz = r7.xyz * float3(4,4,4) + float3(-4,-4,-4);
59+
r7.xyz = min(r7.xyz, r1.xyz);
60+
r5.xyz = r7.xyz * r5.xyz;
61+
r7.xyz = rcp(r8.xyz);
62+
r6.xyz = r7.xyz * r6.xyz;
63+
r5.xyz = max(r6.xyz, -r5.xyz);
64+
r0.w = max(r5.y, r5.z);
65+
r0.w = max(r5.x, r0.w);
66+
r0.w = min(0, r0.w);
67+
r0.w = max(-0.1875, r0.w);
68+
r0.w = cb0[146].x * r0.w;
69+
r0.xyz = r0.www * r0.xyz;
70+
r0.xyz = r0.www * r2.xyz + r0.xyz;
71+
r0.xyz = r0.www * r3.xyz + r0.xyz;
72+
r0.xyz = r0.www * r4.xyz + r0.xyz;
73+
r0.w = r0.w * 4 + 1;
74+
r0.xyz = r0.xyz + r1.xyz;
75+
r1.x = asfloat(2129764351u - asuint(r0.w));
76+
r0.w = -r1.x * r0.w + 2;
77+
r0.w = r1.x * r0.w;
78+
r0.xyz = r0.xyz * r0.www;
79+
if (injectedData.toneMapType >= 2.f) {
80+
r0.xyz *= (injectedData.toneMapPeakNits / injectedData.toneMapGameNits);
81+
} else if (injectedData.toneMapType == 1.f) {
82+
r0.xyz *= 50.f;
83+
}
84+
if (injectedData.countOld == injectedData.countNew) {
85+
r0.xyz = PostToneMapScale(r0.xyz);
86+
}
87+
o0.xyz = r0.xyz;
88+
o0.w = 1;
89+
return;
90+
}

0 commit comments

Comments
 (0)