Skip to content

Commit d9b6710

Browse files
authored
Task/accurate uts2 converter (#233)
* Improving Unity-chan Toon Shader Converter. [skip ci] * On the waty to implement UTS2 converter when UTS2 is uninsatalled. [skip ci] * Dealt with clipping mode, transpency and igonoreProjection. [skip ci] * Added transparency to the UTS2INFO table. [skip ci] * UTS2 converter render queue flow is recreated. * On the way to implement converter stencil part. [skip ci] * Implemented converting stencil part. [skip ci] * Stencil, draw order and so on started to work. * Added clipping into UTS2ShaderInfo table. [skip ci] * Fixed: the table [skip ci] * Fixed: Game Recommendation should not be set in the converter. [skip ci]
1 parent 7cce20b commit d9b6710

File tree

7 files changed

+240
-2088
lines changed

7 files changed

+240
-2088
lines changed

com.unity.toonshader/Editor/Converter/FromUTS2/BuiltInUTS2toIntegratedConverter.cs

Lines changed: 79 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@ namespace UnityEditor.Rendering.Toon
99
internal sealed class BuiltInUTS2toIntegratedConverter : RenderPipelineConverterContainer
1010
{
1111
internal UTS3GUI.CullingMode m_cullingMode;
12-
internal int _autoRenderQueue = 1;
1312

14-
internal UTS3GUI.UTS_TransparentMode _Transparent_Setting;
15-
internal int _StencilNo_Setting;
1613

17-
const string kLegacyShaderFileName = "LegacyToon";
18-
const string kShaderFileNameExtention = ".shader";
1914

2015

2116
public override string name => "Unity-chan Toon Shader 2";
@@ -24,8 +19,7 @@ internal sealed class BuiltInUTS2toIntegratedConverter : RenderPipelineConverter
2419

2520
public override void SetupConverter() {
2621

27-
// bool isUts2Installed = CheckUTS2isInstalled();
28-
// bool isUts2SupportedVersion = CheckUTS2VersionError();
22+
2923

3024
int materialCount = 0;
3125

@@ -369,22 +363,29 @@ void ConvertBuiltInUTS2Materials( string[] guids)
369363
{
370364
foreach (var guid in m_ConvertingMaterialGuids)
371365
{
372-
int renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
366+
373367
string path = AssetDatabase.GUIDToAssetPath(guid);
374368
Material material = AssetDatabase.LoadAssetAtPath<Material>(path);
375-
material.shader = Shader.Find(kIntegratedUTS3Name);
376-
var shaderGUID = m_Material2GUID_Dictionary[material];
377-
var UTS2GUID = m_GuidToUTSID_Dictionary[shaderGUID];
378-
renderQueue = material.renderQueue;
379-
// _Transparent_Setting = (UTS3GUI.UTS_TransparentMode)UTS3GUI.MaterialGetInt( material, UTS3GUI.ShaderPropTransparentEnabled);
380-
_Transparent_Setting = UTS3GUI.UTS_TransparentMode.Off;
381-
if (UTS2GUID.m_ShaderName.Contains("Trans") || UTS2GUID.m_ShaderName.Contains("trans"))
369+
370+
if (material.name == "ShadingGradeMap")
382371
{
383-
_Transparent_Setting = UTS3GUI.UTS_TransparentMode.On;
372+
Debug.Log("ShadingGradeMap");
384373
}
385-
_StencilNo_Setting = UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropStencilNo);
386-
_autoRenderQueue = UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropAutoRenderQueue);
387374

375+
material.shader = Shader.Find(kIntegratedUTS3Name);
376+
var shaderGUID = m_Material2GUID_Dictionary[material];
377+
var UTS2Info = m_GuidToUTSID_Dictionary[shaderGUID] as UTS2INFO;
378+
379+
UTS3GUI.UTS_TransparentMode transparencyEnabled = (UTS2Info.m_renderQueue == RenderQueue.Transparent) ? UTS3GUI.UTS_TransparentMode.On : UTS3GUI.UTS_TransparentMode.Off;
380+
381+
382+
383+
384+
int stencilNo_Setting = UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropStencilNo);
385+
386+
var renderType = UTS2Info.m_renderType;
387+
var renderQueue = UTS2Info.m_renderQueue;
388+
material.SetOverrideTag(UTS2INFO.RENDERTYPE, renderType);
388389
UTS3GUI.UTS_Mode technique = (UTS3GUI.UTS_Mode)UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropUtsTechniqe);
389390

390391
switch (technique)
@@ -396,29 +397,35 @@ void ConvertBuiltInUTS2Materials( string[] guids)
396397
material.EnableKeyword(UTS3GUI.ShaderDefineSHADINGGRADEMAP);
397398
break;
398399
}
399-
if (_Transparent_Setting == UTS3GUI.UTS_TransparentMode.On)
400+
401+
402+
403+
if (transparencyEnabled == UTS3GUI.UTS_TransparentMode.On)
400404
{
401405
UTS3GUI.MaterialSetInt(material, UTS3GUI.ShaderPropTransparentEnabled, 1);
402-
}
403-
if (_Transparent_Setting != UTS3GUI.UTS_TransparentMode.On)
404-
{
405-
UTS3GUI.SetupOutline(material);
406+
UTS3GUI.SetupOverDrawTransparentObject(material);
406407
}
407408
else
408409
{
409-
UTS3GUI.SetupOverDrawTransparentObject(material);
410+
UTS3GUI.SetupOutline(material);
410411
}
411412
SetCullingMode(material);
412-
SetAutoRenderQueue(material);
413-
SetTranparent(material);
413+
414+
SetAutoRenderQueue(material, 1);
415+
416+
SetTranparent(material, transparencyEnabled);
414417

