חזרה לבלוג
מדריכים

הנורמל מאפ קונוונציות: OpenGL מול DirectX הסברים

למה הנורמל מאפ שלך נראה הפוך ב-Unreal אבל טוב ב-Unity — הסבר בעברית פשוטה על הנורמות של ציר Y בתנאים משיקים, עם תיקונים בטון.

Admin23 באפריל 20263 דק׳ קריאה11

אתה משחק נורמל מאפ ל-Unreal והמשטח מוארץ כאילו השמש באה מלמטה. אתה משחק את אותו הקובץ ל-Unity או Blender — נראה מעולה. המש משהו זהה. התמונה זהה. מה קורה פה?

שתי תעשיות, ציר אחד של אי-הסכמה

נורמל מאפים מאחסנים כיוון משטח בערוציהם RGB. אדום = X, ירוק = Y, כחול = Z. כל מנוע PBR מפענח אותם באותה דרך עם יוצא דופן אחד: הסימן של Y.

הנורמה של OpenGL (Y+): ערוץ ירוק בהיר יותר משמעו המשטח מצביע כלפי מעלה. בשימוש ב-Unity, Godot, Blender (Cycles ו-Eevee), Substance Painter יצוא ברירת מחדל, וכל מנוע מבוסס WebGL.

הנורמה של DirectX (Y−): ירוק בהיר יותר משמעו המשטח מצביע כלפי מטה. בשימוש ב-Unreal Engine, ה-toolchain Direct3D הישן, וחלק מנכסי CryEngine/Xbox-era.

בתים זהים ב-PNG. משמעות פיזית הפוכה.

איך לדעת במבט

תראה בדיקה בצורת כיפה (כמו כפתור או כיפה) בנורמל מאפ שלך. בנורמה של OpenGL, התחתון של הבדיקה יהיה ירוק כהה יותר כי המשטח מסתובב לכיוון Y−, משם מהאור. בנורמה של DirectX, התחתית היא ירוק בהיר יותר.

אם ההארה שלך מרגישה הפוכה במנוע — הדגשות שם שצללים צריכים להיות — יש לך אי-התאמה נורמה.

התיקון לוקח 5 שניות

ב-Unreal, דיאלוג ייבוא הטקסטורה יש הפוך ערוץ ירוק checkbox. החלף אותו והמנוע הופך את ערוץ G בזמן דגימה. אין צורך להייצא מחדש את המקור.

ב-Unity, הגדר את סוג הטקסטורה ל-Normal map ויבואר מטפל בכל דבר — Unity צופה OpenGL, אבל זה יזהיר אתך אם הקובץ נראה לא בסדר. ב-Blender, השתמש בשרשרת Separate Color → Invert G → Combine Color, או פשוט בחר קלט בסגנון DirectX ישירות בצומת Normal Map.

למה שני תקנים בחזקה?

בשנות ה-90, OpenGL ו-DirectX הגדירו מרחבי קואורדינטות טקסטורה הפוכים — OpenGL היה Y עולה למעלה, DirectX היה Y עולה למטה. כאשר נורמל מאפים הפכו נפוצים באמצע שנות ה-2000, כל toolchain שרוף את המרחב שלו לפלטים שלו. הסטייה הצמודה כי הפוך pipeline שנוסד הוא יקר.

יצירת Normal Maps ללא ההבלבול

ה-aukimi Normal Map Generator מאפשר לך לבחור את הנורמה במפורש כשאתה מייצא. זה מפעיל Sobel gradient על הזוהר של heightmap שלך, ואז מארז (−dx·s, −dy·s, 1) לתוך RGB — עם Y הפוך כשאתה בוחר DirectX. אתה יכול להחליף את הנורמה לאחר יצירה והורדה מחדש ללא שחזור של כל דבר.

במנוע הנוסחה זהה. ההבדל היחיד הוא הסימן שאנחנו מחילים על רכיב Y לפני כתיבת ערוץ ירוק. דע זאת, אתה יכול להמיר קובץ בין נורמות עם כל עורך תמונה: פתח את PNG, בחר את ערוץ ירוק, הפוך אותו, שמור. זה כל מה "Flip Green Channel" עושה ב-Unreal.

ייחוס מהיר

  • Unity, Godot, Blender, Substance Painter (ברירת מחדל): OpenGL (Y+).
  • Unreal Engine, Direct3D ישן: DirectX (Y−).
  • נראה לא בסדר ב-Unreal? הפוך Flip Green Channel בהגדרות ייבוא.
  • נראה לא בסדר ב-Unity? כנראה שיצאת מכלי נורמה DirectX — הפוך את ערוץ ירוק או ייצא מחדש.

ברגע שאתה כרוך את הנורמה, התיקון הוא טריוויאלי. החלק הקשה ביותר הוא ההכרה בו בפעם הראשונה.

#normal-map#3d#pbr#shaders#opengl#directx

נהנית מהמאמר?

ShareHN