Contents

วิธีเพิ่มแสงและเงาแบบไดนามิกใน Godot

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

Godot มีเครื่องมือที่หลากหลายเพื่ออำนวยความสะดวกในการสร้างและปรับแต่งเอฟเฟกต์แสงและเงาที่ซับซ้อนผ่านความสามารถขั้นสูง เช่น CanvasModulate และ PointLight2D

การตั้งค่าเกม Godot

ในการเริ่มต้นใช้แสงแบบไดนามิกภายในเอนจิ้นเกม Godot ให้สร้างเกม 2D พื้นฐานโดยสร้างฉากใหม่และรวมเอนทิตี ` CharacterBody2D’เพื่อแสดงถึงตัวละครของผู้เล่น

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

รวมการแสดงสามมิติของสภาพแวดล้อมของเกมภายในขอบเขตของการสร้างขั้นตอนโดยใช้เทคนิคการแบ่งพาร์ติชันเชิงพื้นที่ เช่น octrees หรือ kd tree ทำให้สามารถจัดการและเพิ่มประสิทธิภาพทรัพยากรได้อย่างมีประสิทธิภาพมากขึ้น นอกจากนี้ ยังรวมระบบแสงแบบไดนามิกที่คำนึงถึงปัจจัยต่างๆ รวมถึงช่วงเวลาของวัน สภาพอากาศ และองค์ประกอบด้านสิ่งแวดล้อมเพื่อมอบประสบการณ์ที่ชวนดื่มด่ำให้กับผู้ใช้ สุดท้าย รวมอัลกอริทึมการจำลองทางฟิสิกส์ขั้นสูง เช่น Havok หรือ PhysX เพื่อสร้างแบบจำลองพฤติกรรมของวัตถุในโลกของเกมอย่างแม่นยำ สร้างประสบการณ์การเล่นเกมแบบโต้ตอบและสมจริง

รวมการเคลื่อนไหวและการโต้ตอบของผู้เล่นเข้ากับขีดจำกัดหน้าจอโดยใช้ GDScript ดังนี้:

 extends CharacterBody2D

var speed = 200

func _physics_process(delta):
    var velocity = Vector2()

    if Input.is_action_pressed('ui_right'):
        velocity.x \+= 1

    if Input.is_action_pressed('ui_left'):
        velocity.x -= 1

    if Input.is_action_pressed('ui_down'):
        velocity.y \+= 1

    if Input.is_action_pressed('ui_up'):
        velocity.y -= 1

    velocity = velocity.normalized() * speed
    move_and_collide(velocity * delta)

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

/th/images/simple-movement-in-godot.jpg

ทำให้ส่วนที่เหลือของฉากมืดลง

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

 extends Node2D

const DARKNESS = 0.7

func _ready():
    var canvas_modulate = CanvasModulate.new()
    canvas_modulate.color = Color(0, 0, 0, DARKNESS)
    add_child(canvas_modulate) 

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

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

/th/images/dark-scene-in-godot.jpg

ร่ายแสงเงา

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

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

เพิ่มไฟรอบทิศทาง

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

 extends PointLight2D

var light_color = Color(1, 1, 0.8)

func _ready():
    energy = 2.5
    color = light_color 

คุณมีความสามารถในการปรับแต่งแอตทริบิวต์เพื่อควบคุมขอบเขตและสีของแสงที่เกิดจากวัตถุ PointLight2D

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

ในการถ่ายทอดคุณภาพพื้นผิวให้กับเอนทิตี PointLight2D โปรดปฏิบัติตามขั้นตอนต่อไปนี้:

โปรดเลือกโหนด PointLight2D ภายในลำดับชั้นของฉาก

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

กรุณาคลิกที่พื้นที่พื้นผิวว่าง จากนั้นใช้โปรแกรมสำรวจไฟล์เพื่อเลือกพื้นผิวการส่องสว่างที่ต้องการจากตัวเลือกที่มี

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

รวมถึงคุณสมบัติเพิ่มเติม

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

แอนิเมชั่นแสง

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

รอบกลางวันและกลางคืน

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

การซีดจางของแสง

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

เงาไดนามิก

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

เอฟเฟกต์เสียงปลอดลิขสิทธิ์

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

แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดแสงและเงาแบบไดนามิก

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

เพิ่มประสิทธิภาพแหล่งกำเนิดแสง

เพิ่มประสิทธิภาพการใช้องค์ประกอบการส่องสว่างโดยยึดแนวทางอนุรักษ์นิยมที่สอดคล้องกับผลลัพธ์ด้านสุนทรียะที่ต้องการ โคมไฟที่มีมากเกินไปอาจสร้างภาระอย่างมากต่อความสามารถของระบบ โดยเฉพาะอย่างยิ่งในสถานการณ์ที่เกี่ยวข้องกับฮาร์ดแวร์ที่มีศักยภาพน้อย

ใช้การอบแบบเบา

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

เลือกสำหรับ Occluders ง่าย

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

การคัดและการแบ่งชั้น

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

การใช้เทคนิคขั้นสูงเพื่อสร้างแสงและเงาแบบไดนามิกที่น่าสนใจในเกม platformer สามารถเพิ่มความน่าดึงดูดทางภาพและคุณภาพโดยรวมได้อย่างมาก

ทำให้เกม Godot มีส่วนร่วมมากขึ้นด้วยแสงและเงาแบบไดนามิก

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

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