そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】URPプロジェクトで Mtoon10 のアウトラインを表示する方法

要件

Unityバージョン 6000.026f1
UniVRM 0.108.0
URPプロジェクト

はじめに

VRMのアウトラインの内容を変更するため
Mtoon10のアウトライン項目を変更しても変化がない。

最新のUniVRMのバージョンでは解決されているようだが、
自プロジェクトでは UniVRM 0.108.0 を使用する必要があるため更新できない状況。

そのため、以下の変更内容を自分で書き変えました。

github.com

対策方法

事前準備

まず事前準備として、「Render Features」に
「MToon Outline Render Feature」を追加します。

方法
→Setting
→PC_Renderer
→Add Renderer Feature


→MToon Outline Render Feature を選択

コード変更

下記の通りに2つのファイル内容変更を行います。

github.com

MToonOutlineRenderFeature の変更

ファイルの場所
Assets/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs

全文はこちら

#if MTOON_URP
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

namespace VRMShaders.VRM10.MToon10.Runtime
{
    public sealed class MToonOutlineRenderFeature : ScriptableRendererFeature
    {
#if UNITY_6000_0_OR_NEWER
        private RenderObjectsPass _opaquePass;
        private RenderObjectsPass _transparentPass;
#else
        private MToonOutlineRenderPass _opaquePass;
        private MToonOutlineRenderPass _transparentPass;
#endif

        public override void Create()
        {
#if UNITY_6000_0_OR_NEWER
            var profilerTagName = nameof(MToonOutlineRenderFeature);
            var shaderTags = new[] {"MToonOutline"};
            var layerMask = -1;
            var cameraSettings = new RenderObjects.CustomCameraSettings();
            _opaquePass = new RenderObjectsPass(profilerTagName, RenderPassEvent.AfterRenderingOpaques, shaderTags, RenderQueueType.Opaque, layerMask, cameraSettings);
            _transparentPass = new RenderObjectsPass(profilerTagName, RenderPassEvent.BeforeRenderingTransparents, shaderTags, RenderQueueType.Transparent, layerMask, cameraSettings);
#else
            _opaquePass = new MToonOutlineRenderPass(RenderPassEvent.AfterRenderingOpaques, RenderQueueRange.opaque);
            _transparentPass = new MToonOutlineRenderPass(RenderPassEvent.BeforeRenderingTransparents, RenderQueueRange.transparent);
#endif
        }

        public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
        {
            renderer.EnqueuePass(_opaquePass);
            renderer.EnqueuePass(_transparentPass);
        }
    }
}
#endif

MToonOutlineRenderPass の変更

ファイルの場所
Assets/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs

1行目を変更します。

変更前

#if MTOON_URP

変更後

#if MTOON_URP && !UNITY_6000_0_OR_NEWER

以上の変更でアウトラインが表示されるようになりました。

参考

qiita.com