วิธีการปิดไฟใน Unity3D ได้อย่างไร


9

ก่อนอื่นฉันเป็นเจ้าของ Unity Pro

ฉันกำลังมองหาที่จะปิดไฟเมื่อพวกเขาไม่ได้รับการดูในขณะนี้เพื่อปรับปรุงประสิทธิภาพ วิธีการหลักที่ฉันใช้ในการใช้ BecameVisible () และทดสอบ frustum ของกล้อง

ปัญหาหลักของฉันคือถ้าผู้เล่นกำลังดูพื้นที่ที่จะสว่างด้วยแสงฉันยังต้องการแสงที่จะเปิด

ขณะนี้ฉันใช้วิธีการตรวจสอบเพื่อดูว่าพื้นที่แสงสว่างอยู่ใน frustum ของกล้องหรือไม่ แต่บางครั้งปัญหาไฟอยู่ใน frustum โดยที่ผู้เล่นไม่สามารถมองเห็นได้ (เช่นกำแพงกั้นระหว่างพวกเขากับเครื่องเล่น) ฉันลอง raycasting กับพวกมัน แต่คุณไม่สามารถรับรายละเอียดเพียงพอสำหรับพื้นที่ที่เกิดขึ้นจริง (สิ่งที่ดีที่สุดที่ฉันคิดได้คือใช้ renderer.bounds.extent และ renderer.bounds.center เพื่อคำนวณจุดส่องสว่างสูงสุดจากแสง)

ไม่มีใครรู้วิธีที่ง่าย ๆ ใน Unity Pro เพื่อปิดไฟ? หรือคุณสามารถบอกวิธีที่ดีในการใช้วิธีการที่ศูนย์กลางกล้องที่ฉันพูดถึง?


1
คุณสามารถตรวจสอบว่ากล้อง frustum และไฟ frustum ตัดกันหรือไม่ แต่ฉันคาดว่าความสามัคคีกำลังทำสิ่งนี้อยู่
Archy

1
ใน Unity Pro OcclusionCullingควรจัดการไฟเช่นกัน
Archy

เอาล่ะศิลปินของฉันบอกว่า Occlusion Culling ไม่ทำงานกับแสงไฟ ดังนั้นฉันอาจจะแค่ตั้งแหล่งกำเนิดแสงต่าง ๆ ของฉันเป็น Occludees ในพื้นที่บดเคี้ยวที่ฉันได้ตั้งค่าไว้แล้ว
Timothy Williams

และบางอย่างเช่นการตรวจสอบกล้องและ frustum เบา ๆ สำหรับแต่ละคนอาจใช้ได้แม้ว่าฉันจะต้องใช้มันใน 360 องศา
Timothy Williams

การคัดจุกอุดฟันดูเหมือนจะไม่ได้ทำงานกับแสงแม้ว่าสิ่งที่ศิลปินและฉันพยายาม ฉันจะปิดไฟได้อย่างไร
Timothy Williams

คำตอบ:


1

คุณสามารถเขียนสคริปต์ของคุณเองเพื่อปิดไฟ บางสิ่งเช่นนี้ติดอยู่กับกล้องหลัก:

List<Light> Lights = new List<Light>();
const float OccludeDist = 100;
void Update()
{
    foreach (Light light in Lights)
    {
        if ((transform.position - light.transform.position).sqrMagnitude > OccludeDist * OccludeDist))
        {
            light.enabled = false;
        }
        else{
            light.enabled = true;
        }
    }
}

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


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