ฉันจะแสดงเกม 3 มิติของฉันในรูปแบบ ASCII ได้อย่างไร


19

ฉันพยายามสร้างไข่อีสเตอร์สำหรับเกมสามมิติใน Unity3D ฉันต้องการทำให้เกมของฉันกลายเป็น ASCII ได้ไม่นาน

ความคิดแรกของฉันคือการสร้าง shader ให้ทำ แต่ฉันไม่แน่ใจว่ามันเป็นวิธีที่ถูกต้องหรือไม่


กับ libAA หรือ libCACA ( link1 - link2รับผิดชอบ.)
v.oddou

คำตอบ:


20

ผมไม่ทราบว่าของปลั๊กเสียบและเล่นโซลูชั่นสำหรับมัน แต่ที่นี่เป็นอัลกอริทึมที่ทำงานใน Shader พิกเซลที่มีเพียงพื้นผิวเป็นสินทรัพย์พิเศษ

เนื้อหาที่ต้องการคือพื้นผิวขนาดเล็กที่มีแถวเดียวของกระเบื้องจำนวนหนึ่งโดยที่ซ้ายสุดคือมืดที่สุดและขวาที่สุดเบาที่สุด

จะเกิดอะไรขึ้น (ต่อเฟรม):

  • ใช้บัฟเฟอร์ที่คุณต้องการทำให้เป็นเวอร์ชัน ASCII และลดขนาดลงตามขนาดไทล์ (ดังนั้นหากคุณมีไทล์ 8x8 ภาพจะถูกลดขนาดลง 8 ในทั้งสองมิติ)
  • สร้างเป้าหมายการเรนเดอร์ใหม่ของบัฟเฟอร์เต็มขนาดดั้งเดิม
  • ใช้ตัวแบ่งพิกเซลพร้อมสิ่งต่อไปนี้:
    • อินพุตตัวอย่างสำหรับบัฟเฟอร์ (พร้อมตั้งค่าการสุ่มตัวอย่างเป็นเพื่อนบ้านที่ใกล้ที่สุด) และอินพุตตัวอย่างสำหรับกระเบื้อง
    • เครื่องแบบสำหรับขนาดของกระเบื้องจำนวนของกระเบื้องและความละเอียดเอาต์พุตสุดท้าย
  • Pixel Shader ควรจะ:
    • รับค่าสเกลสีเทาจากบัฟเฟอร์ที่ลดสเกล ( (col.r+col.g+col.b) / 3.0อาจจะเพียงพอแม้ว่ามันจะไม่ได้เป็นอย่างที่ดวงตาทำงาน)
    • ใช้ข้อมูลนี้เพื่อรับไทล์ที่คุณต้องการเรนเดอร์ ( floor(grayscale * TILE_COUNT))
    • คำนวณพิกัดพิกเซล X / Y ของเอาท์พุทและใช้โมดูลเหล่านั้นขนาดกระเบื้อง (tileX / tileY)
    • กลับมาเป็นสีค่าตัวอย่างจากบัฟเฟอร์กระเบื้องที่ vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )

หน้าเชื่อมโยงมีหลายภาพของตัวอย่างสิ่งหนึ่งที่ฉันต้องการพิจารณาเพิ่มจะเป็นบิตเล็กน้อยของเสียงกับค่าระดับสีเทาคำนวณจึงไม่เพียงหนึ่งช่วงตึกใหญ่ของMMMMMMMMMMMMMMMMs

อัปเดต: @Lokkij ในห้องสนทนา gamedev โพสต์การสอนที่สมบูรณ์มากขึ้นสำหรับ Unity: http://pentahelix.github.io/ASCII-Tutorial-Revisited/


วิธีง่ายๆที่สามารถทำงานได้ค่อนข้างดี (+1) ตอนนี้ฉันกำลังคิดที่จะใช้เอฟเฟกต์นี้ด้วยตัวเอง
พอล Manta

2
@Sata อ้างอิงถึงความคิดเห็นของ Kevin ว่า "[นี่] ไม่ใช่วิธีการทำงานของดวงตา" นี่เป็นคำอธิบายของวิธีการแปลงภาพสีเป็น greyscale: johndcook.com/blog/2009/08/24/ ......
Paul Manta

1
คุณสามารถขยายสิ่งนี้เพื่อรวมพารามิเตอร์เพิ่มเติมเช่นการตรวจจับขอบเพื่อเลือกอักขระตามรูปร่างของพวกเขานอกเหนือจากความหนาแน่น / ความสว่าง
DMGregory

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