หลายปีที่ผ่านมาฉันได้ยินเทคนิคที่ให้ภาพลวงตาของดาวเคราะห์หมุนรอบตัวโดยใช้พื้นผิว 2D ระบุว่าผู้ใช้ไม่สามารถเปลี่ยนตำแหน่งหรือวิวพอร์ตได้
เทคนิคนี้ชื่ออะไร
หลายปีที่ผ่านมาฉันได้ยินเทคนิคที่ให้ภาพลวงตาของดาวเคราะห์หมุนรอบตัวโดยใช้พื้นผิว 2D ระบุว่าผู้ใช้ไม่สามารถเปลี่ยนตำแหน่งหรือวิวพอร์ตได้
เทคนิคนี้ชื่ออะไร
คำตอบ:
ตกลงฉันคิดว่าฉันมีตัวแทนในขณะนี้ เนื้อหาของโพสต์ก่อนหน้าพร้อมภาพที่ฝัง นี่เป็นเอฟเฟกต์ดาวเคราะห์หมุนวนที่คุณกำลังมองหาใช่ไหม มันเป็นเพียงภาพสองมิติเลื่อนดูผ่าน "หลุม" กึ่งโปร่งใสในเขตข้อมูลดาว
ฉันรวบรวม gif อนิเมชันเล็ก ๆ น้อย ๆ ที่มีเอฟเฟกต์ออกมาเป็นอย่างไร เห็นได้ชัดว่ามันสามารถเคลื่อนไหวได้ราบรื่นขึ้นมาก - ฉันเลื่อนพื้นผิวดาวเคราะห์ 4 พิกเซลแต่ละเฟรม มันยังไม่ได้ตั้งค่าให้ตัดภาพดังนั้นจึงมีความผิดพลาดในตอนท้ายของลูป
ดาวเคราะห์ http://www.perludus.com/orbit.gif
ฉันทำทั้งหมดใน Photoshop แต่แนวคิดควรทำงานในสภาพแวดล้อมการแสดงผล 2 มิติที่ให้คุณทำอัลฟ่าใส ฯลฯ นี่คือชุดของภาพหน้าจอที่แสดงกระบวนการ ...
ในการทำให้พื้นผิวดาวเคราะห์ของคุณขยับพื้นผิวดาวเคราะห์โดยรอบ คุณจะต้องฉลาดเกี่ยวกับการเปลี่ยนพื้นผิวเมื่อถึงขอบเพื่อให้การหมุนราบรื่นและไม่มีที่สิ้นสุด
หวังว่านี่จะช่วยได้และเป็นเอฟเฟกต์ที่คุณต้องการ!
ป.ล. เห็นบทความนี้เกี่ยวกับศิลปินที่มีวิธีแปลกใหม่ในการสร้างพื้นผิวดาวเคราะห์ - ทำให้ฉันคิดถึงคำตอบนี้ :) http://www.behance.net/gallery/Pan-Planets/9557465
ฉันจะเดาว่าคุณหมายถึงอะไรและแค่โยนความคิดออกไป แต่ก็แน่นอนว่าจะไม่เป็นวิธีที่ 'มีชื่อเสียง' ที่จะทำ
ทั้งหมดในแบบ 2D
ใช้เวลา 2 พื้นผิว ก้อนหนึ่งของแผ่นดินของเจ้าก้อนเมฆอีกก้อนของเจ้า เมฆควรมีเลเยอร์อัลฟ่าที่ตรงกับเพื่อให้คุณสามารถ 'เห็นถึงพวกเขา'
ทำพื้นผิวที่เป็นรูปเป็นแผ่นซึ่งเป็นแผ่นที่ไม่มีรอยต่อ มีโปรแกรมที่ช่วยคุณทำสิ่งเหล่านี้หรือแบบฝึกหัดใน photoshop ที่คุณสามารถติดตามได้
จากนั้นในที่สุดคุณก็ทำหน้ากากลายฉลุที่เป็นวงกลมดังนั้นคุณจึงมองผ่านรูกลมที่พื้นผิวสี่เหลี่ยมจัตุรัสของคุณดังนั้นปิดบังมุม
ตอนนี้คุณทำให้เมทริกซ์พื้นผิวของพื้นผิวและคลาวด์เคลื่อนไหวเพื่อทำให้พวกมันเคลื่อนที่ ทำให้พวกมันเคลื่อนที่ไปในทิศทางและความเร็วที่ต่างกันและมันจะหมุน ทุกอย่างขึ้นอยู่กับว่าคุณสร้างพื้นผิวได้อย่างไร้รอยต่อ
ฉันคิดว่าบทความนี้อธิบายเทคนิค (เป็นภาษารัสเซียฉันเลยโพสต์ลิงค์แปล)
ฉันใช้งานที่นี่ http://github.com/meric/renderplanet
โดยทั่วไปคุณถ่ายภาพที่ encodes ประมาณการ orthographic ( http://mathworld.wolfram.com/OrthographicProjection.html ) และห่อดาวเคราะห์และเนื้อเมฆของรอบโดยใช้ Shader ชดเชยพื้นผิวดาวเคราะห์ตาม dt เพื่อให้หมุน ใช้ภาพโปร่งแสงที่เตรียมไว้สำหรับวงแหวนและเงาของบรรยากาศหรือสร้างขึ้นโดยการวาดเส้นโค้งโปร่งแสงและการทดลองบางอย่างกับ shader สำหรับเงา
นี่คือภาพ:
สำหรับแต่ละพิกเซลภายในวงกลมนั้นRed + Green/255
จะทำการหาพิกัด X ตามปกติของพื้นผิวดาวเคราะห์ / เมฆเพื่อค้นหาและBlue + Alpha/255
เป็นพิกัด Y ที่ทำให้เป็นมาตรฐาน
นี่คือผลลัพธ์:
พื้นผิวของดาวเคราะห์และเมฆควรอยู่ในการฉายภาพแบบสามเหลี่ยมด้านเท่า
คำถามของคุณไม่ชัดเจนเกี่ยวกับข้อ จำกัด เกี่ยวกับบริบทที่คุณใช้งานพื้นผิวส่วนใหญ่ในการเรนเดอร์ 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 ในพื้นผิวอินพุตแล้วเพิ่มส่วนโค้งไปที่จุดเริ่มต้นของเส้นพื้นผิวอินพุต
ยิ่งฉันเขียนถึงเรื่องนี้มากเท่าไหร่ฉันก็ยิ่งเชื่อว่ามันเป็นความคิดที่แย่มากที่คุณจะต้องทำก็ต่อเมื่อคุณไม่มีทางเลือกอื่น และคุณต้องอยู่ในสถานการณ์ที่ผิดปกติอย่างยิ่งเพื่อที่จะไม่มีทางเลือกอื่น
ฉันไม่เชื่อว่าฉันได้ยินคำตอบของปัญหานี้ (ค่อนข้างคลุมเครือ) เป็นเทคนิคเฉพาะที่มีชื่อ
สไปรท์ ดูเหมือนสิ่งที่คุณกำลังอธิบายคือสไปรต์ 2D ในเอ็นจิ้นเกม 3D เพื่อแสดงผลอย่างถูก (Nintendo64 ทำสิ่งนี้ได้ทั่วทุกสถานที่เช่นเดียวกับเอนจิ้น 3d สามต้น)
หากคุณต้องการแสดงการหมุนของดาวเคราะห์คุณเพียงแค่ต้องแสดงสไปรต์ 2 มิติที่เคลื่อนไหวโดยใช้แผ่นสไปรต์ที่เป็นการหมุนของดาวเคราะห์ที่แสดงผลล่วงหน้า เช่นเดียวกับ. GIF ที่เคลื่อนไหวได้ ปัญหาคือว่ามันจะแสดงผลล่วงหน้าดังนั้นตามที่คุณกล่าวว่าจะใช้งานได้เฉพาะเมื่อผู้ใช้ไม่ได้รับอนุญาตให้จัดการมุมมอง
นั่นอาจเป็นเพียงภาพเคลื่อนไหวอย่างง่ายโดยใช้หนึ่งพื้นผิวด้วยหลายเฟรม