Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: use real Poiyomi shader in Poiyomi-related tests
Install com.poiyomi.toon 9.3.64 via vrc-get and rewrite Poiyomi tests to
use the actual '.poiyomi/Poiyomi Toon' shader instead of the internal proxy.

- Add AssetUtility.IsPoiyomiImported() (shader + Poi.Tools.PoiImportExportChecker)
- Rewrite PoiyomiMaterialTests to use real shader with IsPoiyomiImported() guard
- Rewrite PoiyomiToonLitGeneratorTests to use real shader with IsPoiyomiImported() guard
- Add com.poiyomi.toon 9.3.64 to vpm-manifest.json

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
  • Loading branch information
kurotu and Copilot committed Mar 15, 2026
commit 8a00685761f21522b9de50d9e35213038ad300b3
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ namespace KRT.VRCQuestTools.Models
{
/// <summary>
/// Tests for main texture UV tiling preservation in Poiyomi ToonLit conversion.
/// Uses Hidden/VRCQuestTools/Poiyomi as the source shader proxy since the actual
/// Poiyomi shader is an optional external dependency.
/// Requires Poiyomi Toon (com.poiyomi.toon) to be installed; tests are skipped otherwise.
/// </summary>
public class PoiyomiToonLitGeneratorTests
{
private const string PoiyomiBakeShaderName = "Hidden/VRCQuestTools/Poiyomi";
private const string PoiyomiShaderName = ".poiyomi/Poiyomi Toon";

/// <summary>
/// Test that ToonLitGenerator without baking preserves main texture UV scale and offset
Expand All @@ -26,10 +25,16 @@ public class PoiyomiToonLitGeneratorTests
[Test]
public void ConvertToToonLit_NonBake_PreservesMainTextureScaleAndOffset()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

TestUtils.AssertIgnoreOnMissingShader("VRChat/Mobile/Toon Lit");

var shader = Shader.Find(PoiyomiBakeShaderName);
Assert.NotNull(shader, $"{PoiyomiBakeShaderName} shader not found.");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found.");

using var sourceMaterial = DisposableObject.New(new Material(shader));
var expectedScale = new Vector2(2.5f, 3.0f);
Expand Down Expand Up @@ -62,10 +67,16 @@ public void ConvertToToonLit_NonBake_PreservesMainTextureScaleAndOffset()
[Test]
public void ConvertToToonLit_NonBake_PreservesDefaultMainTextureST()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

TestUtils.AssertIgnoreOnMissingShader("VRChat/Mobile/Toon Lit");

var shader = Shader.Find(PoiyomiBakeShaderName);
Assert.NotNull(shader, $"{PoiyomiBakeShaderName} shader not found.");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found.");

using var sourceMaterial = DisposableObject.New(new Material(shader));

Expand All @@ -91,16 +102,22 @@ public void ConvertToToonLit_NonBake_PreservesDefaultMainTextureST()

/// <summary>
/// Test that ToonLitGenerator with baking preserves main texture UV scale and offset
/// on the output material. The baked texture should capture the raw texture appearance
/// on the output material. The baked texture captures the raw texture appearance
/// while the UV tiling is carried by the output material's mainTextureScale/Offset.
/// </summary>
[Test]
public void ConvertToToonLit_WithBake_PreservesMainTextureScaleAndOffset()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

TestUtils.AssertIgnoreOnMissingShader("VRChat/Mobile/Toon Lit");

var shader = Shader.Find(PoiyomiBakeShaderName);
Assert.NotNull(shader, $"{PoiyomiBakeShaderName} shader not found.");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found.");

var mainTexture = UnityEditor.AssetDatabase.LoadAssetAtPath<Texture2D>(TestUtils.TexturesFolder + "/albedo_1024px_png.png");
if (mainTexture == null)
Expand Down Expand Up @@ -146,10 +163,16 @@ public void ConvertToToonLit_WithBake_PreservesMainTextureScaleAndOffset()
[Test]
public void ConvertToToonLit_WithBake_BakedTextureDoesNotEmbedUVTiling()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

TestUtils.AssertIgnoreOnMissingShader("VRChat/Mobile/Toon Lit");

var shader = Shader.Find(PoiyomiBakeShaderName);
Assert.NotNull(shader, $"{PoiyomiBakeShaderName} shader not found.");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found.");

var mainTexture = UnityEditor.AssetDatabase.LoadAssetAtPath<Texture2D>(TestUtils.TexturesFolder + "/albedo_1024px_png.png");
if (mainTexture == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
// </copyright>

using KRT.VRCQuestTools.Utils;
using NUnit.Framework;
using UnityEngine;

Expand All @@ -13,14 +14,22 @@ namespace KRT.VRCQuestTools.Models.Unity
/// </summary>
public class PoiyomiMaterialTests
{
private const string PoiyomiShaderName = ".poiyomi/Poiyomi Toon";

/// <summary>
/// Test that MainTextureScale reads from _MainTex_ST Vector4 property.
/// </summary>
[Test]
public void MainTextureScale_ReadsFromMainTexST()
{
var shader = Shader.Find("Hidden/VRCQuestTools/Poiyomi");
Assert.NotNull(shader, "Bake shader not found");
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found");
var material = new Material(shader);
try
{
Expand All @@ -45,14 +54,20 @@ public void MainTextureScale_ReadsFromMainTexST()
[Test]
public void ConvertToToonLit_PreservesUVTiling()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

var toonLitShader = Shader.Find("VRChat/Mobile/Toon Lit");
if (toonLitShader == null)
{
Assert.Ignore("VRChat/Mobile/Toon Lit shader not found");
}

var shader = Shader.Find("Hidden/VRCQuestTools/Poiyomi");
Assert.NotNull(shader, "Bake shader not found");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found");
var material = new Material(shader);
try
{
Expand Down Expand Up @@ -84,14 +99,20 @@ public void ConvertToToonLit_PreservesUVTiling()
[Test]
public void ConvertToToonLit_PreservesDefaultUVTiling()
{
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

var toonLitShader = Shader.Find("VRChat/Mobile/Toon Lit");
if (toonLitShader == null)
{
Assert.Ignore("VRChat/Mobile/Toon Lit shader not found");
}

var shader = Shader.Find("Hidden/VRCQuestTools/Poiyomi");
Assert.NotNull(shader, "Bake shader not found");
var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found");
var material = new Material(shader);
try
{
Expand Down Expand Up @@ -119,8 +140,14 @@ public void ConvertToToonLit_PreservesDefaultUVTiling()
[Test]
public void MainTextureScale_NonUniformTiling()
{
var shader = Shader.Find("Hidden/VRCQuestTools/Poiyomi");
Assert.NotNull(shader, "Bake shader not found");
if (!AssetUtility.IsPoiyomiImported())
{
Assert.Ignore("Poiyomi is not installed.");
return;
}

var shader = Shader.Find(PoiyomiShaderName);
Assert.NotNull(shader, $"{PoiyomiShaderName} shader not found");
var material = new Material(shader);
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,17 @@ internal static bool IsLilToonImported()
return (shader != null) && (inspector != null);
}

/// <summary>
/// Gets whether Poiyomi is imported.
/// </summary>
/// <returns>true when Poiyomi Toon shader and Poi.Tools editor type are imported.</returns>
internal static bool IsPoiyomiImported()
{
var shader = Shader.Find(".poiyomi/Poiyomi Toon");
var poiType = SystemUtility.GetTypeByName("Poi.Tools.PoiImportExportChecker");
return (shader != null) && (poiType != null);
}

/// <summary>
/// Gets whether lilToon supports shadow ramp baking.
/// </summary>
Expand Down
6 changes: 6 additions & 0 deletions Packages/packages-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
"source": "embedded",
"dependencies": {}
},
"com.poiyomi.toon": {
"version": "file:com.poiyomi.toon",
"depth": 0,
"source": "embedded",
"dependencies": {}
},
"com.unity.ai.navigation": {
"version": "1.1.5",
"depth": 0,
Expand Down
7 changes: 7 additions & 0 deletions Packages/vpm-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
},
"com.vrchat.base": {
"version": "3.8.2"
},
"com.poiyomi.toon": {
"version": "9.3.64"
}
},
"locked": {
Expand All @@ -17,6 +20,10 @@
"com.vrchat.base": {
"version": "3.9.0",
"dependencies": {}
},
"com.poiyomi.toon": {
"version": "9.3.64",
"dependencies": {}
}
}
}