14using System.Collections;
19 public class TestActualShaderOutput : GraphicRendererTestBase {
20 public const string FOLDER_NAME =
"ShaderOutputTestPrefabs";
27 [Ignore(
"Dynamic tests are failing unreliably due to unknown gpu reasons, disabled for now until they can be fixed.")]
28 public IEnumerator DoesCorrectlyRenderDynamicOutput([Values(
"OneDynamicGroup",
29 "OneCylindricalDynamicGroup",
30 "OneSphericalDynamicGroup",
31 "OneDynamicGroupWithBlendShapes",
32 "OneCylindricalDynamicGroupWithBlendShapes",
33 "OneSphericalDynamicGroupWithBlendShapes")]
34 string rendererPrefab) {
35 InitTest(Path.Combine(FOLDER_NAME, rendererPrefab));
38 randomizeGraphicTransform();
39 randomizeRendererTransform();
40 initRendererAndGraphic();
44 renderer.BeginCollectingVertData();
48 assertVertsAreEqual();
56 public IEnumerator DoesCorrectlyRenderStationaryBakedOutput([Values(
"OneBakedGroup",
57 "OneCylindricalBakedGroup",
58 "OneSphericalBakedGroup",
59 "OneBakedGroupWithBlendShapes",
60 "OneCylindricalBakedGroupWithBlendShapes",
61 "OneSphericalBakedGroupWithBlendShapes")]
62 string rendererName) {
63 LoadScene(
"StationaryBakedRendererShaderTestScene");
65 InitTest(rendererName);
68 randomizeRendererTransform();
69 initRendererAndGraphic();
73 renderer.BeginCollectingVertData();
77 assertVertsAreEqual();
85 public IEnumerator DoesCorrectlyRenderTranslationBakedOutput([Values(
"OneBakedGroup",
86 "OneCylindricalBakedGroup",
87 "OneSphericalBakedGroup",
88 "OneBakedGroupWithBlendShapes",
89 "OneCylindricalBakedGroupWithBlendShapes",
90 "OneSphericalBakedGroupWithBlendShapes")]
91 string rendererName) {
92 LoadScene(
"TranslationBakedRendererShaderTestScene");
94 InitTest(rendererName);
97 randomizeGraphicPosition();
98 randomizeRendererTransform();
99 initRendererAndGraphic();
103 renderer.BeginCollectingVertData();
107 assertVertsAreEqual();
112 private void randomizeGraphicPosition() {
113 oneGraphic.transform.localPosition =
Random.onUnitSphere;
116 private void randomizeGraphicTransform() {
117 oneGraphic.transform.localPosition =
Random.onUnitSphere;
118 oneGraphic.transform.localRotation =
Quaternion.LookRotation(
Random.onUnitSphere);
119 oneGraphic.transform.localScale =
Random.onUnitSphere;
122 private void randomizeRendererTransform() {
123 renderer.transform.position =
Random.onUnitSphere;
125 renderer.transform.localScale =
Random.onUnitSphere;
128 private void initRendererAndGraphic() {
129 var oneMeshGraphic = oneGraphic as LeapMeshGraphicBase;
130 oneMeshGraphic.RefreshMeshData();
131 verts = oneMeshGraphic.mesh.vertices;
136 if (oneMeshGraphic.mesh.blendShapeCount > 0 && oneGraphic.featureData.Query().OfType<LeapBlendShapeData>().Any()) {
137 oneMeshGraphic.mesh.GetBlendShapeFrameVertices(0, 0, deltaVerts, deltaNormals, deltaTangents);
139 for (
int i = 0; i < verts.Length; i++) {
140 verts[i] += deltaVerts[i];
145 private void assertVertsAreEqual() {
146 var renderedVerts = renderer.FinishCollectingVertData();
148 for (
int i = 0; i < verts.Length; i++) {
150 Vector3 rendererLocalVert = renderer.transform.InverseTransformPoint(oneGraphic.transform.TransformPoint(vert));
151 Vector3 warpedLocalVert = oneGraphic.transformer.TransformPoint(rendererLocalVert);
152 Vector3 warpedWorldVert = renderer.transform.TransformPoint(warpedLocalVert);
154 Vector3 actualShaderVert = renderedVerts[i];
156 Assert.That((warpedWorldVert - actualShaderVert).magnitude, Is.Zero.Within(0.0001f), actualShaderVert +
" should be equal to " + warpedWorldVert);