ภาพลวงตา 3 มิติของพื้นผิวโลก 2 มิติ


10

หลายปีที่ผ่านมาฉันได้ยินเทคนิคที่ให้ภาพลวงตาของดาวเคราะห์หมุนรอบตัวโดยใช้พื้นผิว 2D ระบุว่าผู้ใช้ไม่สามารถเปลี่ยนตำแหน่งหรือวิวพอร์ตได้

เทคนิคนี้ชื่ออะไร

คำตอบ:


25

ตกลงฉันคิดว่าฉันมีตัวแทนในขณะนี้ เนื้อหาของโพสต์ก่อนหน้าพร้อมภาพที่ฝัง นี่เป็นเอฟเฟกต์ดาวเคราะห์หมุนวนที่คุณกำลังมองหาใช่ไหม มันเป็นเพียงภาพสองมิติเลื่อนดูผ่าน "หลุม" กึ่งโปร่งใสในเขตข้อมูลดาว

ฉันรวบรวม gif อนิเมชันเล็ก ๆ น้อย ๆ ที่มีเอฟเฟกต์ออกมาเป็นอย่างไร เห็นได้ชัดว่ามันสามารถเคลื่อนไหวได้ราบรื่นขึ้นมาก - ฉันเลื่อนพื้นผิวดาวเคราะห์ 4 พิกเซลแต่ละเฟรม มันยังไม่ได้ตั้งค่าให้ตัดภาพดังนั้นจึงมีความผิดพลาดในตอนท้ายของลูป

ดาวเคราะห์ http://www.perludus.com/orbit.gif

ฉันทำทั้งหมดใน Photoshop แต่แนวคิดควรทำงานในสภาพแวดล้อมการแสดงผล 2 มิติที่ให้คุณทำอัลฟ่าใส ฯลฯ นี่คือชุดของภาพหน้าจอที่แสดงกระบวนการ ...

  1. สร้างพื้นหลังดาวว่างและตัดรูกลมในนั้น
    ข้อความแสดงแทน
  2. ค้นหาทรงกลมสีเทาสีเทาสำหรับโลกของคุณเช่นนี้
    ข้อความแสดงแทน
  3. นี่คือดาวของเราที่มีรูและทรงกลมที่แรเงาอยู่ด้านบนกึ่งโปร่งใส
    ข้อความแสดงแทน
  4. ทำให้ขนาดของวงกลมเป็นวงกลมสีน้ำเงินและทำให้มันเปล่งประกายสีน้ำเงินด้านนอก ตั้งค่าให้กึ่งโปร่งใส นี่คือสิ่งที่ดูเหมือนกับทรงกลมสีเทา
    ข้อความแสดงแทน
  5. ตอนนี้หาพื้นผิวพื้นผิวดาวเคราะห์ ฉันพบสิ่งนี้เพียงแค่ googling "พื้นผิวดาวเคราะห์"
    ข้อความแสดงแทน
  6. วางพื้นผิวดาวเคราะห์ไว้ใต้ภาพดาวด้วยรูกึ่งโปร่งแสงเพื่อให้ได้ภาพนี้
    ข้อความแสดงแทน

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

หวังว่านี่จะช่วยได้และเป็นเอฟเฟกต์ที่คุณต้องการ!

ป.ล. เห็นบทความนี้เกี่ยวกับศิลปินที่มีวิธีแปลกใหม่ในการสร้างพื้นผิวดาวเคราะห์ - ทำให้ฉันคิดถึงคำตอบนี้ :) http://www.behance.net/gallery/Pan-Planets/9557465


np Henrik ทันทีที่ฉันเห็นโพสต์ของคุณฉันว่า "ฉันพนันได้เลยว่าฉันรู้ว่าผู้ชายคนนี้หมายถึงอะไร" ฉันไม่แน่ใจ 100% แต่ฉันคิดว่านี่เป็นวิธีที่เอฟเฟกต์ดาวเคราะห์หมุนรอบหมุนในรายการทีวี Star Trek ดั้งเดิม
ทิมโฮลท์

นี่เป็นคำตอบที่ยอดเยี่ยมทำให้ฉันมีความคิดสำหรับโครงการเกมที่ฉันมี ครั้งถัดไปโหลดที่ฉันของ Starcraft 2 ป่วยต้องดูว่านี้เป็นวิธีที่ = ทำของมัน)
ไบรอันแฮร์ริง

คำตอบที่ยอดเยี่ยมภาพหน้าจอที่ยอดเยี่ยม!
ข้อผิดพลาด 454

ภาพของคุณเสียชีวิต คุณคิดว่าคุณสามารถแก้ไขได้หรือไม่
Mithical

