Skip to content

Commit 7fcf470

Browse files
committed
feat(unityengine): add shaders
1 parent cb7d320 commit 7fcf470

10 files changed

Lines changed: 989 additions & 7 deletions

external/json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 55f93686c01528224f448c19128836e7df245f72
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
#include "../../tonemap.hlsl"
2+
3+
Texture2D<float4> t1 : register(t1);
4+
Texture2D<float4> t0 : register(t0);
5+
SamplerState s1_s : register(s1);
6+
SamplerState s0_s : register(s0);
7+
cbuffer cb0 : register(b0){
8+
float4 cb0[39];
9+
}
10+
11+
void main(
12+
float4 v0 : SV_POSITION0,
13+
float2 v1 : TEXCOORD0,
14+
float2 w1 : TEXCOORD1,
15+
out float4 o0 : SV_Target0)
16+
{
17+
float4 r0,r1,r2,r3,r4,r5;
18+
uint4 bitmask, uiDest;
19+
float4 fDest;
20+
21+
r0.x = cb0[29].y;
22+
r1.yz = -cb0[28].yz + w1.xy;
23+
r2.x = cb0[28].x * r1.y;
24+
r1.x = frac(r2.x);
25+
r2.x = r1.x / cb0[28].x;
26+
r1.w = -r2.x + r1.y;
27+
r2.xyz = cb0[28].www * r1.xzw;
28+
r2.xyz = lutShaper(r2.xyz, true, 2);
29+
r0.yw = float2(0, 0.25);
30+
float3 preCG = renodx::color::srgb::DecodeSafe(r2.xyz);
31+
float3 sdrColor = renodx::tonemap::renodrt::NeutralSDR(preCG);
32+
float3 userLutInput = injectedData.toneMapType == 0.f ? saturate(preCG) : sdrColor;
33+
renodx::lut::Config lut_config = renodx::lut::config::Create();
34+
lut_config.lut_sampler = s0_s;
35+
lut_config.strength = injectedData.colorGradeUserLUTStrength;
36+
lut_config.scaling = injectedData.colorGradeUserLUTScaling;
37+
lut_config.type_input = renodx::lut::config::type::SRGB;
38+
lut_config.type_input = renodx::lut::config::type::SRGB;
39+
lut_config.precompute = cb0[29].xyz;
40+
lut_config.recolor = 0.f;
41+
lut_config.max_channel = injectedData.toneMapType == 0.f ? 0.f : 1.f;
42+
lut_config.gamut_compress = injectedData.toneMapType == 0.f ? 0.f : 1.f;
43+
lut_config.tetrahedral = false;
44+
r0.yw = float2(0,0.25);
45+
r3.xyz = renodx::lut::Sample(userLutInput, lut_config, t0);
46+
if (injectedData.toneMapType != 0.f) {
47+
lut_config.strength = 1.f;
48+
r3.xyz = renodx::tonemap::UpgradeToneMap(preCG, userLutInput, r3.xyz, injectedData.colorGradeUserLUTStrength);
49+
}
50+
preCG = r3.xyz;
51+
r3.xyz = renodx::color::srgb::EncodeSafe(r3.xyz);
52+
r1.xyz = -r1.xzw * cb0[28].www + r3.xyz;
53+
r1.xyz = cb0[29].www * r1.xyz + r2.xyz;
54+
r1.xyz = r1.xyz * cb0[32].www + float3(-0.217637643,-0.217637643,-0.217637643);
55+
r1.xyz = r1.xyz * cb0[32].zzz + float3(0.217637643,0.217637643,0.217637643);
56+
r2.x = dot(float3(0.390405,0.549941,0.00892632), r1.xyz);
57+
r2.y = dot(float3(0.0708416,0.963172,0.00135775), r1.xyz);
58+
r2.z = dot(float3(0.0231082,0.128021,0.936245), r1.xyz);
59+
r1.xyz = cb0[30].xyz * r2.xyz;
60+
r2.x = dot(float3(2.858470,-1.628790,-0.024891), r1.xyz);
61+
r2.y = dot(float3(-0.210182,1.158200,0.000324281), r1.xyz);
62+
r2.z = dot(float3(-0.041812,-0.118169,1.068670), r1.xyz);
63+
r1.xyz = cb0[31].xyz * r2.xyz;
64+
r2.x = dot(r1.xyz, cb0[33].xyz);
65+
r2.y = dot(r1.xyz, cb0[34].xyz);
66+
r2.z = dot(r1.xyz, cb0[35].xyz);
67+
float3 preLGG = r2.xyz;
68+
r1.xyz = r2.xyz * cb0[38].xyz + cb0[36].xyz;
69+
r1.xyz = sign(r1.xyz) * pow(abs(r1.xyz), cb0[37].xyz);
70+
r1.xyz = liftGammaGainScaling(r1.xyz, preLGG, cb0[36].xyz, cb0[37].xyz, cb0[38].xyz, 2);
71+
bool isWCG = r1.x < 0.0 || r1.y < 0.0 || r1.z < 0.0;
72+
if(injectedData.toneMapType != 0.f){
73+
r1.xyz = renodx::color::srgb::DecodeSafe(r1.xyz);
74+
r1.xyz = isWCG ? renodx::color::bt2020::from::BT709(r1.xyz) : r1.xyz;
75+
r1.xyz = renodx::color::srgb::EncodeSafe(r1.xyz);
76+
}
77+
r1.xyz = max(float3(0,0,0), r1.xyz);
78+
r0.x = step(r1.z, r1.y);
79+
r2.xy = r1.zy;
80+
r3.xy = -r2.xy + r1.yz;
81+
r2.zw = float2(-1.0, 2.0 / 3.0);
82+
r3.zw = float2(1,-1);
83+
r2.xyzw = r0.xxxx * r3.xywz + r2.xywz;
84+
r0.x = step(r2.x, r1.x);
85+
r3.z = r2.w;
86+
r2.w = r1.x;
87+
r1.z = dot(r1.xyz, float3(0.212672904,0.715152204,0.0721750036));
88+
r3.xyw = r2.wyx;
89+
r3.xyzw = r3.xyzw + -r2.xyzw;
90+
r2.xyzw = r0.xxxx * r3.xyzw + r2.xyzw;
91+
r0.x = min(r2.w, r2.y);
92+
r0.x = r2.x + -r0.x;
93+
r0.y = r0.x * 6.0 + 0.0001;
94+
r2.y = r2.w + -r2.y;
95+
r0.y = r2.y / r0.y;
96+
r0.y = r2.z + r0.y;
97+
r0.z = abs(r0.y);
98+
r3.xyzw = t1.SampleLevel(s1_s, r0.zw, 0).yxzw;
99+
r4.x = cb0[32].x + r0.z;
100+
r3.x = saturate(r3.x);
101+
r0.y = r3.x + r3.x;
102+
r0.z = 0.0001 + r2.x;
103+
r1.x = r0.x / r0.z;
104+
r1.yw = float2(0.25,0.25);
105+
r3.xyzw = t1.SampleLevel(s1_s, r1.xy, 0).zxyw;
106+
r5.xyzw = t1.SampleLevel(s1_s, r1.zw, 0).wxyz;
107+
r5.x = saturate(r5.x);
108+
r3.x = saturate(r3.x);
109+
r0.x = dot(r3.xx, r0.yy);
110+
r0.x = r5.x * r0.x;
111+
r0.x = dot(cb0[32].yy, r0.xx);
112+
r4.y = 0.25;
113+
r3.xyzw = t1.SampleLevel(s1_s, r4.xy, 0).xyzw;
114+
r3.x = saturate(r3.x);
115+
r0.y = r3.x + r4.x;
116+
r0.yzw = float3(-0.5,0.5,-1.5) + r0.yyy;
117+
r0.w = r0.y > 1 ? r0.w : r0.y;
118+
r0.y = r0.y < 0 ? r0.z : r0.w;
119+
r0.yzw = float3(1.0, 2.0 / 3.0, 1.0 / 3.0) + r0.yyy;
120+
r0.yzw = frac(r0.yzw);
121+
r0.yzw = r0.yzw * float3(6,6,6) + float3(-3,-3,-3);
122+
r0.yzw = saturate(float3(-1,-1,-1) + abs(r0.yzw));
123+
r0.yzw = float3(-1,-1,-1) + r0.yzw;
124+
r0.yzw = r1.xxx * r0.yzw + float3(1,1,1);
125+
r1.xyz = r2.xxx * r0.yzw;
126+
r1.x = dot(r1.xyz, float3(0.212672904,0.715152204,0.0721750036));
127+
r0.yzw = r2.xxx * r0.yzw + -r1.xxx;
128+
r0.xyz = r0.xxx * r0.yzw + r1.xxx;
129+
if (injectedData.toneMapType == 0.f) {
130+
r0.xyz = saturate(r0.xyz);
131+
}
132+
float3 hdrColor = renodx::color::srgb::DecodeSafe(r0.xyz);
133+
if(injectedData.toneMapType != 0.f){
134+
hdrColor = isWCG ? renodx::color::bt709::from::BT2020(hdrColor) : hdrColor;
135+
}
136+
sdrColor = renodx::tonemap::renodrt::NeutralSDR(hdrColor);
137+
float3 curvesInput = injectedData.toneMapType <= 1.f ? hdrColor : sdrColor;
138+
r0.xyz = curvesInput;
139+
isWCG = r0.x < 0.0 || r0.y < 0.0 || r0.z < 0.0;
140+
if(injectedData.toneMapType != 0.f){
141+
r0.xyz = isWCG ? renodx::color::bt2020::from::BT709(r0.xyz) : r0.xyz;
142+
}
143+
r0.xyz = renodx::color::srgb::EncodeSafe(r0.xyz);
144+
r0.xyz = float3(0.00390625,0.00390625,0.00390625) + r0.xyz;
145+
r0.w = 0.75;
146+
r1.xyzw = t1.Sample(s1_s, r0.xw).wxyz;
147+
r1.x = saturate(r1.x);
148+
r2.xyzw = t1.Sample(s1_s, r0.yw).xyzw;
149+
r0.xyzw = t1.Sample(s1_s, r0.zw).xyzw;
150+
r1.z = saturate(r0.w);
151+
r1.y = saturate(r2.w);
152+
r0.xyz = float3(0.00390625,0.00390625,0.00390625) + r1.xyz;
153+
r0.w = 0.75;
154+
r1.xyzw = t1.Sample(s1_s, r0.xw).xyzw;
155+
o0.x = saturate(r1.x);
156+
r1.xyzw = t1.Sample(s1_s, r0.yw).xyzw;
157+
r0.xyzw = t1.Sample(s1_s, r0.zw).xyzw;
158+
o0.z = saturate(r0.z);
159+
o0.y = saturate(r1.y);
160+
o0.w = 1;
161+
if (injectedData.toneMapType != 0.f) {
162+
o0.xyz = renodx::color::srgb::Decode(o0.xyz);
163+
o0.xyz = isWCG ? renodx::color::bt709::from::BT2020(o0.xyz) : o0.xyz;
164+
o0.xyz = renodx::tonemap::UpgradeToneMap(hdrColor, sdrColor, o0.xyz, 1.f);
165+
o0.xyz = renodx::color::srgb::EncodeSafe(o0.xyz);
166+
}
167+
o0.xyz = renodx::color::srgb::DecodeSafe(o0.xyz);
168+
o0.xyz = lerp(preCG, o0.xyz, injectedData.colorGradeInternalLUTStrength);
169+
if (injectedData.tonemapCheck == 1.f && (injectedData.count2Old == injectedData.count2New)) {
170+
o0.xyz = applyUserNoTonemap(o0.xyz);
171+
}
172+
o0.xyz = renodx::color::srgb::EncodeSafe(o0.xyz);
173+
return;
174+
}

0 commit comments

Comments
 (0)