415418
BasicLookdevs(material);
416-
SetGameRecommendation(material);
417-
ApplyClippingMode(material);
418-
ApplyStencilMode(material);
419+
// Should be kept as it is.
420+
// SetGameRecommendation(material);
421+
var clippingMode = UTS2Info.clippingMode;
422+
ApplyClippingMode(material, clippingMode);
423+
ApplyStencilMode(material, UTS2Info.m_stencilMode);
419424
ApplyAngelRing(material);
420425
ApplyMatCapMode(material);
421-
ApplyQueueAndRenderType(technique, renderQueue, material );
426+
427+
428+
ApplyQueueAndRenderType(material, technique, renderQueue, transparencyEnabled);
422429

423430

424431
}
@@ -462,19 +469,19 @@ void SetCullingMode(Material material)
462469

463470
}
464471
}
465-
void SetAutoRenderQueue(Material material)
472+
void SetAutoRenderQueue(Material material, int autoRenderQueue)
466473
{
467-
UTS3GUI.MaterialSetInt(material, UTS3GUI.ShaderPropAutoRenderQueue, _autoRenderQueue);
474+
UTS3GUI.MaterialSetInt(material, UTS3GUI.ShaderPropAutoRenderQueue, autoRenderQueue);
468475
// material.renderQueue
469476
}
470477

471-
void SetTranparent(Material material)
478+
void SetTranparent(Material material, UTS3GUI.UTS_TransparentMode transperentSetting)
472479
{
473480
const string _ZWriteMode = "_ZWriteMode";
474481
const string _ZOverDrawMode = "_ZOverDrawMode";
475482

476483

477-
if (_Transparent_Setting == UTS3GUI.UTS_TransparentMode.On)
484+
if (transperentSetting == UTS3GUI.UTS_TransparentMode.On)
478485
{
479486
if (UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropUtsTechniqe) == (int)UTS3GUI.UTS_Mode.ThreeColorToon)
480487
{
@@ -532,87 +539,40 @@ private bool IsShadingGrademap(Material material)
532539
return UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropUtsTechniqe) == (int)UTS3GUI.UTS_Mode.ShadingGradeMap;
533540
}
534541

535-
void ApplyQueueAndRenderType(UTS3GUI.UTS_Mode technique, int renderQueue, Material material)
542+
void ApplyQueueAndRenderType(Material material, UTS3GUI.UTS_Mode technique, RenderQueue renderQueue,UTS3GUI.UTS_TransparentMode transperentSetting )
536543
{
537-
var stencilMode = (UTS3GUI.UTS_StencilMode)UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropStencilMode);
538-
if (_autoRenderQueue == 1)
539-
{
540-
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
541-
}
544+
542545

543-
const string OPAQUE = "Opaque";
544-
const string TRANSPARENTCUTOUT = "TransparentCutOut";
545-
const string TRANSPARENT = "Transparent";
546-
const string RENDERTYPE = "RenderType";
547-
const string IGNOREPROJECTION = "IgnoreProjection";
548-
const string DO_IGNOREPROJECTION = "True";
549-
const string DONT_IGNOREPROJECTION = "False";
550-
var renderType = OPAQUE;
551-
var ignoreProjection = DONT_IGNOREPROJECTION;
552-
553-
if (_Transparent_Setting == UTS3GUI.UTS_TransparentMode.On)
554-
{
555-
renderType = TRANSPARENT;
556-
ignoreProjection = DO_IGNOREPROJECTION;
557-
}
558-
else
559-
{
560-
switch (technique)
561-
{
562-
case UTS3GUI.UTS_Mode.ThreeColorToon:
563-
{
564-
UTS3GUI.UTS_ClippingMode clippingMode = (UTS3GUI.UTS_ClippingMode)UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropClippingMode);
565-
if (clippingMode == UTS3GUI.UTS_ClippingMode.Off)
566-
{
567546

568-
}
569-
else
570-
{
571-
renderType = TRANSPARENTCUTOUT;
572547

573-
}
548+
var ignoreProjection = UTS2INFO.DONT_IGNOREPROJECTION;
574549

575-
break;
576-
}
577-
case UTS3GUI.UTS_Mode.ShadingGradeMap:
578-
{
579-
UTS3GUI.UTS_TransClippingMode transClippingMode = (UTS3GUI.UTS_TransClippingMode)UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropClippingMode);
580-
if (transClippingMode == UTS3GUI.UTS_TransClippingMode.Off)
581-
{
582-
}
583-
else
584-
{
585-
renderType = TRANSPARENTCUTOUT;
586-
587-
}
588-
589-
break;
590-
}
591-
}
550+
if (transperentSetting == UTS3GUI.UTS_TransparentMode.On)
551+
{
592552

553+
ignoreProjection = UTS2INFO.DO_IGNOREPROJECTION;
593554
}
594-
if (_autoRenderQueue == 1)
555+
else
595556
{
596-
if (_Transparent_Setting == UTS3GUI.UTS_TransparentMode.On)
597-
{
598-
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
599-
}
600-
else if (stencilMode == UTS3GUI.UTS_StencilMode.StencilMask)
601-
{
602-
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest - 1;
603-
}
604-
else if (stencilMode == UTS3GUI.UTS_StencilMode.StencilOut)
605-
{
606-
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
607-
}
557+
608558
}
609-
else
559+
// material.SetOverrideTag(UTS2INFO.IGNOREPROJECTION, ignoreProjection);
560+
switch (renderQueue)
610561
{
611-
material.renderQueue = renderQueue;
562+
case RenderQueue.None:
563+
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
564+
break;
565+
case RenderQueue.AlphaTest:
566+
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
567+
break;
568+
case RenderQueue.AlphaTestMinus1:
569+
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest - 1;
570+
break;
571+
case RenderQueue.Transparent:
572+
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
573+
break;
612574
}
613575

