เพราะเหตุใด 90 ° horz / 60 °จัดตำแหน่งมุมมอง FPS เริ่มต้น


14

เท่าที่ฉันเข้าใจมันควรปรับมุมมองแนวตั้งเป็น:

fov = 2 * arctan(0.5*screenHeight / distanceEyeScreen);

นั่นคือ Field of View ควรจับคู่ระยะห่างและขนาดของหน้าจอของผู้ใช้

ใน FPS จำนวนมากมีค่าเริ่มต้น 90 °สำหรับ FoV แนวนอนหรือ 60 °สำหรับ FoV แนวตั้ง (สมมติว่า 16: 9) ตัวอย่างหนึ่งคือ CryEngine แต่สำหรับหน้าจอขนาด 16: 9 20 "(แนวทแยงของพื้นที่ที่มองเห็นคือประมาณ 40 ซม. x 25 ซม.) ค่าเริ่มต้นนี้จะกำหนดให้ผู้ใช้ต้องมีตา 20 ซม. จากหน้าจอเพื่อให้ได้มุมมองที่ถูกต้อง

ดังนั้นฉันจึงทำผิดพลาดในการคำนวณของฉันหรือต้องมีเหตุผลว่าทำไมคุณถึงเลือกค่า FoV ที่ไม่เหมาะสม

อะไรคือสาเหตุของค่าเริ่มต้นของ FoV 90 ° horz / 60 ° vert?


ฉันจะรู้ว่า FOVs สูงสามารถทำให้เกมรู้สึกได้เร็วขึ้นเป็นย้ายทัศนียภาพโดย ดูเหมือนว่าจะเป็นตัวเลือกการออกแบบนอกจากนี้ยังขึ้นอยู่กับอุปกรณ์ที่คุณเล่น คุณวัดผล FPS ใดบ้าง
Anko

@Anko ดีฉันได้ทำบางอย่าง "การวิจัย" และพบโพสต์ฟอรั่มจำนวนมากที่ระบุสำหรับเกมที่แตกต่างกันที่ค่าเริ่มต้นของ FoV คือ 90 ° horz นอกจากนี้ฉันอ่าน CryEngine docs และเล่นกับ FoV ในเกมตัวอย่าง
dyp

เหตุผลว่าทำไม FOV เป็นค่าเริ่มต้นกับสิ่งที่คุ้มค่าตั้งค่าไปก็คือว่ามันทำให้รู้สึกโดยทั่วไปไม่มีการตั้งค่าที่ไม่คงที่ จอแสดงผลส่วนใหญ่ไม่มีเซ็นเซอร์ที่บอกได้ว่าหัวของผู้ใช้อยู่ไกลแค่ไหน ดังนั้น 90 องศาจึงเป็น "การคาดเดาที่ดี" ฉันคิดว่าคุณอาจบอกว่ามันเทียบเท่ากับการพูดว่า "ผู้ใช้หน้าจอ 20" ของเราทุกคนควรอยู่ห่างจากมัน 20 ซม. "คุณกำลังบอกว่าคุณต้องการลด FOV เพราะผู้ใช้ส่วนใหญ่นั่งห่างจากหน้าจอมากขึ้นหรือไม่ และคุณต้องหันไปรอบ ๆ เพื่อดูสภาพแวดล้อมของคุณนั่นทำให้เกมดูดฉันได้มากขึ้น
Steven Lu

คำตอบง่ายๆ: เพราะรู้สึกดีพอในขณะที่เล่นและไม่ได้แนะนำการบิดเบือนที่ไม่เหมาะสมเช่น FOV ที่กว้างขึ้นอย่างต่อเนื่อง การใช้มุมกล้องกับกล้องเป็นเรื่องง่ายในโปรแกรมแก้ไขภาพ 3 มิติลองใช้ค่าที่แตกต่างและดูด้วยตัวคุณเอง ไม่ใช่คำตอบที่ง่าย: มันเป็นการสมรู้ร่วมคิดอิฐ
Patrick Hughes

