Tanoda
TestActualShaderOutput.cs
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) Ultraleap, Inc. 2011-2020. *
3 * *
4 * Use subject to the terms of the Apache License 2.0 available at *
5 * http://www.apache.org/licenses/LICENSE-2.0, or another agreement *
6 * between Ultraleap and you, your company or other organization. *
7 ******************************************************************************/
8
9#if LEAP_TESTS
10using UnityEngine;
11using UnityEngine.TestTools;
12using NUnit.Framework;
13using System.IO;
14using System.Collections;
15using Leap.Unity.Query;
16
18
19 public class TestActualShaderOutput : GraphicRendererTestBase {
20 public const string FOLDER_NAME = "ShaderOutputTestPrefabs";
21
26 [UnityTest]
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));
36 yield return null;
37
38 randomizeGraphicTransform();
39 randomizeRendererTransform();
40 initRendererAndGraphic();
41
42 yield return null;
43
44 renderer.BeginCollectingVertData();
45
46 yield return null;
47
48 assertVertsAreEqual();
49 }
50
55 [UnityTest]
56 public IEnumerator DoesCorrectlyRenderStationaryBakedOutput([Values("OneBakedGroup",
57 "OneCylindricalBakedGroup",
58 "OneSphericalBakedGroup",
59 "OneBakedGroupWithBlendShapes",
60 "OneCylindricalBakedGroupWithBlendShapes",
61 "OneSphericalBakedGroupWithBlendShapes")]
62 string rendererName) {
63 LoadScene("StationaryBakedRendererShaderTestScene");
64 yield return null;
65 InitTest(rendererName);
66 yield return null;
67
68 randomizeRendererTransform();
69 initRendererAndGraphic();
70
71 yield return null;
72
73 renderer.BeginCollectingVertData();
74
75 yield return null;
76
77 assertVertsAreEqual();
78 }
79
84 [UnityTest]
85 public IEnumerator DoesCorrectlyRenderTranslationBakedOutput([Values("OneBakedGroup",
86 "OneCylindricalBakedGroup",
87 "OneSphericalBakedGroup",
88 "OneBakedGroupWithBlendShapes",
89 "OneCylindricalBakedGroupWithBlendShapes",
90 "OneSphericalBakedGroupWithBlendShapes")]
91 string rendererName) {
92 LoadScene("TranslationBakedRendererShaderTestScene");
93 yield return null;
94 InitTest(rendererName);
95 yield return null;
96
97 randomizeGraphicPosition();
98 randomizeRendererTransform();
99 initRendererAndGraphic();
100
101 yield return null;
102
103 renderer.BeginCollectingVertData();
104
105 yield return null;
106
107 assertVertsAreEqual();
108 }
109
110 private Vector3[] verts;
111
112 private void randomizeGraphicPosition() {
113 oneGraphic.transform.localPosition = Random.onUnitSphere;
114 }
115
116 private void randomizeGraphicTransform() {
117 oneGraphic.transform.localPosition = Random.onUnitSphere;
118 oneGraphic.transform.localRotation = Quaternion.LookRotation(Random.onUnitSphere);
119 oneGraphic.transform.localScale = Random.onUnitSphere;
120 }
121
122 private void randomizeRendererTransform() {
123 renderer.transform.position = Random.onUnitSphere;
124 renderer.transform.rotation = Quaternion.LookRotation(Random.onUnitSphere);
125 renderer.transform.localScale = Random.onUnitSphere;
126 }
127
128 private void initRendererAndGraphic() {
129 var oneMeshGraphic = oneGraphic as LeapMeshGraphicBase;
130 oneMeshGraphic.RefreshMeshData();
131 verts = oneMeshGraphic.mesh.vertices;
132
133 Vector3[] deltaVerts = new Vector3[verts.Length];
134 Vector3[] deltaNormals = new Vector3[verts.Length];
135 Vector3[] deltaTangents = new Vector3[verts.Length];
136 if (oneMeshGraphic.mesh.blendShapeCount > 0 && oneGraphic.featureData.Query().OfType<LeapBlendShapeData>().Any()) {
137 oneMeshGraphic.mesh.GetBlendShapeFrameVertices(0, 0, deltaVerts, deltaNormals, deltaTangents);
138
139 for (int i = 0; i < verts.Length; i++) {
140 verts[i] += deltaVerts[i];
141 }
142 }
143 }
144
145 private void assertVertsAreEqual() {
146 var renderedVerts = renderer.FinishCollectingVertData();
147
148 for (int i = 0; i < verts.Length; i++) {
149 Vector3 vert = verts[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);
153
154 Vector3 actualShaderVert = renderedVerts[i];
155
156 Assert.That((warpedWorldVert - actualShaderVert).magnitude, Is.Zero.Within(0.0001f), actualShaderVert + " should be equal to " + warpedWorldVert);
157 }
158 }
159 }
160}
161#endif
UnityEngine.Random Random