614-
material.SetOverrideTag(RENDERTYPE, renderType);
615-
material.SetOverrideTag(IGNOREPROJECTION, ignoreProjection);
616576
}
617577
void ApplyMatCapMode(Material material)
618578
{
@@ -645,9 +605,10 @@ void ApplyAngelRing(Material material)
645605
}
646606
}
647607

648-
void ApplyStencilMode(Material material)
608+
void ApplyStencilMode(Material material, UTS3GUI.UTS_StencilMode mode)
649609
{
650-
UTS3GUI.UTS_StencilMode mode = (UTS3GUI.UTS_StencilMode)(UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropStencilMode));
610+
UTS3GUI.MaterialSetInt(material, UTS3GUI.ShaderPropStencilMode,(int)mode);
611+
651612
switch (mode)
652613
{
653614
case UTS3GUI.UTS_StencilMode.Off:
@@ -674,7 +635,7 @@ void ApplyStencilMode(Material material)
674635

675636

676637
}
677-
void ApplyClippingMode(Material material)
638+
void ApplyClippingMode(Material material,int clippingMode)
678639
{
679640

680641
if (!IsShadingGrademap(material))
@@ -684,7 +645,7 @@ void ApplyClippingMode(Material material)
684645
material.DisableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_OFF);
685646
material.DisableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_ON);
686647

687-
switch (UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropClippingMode))
648+
switch (clippingMode)
688649
{
689650
case 0:
690651
material.EnableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_OFF);
@@ -700,13 +661,16 @@ void ApplyClippingMode(Material material)
700661
material.DisableKeyword(UTS3GUI.ShaderDefineIS_OUTLINE_CLIPPING_NO);
701662
material.EnableKeyword(UTS3GUI.ShaderDefineIS_OUTLINE_CLIPPING_YES);
702663
break;
703-
default:
664+
case 2:
704665
material.DisableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_OFF);
705666
material.DisableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_MODE);
706667
material.EnableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_TRANSMODE);
707668
material.DisableKeyword(UTS3GUI.ShaderDefineIS_OUTLINE_CLIPPING_NO);
708669
material.EnableKeyword(UTS3GUI.ShaderDefineIS_OUTLINE_CLIPPING_YES);
709670
break;
671+
default:
672+
Debug.Assert(false);
673+
break;
710674
}
711675
}
712676
else
@@ -716,25 +680,27 @@ void ApplyClippingMode(Material material)
716680
material.DisableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_OFF);
717681
material.DisableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_MODE);
718682
material.DisableKeyword(UTS3GUI.ShaderDefineIS_CLIPPING_TRANSMODE);
719-
switch (UTS3GUI.MaterialGetInt(material, UTS3GUI.ShaderPropClippingMode))
683+
switch (clippingMode)
720684
{
721685
case 0:
722686
material.EnableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_OFF);
723687
material.DisableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_ON);
724688
break;
725-
default:
689+
case 1:
726690
material.DisableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_OFF);
727691
material.EnableKeyword(UTS3GUI.ShaderDefineIS_TRANSCLIPPING_ON);
728692
break;
693+
default:
694+
Debug.Assert(false);
695+
break;
729696

730697
}
731698

732699
}
733-
700+
UTS3GUI.MaterialSetInt(material, UTS3GUI.ShaderPropClippingMode, clippingMode);
734701
}
735702

736-
const string srpDefaultColorMask = "_SPRDefaultUnlitColorMask";
737-
const string srpDefaultCullMode = "_SRPDefaultUnlitColMode";
703+
738704

739705

740706

0 commit comments

Comments
 (0)