런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시
개요
런타임(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
Reference
이 문제에 관하여(런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/120byte/items/c229c12c0c837f6e05ed
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/120byte/items/c229c12c0c837f6e05ed
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/120byte/items/c229c12c0c837f6e05ed
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(런타임 (exe)에서 VRM (MToon) HDRP (Lit) 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/120byte/items/c229c12c0c837f6e05ed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)