feat: adds (basic) material support Speckle > Unity
This commit is contained in:
@@ -70,3 +70,4 @@ crashlytics-build.properties
|
||||
/[Aa]ssets/[Ss]treamingAssets/aa.meta
|
||||
/[Aa]ssets/[Ss]treamingAssets/aa/*
|
||||
.idea/
|
||||
*.meta
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user