feat: adds (basic) material support Speckle > Unity

This commit is contained in:
Matteo Cominetti
2021-02-12 17:30:50 +00:00
parent 57b51affc0
commit 3f1e34788a
5 changed files with 55 additions and 9 deletions
+1
View File
@@ -70,3 +70,4 @@ crashlytics-build.properties
/[Aa]ssets/[Ss]treamingAssets/aa.meta
/[Aa]ssets/[Ss]treamingAssets/aa/*
.idea/
*.meta
+1
View File
@@ -19,6 +19,7 @@
<e p="Dispatcher.cs" t="Include" />
<e p="Receiver.cs" t="Include" />
<e p="Sender.cs" t="Include" />
<e p="Utils.cs" t="Include" />
</e>
<e p="SpeckleExamples.cs" t="Include" />
</e>
@@ -2,8 +2,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Objects.Other;
using Speckle.ConnectorUnity;
using UnityEngine;
using Mesh = Objects.Geometry.Mesh;
@@ -94,7 +94,7 @@ namespace Objects.Converter.Unity
List<int> faces = new List<int>();
int i = 0;
//store them here, makes it like 1000000x faster?
var triangles = filter.mesh.triangles;
var triangles = filter.mesh.triangles;
while (i < triangles.Length)
{
faces.Add(0);
@@ -245,6 +245,33 @@ namespace Objects.Converter.Unity
var mesh = go.AddComponent<MeshFilter>().mesh;
var meshRenderer = go.AddComponent<MeshRenderer>();
//todo support more complex materials
var shader = Shader.Find("Standard");
var mat = new Material(shader);
var speckleMaterial = speckleMesh["renderMaterial"];
if (speckleMaterial != null && speckleMaterial is RenderMaterial rm)
{
// 1. match shader by name, if any
shader = Shader.Find(rm.name);
if (shader != null)
{
mat = new Material(shader);
}
else
{
// 2. re-create material by setting diffuse color and transparency on standard shaders
shader = Shader.Find("Transparent/Diffuse");
mat = new Material(shader);
var c = rm.diffuse.ToUnityColor();
mat.color = new Color(c.r, c.g, c.b, Convert.ToSingle(rm.opacity));
}
}
// 3. if not renderMaterial was passed, the default shader will be used
meshRenderer.material = mat;
if (verts.Count >= 65535)
mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
+22
View File
@@ -0,0 +1,22 @@
using System;
using UnityEngine;
namespace Speckle.ConnectorUnity
{
public static class Utils
{
public static int ToIntColor(this Color c)
{
return
System.Drawing.Color
.FromArgb(Convert.ToInt32(c.r * 255), Convert.ToInt32(c.r * 255), Convert.ToInt32(c.r * 255))
.ToArgb();
}
public static Color ToUnityColor(this int c)
{
var argb = System.Drawing.Color.FromArgb(c);
return new Color(argb.R / 255.0f, argb.G / 255.0f, argb.B / 255.0f);
}
}
}
+1 -6
View File
@@ -31,7 +31,7 @@ namespace Speckle.ConnectorUnity
void Start()
{
//hardcoded cuz I'm lazy, replace with what you need
ReceiveText.text = "4ad65b572e";
ReceiveText.text = "d1a4748ba2";//4ad65b572e
SendText.text = "cd83745025";
if (ReceiveBtn == null || ReceiveText == null || SendBtn == null || SendText == null)
@@ -125,14 +125,9 @@ namespace Speckle.ConnectorUnity
/// <param name="go"></param>
private void AddClasses(GameObject go)
{
var mat = new Material(Shader.Find("Standard"));
for (var i = 0; i < go.transform.childCount; i++)
{
var child = go.transform.GetChild(i);
var renderer = child.GetComponent<MeshRenderer>();
renderer.material = mat;
child.gameObject.AddComponent<Selectable>();
}
}