From f4bbef9e99d7e83cd34060e966ed74747eda9209 Mon Sep 17 00:00:00 2001 From: StarBeats <977663818@qq.com> Date: Mon, 16 Dec 2024 20:33:34 +0800 Subject: [PATCH] xess jitter --- .../Plugins/Windows/GfxPluginNativeRender.dll | Bin 296960 -> 296960 bytes .../Art/VFX/Materials/HologramGarden_Mat.mat | 6 +- .../Art/VFX/Materials/HologramOasis_Mat.mat | 6 +- Assets/Settings/Mobile/Mobile_High.asset | 3 +- .../Mobile/Mobile_High_Renderer.asset | 18 +- NativeRenderPlugin/RenderAPI.h | 1 + NativeRenderPlugin/RenderAPI_D3D12.cpp | 16 +- NativeRenderPlugin/RenderAPI_Vulkan.cpp | 1 - NativeRenderPlugin/RenderingPlugin.cpp | 5 + NativeRenderPlugin/features/xess1/xess.cpp | 6 +- NativeRenderPlugin/features/xess1/xess.h | 2 +- ...ty.RenderPipelines.Universal.Editor.asmdef | 13 +- .../UniversalRenderPipelineAssetEditor.cs | 3 - .../Runtime/Passes/PostProcessPass.cs | 2 +- .../Runtime/ScriptableRenderer.cs | 5 +- .../NatvieHelper/RenderingPlugin.cs | 20 +- .../Runtime/SuperRendering/SF/FG.cs | 3 +- .../Runtime/SuperRendering/SR/Scripts/GSR.cs | 52 +- .../Runtime/SuperRendering/SR/Scripts/SR.cs | 86 +++- .../Runtime/SuperRendering/SR/Scripts/XESS.cs | 95 ++-- .../Runtime/SuperRendering/SRSettings.cs | 39 +- .../Runtime/TemporalAA.cs | 11 +- ...y.RenderPipelines.Universal.Runtime.asmdef | 12 +- .../Runtime/UniversalRenderPipelineCore.cs | 4 +- Packages/manifest.json | 1 + Packages/packages-lock.json | 6 + ProjectSettings/ProjectSettings.asset | 11 +- ProjectSettings/QualitySettings.asset | 2 +- UserSettings/Layouts/default-2022.dwlt | 466 +++++++++++------- 29 files changed, 593 insertions(+), 302 deletions(-) diff --git a/Assets/Plugins/Windows/GfxPluginNativeRender.dll b/Assets/Plugins/Windows/GfxPluginNativeRender.dll index b4d75f237c3e6ee7030c1724cb04621a04877b73..ee2ce4c89b8fa6b07a266b063a34314973a8dab2 100644 GIT binary patch delta 58972 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�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%0A7G3ZzX&J<#Y*CD8?5^61BlMCom>tK*6CC zoeKQ0Tx`+^hfg96+jjs~AbZn-`_#^y%xzjEy%>NKPH`3>2p1tA;g#@Em@nBm$a6%` zA+ckyKc}ivnIE2lf@BE7Ymf}6O863z3gWO+i4I2iBWfpH=3tnDBz+Lxt#&nh97#`v zV;BXe85W0e0Ik!FX=3R!;Uh@8GzworrBWG`$sxoR4nsNE0eBTE!7hidA;}wuIcKsp zQDy*kJd4eax-#LUvsnMKltG-?NS3l3Za`9K1Kf}7fp)erS0Y0}?k~p>afjh1|Mp`PQV@)v2(-r!j&i{>EY}UgE=e?M$e1c+espL zC2GO0grQ4mH9r}eIs8U|3b14F$Yl&p?94J_{)z(FahN}!RePydn5k@RrG0#+Gz z13ZkXvCS21|HJr_?)AgjYDeLIRKV|k2^hPQ-*m8rUm)qmHduNUBbgueLU1`s!Hz+z zoYf@j7?z?ONdxakGQgwo9mfuv1V+}Mob}{|Q`HW^Wk^PEHGE3#7(8*IvvmaEMzoj4 zHNf+)=1|U(h2T*nN5#xV?81?~>B85=rp!1z^O~@3m)Fo;NFrkJ{y zGm^{=@D(JDh{K{KPU8abY9w1kCES4Q^srUKy*G2hf}|JA;Tj~3Xn-H9-3ABT!q!B+ z{#$7Fd>l#SU24okWbY5)tw<`UhVP?d>;xRV%o#*}_$MSsze-q(q|puVAd+(0;9vgY zq^X8=$W8ElZCrH>TpK6kFJFowJTJ;i+l|;SwZ`sD?Y$j>D7<9Cpc@3Fn|q*yS+%{YKUs zj(Lppg~vJeV+Ua?YQ}DZ>6@t>+Y3)aEs_RSBRL-w?m}`U6o+3UX+#@LdBU+X;q53v z-fH+cqIWs|V@$1gx;g~i4UU}&k08llwlF@BbZG!SfkK2gz;BQ=qV!3gc|mQ2Z-T9A z3y<4M!0or*ok2BYLm8&E+rxz4n=Z~COlj1AiP@bP4Kp-S${k>u^g`1 z&ebs$tb@-qI(8F0{~0#do|c&fCp=4Cq@N6TpkmTDg)!QZv?yl>fk&`dcnZ0^O8%2vQ9kSy6YxEIMP5PqZKZSaB@D1gkf;6IQo08`4FbC4{+ z9QYWLaHgU+?w1@p8xBX3rU=fkZTA1A7~PsVUy~L=ri(WV=yqmpH)XFljT82Nm4QZ~ zg^(%YO@cJc&~DyBKVUOUyJ4z$y8<9W;JQVTLIygkr_x4w-}LCjTef_t5C;eE*NMfe7irHsSQ`y5-IXgV25?*`zD zsFKwYZkC95oGuE$)kq2w?nP422k`ZG+1|+zho`r&W5PZIK7}NGBYYD{1$&|UJtwaP zN2y&57a~cs2yS?f^)F5x&b;@X3}tZD-#K7V!D_hw0~&&zfHU_yX-eU1YRBQ(AF{QO zCJ669Qsy@J*vITM_#tZ(Y(=s#Z7~0UV;3F>vt8myhRN^|R6+)Mey#5(&MNT3vrv$5 zc`o=iu}Qxi#?%(>Q@aJ4gH9S@54Ce(1zJow!a50;r)0%w5(is&NbPob%co9Dm%@V2 z*dLHt7(lW#!ue`1fVFDZ!M`CXGX^t1cWmLHR#qkD_+Yq>uRS=z_r9RJm~-g^nERzO zCj9Uw6eL`ph93GA2O(_X8Avu!;R3aVQ6!BMF8mssW5FVLE0P9P!NPCYy7Jini*XMs zr_dF!!?$!1b^)Bz#(h0(Vdi&in%G6~Y$OGh!WGCK`B2`P5SxFlFo%$&X@`IKo-He% zhQfzXDRvaP|H=B7^G|Q=MI=mW5qDAl- z4R3<`G`s~yI=JlBQ3F3k(zsT5d`Bm*A5K$yI=n&c#c(~61=|L{MeW&Pi+d+58M3y9%D0 z&C@NUDTU|dQn8c+Uk>N<0s$HJz*rxbIRjgGq%Uv0FzAfeWlrzsGL1Ci40y``m#HK3 zQkXMH@>s?TFGtm+SpdI5vM_rG(_o)t`(fU(ywbyzX$5e>Q1X*LY=%)Nk_=1XHY8mt zJlW6RERrDrr;Ma0uuI^FNVb{;e65J54k;)OOHXjZGe?mIc}bsu)hF_JA-3=xBz3jG zuEnf>aRS9I?tHS848Rb)SnYE7C$%@hpGUj6HP49&oN$s;&}4YK+RNcvYVU;u$2be) zgSR1jGlrRCow1TRHtaGdsS|+n)GmkH)sDlD15V@21fH5Y#j*YHr74b`fY+Vo*wrwK z>R6Ztc<1R(coa4u36H^t&LBK2n;b@`GwDW-U@34Rk`szWFovYn!u+$@>{$9j_&2mi z#tK{>q#$hJW2hQ?6a2f{AHV^;up(PlA^fx2)iC@cUoB*iH(HvexlFc~y%O9qlYxo7 z4Teg2bd=0haQ1n0Dd`u(Z;_0HHaPNpm-&G3BKQ~7id_X?Ko$Kg(+sbh#Tdb^fZhx3 zykXne<2WXLHcJ*_y^<&fPbhPlz1YQY%pV!OG-xb5Wr1Utz|*gE>@(nua>p)(7c6w_ zS#a(mwXboRj@PnfF|S_=eBoNwzc>dgNN~Ml3upe>u@~P!moMh|RT^R4$QyHL6OC8_ z``_f)g|K#sQ$ZcPZmDBez_V_3>>zx%%2_onaM|sST@}VSVY%ZJ!_n0|KTBm};n5YW ze=0L8c|C8HV<+H+4>)5Y1h=dvob=mZ{v$4Pkn{!c8`O^72De3>@g)4?8Yg@K?C>b- zUpBuKjCDu`ny}Ye$M(Ye)vkeK*13#N8V5f{0qlct=XwSp`+(iBwU&WK#lpiIT&5EH z7dYcF#u0WYyzX&&m%8}>$guewM;g%zkKg2s(h~SQDq_{_hVwV`{vh@OXg$Fo#TG_U z2wS+M-es0zFNM3&CTwB91_m8=A#6Z0V1+ktk#fSc0^^@ZHk%*diBCF>D28WjWv@qO zVFbyZu?8O5MneX0$@Ub5B59B?vyojZ;lksPl<9~2&{)D-V3%i{@-yM%VZN3Uu?gPy ztW&`Xc+(E2iz;DGlT(3kCOSy^Quq#%?Y;#r`YW3s;lgEqV@zOI!DC`H5PK+`k5UTh zMR?9mXBCI1W8C(o$96f5*aYRZ%b{f8pEgVg$!g-?Hq2JF!58#aVoNc-k{^@-hO`3K4UFHCi1vm)vKVx5An)o$cP{KODOm zcK(VbC2tYrUtY{XZ2k(xY(=s#+aUk;B6ip|Twgm&!2hTi{#(Uf8sP>c8Jb{RZDB%f zVUKT|G&#_xws1a@rCb2FBI${3@Iw@20TOWhw_&HUz_&c~e8@T2d;pjK=xjDo*t?ys zCc_!<4zwJ5IeZzlWAA}khe?l}4X;Lfu@}J!KhXo&li?h+2wQmG&usSCv%(m=khE?$ z?C^`zpcMFbWDh!c(-9}U5|;exgbO^241q0YP|eOec{eY`&de!xTT)kFw=-Q8vZws1fX z(qI?D%aQC>7r=iZIm)%euXsi71JVd@=;eejhM%Hl!dsy~$8BOPuy8ioHaN^ChjBR1 zZ7PYd^4+Et$Q*hAsPYR`cy)vkfBsU3%x4Ro8KOeS0g=M3V- zb*>A9r}%iaoA46Y`xv(=!S=#yk98I@T!Hb*5L!jV9(Z6V>zRPwa(Rqugd4X|kc~MArWv9P310 zM=3^hwQvgBL^%JdtsoAY0#5e|b0;`?3t$9E zni|+)q7$A1M5lbjZP^8_&BN~{U-QJDf@>0?El4> zc|MIGq7=S=0oy%x(JZ^-pLB4>$(-9yfjWy6Hp!iO(m z2Q`%AJ)Ad}y&-lP{L8#BqnU!L=DE$jKhh#1THqmG4p@NQ4%aMj*55jK@)b^lO5g#t zzk)NFX+g$HDZK6~b~5CxfLH&CZ5(?MELcd7aVjP}{%R+UKa6qJwQkcwqH;LsIwz42 z`YR}uaN*Vfn|I^uNeu35DHO`2whVLNh z(&k4QXzQE|W$+Os$B1TFzTU|!{16pVaRQ!F>*Otg(>Ac(6V89ZnX5LjgR`;4dE<~y{PG(W&y+nsWD z!&!}vEgZ9ht$;LR;h-kACTt)4q>1$}cRCK@ob^|Z;Y0-C7f235U%}ZidV=r}EZONc zrGC~i?D4!)K@NOE?FRVcZpH^`+M#)oZ5=xZe??N4dC6_IBC)r<#P&b3nHF)pFM?0L zLMAda!R4c8&$Z+5h_vyUiU)c0SADCbfmu zPtJ}-I2}nE@6S|Vm=uf3TH#K&$Lz)44SRY#_O_k_i;y%z_&t)#v>#x^Vp1*2seyev zgn3(o!>hLglg}WDSOJHnU{k0cu0#bR$N;A?NsVj;)8P$FP*X^F6lQkzn90~eKeDg; z;fv@D!o9pWbOkEKUJd*4B3e4-6oxU@s+S+Y(ESjxw$CZ+|y&o6ll5V8>t!s-kf+x5v+F%d|MtP+caQD6Bw|My7YEQ9BBEs2zhXY9|VqudH1i z!xS6&NHTk2vDyK60V=j-GZ(`7o#)LXfzPL6QE4A6KzH7(LLzK05{|2W6VIw z&#(#HdYtGoW$+P{hkX>bp>os(e;<4i1<@y{0aYPCdS?=qp`BW-a&jVOek zpW-q*&}Q@qx(D5Yu0fZD`8p5%{*zI{&2vV;BK@)NmXzo*;wj6d^=6o0YYVX?JxOir!0)>m6n8>}s@4b_&_ zme)pW>uMWn8*5{=&9yDHiQ3lMw%Ybuvms?e=7yXN-VMPGr5i#U8a6aW_AR!?bPR4T z-5lB+>3O4dY@P{tOcRwAuL-OvSyQ&Ad`-og$~9GMs@Fui-E2KPslA@aAfsEF6itbG zqrRv=S{yBnhN5NB@@Pf0GFla_j@Cq@(Yk0uv@sfsHb>*pmS`f{7HyB3H7SwNH(6)* z3a%|(8(LeoHn6T_UFo{ey5{xq^)2fYk$aX{Ln5!=WHrt(A&yDZ5?|Z0HnA3?++)T9 zQ=eJyt@qXY>x=6H^(FPe`qKKc`ttgU`pWvM`s(_c`e=P)eRF+FeWJd#zOCMFawQuZ zO|FdO-(>YoO<5CL)4V3WrX}L4w9fA2UF%!xUt1iRS!qp83DlL;1?x)dA`O*RPKtM< zZ=-)>@y1BJ((0c@<<%Y&15W=0BWEwQZt=v{$0K*r?sOAn@)W9Rr1b5(mvD1D#Wc`a zWQfcOTZ1Bvw^$cgF*fk+xl5T{V1P+D%UD+*qs1g^^O$T9{H-&$-?7ZP#?4E+{|i;2 B-6H@1 diff --git a/Assets/Scenes/Terminal/Art/VFX/Materials/HologramGarden_Mat.mat b/Assets/Scenes/Terminal/Art/VFX/Materials/HologramGarden_Mat.mat index c9c630c..50b440d 100644 --- a/Assets/Scenes/Terminal/Art/VFX/Materials/HologramGarden_Mat.mat +++ b/Assets/Scenes/Terminal/Art/VFX/Materials/HologramGarden_Mat.mat @@ -35,7 +35,11 @@ Material: m_LockedProperties: m_SavedProperties: serializedVersion: 3 - m_TexEnvs: [] + m_TexEnvs: + - _SampleTexture2D_08b30b3f114b48d5ba8da4c2c4be251f_Texture_1_Texture2D: + m_Texture: {fileID: 2800000, guid: 5e7fc1923ebc88745bbc44d5a9570124, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - _Push: 1.16 diff --git a/Assets/Scenes/Terminal/Art/VFX/Materials/HologramOasis_Mat.mat b/Assets/Scenes/Terminal/Art/VFX/Materials/HologramOasis_Mat.mat index a33eca1..c8939fb 100644 --- a/Assets/Scenes/Terminal/Art/VFX/Materials/HologramOasis_Mat.mat +++ b/Assets/Scenes/Terminal/Art/VFX/Materials/HologramOasis_Mat.mat @@ -35,7 +35,11 @@ Material: m_LockedProperties: m_SavedProperties: serializedVersion: 3 - m_TexEnvs: [] + m_TexEnvs: + - _SampleTexture2D_08b30b3f114b48d5ba8da4c2c4be251f_Texture_1_Texture2D: + m_Texture: {fileID: 2800000, guid: 5e7fc1923ebc88745bbc44d5a9570124, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - _QueueControl: 0 diff --git a/Assets/Settings/Mobile/Mobile_High.asset b/Assets/Settings/Mobile/Mobile_High.asset index b1a6030..0c31499 100644 --- a/Assets/Settings/Mobile/Mobile_High.asset +++ b/Assets/Settings/Mobile/Mobile_High.asset @@ -28,7 +28,7 @@ MonoBehaviour: m_SupportsHDR: 1 m_HDRColorBufferPrecision: 0 m_MSAA: 1 - m_RenderScale: 0.75 + m_RenderScale: 0.5882813 m_UpscalingFilter: 0 m_FsrOverrideSharpness: 1 m_FsrSharpness: 1 @@ -115,5 +115,4 @@ MonoBehaviour: m_ShaderVariantLogLevel: 0 m_ShadowCascades: 0 superResolution: 14 - sSRenderScale: 3 vrsRate: 0 diff --git a/Assets/Settings/Mobile/Mobile_High_Renderer.asset b/Assets/Settings/Mobile/Mobile_High_Renderer.asset index 396e5a4..0382291 100644 --- a/Assets/Settings/Mobile/Mobile_High_Renderer.asset +++ b/Assets/Settings/Mobile/Mobile_High_Renderer.asset @@ -145,10 +145,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c3c4391133b9f3142b57264047029ec5, type: 3} m_Name: XESS m_EditorClassIdentifier: - m_Active: 0 + m_Active: 1 xess1ConfigParam: - OutputWidth: 1920 - OutputHeight: 1080 + OutputWidth: 2560 + OutputHeight: 1440 Quality: 103 UseHiResMotionVectors: 0 UseJitteredMotionVectors: 0 @@ -157,12 +157,13 @@ MonoBehaviour: UseResponsiveMask: 0 UseAutoExposure: 0 EnableProfiling: 0 + InvertedDepth: 0 VelocityScaleX: -2 VelocityScaleY: 2 - JitterScaleX: 1 - JitterScaleY: 1 + JitterScaleX: 0 + JitterScaleY: 0 ExposureScale: 1 - MipMapBias: -1.91 + MipMapBias: -1.45 --- !u!114 &1524480044783497712 MonoBehaviour: m_ObjectHideFlags: 0 @@ -175,11 +176,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a6b8ba513f1b1fe499924f362fdde22d, type: 3} m_Name: GSR m_EditorClassIdentifier: - m_Active: 1 + m_Active: 0 + quality: 4 v1settings: EnableEdgeDirection: 1 Mode: 1 - Sharp: 2 + Sharp: 0.666 GSRV1Material: {fileID: 2100000, guid: d57e64d5723127243b429034bed82c7d, type: 2} v2settings: UseCompute2Pass: 0 diff --git a/NativeRenderPlugin/RenderAPI.h b/NativeRenderPlugin/RenderAPI.h index f14727a..0506c7c 100644 --- a/NativeRenderPlugin/RenderAPI.h +++ b/NativeRenderPlugin/RenderAPI.h @@ -97,6 +97,7 @@ public: virtual void configXESS1(void* data) {} virtual void disableXESS1() {} + virtual bool getInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) { return false; } protected: virtual void initSupportFeature() = 0; diff --git a/NativeRenderPlugin/RenderAPI_D3D12.cpp b/NativeRenderPlugin/RenderAPI_D3D12.cpp index 159a210..f03de76 100644 --- a/NativeRenderPlugin/RenderAPI_D3D12.cpp +++ b/NativeRenderPlugin/RenderAPI_D3D12.cpp @@ -104,13 +104,19 @@ public: virtual void disableXESS1() override; virtual void configXESS1(void* data) override; + virtual bool getInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) override; + + IUnityGraphicsD3D12v7* s_d3d12; XessV13* xess; + static RenderAPI_D3D12* instance; }; +RenderAPI_D3D12* RenderAPI_D3D12::instance = nullptr; RenderAPI* CreateRenderAPI_D3D12() { - return new RenderAPI_D3D12(); + RenderAPI_D3D12::instance = new RenderAPI_D3D12(); + return RenderAPI_D3D12::instance; } @@ -126,7 +132,6 @@ UINT64 CalcByteAlignedValue(unsigned int byteSize, unsigned int byteAlignment) } - void RenderAPI_D3D12::processDeviceEvent(UnityGfxDeviceEventType type, IUnityInterfaces* interfaces) { switch (type) @@ -282,6 +287,11 @@ void RenderAPI_D3D12::configXESS1(void* data) xess->configxess(data); } -#undef ReturnOnFail +bool RenderAPI_D3D12::getInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) +{ + return xess->get_input_resolution(outw, outh, quality, width, height); +} + +#undef ReturnOnFail #endif // #if SUPPORT_D3D12 diff --git a/NativeRenderPlugin/RenderAPI_Vulkan.cpp b/NativeRenderPlugin/RenderAPI_Vulkan.cpp index e306140..d8f549d 100644 --- a/NativeRenderPlugin/RenderAPI_Vulkan.cpp +++ b/NativeRenderPlugin/RenderAPI_Vulkan.cpp @@ -551,5 +551,4 @@ void RenderAPI_Vulkan::postFGExtrapolation() void RenderAPI_Vulkan::disableFGExtrapolation() { } - #endif // #if SUPPORT_VULKAN diff --git a/NativeRenderPlugin/RenderingPlugin.cpp b/NativeRenderPlugin/RenderingPlugin.cpp index a21a769..a879d06 100644 --- a/NativeRenderPlugin/RenderingPlugin.cpp +++ b/NativeRenderPlugin/RenderingPlugin.cpp @@ -192,6 +192,11 @@ extern "C" UNITY_INTERFACE_EXPORT bool GetFeatureSupport(int feature) return s_current_api->getFeatureSupport((GraphicsFeature)feature); } +extern "C" UNITY_INTERFACE_EXPORT bool GetInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) +{ + return s_current_api->getInputResolution(outw, outh, quality, width, height); +} + // -------------------------------------------------------------------------- // DX12 plugin specific // -------------------------------------------------------------------------- diff --git a/NativeRenderPlugin/features/xess1/xess.cpp b/NativeRenderPlugin/features/xess1/xess.cpp index 5c3c036..510376a 100644 --- a/NativeRenderPlugin/features/xess1/xess.cpp +++ b/NativeRenderPlugin/features/xess1/xess.cpp @@ -258,7 +258,7 @@ void XessV13::execute(void* data, ID3D12GraphicsCommandList* cmd_list) } } -bool XessV13::get_input_resolution(uint32_t outw, uint32_t outh, int quality,uint32_t& Width, uint32_t& Height) +bool XessV13::get_input_resolution(uint32_t outw, uint32_t outh, int quality,uint32_t& width, uint32_t& height) { xess_2d_t inputRes = { 1, 1 }; xess_2d_t outputRes = { outw, outh }; @@ -270,8 +270,8 @@ bool XessV13::get_input_resolution(uint32_t outw, uint32_t outh, int quality,uin return false; } - Width = inputRes.x; - Height = inputRes.y; + width = inputRes.x; + height = inputRes.y; return true; } diff --git a/NativeRenderPlugin/features/xess1/xess.h b/NativeRenderPlugin/features/xess1/xess.h index d19698d..a73e07f 100644 --- a/NativeRenderPlugin/features/xess1/xess.h +++ b/NativeRenderPlugin/features/xess1/xess.h @@ -27,7 +27,7 @@ struct XessV13 final void execute(void* data, ID3D12GraphicsCommandList* cmd_list); - bool get_input_resolution(uint32_t outw, uint32_t outh, int quality, uint32_t& Width, uint32_t& Height); + bool get_input_resolution(uint32_t outw, uint32_t outh, int quality, uint32_t& Width, uint32_t& Height); private: ID3D12Device* device; diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/Unity.RenderPipelines.Universal.Editor.asmdef b/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/Unity.RenderPipelines.Universal.Editor.asmdef index 10bb6c8..a058684 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/Unity.RenderPipelines.Universal.Editor.asmdef +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/Unity.RenderPipelines.Universal.Editor.asmdef @@ -3,17 +3,11 @@ "rootNamespace": "", "references": [ "GUID:15fc0a57446b3144c949da3e2b9737a9", - "GUID:d60799ab2a985554ea1a39cd38695018", - "GUID:a35efad8797223d499f8c68b1f545dbc", "GUID:df380645f10b7bc4b97d4f5eb6303d95", "GUID:3eae0364be2026648bf74846acb8a731", "GUID:be0903cd8e1546f498710afdc59db5eb", "GUID:b75d3cd3037d383a8d1e2f9a26d73d8a", - "GUID:329b4ccd385744985bf3f83cfd77dfe7", - "GUID:9604b18aafdbc9346bceb5e19ac9c746", - "GUID:f9fe0089ec81f4079af78eb2287a6163", - "GUID:116a4d4dbf5c04973bbf517077a062a1", - "GUID:e40ba710768534012815d3193fa296cb" + "GUID:329b4ccd385744985bf3f83cfd77dfe7" ], "includePlatforms": [ "Editor" @@ -44,6 +38,11 @@ "name": "com.unity.visualeffectgraph", "expression": "1.0.0", "define": "HAS_VFX_GRAPH" + }, + { + "name": "com.unity.modules.nvidia", + "expression": "1.0.0", + "define": "ENABLE_NVIDIA_MODULE" } ], "noEngineReferences": false diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/UniversalRenderPipelineAssetEditor.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/UniversalRenderPipelineAssetEditor.cs index 37289c9..00cea26 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/UniversalRenderPipelineAssetEditor.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Editor/UniversalRenderPipelineAssetEditor.cs @@ -21,7 +21,6 @@ namespace UnityEditor.Rendering.Universal private SerializedUniversalRenderPipelineAsset m_SerializedURPAsset; private SerializedProperty superResolution; - private SerializedProperty ssRenderScale; private SerializedProperty vrsRate; /// public override void OnInspectorGUI() @@ -29,7 +28,6 @@ namespace UnityEditor.Rendering.Universal m_SerializedURPAsset.Update(); UniversalRenderPipelineAssetUI.Inspector.Draw(m_SerializedURPAsset, this); EditorGUILayout.PropertyField(superResolution, new GUIContent("超分")); - EditorGUILayout.PropertyField(ssRenderScale, new GUIContent("超分比例")); EditorGUILayout.PropertyField(vrsRate, new GUIContent("VRS Rate")); m_SerializedURPAsset.Apply(); } @@ -38,7 +36,6 @@ namespace UnityEditor.Rendering.Universal { m_SerializedURPAsset = new SerializedUniversalRenderPipelineAsset(serializedObject); superResolution = serializedObject.FindProperty("superResolution"); - ssRenderScale = serializedObject.FindProperty("sSRenderScale"); vrsRate = serializedObject.FindProperty("vrsRate"); CreateRendererReorderableList(); } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs index 0a14a39..dcf1442 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Passes/PostProcessPass.cs @@ -521,7 +521,7 @@ namespace UnityEngine.Rendering.Universal { if (c is ISuperResolutionFeature isr) { - isr.DoSR(cmd, source, dst, m_MotionVectors, ref renderingData); + isr.DoSR(cmd, source, dst, m_MotionVectors, ref renderingData); } } } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/ScriptableRenderer.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/ScriptableRenderer.cs index 4de6e9e..967c709 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/ScriptableRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/ScriptableRenderer.cs @@ -6,6 +6,7 @@ using UnityEditor; using UnityEngine.Experimental.Rendering; using UnityEngine.Experimental.Rendering.RenderGraphModule; using UnityEngine.Profiling; +using X.Rendering.Feature; namespace UnityEngine.Rendering.Universal { @@ -273,7 +274,9 @@ namespace UnityEngine.Rendering.Universal // We clamp this value to 0.0 or less to make sure we don't end up reducing image detail in the downsampling case. float mipBias = Math.Min((float)-Math.Log(cameraWidth / scaledCameraWidth, 2.0f), 0.0f); // Temporal Anti-aliasing can use negative mip bias to increase texture sharpness and new information for the jitter. - float taaMipBias = Math.Min(cameraData.taaSettings.mipBias, 0.0f); + float ssMipBias = 0; + SuperResolutionParamSets.Instance.Get("MipmapBias", ref ssMipBias); + float taaMipBias = Math.Min(cameraData.taaSettings.mipBias, ssMipBias); mipBias = Math.Min(mipBias, taaMipBias); // TODO: xyang Mip bias cmd.SetGlobalVector(ShaderPropertyId.globalMipBias, new Vector2(mipBias, Mathf.Pow(2.0f, mipBias))); diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/NatvieHelper/RenderingPlugin.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/NatvieHelper/RenderingPlugin.cs index 8f28c87..a2f9dad 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/NatvieHelper/RenderingPlugin.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/NatvieHelper/RenderingPlugin.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; +using UnityEngine; namespace X.Rendering.Feature { @@ -27,12 +28,19 @@ namespace X.Rendering.Feature #endif private static extern bool GetFeatureSupport(int feature); -//#if (PLATFORM_IOS || PLATFORM_TVOS || PLATFORM_BRATWURST || PLATFORM_SWITCH) && !UNITY_EDITOR -// [DllImport("__Internal")] -//#else -// [DllImport("GfxPluginNativeRender")] -//#endif -// public static extern bool DoFGExtrapolation(IntPtr src, IntPtr data, IntPtr dst); +#if (PLATFORM_IOS || PLATFORM_TVOS || PLATFORM_BRATWURST || PLATFORM_SWITCH) && !UNITY_EDITOR + [DllImport("__Internal")] +#else + [DllImport("GfxPluginNativeRender")] +#endif + public static extern bool GetInputResolution(int outw, int outh, int quality,ref int width, ref int height); + + //#if (PLATFORM_IOS || PLATFORM_TVOS || PLATFORM_BRATWURST || PLATFORM_SWITCH) && !UNITY_EDITOR + // [DllImport("__Internal")] + //#else + // [DllImport("GfxPluginNativeRender")] + //#endif + // public static extern bool DoFGExtrapolation(IntPtr src, IntPtr data, IntPtr dst); public enum NativeRenderingEvent { diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SF/FG.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SF/FG.cs index b821488..e94919d 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SF/FG.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SF/FG.cs @@ -45,7 +45,8 @@ namespace X.Rendering.Feature p->src = history1.rt.GetNativeTexturePtr(); p->data = history2.rt.GetNativeTexturePtr(); p->dst = dst.rt.GetNativeTexturePtr(); - cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.DoFGExtrapolation, data); + cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent. + , data); context.ExecuteCommandBuffer(cmd); cmd.Clear(); presented = true; diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/GSR.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/GSR.cs index b6b5e22..e96ac7b 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/GSR.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/GSR.cs @@ -7,12 +7,24 @@ using UnityEngine.Rendering.Universal; namespace X.Rendering.Feature { + public enum GsrQuality + { + None, + NativeAA = 1, + UltraQuality, + Quality, + Balanced, + Performance, + UltraPerformance, + } + /// /// 高通 Snapdragon Game Super Resolution. /// api 无关,可能在 /// public sealed class GSR : ScriptableRendererFeature, ISuperResolutionFeature { + public GsrQuality quality; [SerializeField] private V1Setting v1settings; [SerializeField] @@ -22,6 +34,7 @@ namespace X.Rendering.Feature GSRV1 gsr1; GSRV2 gsr2; bool useGSR1 = true; + GsrQuality lastQuality = GsrQuality.None; public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { @@ -43,6 +56,11 @@ namespace X.Rendering.Feature public void DoSR(CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle motionVector, ref RenderingData renderingData) { + if (lastQuality != quality) + { + UniversalRenderPipeline.asset.renderScale = GetRenderScale(); + lastQuality = quality; + } if (useGSR1) { gsr1.DoSR(cmd, source, destination, ref renderingData); @@ -53,6 +71,28 @@ namespace X.Rendering.Feature } } + public float GetRenderScale() + { + switch (quality) + { + case GsrQuality.None: + case GsrQuality.NativeAA: + return 1.0f; + case GsrQuality.UltraQuality: + return 1 / 1.2f; + case GsrQuality.Quality: + return 1 / 1.5f; + case GsrQuality.Balanced: + return 1 / 1.7f; + case GsrQuality.Performance: + return 1 / 2.0f; + case GsrQuality.UltraPerformance: + return 1 / 3.0f; + default: + throw new ArgumentOutOfRangeException(nameof(GsrQuality)); + } + } + public void SetSR(ESuperResolution resolution) { switch (resolution) @@ -173,7 +213,7 @@ namespace X.Rendering.Feature private static Matrix4x4 prevViewProjMatrix; private static int cameraStillFrameCnt; private ProfilingSampler profiler; - + public static readonly Vector2[] JitterPositions = new Vector2[32]; private static int jitterIndex; @@ -228,7 +268,7 @@ namespace X.Rendering.Feature cmdBuffer.SetGlobalFloat("_cameraFovAngleHor", cameraFovAngleHor); cmdBuffer.SetGlobalFloat("minLerpContribution", minLerpContribution); cmdBuffer.SetGlobalInt("sameCameraFrmNum", sameCameraFrmNum); - + cmdBuffer.SetRenderTarget(destination, loadAction: RenderBufferLoadAction.DontCare, storeAction: RenderBufferStoreAction.Store); cmdBuffer.DrawProcedural(Matrix4x4.identity, v2settings.GSRV2Material, 1, MeshTopology.Triangles, 3); @@ -237,7 +277,7 @@ namespace X.Rendering.Feature private void DispatchConvert(CommandBuffer cmdBuffer, RTHandle source, RTHandle motionVector, ref RenderingData renderingData) { - var gsrv2 =v2settings.GSRV2ComputeShader; + var gsrv2 = v2settings.GSRV2ComputeShader; cmdBuffer.SetComputeTextureParam(gsrv2, 0, "InputDepth", renderingData.cameraData.renderer.cameraDepthTargetHandle); cmdBuffer.SetComputeTextureParam(gsrv2, 0, "InputVelocity", motionVector); cmdBuffer.SetComputeTextureParam(gsrv2, 0, "InputColor", source); @@ -254,7 +294,7 @@ namespace X.Rendering.Feature private void DispatchUpscale(CommandBuffer cmdBuffer, RTHandle historyIn, RTHandle historyOut, RTHandle destination) { - var gsrv2 =v2settings.GSRV2ComputeShader; + var gsrv2 = v2settings.GSRV2ComputeShader; cmdBuffer.SetComputeTextureParam(gsrv2, 1, "_inputPrevHistoryOutput", historyIn); cmdBuffer.SetComputeTextureParam(gsrv2, 1, "_inputYCoCgColor", YCoCgColor); cmdBuffer.SetComputeTextureParam(gsrv2, 1, "_inputMotionDepthClipAlphaBuffer", motionDepthClipAlphaBuffer); @@ -292,7 +332,7 @@ namespace X.Rendering.Feature var clip2View = camera.projectionMatrix.inverse; var vcenter = clip2View.MultiplyPoint(Vector3.zero).normalized; var vright = clip2View.MultiplyPoint(new Vector3(0, 1, 0)).normalized; - var fv = math.acos(vcenter.x * vright.x + vcenter.y * vright.y + vcenter.z * vright.z); + var fv = math.acos(vcenter.x * vright.x + vcenter.y * vright.y + vcenter.z * vright.z); cameraFovAngleHor = math.tan(fv) * (float)(source.referenceSize.x) / (float)(source.referenceSize.y); var viewMatrix = camera.worldToCameraMatrix; var projMatrix = camera.projectionMatrix; @@ -352,7 +392,7 @@ namespace X.Rendering.Feature dimension = TextureDimension.Tex2D, msaaSamples = 1 }); - + DispatchConvert(cmd, source, motionVector, ref renderingData); if (jitterIndex % 2 == 0) { diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/SR.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/SR.cs index 5cad6e7..8c8d19e 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/SR.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/SR.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Rendering; @@ -29,20 +30,77 @@ namespace X.Rendering.Feature XESS13, } - public enum ERenderScale + public class SuperResolutionParamSets { - [InspectorName("Native")] - Factor1, - [InspectorName("0.9x")] - Factor09, - [InspectorName("0.8x")] - Factor08, - [InspectorName("0.75x")] - Factor075, - [InspectorName("0.6x")] - Factor06, - [InspectorName("0.5x")] - Factor05, + private static SuperResolutionParamSets instance; + public static SuperResolutionParamSets Instance + { + get + { + if (instance == null) + { + instance = new(); + } + return instance; + } + } + + + Dictionary intMap = new (); + Dictionary floatMap = new (); + Dictionary stringMap = new (); + + public void Get(string name, ref T value) + { + switch (value) + { + case int v: + { + var map = intMap as Dictionary; + map.TryGetValue(name, out value); + break; + } + case float v: + { + var map = floatMap as Dictionary; + map.TryGetValue(name, out value); + break; + } + case string v: + { + var map = stringMap as Dictionary; + map.TryGetValue(name, out value); + break; + } + default: + throw new ArgumentException($"type err:{typeof(T)}"); + } + } + + + public void Set(string name, in T value) + { + switch (value) + { + case int v: + { + intMap[name] = v; + break; + } + case float v: + { + floatMap[name] = v; + break; + } + case string v: + { + stringMap[name] = v; + break; + } + default: + throw new ArgumentException($"type err:{typeof(T)}"); + } + } } [StructLayout(LayoutKind.Sequential)] @@ -58,5 +116,7 @@ namespace X.Rendering.Feature public void SetSR(ESuperResolution resolution); public void DoSR(CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle motionVector, ref RenderingData renderingData); + + public float GetRenderScale(); } } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs index b8b97a9..147486b 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SR/Scripts/XESS.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using UnityEditor.VersionControl; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; @@ -77,6 +78,7 @@ namespace X.Rendering.Feature IntPtr xess1ExecParamPtr; IntPtr xess1ConfigParamPtr; private ProfilingSampler profiler; + XessQuality lastQuality; public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { @@ -97,45 +99,14 @@ namespace X.Rendering.Feature Marshal.FreeHGlobal(xess1ConfigParamPtr); } - static internal Matrix4x4 CalculateJitterMatrix(ref CameraData cameraData, out Vector2 jitter) - { - Matrix4x4 jitterMat = Matrix4x4.identity; - - jitter = Vector2.zero; - { - int taaFrameIndex = Time.frameCount; - - float actualWidth = cameraData.cameraTargetDescriptor.width; - float actualHeight = cameraData.cameraTargetDescriptor.height; - float jitterScale = cameraData.taaSettings.jitterScale; - - jitter = CalculateJitter(taaFrameIndex) * jitterScale; - - float offsetX = jitter.x * (2.0f / actualWidth); - float offsetY = jitter.y * (2.0f / actualHeight); - - jitterMat = Matrix4x4.Translate(new Vector3(offsetX, offsetY, 0.0f)); - } - - return jitterMat; - } - - static internal Vector2 CalculateJitter(int frameIndex) - { - // The variance between 0 and the actual halton sequence values reveals noticeable - // instability in Unity's shadow maps, so we avoid index 0. - float jitterX = HaltonSequence.Get((frameIndex & 1023) + 1, 2) - 0.5f; - float jitterY = HaltonSequence.Get((frameIndex & 1023) + 1, 3) - 0.5f; - - return new Vector2(jitterX, jitterY); - } - - public void DoSR(CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle motionVector, ref RenderingData renderingData) { using var scp = new ProfilingScope(cmd, profiler); Xess1ExecParam* xessexecPtr = (Xess1ExecParam*) xess1ExecParamPtr.ToPointer(); xessexecPtr->ResetHistory = false; + + var cameraData = renderingData.cameraData; + var camera = cameraData.camera; if (needTurnOnXess) { needTurnOnXess = false; @@ -144,8 +115,8 @@ namespace X.Rendering.Feature xesscfgPtr->ExposureScale = xess1ConfigParam.ExposureScale; xesscfgPtr->JitterScaleX = xess1ConfigParam.JitterScaleX; xesscfgPtr->JitterScaleY = xess1ConfigParam.JitterScaleY; - xesscfgPtr->OutputHeight = xess1ConfigParam.OutputHeight; - xesscfgPtr->OutputWidth = xess1ConfigParam.OutputWidth; + xesscfgPtr->OutputHeight = xess1ConfigParam.OutputHeight = camera.pixelHeight; + xesscfgPtr->OutputWidth = xess1ConfigParam.OutputWidth = camera.pixelWidth; xesscfgPtr->Quality = xess1ConfigParam.Quality; xesscfgPtr->UseAutoExposure = xess1ConfigParam.UseAutoExposure; xesscfgPtr->UseHiResMotionVectors = xess1ConfigParam.UseHiResMotionVectors; @@ -160,19 +131,34 @@ namespace X.Rendering.Feature cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.EnableXESS1, IntPtr.Zero); cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.UpdateXESS1Config, xess1ConfigParamPtr); xessexecPtr->ResetHistory = true; + //int w = 0, h = 0; + //// XXX: xess need context + //RenderingPlugin.GetInputResolution(camera.pixelWidth, camera.pixelHeight, (int)xess1ConfigParam.Quality, ref w, ref h); + //var renderScale = (float)w / camera.pixelWidth; + //Debug.Log($"GetInputResolution:{w},{h} renderScale:{renderScale}"); + //UniversalRenderPipelineAsset asset = UniversalRenderPipeline.asset; + //asset.renderScale = renderScale; + } + if (lastQuality != xess1ConfigParam.Quality) + { + UniversalRenderPipeline.asset.renderScale = GetRenderScale(); + lastQuality = xess1ConfigParam.Quality; } - var cameraData = renderingData.cameraData; - var camera = cameraData.camera; - Matrix4x4 projectionMatrix = camera.projectionMatrix; - Matrix4x4 jitterMat = CalculateJitterMatrix(ref cameraData, out Vector2 jitter); - cameraData.SetViewProjectionAndJitterMatrix(camera.worldToCameraMatrix, projectionMatrix, jitterMat); - cameraData.worldSpaceCameraPos = camera.transform.position; + cameraData.NeedJitter = true; + SuperResolutionParamSets.Instance.Set("MipmapBias", xess1ConfigParam.MipMapBias); + SuperResolutionParamSets.Instance.Set("JitterScale", xess1ConfigParam.JitterScaleX); - cmd.SetGlobalVector(ShaderPropertyId.globalMipBias, new Vector2(xess1ConfigParam.MipMapBias, Mathf.Pow(2.0f, xess1ConfigParam.MipMapBias))); + var jitter = TemporalAA.CurrentJitter; + + //cmd.SetGlobalVector(ShaderPropertyId.globalMipBias, new Vector2(xess1ConfigParam.MipMapBias, Mathf.Pow(2.0f, xess1ConfigParam.MipMapBias))); xessexecPtr->InputWidth = source.referenceSize.x; xessexecPtr->InputHeight = source.referenceSize.y; xessexecPtr->ExposureScale = 1.0f; + if (source.rt == null) + { + return; + } xessexecPtr->ColorTexture = source.rt.GetNativeTexturePtr(); xessexecPtr->VelocityTexture = motionVector.rt.GetNativeTexturePtr(); xessexecPtr->OutputTexture = destination.rt.GetNativeTexturePtr(); @@ -206,6 +192,29 @@ namespace X.Rendering.Feature break; } } + + public float GetRenderScale() + { + switch (xess1ConfigParam.Quality) + { + case XessQuality.UltraPerformance: + return 0.3335938f; + case XessQuality.Performance: + return 0.4351563f; + case XessQuality.Balanced: + return 0.5f; + case XessQuality.Quality: + return 0.5882813f; + case XessQuality.UltraQuality: + return 0.6667969f; + case XessQuality.UltraQualityPlus: + return 0.7695313f; + case XessQuality.NativeAA: + return 1.0f; + default: + throw new ArgumentOutOfRangeException(nameof(XessQuality)); + } + } } } diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SRSettings.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SRSettings.cs index 2c0fd27..33ad0e6 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SRSettings.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/SuperRendering/SRSettings.cs @@ -6,10 +6,6 @@ namespace UnityEngine.Rendering.Universal { [SerializeField] private ESuperResolution superResolution; - [SerializeField] - private ERenderScale sSRenderScale; - - public ERenderScale SSRenderScale => sSRenderScale; public ESuperResolution SuperResolution => superResolution; @@ -21,39 +17,30 @@ namespace UnityEngine.Rendering.Universal private void UpdateSSSettings() { var renderer = GetRenderer(this.m_DefaultRendererIndex); + var renderScale = 1.0f; + bool hasActive = false; foreach (var item in renderer.rendererFeatures) { if (item is ISuperResolutionFeature isr) { isr.SetSR(superResolution); + if (item.isActive) + { + renderScale = isr.GetRenderScale(); + hasActive = true; + } } } - switch (sSRenderScale) + if (!hasActive) { - case ERenderScale.Factor1: - this.renderScale = 1.0f; - break; - case ERenderScale.Factor09: - this.renderScale = .9f; - break; - case ERenderScale.Factor08: - this.renderScale = .8f; - break; - case ERenderScale.Factor075: - this.renderScale = .75f; - break; - case ERenderScale.Factor06: - this.renderScale = .6f; - break; - case ERenderScale.Factor05: - this.renderScale = .5f; - break; - default: - break; + superResolution = ESuperResolution.None; + } + else + { + this.renderScale = renderScale; } - } protected override void OnValidate() diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/TemporalAA.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/TemporalAA.cs index 5dcc574..df2b814 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/TemporalAA.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/TemporalAA.cs @@ -2,6 +2,7 @@ using System; using UnityEngine.Experimental.Rendering; using UnityEngine.Experimental.Rendering.RenderGraphModule; using UnityEngine.Serialization; +using X.Rendering.Feature; namespace UnityEngine.Rendering.Universal { @@ -301,7 +302,7 @@ namespace UnityEngine.Rendering.Universal { Matrix4x4 jitterMat = Matrix4x4.identity; - bool isJitter = cameraData.IsTemporalAAEnabled(); + bool isJitter = cameraData.IsTemporalAAEnabled() || cameraData.NeedJitter; jitter = Vector2.zero; if (isJitter) { @@ -310,7 +311,9 @@ namespace UnityEngine.Rendering.Universal float actualWidth = cameraData.cameraTargetDescriptor.width; float actualHeight = cameraData.cameraTargetDescriptor.height; - float jitterScale = cameraData.taaSettings.jitterScale; + float srJitterScale = 0; + SuperResolutionParamSets.Instance.Get("JitterScale", ref srJitterScale); + float jitterScale = Mathf.Max(cameraData.taaSettings.jitterScale, srJitterScale); jitter = CalculateJitter(taaFrameIndex) * jitterScale; @@ -323,9 +326,11 @@ namespace UnityEngine.Rendering.Universal return jitterMat; } + public static Vector2 CurrentJitter; + static internal Matrix4x4 CalculateJitterMatrix(ref CameraData cameraData) { - return CalculateJitterMatrix(ref cameraData, out var jitter); + return CalculateJitterMatrix(ref cameraData, out CurrentJitter); } static internal Vector2 CalculateJitter(int frameIndex) diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Unity.RenderPipelines.Universal.Runtime.asmdef b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Unity.RenderPipelines.Universal.Runtime.asmdef index 02be9e8..d9ea6be 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Unity.RenderPipelines.Universal.Runtime.asmdef +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/Unity.RenderPipelines.Universal.Runtime.asmdef @@ -7,7 +7,7 @@ "GUID:7dbf32976982c98448af054f2512cb79", "GUID:d8b63aba1907145bea998dd612889d6b", "GUID:2665a8d13d1b3f18800f46e256720795", - "GUID:86bc95e6fdb13ff43aa04316542905ae" + "GUID:86bc95e6fdb13ff43aa04316542905ae" ], "includePlatforms": [], "excludePlatforms": [], @@ -66,6 +66,16 @@ "name": "com.unity.inputsystem", "expression": "0.0.0", "define": "ENABLE_INPUT_SYSTEM_PACKAGE" + }, + { + "name": "com.unity.modules.nvidia", + "expression": "0.0.0", + "define": "ENABLE_NVIDIA_MODULE" + }, + { + "name": "com.unity.modules.nvidia", + "expression": "0.0.0", + "define": "ENABLE_NVIDIA" } ], "noEngineReferences": false diff --git a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/UniversalRenderPipelineCore.cs b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/UniversalRenderPipelineCore.cs index 1cb3644..1b42f08 100644 --- a/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/UniversalRenderPipelineCore.cs +++ b/Packages/com.unity.render-pipelines.universal@14.0.11/Runtime/UniversalRenderPipelineCore.cs @@ -5,6 +5,7 @@ using Unity.Collections.LowLevel.Unsafe; using UnityEngine.Assertions; using UnityEngine.Experimental.GlobalIllumination; using UnityEngine.Experimental.Rendering; +using X.Rendering.Feature; using Lightmapping = UnityEngine.Experimental.GlobalIllumination.Lightmapping; namespace UnityEngine.Rendering.Universal @@ -626,6 +627,8 @@ namespace UnityEngine.Rendering.Universal && postProcessEnabled; // No Postprocessing } + internal bool NeedJitter { get; set; } + /// /// The sorting criteria used when drawing opaque objects by the internal URP render passes. /// When a GPU supports hidden surface removal, URP will rely on that information to avoid sorting opaque objects front to back and @@ -744,7 +747,6 @@ namespace UnityEngine.Rendering.Universal get => taaSettings.resetHistoryFrames != 0; } - /// /// Camera at the top of the overlay camera stack /// diff --git a/Packages/manifest.json b/Packages/manifest.json index 62bf514..fed5f99 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -25,6 +25,7 @@ "com.unity.modules.imageconversion": "1.0.0", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.nvidia": "1.0.0", "com.unity.modules.particlesystem": "1.0.0", "com.unity.modules.physics": "1.0.0", "com.unity.modules.physics2d": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index a5eed86..f9fe65b 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -283,6 +283,12 @@ "source": "builtin", "dependencies": {} }, + "com.unity.modules.nvidia": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, "com.unity.modules.particlesystem": { "version": "1.0.0", "depth": 0, diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index e9ff1dc..8ab20e1 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -777,6 +777,9 @@ PlayerSettings: - m_BuildTarget: MacStandaloneSupport m_APIs: 10000000 m_Automatic: 0 + - m_BuildTarget: OpenHarmonyPlayer + m_APIs: 0b00000015000000 + m_Automatic: 1 m_BuildTargetVRSettings: [] m_DefaultShaderChunkSizeInMB: 16 m_DefaultShaderChunkCount: 8 @@ -1071,10 +1074,10 @@ PlayerSettings: webGLMemoryGeometricGrowthCap: 96 webGLPowerPreference: 2 scriptingDefineSymbols: - Android: STARTER_ASSETS_PACKAGES_CHECKED;RENDER_GRAPH_ENABLED + Android: STARTER_ASSETS_PACKAGES_CHECKED;RENDER_GRAPH_ENABLED;ENABLE_NVIDIA_MODULE;ENABLE_INPUT_SYSTEM Nintendo Switch: STARTER_ASSETS_PACKAGES_CHECKED - OpenHarmony: RENDER_GRAPH_ENABLED - Standalone: STARTER_ASSETS_PACKAGES_CHECKED;URP_EXPERIMENTAL_TAA_ENABLE;RENDER_GRAPH_ENABLED + OpenHarmony: RENDER_GRAPH_ENABLED;STARTER_ASSETS_PACKAGES_CHECKED;ENABLE_INPUT_SYSTEM + Standalone: STARTER_ASSETS_PACKAGES_CHECKED;URP_EXPERIMENTAL_TAA_ENABLE;RENDER_GRAPH_ENABLED;ENABLE_NVIDIA_MODULE;ENABLE_INPUT_SYSTEM iPhone: STARTER_ASSETS_PACKAGES_CHECKED additionalCompilerArguments: {} platformArchitecture: {} @@ -1221,7 +1224,7 @@ PlayerSettings: weixinMiniGameInjectStrippedMethodLogger: 0 weixinMiniGameEnableDotNetWasmExceptionHandling: 1 weixinMiniGamePreserveEventDelegate: 0 - activeInputHandler: 1 + activeInputHandler: 2 windowsGamepadBackendHint: 0 cloudProjectId: framebufferDepthMemorylessMode: 0 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index b169e94..2915345 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -28,7 +28,7 @@ QualitySettings: realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 1 useLegacyDetailDistribution: 1 - vSyncCount: 0 + vSyncCount: 1 realtimeGICPUUsage: 100 lodBias: 1 maximumLODLevel: 0 diff --git a/UserSettings/Layouts/default-2022.dwlt b/UserSettings/Layouts/default-2022.dwlt index 13c98f1..177d065 100644 --- a/UserSettings/Layouts/default-2022.dwlt +++ b/UserSettings/Layouts/default-2022.dwlt @@ -14,17 +14,41 @@ MonoBehaviour: m_EditorClassIdentifier: m_PixelRect: serializedVersion: 2 - x: 2886 - y: 183 - width: 1934 - height: 971 + x: 311 + y: 278 + width: 1551 + height: 1099 m_ShowMode: 0 - m_Title: Frame Debugger - m_RootView: {fileID: 4} - m_MinSize: {x: 1000, y: 521} + m_Title: Project Settings + m_RootView: {fileID: 5} + m_MinSize: {x: 310, y: 221} m_MaxSize: {x: 4000, y: 4021} m_Maximized: 0 --- !u!114 &2 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PixelRect: + serializedVersion: 2 + x: 2818 + y: 201 + width: 1934 + height: 965 + m_ShowMode: 0 + m_Title: Frame Debugger + m_RootView: {fileID: 7} + m_MinSize: {x: 1000, y: 521} + m_MaxSize: {x: 4000, y: 4021} + m_Maximized: 0 +--- !u!114 &3 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -38,17 +62,68 @@ MonoBehaviour: m_EditorClassIdentifier: m_PixelRect: serializedVersion: 2 - x: 9 - y: 52 - width: 2542 - height: 1331 + x: 0 + y: 43 + width: 2560 + height: 1349 m_ShowMode: 4 m_Title: Console - m_RootView: {fileID: 13} + m_RootView: {fileID: 16} m_MinSize: {x: 875, y: 321} m_MaxSize: {x: 10000, y: 10000} - m_Maximized: 0 ---- !u!114 &3 + m_Maximized: 1 +--- !u!114 &4 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: ProjectSettingsWindow + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1551 + height: 1099 + m_MinSize: {x: 310, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_ActualView: {fileID: 20} + m_Panes: + - {fileID: 20} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &5 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 4} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1551 + height: 1099 + m_MinSize: {x: 310, y: 221} + m_MaxSize: {x: 4000, y: 4021} + vertical: 0 + controlID: 9761 + draggingID: 0 +--- !u!114 &6 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -66,15 +141,15 @@ MonoBehaviour: x: 0 y: 0 width: 1934 - height: 971 + height: 965 m_MinSize: {x: 1000, y: 521} m_MaxSize: {x: 4000, y: 4021} - m_ActualView: {fileID: 17} + m_ActualView: {fileID: 21} m_Panes: - - {fileID: 17} + - {fileID: 21} m_Selected: 0 m_LastSelected: 0 ---- !u!114 &4 +--- !u!114 &7 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -87,19 +162,19 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 3} + - {fileID: 6} m_Position: serializedVersion: 2 x: 0 y: 0 width: 1934 - height: 971 + height: 965 m_MinSize: {x: 1000, y: 521} m_MaxSize: {x: 4000, y: 4021} vertical: 0 - controlID: 1238 + controlID: 3485 draggingID: 0 ---- !u!114 &5 +--- !u!114 &8 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -114,19 +189,19 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 439 + x: 391 y: 0 - width: 1662 - height: 759 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 22} + width: 1472 + height: 770 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 26} m_Panes: - {fileID: 22} - - {fileID: 18} - m_Selected: 0 - m_LastSelected: 1 ---- !u!114 &6 + - {fileID: 26} + m_Selected: 1 + m_LastSelected: 0 +--- !u!114 &9 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -139,20 +214,20 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 11} - - {fileID: 5} + - {fileID: 14} + - {fileID: 8} m_Position: serializedVersion: 2 x: 0 y: 0 - width: 2101 - height: 759 + width: 1863 + height: 770 m_MinSize: {x: 200, y: 50} m_MaxSize: {x: 16192, y: 8096} vertical: 0 - controlID: 55 + controlID: 41 draggingID: 0 ---- !u!114 &7 +--- !u!114 &10 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -167,18 +242,18 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 1400 + x: 1245 y: 0 - width: 701 - height: 522 - m_MinSize: {x: 100, y: 100} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 23} + width: 618 + height: 529 + m_MinSize: {x: 102, y: 121} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 27} m_Panes: - - {fileID: 23} + - {fileID: 27} m_Selected: 0 m_LastSelected: 0 ---- !u!114 &8 +--- !u!114 &11 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -191,20 +266,20 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 12} - - {fileID: 7} + - {fileID: 15} + - {fileID: 10} m_Position: serializedVersion: 2 x: 0 - y: 759 - width: 2101 - height: 522 + y: 770 + width: 1863 + height: 529 m_MinSize: {x: 200, y: 50} m_MaxSize: {x: 16192, y: 8096} vertical: 0 - controlID: 143 + controlID: 127 draggingID: 0 ---- !u!114 &9 +--- !u!114 &12 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -217,20 +292,20 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 16} - - {fileID: 10} + - {fileID: 19} + - {fileID: 13} m_Position: serializedVersion: 2 x: 0 y: 30 - width: 2542 - height: 1281 + width: 2560 + height: 1299 m_MinSize: {x: 300, y: 100} m_MaxSize: {x: 24288, y: 16192} vertical: 0 - controlID: 141 + controlID: 163 draggingID: 0 ---- !u!114 &10 +--- !u!114 &13 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -245,18 +320,18 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 2101 + x: 1863 y: 0 - width: 441 - height: 1281 - m_MinSize: {x: 275, y: 50} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 20} + width: 697 + height: 1299 + m_MinSize: {x: 276, y: 71} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 24} m_Panes: - - {fileID: 20} + - {fileID: 24} m_Selected: 0 m_LastSelected: 0 ---- !u!114 &11 +--- !u!114 &14 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -273,16 +348,16 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 439 - height: 759 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} - m_ActualView: {fileID: 21} + width: 391 + height: 770 + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 25} m_Panes: - - {fileID: 21} + - {fileID: 25} m_Selected: 0 m_LastSelected: 0 ---- !u!114 &12 +--- !u!114 &15 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -299,16 +374,16 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 1400 - height: 522 + width: 1245 + height: 529 m_MinSize: {x: 231, y: 271} m_MaxSize: {x: 10001, y: 10021} - m_ActualView: {fileID: 19} + m_ActualView: {fileID: 23} m_Panes: - - {fileID: 19} + - {fileID: 23} m_Selected: 0 m_LastSelected: 0 ---- !u!114 &13 +--- !u!114 &16 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -321,22 +396,22 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 14} - - {fileID: 9} - - {fileID: 15} + - {fileID: 17} + - {fileID: 12} + - {fileID: 18} m_Position: serializedVersion: 2 x: 0 y: 0 - width: 2542 - height: 1331 + width: 2560 + height: 1349 m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} m_UseTopView: 1 m_TopViewHeight: 30 m_UseBottomView: 1 m_BottomViewHeight: 20 ---- !u!114 &14 +--- !u!114 &17 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -353,12 +428,12 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 2542 + width: 2560 height: 30 m_MinSize: {x: 0, y: 0} m_MaxSize: {x: 0, y: 0} m_LastLoadedLayoutName: ---- !u!114 &15 +--- !u!114 &18 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -374,12 +449,12 @@ MonoBehaviour: m_Position: serializedVersion: 2 x: 0 - y: 1311 - width: 2542 + y: 1329 + width: 2560 height: 20 m_MinSize: {x: 0, y: 0} m_MaxSize: {x: 0, y: 0} ---- !u!114 &16 +--- !u!114 &19 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -392,20 +467,81 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Children: - - {fileID: 6} - - {fileID: 8} + - {fileID: 9} + - {fileID: 11} m_Position: serializedVersion: 2 x: 0 y: 0 - width: 2101 - height: 1281 + width: 1863 + height: 1299 m_MinSize: {x: 200, y: 100} m_MaxSize: {x: 16192, y: 16192} vertical: 1 - controlID: 142 + controlID: 126 draggingID: 0 ---- !u!114 &17 +--- !u!114 &20 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13854, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 310, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Project Settings + m_Image: {fileID: -5712115415447495865, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 311 + y: 278 + width: 1551 + height: 1078 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_PosLeft: {x: 0, y: 0} + m_PosRight: {x: 0, y: 1080} + m_Scope: 1 + m_SplitterFlex: 0.2 + m_SearchText: input + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: 4dcf9b58 + m_LastClickedID: 1486606157 + m_ExpandedIDs: 53336be2000000007f0eae07 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: input +--- !u!114 &21 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -425,10 +561,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 2886 - y: 183 + x: 2818 + y: 201 width: 1934 - height: 950 + height: 944 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -462,7 +598,7 @@ MonoBehaviour: m_IsRenamingFilename: 0 m_ClientGUIView: {fileID: 0} m_SearchString: ---- !u!114 &18 +--- !u!114 &22 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -482,10 +618,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 448 - y: 82 - width: 1660 - height: 738 + x: 391 + y: 73 + width: 1470 + height: 749 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -818,9 +954,9 @@ MonoBehaviour: m_PlayAudio: 0 m_AudioPlay: 0 m_Position: - m_Target: {x: -12.694475, y: -1.2633355, z: -116.92392} + m_Target: {x: -33.845665, y: -11.687641, z: -27.991777} speed: 2 - m_Value: {x: -12.694475, y: -1.2633355, z: -116.92392} + m_Value: {x: -33.845665, y: -11.687641, z: -27.991777} m_RenderMode: 0 m_CameraMode: drawMode: 0 @@ -866,13 +1002,13 @@ MonoBehaviour: m_GridAxis: 1 m_gridOpacity: 0.5 m_Rotation: - m_Target: {x: -0.018844485, y: 0.9119891, z: -0.40760815, w: -0.042162955} + m_Target: {x: -0.06818097, y: 0.92434114, z: -0.19731537, w: -0.3193994} speed: 2 - m_Value: {x: -0.018844472, y: 0.91198844, z: -0.40760785, w: -0.042162925} + m_Value: {x: -0.06818082, y: 0.9243392, z: -0.19731495, w: -0.3193987} m_Size: - m_Target: 10 + m_Target: 28.653723 speed: 2 - m_Value: 10 + m_Value: 28.653723 m_Ortho: m_Target: 0 speed: 2 @@ -899,7 +1035,7 @@ MonoBehaviour: m_SceneVisActive: 1 m_LastLockedObject: {fileID: 0} m_ViewIsLockedToObject: 0 ---- !u!114 &19 +--- !u!114 &23 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -919,10 +1055,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: -32000 - y: -31211 - width: 1399 - height: 501 + x: 0 + y: 843 + width: 1244 + height: 508 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -944,7 +1080,7 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/Settings/Mobile + - Assets/Scenes/Cockpit m_Globs: [] m_OriginalText: m_ImportLogFlags: 0 @@ -952,16 +1088,16 @@ MonoBehaviour: m_ViewMode: 1 m_StartGridSize: 16 m_LastFolders: - - Assets/Settings/Mobile + - Assets/Scenes/Cockpit m_LastFoldersGridSize: 16 m_LastProjectPath: G:\TJURP m_LockTracker: m_IsLocked: 0 m_FolderTreeState: - scrollPos: {x: 0, y: 0} - m_SelectedIDs: 82bb0000 - m_LastClickedID: 48002 - m_ExpandedIDs: 0000000052b8000054b8000056b8000058b800005ab800005cb800005eb8000060b8000062b8000064b8000066b8000068b800006ab800006cb800006eb8000070b8000000ca9a3bffffff7f + scrollPos: {x: 0, y: 136} + m_SelectedIDs: 3e0f0100 + m_LastClickedID: 69438 + m_ExpandedIDs: 00000000260f0100280f01002a0f01002c0f01002e0f0100300f0100320f0100340f0100360f0100380f01003a0f01003c0f01003e0f0100400f0100420f0100440f0100460f01007e0f0100de18010000ca9a3bffffff7f m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -977,7 +1113,7 @@ MonoBehaviour: m_IsRenaming: 0 m_OriginalEventType: 11 m_IsRenamingFilename: 1 - m_ClientGUIView: {fileID: 12} + m_ClientGUIView: {fileID: 15} m_SearchString: m_CreateAssetUtility: m_EndAction: {fileID: 0} @@ -989,7 +1125,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 0000000052b8000054b8000056b8000058b800005ab800005cb800005eb8000060b8000062b8000064b8000066b8000068b800006ab800006cb800006eb8000070b80000 + m_ExpandedIDs: 00000000260f0100280f01002a0f01002c0f01002e0f0100300f0100320f0100340f0100360f0100380f01003a0f01003c0f01003e0f0100400f0100420f0100440f0100460f0100 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -1033,7 +1169,7 @@ MonoBehaviour: m_IsRenaming: 0 m_OriginalEventType: 11 m_IsRenamingFilename: 1 - m_ClientGUIView: {fileID: 12} + m_ClientGUIView: {fileID: 15} m_CreateAssetUtility: m_EndAction: {fileID: 0} m_InstanceID: 0 @@ -1045,7 +1181,7 @@ MonoBehaviour: m_GridSize: 16 m_SkipHiddenPackages: 0 m_DirectoriesAreaWidth: 207 ---- !u!114 &20 +--- !u!114 &24 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -1065,10 +1201,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: -29899 - y: -31970 - width: 440 - height: 1260 + x: 1863 + y: 73 + width: 696 + height: 1278 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -1082,7 +1218,7 @@ MonoBehaviour: m_ObjectsLockedBeforeSerialization: [] m_InstanceIDsLockedBeforeSerialization: m_PreviewResizer: - m_CachedPref: 482 + m_CachedPref: -482 m_ControlHash: -371814159 m_PrefName: Preview_InspectorPreview m_LastInspectedObjectInstanceID: -1 @@ -1092,7 +1228,7 @@ MonoBehaviour: m_LockTracker: m_IsLocked: 0 m_PreviewWindow: {fileID: 0} ---- !u!114 &21 +--- !u!114 &25 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -1112,10 +1248,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: -32000 - y: -31970 - width: 438 - height: 738 + x: 0 + y: 73 + width: 390 + height: 749 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -1129,9 +1265,9 @@ MonoBehaviour: m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: 48030000 + m_SelectedIDs: 3633fdff m_LastClickedID: 0 - m_ExpandedIDs: 46faffff + m_ExpandedIDs: ce64fdffd064fdff9abdfdff84ccfdff02b5feff9abdfeffe4bdfeff48c1fefff4ffffff7a0a01004c0b01004c240100d4240100 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -1147,7 +1283,7 @@ MonoBehaviour: m_IsRenaming: 0 m_OriginalEventType: 11 m_IsRenamingFilename: 0 - m_ClientGUIView: {fileID: 11} + m_ClientGUIView: {fileID: 14} m_SearchString: m_ExpandedScenes: [] m_CurrenRootInstanceID: 0 @@ -1155,7 +1291,7 @@ MonoBehaviour: m_IsLocked: 0 m_CurrentSortingName: TransformSorting m_WindowGUID: 4c969a2b90040154d917609493e03593 ---- !u!114 &22 +--- !u!114 &26 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -1175,10 +1311,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: -31561 - y: -31970 - width: 1660 - height: 738 + x: 391 + y: 73 + width: 1470 + height: 749 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -1195,7 +1331,7 @@ MonoBehaviour: m_ShowGizmos: 0 m_TargetDisplay: 0 m_ClearColor: {r: 0, g: 0, b: 0, a: 0} - m_TargetSize: {x: 1920, y: 1080} + m_TargetSize: {x: 2560, y: 1440} m_TextureFilterMode: 0 m_TextureHideFlags: 61 m_RenderIMGUI: 1 @@ -1204,16 +1340,16 @@ MonoBehaviour: m_VSyncEnabled: 0 m_Gizmos: 0 m_Stats: 0 - m_SelectedSizes: 00000000000000000000000006000000000000000000000000000000000000000000000000000000 + m_SelectedSizes: 0500000000000000000000000a000000000000000000000000000000000000000000000000000000 m_ZoomArea: m_HRangeLocked: 0 m_VRangeLocked: 0 hZoomLockedByDefault: 0 vZoomLockedByDefault: 0 - m_HBaseRangeMin: -960 - m_HBaseRangeMax: 960 - m_VBaseRangeMin: -540 - m_VBaseRangeMax: 540 + m_HBaseRangeMin: -1280 + m_HBaseRangeMax: 1280 + m_VBaseRangeMin: -720 + m_VBaseRangeMax: 720 m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMax: 1 m_VAllowExceedBaseRangeMin: 1 @@ -1231,29 +1367,29 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 21 - width: 1660 - height: 717 - m_Scale: {x: 0.6638889, y: 0.6638889} - m_Translation: {x: 830, y: 358.5} + width: 1470 + height: 728 + m_Scale: {x: 0.50555557, y: 0.50555557} + m_Translation: {x: 735, y: 364} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 m_MarginBottom: 0 m_LastShownAreaInsideMargins: serializedVersion: 2 - x: -1250.2092 - y: -540 - width: 2500.4185 - height: 1080 + x: -1453.8461 + y: -720 + width: 2907.6921 + height: 1440 m_MinimalGUI: 1 - m_defaultScale: 0.6638889 - m_LastWindowPixelSize: {x: 1660, y: 738} + m_defaultScale: 0.50555557 + m_LastWindowPixelSize: {x: 1470, y: 749} m_ClearInEditMode: 1 m_NoCameraWarning: 1 - m_LowResolutionForAspectRatios: 00000001000000000000 + m_LowResolutionForAspectRatios: 01000001000000000000 m_XRRenderMode: 0 m_RenderTexture: {fileID: 0} ---- !u!114 &23 +--- !u!114 &27 MonoBehaviour: m_ObjectHideFlags: 52 m_CorrespondingSourceObject: {fileID: 0} @@ -1273,10 +1409,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: -30600 - y: -31211 - width: 699 - height: 501 + x: 1245 + y: 843 + width: 616 + height: 508 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0