3

ฉันจะเดาว่าคุณหมายถึงอะไรและแค่โยนความคิดออกไป แต่ก็แน่นอนว่าจะไม่เป็นวิธีที่ 'มีชื่อเสียง' ที่จะทำ

ทั้งหมดในแบบ 2D

ใช้เวลา 2 พื้นผิว ก้อนหนึ่งของแผ่นดินของเจ้าก้อนเมฆอีกก้อนของเจ้า เมฆควรมีเลเยอร์อัลฟ่าที่ตรงกับเพื่อให้คุณสามารถ 'เห็นถึงพวกเขา'

ทำพื้นผิวที่เป็นรูปเป็นแผ่นซึ่งเป็นแผ่นที่ไม่มีรอยต่อ มีโปรแกรมที่ช่วยคุณทำสิ่งเหล่านี้หรือแบบฝึกหัดใน photoshop ที่คุณสามารถติดตามได้

จากนั้นในที่สุดคุณก็ทำหน้ากากลายฉลุที่เป็นวงกลมดังนั้นคุณจึงมองผ่านรูกลมที่พื้นผิวสี่เหลี่ยมจัตุรัสของคุณดังนั้นปิดบังมุม

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


2

ฉันคิดว่าบทความนี้อธิบายเทคนิค (เป็นภาษารัสเซียฉันเลยโพสต์ลิงค์แปล)

https://translate.googleusercontent.com/translate_c?depth=1&hl=en&rurl=translate.google.com&sl=auto&sp=nmt4&tl=en&u=https://habrahabr.ru/post/248381/&usg=ALkJrhgViuYdAi-Vav3cyhxvydkaBKh6EQ

ฉันใช้งานที่นี่ http://github.com/meric/renderplanet

