환경 평가 수행

11129 단어 ARFoundation
ARcamera의 LightEstimation Mode를 AmbientIntensity로 변경

Shader를 만듭니다.Unit Shader를 선택하여 이름을 LightEstimation으로 변경합니다.

역할 Material을 복사합니다.이해하기 편리하도록 먼저 이름을 바꾸다.

LightEstimation.Shader에 다음 사항 추가
Character/LightEstimation.Shader
Shader "Character/LightEstimation"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Brightness ("Brightness", Float) = 0.5 //追記
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _Brightness; //追記

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                col *= _Brightness; //追記 
                return col;
            }
            ENDCG
        }
    }
}
모든 복사된 Material을 선택하여 Shader를Character/LightEstimation으로 변경

개별 Material이 어두워졌는지 확인합니다.없으면 Brightness를 0으로 설정합니다.바꾸다

캐릭터 부위에서 제작된 머티리얼즈를 끌어 놓습니다.

LightEstimationObject.제작 cs.

LightEstimationObject.cs에 다음과 같이 기술하다
LightEstimationObject.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;

public class LightEstimationObject : MonoBehaviour
{
    [SerializeField]
    ARCameraManager m_CameraManager;

    private Renderer[] renderers;

    void OnEnable()
    {
        renderers = GetComponentsInChildren<Renderer>();

        if (m_CameraManager != null)
            m_CameraManager.frameReceived += FrameChanged;
    }

    void OnDisable()
    {
        renderers = null;

        if (m_CameraManager != null)
            m_CameraManager.frameReceived -= FrameChanged;
    }

    void FrameChanged(ARCameraFrameEventArgs args)
    {
        foreach (Renderer renderer in renderers)
        {
            renderer.material.SetFloat(
                                    "_Brightness",
                                    args.lightEstimation.averageBrightness.Value
                                    );
        }
    }
}
캐릭터에 스크립트를 추가하여 ARcamera를 Camera에 첨부합니다.

구축

좋은 웹페이지 즐겨찾기