ที่เกี่ยวข้อง: gamedev.stackexchange.com/a/47619/14808
Laurent Couvidou

คำตอบ:


6

ฉันคิดว่าการมี FoV 90deg เป็นสิ่งที่ให้ความรู้สึกเป็นธรรมชาติเมื่อคุณพยายามเลียนแบบ 'มองผ่านสายตามนุษย์' การคำนวณของคุณจะถูกต้องหากคุณใช้หน้าจอเพื่อจำลองหน้าต่างสู่โลกเสมือนจริงไม่ใช่มุมมองของคนแรก ภาพที่คุณจะต้องเห็นโลกราง 20 "กรอบ 80 ซม. อยู่ห่างจากหัวของคุณ ...


1
แต่ไม่ใช่ "มองผ่านหน้าต่างสู่โลกเสมือนจริง" การประมาณการมุมมองเป็นเรื่องเกี่ยวกับอะไร? โอ้และคุณยังสามารถฉายภาพสิ่งที่ "โผล่ออกมา" ของหน้าจอของคุณกับพื้นผิวหน้าจอ
dyp

4
สำหรับเกมมุมมองบุคคลที่หนึ่งการมี FoV ที่ จำกัด มากอาจทำให้เกิดการระคายเคืองและทำร้ายการเล่นเกมและการแช่ IMO เนื่องจากคุณเห็นว่าน้อยกว่าที่คุณคุ้นเคยในชีวิตจริง โดยส่วนตัวฉันพบอะไรที่ต่ำกว่า 90 °ไม่เพียงพอ ลองนึกภาพยืนอยู่ในมุมหนึ่งของห้องสี่เหลี่ยมที่มี FoV แนวนอนที่ 65 °ซึ่งดูเหมือนว่าจะเป็นเรื่องปกติสำหรับเกมคอนโซล - คุณจะไม่สามารถมองเห็นทั้งห้องบังคับให้คุณมองไปทางซ้ายและขวาเพื่อรักษาความตระหนัก นั่นจะทำให้ฉันรู้สึก

1
ใช่แน่นอนมันคือ ทำสิ่งนี้กับเราได้ที่123rf.com/400wm/400/400/ronstik/ronstik1112/ronstik111200016/ด้วยนิ้วของคุณและจำลองหน้าจอ 20 นิ้วต่อหน้าคุณ (ห่างออกไป 80 ซม.) ลองจินตนาการว่านั่นคือสิ่งที่คุณเห็น ชี้ให้เห็นว่ามันน่ารำคาญย้ายจอ 20 นิ้ว / กรอบที่จำลองขึ้นในขณะนี้ห่างจากหัวของคุณประมาณ 20 ซม. และควรตรงกับมุมมองที่แท้จริงของคุณ
เดิร์ค

3
อันที่จริงมุมมองเท็จที่เกิดจากมุมมองที่กว้างดุ้งดิ้งนั้นผิดธรรมชาติอย่างสมบูรณ์และโดยส่วนตัวแล้วฉันมักพบว่าการบิดเบือนมันสร้างความตึงเครียดและน่ารำคาญ แต่ก็ยังคงเพียบกว่าที่จะพยายามที่จะมุมมองทุกอย่างผ่าน 20 ° -30 °ตาแมวซึ่งเป็นมุมมองเกี่ยวกับสิ่งที่ "ความจริง" ในจอเดียวโดยทั่วไปจะบ่งบอก พูดคุยเกี่ยวกับวิสัยทัศน์อุโมงค์!
Ilmari Karonen

3