โดยทั่วไปคุณถ่ายภาพที่ encodes ประมาณการ orthographic ( http://mathworld.wolfram.com/OrthographicProjection.html ) และห่อดาวเคราะห์และเนื้อเมฆของรอบโดยใช้ Shader ชดเชยพื้นผิวดาวเคราะห์ตาม dt เพื่อให้หมุน ใช้ภาพโปร่งแสงที่เตรียมไว้สำหรับวงแหวนและเงาของบรรยากาศหรือสร้างขึ้นโดยการวาดเส้นโค้งโปร่งแสงและการทดลองบางอย่างกับ shader สำหรับเงา

นี่คือภาพ:

orthographic

สำหรับแต่ละพิกเซลภายในวงกลมนั้นRed + Green/255จะทำการหาพิกัด X ตามปกติของพื้นผิวดาวเคราะห์ / เมฆเพื่อค้นหาและBlue + Alpha/255เป็นพิกัด Y ที่ทำให้เป็นมาตรฐาน

นี่คือผลลัพธ์:

ตัวอย่าง

พื้นผิวของดาวเคราะห์และเมฆควรอยู่ในการฉายภาพแบบสามเหลี่ยมด้านเท่า


1

คำถามของคุณไม่ชัดเจนเกี่ยวกับข้อ จำกัด เกี่ยวกับบริบทที่คุณใช้งานพื้นผิวส่วนใหญ่ในการเรนเดอร์ 3D เป็น 2D ดังนั้นหากคุณเพิ่งแสดงทรงกลม 3 มิติที่มีพื้นผิว 2D แมปไว้รอบ ๆ นี่ไม่ใช่ปัญหาจริงๆ หากคุณไม่สามารถใช้การเรนเดอร์ 3D ได้คุณต้องพูดให้ชัดเจนว่าคุณสามารถใช้อะไรได้บ้าง

ปัญหาพื้นฐานคือคุณต้องสร้างพื้นผิวที่ราบเรียบเหนือพื้นผิวของทรงกลมซึ่งคุณจะได้รับฟรีเมื่อใช้การเรนเดอร์ 3D เมื่อดาวเคราะห์หมุนส่วนที่มองเห็นได้ของพื้นผิวดาวเคราะห์จะเคลื่อนไหวในลักษณะที่ไม่เป็นเส้นตรง (ส่วนเส้นศูนย์สูตรของพื้นผิวจะเคลื่อนที่เร็วกว่าเสา) ดังนั้นฉันคิดว่าคุณต้องบิดเบือนภาพด้วยตัวคุณเองขณะที่คุณจับภาพบนแผ่นดิสก์หรือคุณทำตามที่แนะนำ VirtualVoid และมีภาพหลายภาพที่คุณเปลี่ยนไปตามกาลเวลา

มันจะน่ากลัวที่จะใช้ แต่ถ้าคุณสามารถแสดงพื้นผิว, พิกเซลต่อพิกเซล, โดยทั่วไปคุณสามารถทำการคำนวณ rasterisation สำหรับแต่ละเส้นของทรงกลมแยกกัน สมมติว่าพื้นผิวแผนที่พื้นผิวของคุณแบนออกดังนั้นที่เส้นศูนย์สูตรจะมีภาพขนาด 512px สมมติว่าแผ่นดิสก์ที่คุณมองเห็นนั้นกว้าง 256 พิกเซล ตอนนี้ให้นึกถึงแต่ละบรรทัดของแผ่นดิสก์ที่เรนเดอร์เป็นหน้าต่างบานเลื่อนบนพื้นผิว บนเส้นศูนย์สูตรหน้าต่างจะเป็น 50% ของความกว้างของพื้นผิวและคุณเพียงคัดลอกแต่ละ 256px ลงบนพิกเซลเทียบเท่าบนแผ่นดิสก์ บรรทัดถัดไปบนแผ่นดิสก์จะน้อยกว่า 256 px เล็กน้อย แต่เนื่องจากแผนที่พื้นผิวที่บิดเบี้ยวจึงมีข้อมูลแผนที่พื้นผิวอินพุต 256px อยู่ ดังนั้นคุณจึงสุ่มตัวอย่างข้อมูลแผนที่พื้นผิวอินพุตและแสดงพิกเซลที่ได้ สำหรับคณิตศาสตร์ง่าย ๆ ให้ ' s คิดว่า 1/3 ของวิธีระหว่างเส้นศูนย์สูตรและขั้วนั้นมีความกว้าง 128px ในแผ่นดิสก์เอาต์พุต ดังนั้นแต่ละ 128px นั้นจะเป็นค่าเฉลี่ยของ 2 พิกเซลที่อยู่ใกล้เคียง เมื่อคุณลงไปถึงเสาคุณจะเฉลี่ย 256px ทั้งหมดเป็นพิกเซลเอาต์พุตเพียงไม่กี่ตัว

คุณสามารถทำอย่างอื่นได้และมีเส้นในพื้นผิวแหล่งที่มามีความยาวต่างกัน ดังนั้นในขณะที่บรรทัดที่มีแหล่งข้อมูลมี 512px อยู่บรรทัดที่ 1/3 ของวิธีลงมีเพียง 256px และบรรทัดที่ด้านล่างมีพิกเซลเพียงไม่กี่พิกเซล แต่แต่ละบรรทัดจะมีความกว้างเป็นสองเท่าของแผ่นดิสก์ที่พิกัด y ที่เท่ากัน การจัดเรียงของพื้นผิวนั้นน่ากลัวอย่างยิ่งหากต้องสร้าง และอาจประสบปัญหาเรื่องนามแฝงที่น่ากลัว

ในทั้งสองกรณีภาพเคลื่อนไหวของคุณจะเพิ่มจุดเริ่มต้นพิกเซล x ในพื้นผิวอินพุตแล้วเพิ่มส่วนโค้งไปที่จุดเริ่มต้นของเส้นพื้นผิวอินพุต

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

ฉันไม่เชื่อว่าฉันได้ยินคำตอบของปัญหานี้ (ค่อนข้างคลุมเครือ) เป็นเทคนิคเฉพาะที่มีชื่อ


0

สไปรท์ ดูเหมือนสิ่งที่คุณกำลังอธิบายคือสไปรต์ 2D ในเอ็นจิ้นเกม 3D เพื่อแสดงผลอย่างถูก (Nintendo64 ทำสิ่งนี้ได้ทั่วทุกสถานที่เช่นเดียวกับเอนจิ้น 3d สามต้น)

หากคุณต้องการแสดงการหมุนของดาวเคราะห์คุณเพียงแค่ต้องแสดงสไปรต์ 2 มิติที่เคลื่อนไหวโดยใช้แผ่นสไปรต์ที่เป็นการหมุนของดาวเคราะห์ที่แสดงผลล่วงหน้า เช่นเดียวกับ. GIF ที่เคลื่อนไหวได้ ปัญหาคือว่ามันจะแสดงผลล่วงหน้าดังนั้นตามที่คุณกล่าวว่าจะใช้งานได้เฉพาะเมื่อผู้ใช้ไม่ได้รับอนุญาตให้จัดการมุมมอง

http://en.wikipedia.org/wiki/Sprite_(computer_graphics )


0

นั่นอาจเป็นเพียงภาพเคลื่อนไหวอย่างง่ายโดยใช้หนึ่งพื้นผิวด้วยหลายเฟรม

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