런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시

7706 단어 UnityMToonHDRPVRMC#

개요



런타임(exe)에서 VRM(MToon)을 HDRP(Lit) 표시합니다.

환경



Unity 2020.3.11f1
UniVRM 0.66.0

구현


using System.IO;
using System.Collections.Generic;
using UnityEngine;
using VRM;

public class MToonToLit : MonoBehaviour
{
    [SerializeField] string FilePath;
    [SerializeField] Material Opaque;
    [SerializeField] Material Transparent;

    void Start()
    {
        // VRM読み込み
        var bytes = File.ReadAllBytes(FilePath);
        var context = new VRMImporterContext();
        context.ParseGlb(bytes);
        context.Load();
        context.ShowMeshes();

        // MToonをLitに置き換え
        var renderers = context.Root.GetComponentsInChildren<Renderer>();
        for (int i = 0; i < renderers.Length; i++)
        {
            var materials = new List<Material>(renderers[i].materials);
            for (int j = 0; j < renderers[i].materials.Length; j++)
            {
                if (renderers[i].materials[j].GetFloat("_BlendMode") != 2)
                {
                    materials[j] = new Material(Opaque);
                }
                else
                {
                    materials[j] = new Material(Transparent);
                }
                // 通常と透過を使い分けて色とテクスチャを反映
                materials[j].color = renderers[i].materials[j].color;
                materials[j].mainTexture = renderers[i].materials[j].mainTexture;
            }
            renderers[i].materials = materials.ToArray();
        }
    }
}


보충



HDRP로 작성한 프로젝트의 장면의 어딘가에 전술의 스크립트를 붙여, FilePath에 읽고 싶은 VRM 파일의 패스, Opaque에 신규 작성한 HDRP/Lit의 머티리얼을 설정, Transparent에는 신규 작성한 HDRP/Lit의 머티리얼의 Surface Type을 Transparent로 하고 설정하면 움직인다고 생각합니다.

알려진 문제로서, 이대로라면 Unlit이 왔을 때 실패해 새까맣게 되므로, _BlendMode의 판정 근처를 제대로 할 필요가 있습니다. 어떻게 해야할지 알아볼 수 없습니다.

참고



왼쪽은 HDRP이고 오른쪽은 Mtoon입니다.

모델 : 린츠 짱 수정
htps : // 보오 th. pm/그럼/있어 ms/1255264
샘플 앱
htps // 120by로. 보오 th. PM / MS / 3062310

좋은 웹페이지 즐겨찾기