ผลกระทบมากมายของ FOV นั้นขึ้นอยู่กับความเร็วที่คุณเคลื่อนที่ไปทั่วโลก (ความเร็วยังคงเท่าเดิม; ด้วย FOV แนวนอนที่กว้างเกินไปคุณจะเคลื่อนที่เร็วมากและแคบเกินไปคุณจะเคลื่อนที่ช้ามาก แนวนอน 90 องศาดูเหมือนจะเป็น "จุดที่น่าสนใจ" และผู้พัฒนาเกมสามารถปรับความเร็วการเคลื่อนไหวที่ต้องการสำหรับแต่ละเกมจากที่นั่น

เป็นกรณีที่ 4 คูณ 90 องศาคือ 360 องศาซึ่งเป็นวงกลม การตั้งค่า FOV แนวนอนเพื่อให้สามารถแมปกับจตุภาคด้านหน้า / ซ้าย / หลัง / ขวาได้ดี

และในที่สุดก็มีลูกเกาลัดเก่าแก่ที่มีความสำคัญและความเฉื่อย ฉันไม่แน่ใจว่าเกมใดที่เสนอ FOV ที่ผู้เล่นสามารถปรับได้ก่อน Quake แต่ Quake ทำและเริ่มต้นที่ 90 องศาในแนวนอนหรือไม่ มันเป็นเรื่องง่ายที่จะจินตนาการว่าเกมอื่น ๆ เพิ่งจะได้ 90 องศา

เป็นที่น่าสังเกตว่าในปัจจุบัน 90 องศากำลังกลายเป็นเรื่องธรรมดาน้อยลงด้วยการตั้งค่าเกม (โดยเฉพาะอย่างยิ่ง FPS ที่ทันสมัย) ด้วยค่าที่ต่ำกว่าเล็กน้อย - ในหรือประมาณ 80

หากคุณต้องการแก้ไข FOV ของคุณคุณสามารถใช้สิ่งนี้ (ฉันไม่ได้ทำเป็นว่ามันเป็นวิธีเดียวหรือดีที่สุด แต่มันสอดคล้องกับเครื่องคิดเลข FOV ที่http://www.emsai.net/projects/widescreen / fovcalc / ; นี้ถือว่าสัมพันธ์กับอัตราส่วนกว้างยาวฐาน 4: 3 (คุณสามารถปรับได้ในการเรียกไปยัง CalcFovY ด้านล่าง))

float CalcFovX (float fov_y, float width, float height)
{
    float   a;
    float   y;

    if (fov_y < 1) fov_y = 1;
    if (fov_y > 179) fov_y = 179;

    y = height / tan (fov_y / 360 * M_PI);
    a = atan (width / y);
    a = a * 360 / M_PI;

    return a;
}

float CalcFovY (float fov_x, float width, float height)
{
    float   a;
    float   x;

    if (fov_x < 1) fov_x = 1;
    if (fov_x > 179) fov_x = 179;

    x = width / tan (fov_x / 360 * M_PI);
    a = atan (height / x);
    a = a * 360 / M_PI;

    return a;
}

จากนั้นเรียกมันว่า:

// you should use #define of const instead of magic numbers here, which are just here for illustration purposes in this sample
fov_y = CalcFovY (playerAdjustableFOV, 4, 3); // this is your base aspect that adjusted FOV should be relative to
fov_x = CalcFovX (fov_y, width, height); // this is your actual window width and height

การคำนวณ fov_x และ fov_y นั้นสามารถเสียบเข้ากับเมทริกซ์เปอร์สเปคทีฟต่อไปนี้ (ระเบียบการ OpenGL):

1.0f / tan (DEG2RAD (fov_x) * 0.5f),
0,
0,
0,
0,
1.0f / tan (DEG2RAD (fov_y) * 0.5f),
0,
0,
0,
0,
(zFar + zNear) / (zNear - zFar),
-1,
0,
0,
(2.0f * zFar * zNear) / (zNear - zFar),
0

สิ่งนี้จะให้ FOV แนวนอนที่ปรับมุมมองได้ซึ่งจะรักษา FOV แนวตั้งโดยไม่คำนึงถึงความละเอียดและอัตราส่วนภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.