首页 > 解决方案 > 如何在前置摄像头中调整 ARCore 光线估计

问题描述

您好我有一些关于ARCore材质和前置照明的问题和疑问 - 摄像头

当我从 substancfe 画家绘制网格并导出其纹理然后将它们放在统一材质上并分配给网格后。模型很酷,但是当照明在游戏中时。模型变黑。纹理不出现。我如何在前置摄像头中进行照明,您可以提供任何建议吗?谢谢你。

标签: arcore

解决方案


为场景中的所有灯光应用来自相机的灯光估计,并使用 ARFoundation 渲染设置环境光

using UnityEngine;
using System.Collections.Generic;
using UnityEngine.XR.ARFoundation;

public class lightEstimationController: MonoBehaviour
{
    private ARCameraManager arCameraManager;

    private Light[] lights;

    private void Awake() 
    {
        lights = GetComponentsInChildren<Light>();
        arCameraManager = this.GetComponent<ARCameraManager>();
    }

    private void OnEnable() 
    {
        if (arCameraManager)
        arCameraManager.frameReceived += FrameUpdated;
    }

    private void OnDisable() 
    {
        if (arCameraManager)
            arCameraManager.frameReceived -= FrameUpdated;
    }

    private void FrameUpdated(ARCameraFrameEventArgs args)
    {
        if(args.lightEstimation.averageBrightness.HasValue)
        {
            for(int i=0;i< lights.Length; i++)
            {
                lights[i].intensity = args.lightEstimation.averageBrightness.Value;
                
                if (args.lightEstimation.averageColorTemperature.HasValue)
                {
                    lights[i].colorTemperature = args.lightEstimation.averageColorTemperature.Value;
                }

                if (args.lightEstimation.colorCorrection.HasValue)
                {
                    lights[i].color = args.lightEstimation.colorCorrection.Value;
                }
                
            }

            float factor = args.lightEstimation.averageBrightness.Value;
            Color color = new Color(SceneConfig.SceneLightColor.r * factor, SceneConfig.SceneLightColor.g * factor, SceneConfig.SceneLightColor.b * factor);

            RenderSettings.ambientLight = color;

            //   Debug.Log(  $"Color Correction: {args.lightEstimation.colorCorrection.Value}");
            //   Debug.Log($"Color Temperature: {args.lightEstimation.averageColorTemperature.Value}");
            //   Debug.Log ( $"Brightness: {args.lightEstimation.averageBrightness.Value}");
        }



    }
}

推荐阅读