From 2dc6cd07588a8c6708754c028f10d445a25b0ef9 Mon Sep 17 00:00:00 2001 From: notargs Date: Fri, 28 Apr 2023 17:32:06 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E6=8F=8F=E7=94=BB=E3=81=99=E3=82=8B=E4=BB=95?= =?UTF-8?q?=E7=B5=84=E3=81=BF=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...niversalRenderPipelineAsset_Renderer.asset | 18 +++++++- ...vrmc_materials_mtoon_forward_fragment.hlsl | 4 +- .../VRM10/vrmc_materials_mtoon_urp.shader | 40 ++++++++++++++++++ .../Runtime/MToonOutlineRenderFeature.cs | 24 +++++++++++ .../Runtime/MToonOutlineRenderFeature.cs.meta | 3 ++ .../MToon10/Runtime/MToonOutlineRenderPass.cs | 41 +++++++++++++++++++ .../Runtime/MToonOutlineRenderPass.cs.meta | 3 ++ .../VRMShaders.VRM10.MToon10.Runtime.asmdef | 14 ++++++- 8 files changed, 140 insertions(+), 7 deletions(-) create mode 100644 Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs create mode 100644 Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs.meta create mode 100644 Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs create mode 100644 Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs.meta diff --git a/Assets/VRM10_Samples/URPSample/Settings/UniversalRenderPipelineAsset_Renderer.asset b/Assets/VRM10_Samples/URPSample/Settings/UniversalRenderPipelineAsset_Renderer.asset index cd7074b5f..9c8da0435 100644 --- a/Assets/VRM10_Samples/URPSample/Settings/UniversalRenderPipelineAsset_Renderer.asset +++ b/Assets/VRM10_Samples/URPSample/Settings/UniversalRenderPipelineAsset_Renderer.asset @@ -12,8 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} m_Name: UniversalRenderPipelineAsset_Renderer m_EditorClassIdentifier: - m_RendererFeatures: [] - m_RendererFeatureMap: + m_RendererFeatures: + - {fileID: 6807519784255233043} + m_RendererFeatureMap: 131cfa0d2d2b795e postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} shaders: @@ -43,3 +44,16 @@ MonoBehaviour: m_ShadowTransparentReceive: 1 m_RenderingMode: 0 m_AccurateGbufferNormals: 0 +--- !u!114 &6807519784255233043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5b6d00cd3f0249a2b4ee7dc86f9a8d63, type: 3} + m_Name: MToonOutlineRenderFeature + m_EditorClassIdentifier: + m_Active: 1 diff --git a/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_forward_fragment.hlsl b/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_forward_fragment.hlsl index 220c1ab42..74d03532d 100644 --- a/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_forward_fragment.hlsl +++ b/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_forward_fragment.hlsl @@ -55,8 +55,7 @@ half4 MToonFragment(const FragmentInput fragmentInput) : SV_Target mtoonInput.alpha = alpha; half4 col = GetMToonLighting(unityLighting, mtoonInput); - #ifdef MTOON_URP - #ifdef _ADDITIONAL_LIGHTS + #if defined(MTOON_URP) && defined(_ADDITIONAL_LIGHTS) && !defined(MTOON_PASS_OUTLINE) uint pixelLightCount = GetAdditionalLightsCount(); for (uint lightIndex = 0u; lightIndex < pixelLightCount; ++lightIndex) { @@ -64,7 +63,6 @@ half4 MToonFragment(const FragmentInput fragmentInput) : SV_Target col.rgb += GetMToonURPAdditionalLighting(additionalUnityLighting, mtoonInput).rgb; } #endif - #endif // Apply Fog #ifdef MTOON_URP diff --git a/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_urp.shader b/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_urp.shader index 473c2456e..26cf9e71a 100644 --- a/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_urp.shader +++ b/Assets/VRMShaders/VRM10/MToon10/Resources/VRM10/vrmc_materials_mtoon_urp.shader @@ -117,6 +117,46 @@ Shader "VRM10/MToon10_URP" ENDHLSL } + // Built-in Forward Base Pass + Pass + { + Name "MToonOutline" + Tags { "LightMode" = "MToonOutline" } + + Cull Front + Blend [_M_SrcBlend] [_M_DstBlend] + ZWrite [_M_ZWrite] + ZTest LEqual + Offset 1, 1 + BlendOp Add, Max + AlphaToMask [_M_AlphaToMask] + + HLSLPROGRAM + #pragma target 3.0 + + // Unity defined keywords + #pragma multi_compile_fwdbase nolightmap nodynlightmap nodirlightmap novertexlight + #pragma multi_compile_fog + #pragma multi_compile_instancing + + #pragma multi_compile __ _ALPHATEST_ON _ALPHABLEND_ON + #pragma multi_compile __ _NORMALMAP + #pragma multi_compile __ _MTOON_EMISSIVEMAP + #pragma multi_compile __ _MTOON_RIMMAP + #pragma multi_compile __ _MTOON_PARAMETERMAP + #pragma multi_compile __ _MTOON_OUTLINE_WORLD _MTOON_OUTLINE_SCREEN + + #pragma vertex MToonVertex + #pragma fragment MToonFragment + + #define MTOON_URP + #define MTOON_PASS_OUTLINE + + #include "./vrmc_materials_mtoon_forward_vertex.hlsl" + #include "./vrmc_materials_mtoon_forward_fragment.hlsl" + ENDHLSL + } + // Shadow rendering pass Pass { diff --git a/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs new file mode 100644 index 000000000..5320b2fd6 --- /dev/null +++ b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs @@ -0,0 +1,24 @@ +#if MTOON_URP +using UnityEngine.Rendering.Universal; + +namespace VRMShaders.VRM10.MToon10.Runtime +{ + public sealed class MToonOutlineRenderFeature : ScriptableRendererFeature + { + private MToonOutlineRenderPass _pass; + + public override void Create() + { + _pass = new MToonOutlineRenderPass + { + renderPassEvent = RenderPassEvent.AfterRenderingOpaques + }; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(_pass); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs.meta b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs.meta new file mode 100644 index 000000000..e0a69838c --- /dev/null +++ b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5b6d00cd3f0249a2b4ee7dc86f9a8d63 +timeCreated: 1682661280 \ No newline at end of file diff --git a/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs new file mode 100644 index 000000000..5fedcc594 --- /dev/null +++ b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs @@ -0,0 +1,41 @@ +#if MTOON_URP +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace VRMShaders.VRM10.MToon10.Runtime +{ + public sealed class MToonOutlineRenderPass : ScriptableRenderPass + { + private const string ProfilerTag = nameof(MToonOutlineRenderPass); + private readonly ProfilingSampler _profilingSampler = new ProfilingSampler(ProfilerTag); + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + var cmd = CommandBufferPool.Get(); + using (new ProfilingScope(cmd, _profilingSampler)) + { + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + + var camera = renderingData.cameraData.camera; + var shaderTagId = new ShaderTagId("MToonOutline"); + var sortingSettings = new SortingSettings(camera); + var drawingSettings = new DrawingSettings(shaderTagId, sortingSettings) + { + perObjectData = PerObjectData.ReflectionProbes | PerObjectData.Lightmaps | + PerObjectData.LightProbe | PerObjectData.LightData | PerObjectData.OcclusionProbe | + PerObjectData.ShadowMask + }; + var filteringSettings = FilteringSettings.defaultValue; + var renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing); + context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, + ref renderStateBlock); + } + + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + CommandBufferPool.Release(cmd); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs.meta b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs.meta new file mode 100644 index 000000000..e26639ad2 --- /dev/null +++ b/Assets/VRMShaders/VRM10/MToon10/Runtime/MToonOutlineRenderPass.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df162971c1034acdbe28ff1ec94d8601 +timeCreated: 1682665616 \ No newline at end of file diff --git a/Assets/VRMShaders/VRM10/MToon10/Runtime/VRMShaders.VRM10.MToon10.Runtime.asmdef b/Assets/VRMShaders/VRM10/MToon10/Runtime/VRMShaders.VRM10.MToon10.Runtime.asmdef index 25f494397..7b4b785b5 100644 --- a/Assets/VRMShaders/VRM10/MToon10/Runtime/VRMShaders.VRM10.MToon10.Runtime.asmdef +++ b/Assets/VRMShaders/VRM10/MToon10/Runtime/VRMShaders.VRM10.MToon10.Runtime.asmdef @@ -1,6 +1,10 @@ { "name": "VRMShaders.VRM10.MToon10.Runtime", - "references": [], + "rootNamespace": "", + "references": [ + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:df380645f10b7bc4b97d4f5eb6303d95" + ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, @@ -8,6 +12,12 @@ "precompiledReferences": [], "autoReferenced": false, "defineConstraints": [], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.core", + "expression": "", + "define": "MTOON_URP" + } + ], "noEngineReferences": false } \ No newline at end of file