From 887136420c983bd504e38b36198921946623a0d7 Mon Sep 17 00:00:00 2001 From: yum Date: Mon, 28 Jul 2025 01:43:06 -0700 Subject: fix coordinates in generate_fft_reference.py --- OPEN ME.unity | 131 +++++++++++++++++++++++++++++++++++----------- generate_fft_reference.py | 9 +++- mandrill_256x256.exr | Bin 532830 -> 532820 bytes 3 files changed, 107 insertions(+), 33 deletions(-) diff --git a/OPEN ME.unity b/OPEN ME.unity index b5c41e4..a98b17c 100644 --- a/OPEN ME.unity +++ b/OPEN ME.unity @@ -224,12 +224,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 153538671} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1717151656} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &213933862 GameObject: @@ -330,12 +330,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 213933862} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1717151656} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &358170787 GameObject: @@ -504,12 +504,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 387836998} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 983355411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &562951493 GameObject: @@ -610,12 +610,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 562951493} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 7, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 983355411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &571412497 GameObject: @@ -716,12 +716,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 571412497} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 4, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 983355411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &599917952 GameObject: @@ -822,12 +822,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 599917952} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1717151656} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &609077999 GameObject: @@ -1034,12 +1034,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 612474623} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 8, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 983355411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &773866676 GameObject: @@ -1140,12 +1140,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 773866676} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 2, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1717151656} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &785989655 GameObject: @@ -1246,12 +1246,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 785989655} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 6, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 983355411} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &824710677 GameObject: @@ -1352,11 +1352,47 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 824710677} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] + m_Father: {fileID: 1717151656} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &983355410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 983355411} + m_Layer: 0 + m_Name: IFFT + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &983355411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983355410} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 571412501} + - {fileID: 387837002} + - {fileID: 785989659} + - {fileID: 562951497} + - {fileID: 612474627} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1069902874 @@ -1572,7 +1608,7 @@ GameObject: - component: {fileID: 1242669368} - component: {fileID: 1242669367} m_Layer: 0 - m_Name: passthrough + m_Name: luminance m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1658,11 +1694,48 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1242669366} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -2, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] + m_Father: {fileID: 1717151656} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1717151655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1717151656} + m_Layer: 0 + m_Name: FFT + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1717151656 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717151655} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1242669370} + - {fileID: 213933866} + - {fileID: 153538675} + - {fileID: 599917956} + - {fileID: 773866680} + - {fileID: 824710681} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1787983409 @@ -1910,8 +1983,11 @@ MonoBehaviour: - {fileID: 2100000, guid: ef7b3b20954e1f0419b7adf268df2650, type: 2} - {fileID: 2100000, guid: 365ea70c6b535dc49b05bf0c1ff6ba5f, type: 2} - {fileID: 2100000, guid: ee8f29cf44fa87f46a1417c25af26824, type: 2} + - {fileID: 2100000, guid: d924df630b01842449ed5cd5a8ffee97, type: 2} + - {fileID: 2100000, guid: de23af3d6f8065d4e89cb057b0cd99ec, type: 2} - {fileID: 2100000, guid: 652ab864a0319244693b307366e8a107, type: 2} - {fileID: 2100000, guid: 529b8b96dc28ae14381ede5d8ca8e97c, type: 2} + - {fileID: 2100000, guid: 1544f59a65453084d9689c1a3897174e, type: 2} - {fileID: 2100000, guid: caffb11975a532c48928f00ce876fda6, type: 2} - {fileID: 2100000, guid: be55571ca9818ba4c9b853a41baf33c7, type: 2} LightMapsNear: [] @@ -2096,15 +2172,6 @@ SceneRoots: - {fileID: 7606902903243430487} - {fileID: 358170790} - {fileID: 1188641759} - - {fileID: 1242669370} - - {fileID: 213933866} - - {fileID: 153538675} - - {fileID: 599917956} - - {fileID: 773866680} - - {fileID: 824710681} + - {fileID: 1717151656} - {fileID: 609078003} - - {fileID: 571412501} - - {fileID: 387837002} - - {fileID: 785989659} - - {fileID: 562951497} - - {fileID: 612474627} + - {fileID: 983355411} diff --git a/generate_fft_reference.py b/generate_fft_reference.py index a7d58f4..db2289d 100644 --- a/generate_fft_reference.py +++ b/generate_fft_reference.py @@ -18,10 +18,13 @@ def main(): # Load input image and convert to luminance img = Image.open(args.input).convert('RGB') - img = img.resize((args.size, args.size), Image.Resampling.LANCZOS) + img = img.resize((args.size, args.size), Image.Resampling.NEAREST) img_array = np.array(img, dtype=np.float32) / 255.0 luminance = 0.2126 * img_array[:,:,0] + 0.7152 * img_array[:,:,1] + 0.0722 * img_array[:,:,2] + # Unity's UV origin is bottom-left, NumPy/PIL's is top-left; flip vertically to align + luminance = np.flipud(luminance) + # Perform 2D FFT (no fftshift, matching GPU implementation) fft_result = np.fft.fft2(luminance) @@ -30,6 +33,10 @@ def main(): real_part = fft_result.real.astype(np.float32) imag_part = fft_result.imag.astype(np.float32) + # Unity's output texture also uses bottom-left origin, so flip output too + real_part = np.flipud(real_part) + imag_part = np.flipud(imag_part) + # Create EXR height, width = args.size, args.size header = OpenEXR.Header(width, height) diff --git a/mandrill_256x256.exr b/mandrill_256x256.exr index 01c4a3a..b1322a1 100644 Binary files a/mandrill_256x256.exr and b/mandrill_256x256.exr differ -- cgit v1.2.3