Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mogoson/MGS.SkinnedMesh
Unity plugin for create skinned mesh in scene.
https://github.com/mogoson/MGS.SkinnedMesh
bezier curve helix hermite hose mesh polygon prism skinned uv
Last synced: 2 months ago
JSON representation
Unity plugin for create skinned mesh in scene.
- Host: GitHub
- URL: https://github.com/mogoson/MGS.SkinnedMesh
- Owner: mogoson
- License: apache-2.0
- Created: 2018-03-19T16:17:34.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-01T15:40:52.000Z (over 1 year ago)
- Last Synced: 2024-02-04T13:08:36.027Z (5 months ago)
- Topics: bezier, curve, helix, hermite, hose, mesh, polygon, prism, skinned, uv
- Language: C#
- Homepage:
- Size: 13.7 MB
- Stars: 79
- Watchers: 11
- Forks: 18
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome - mogoson/MGS.SkinnedMesh - Unity plugin for create skinned mesh in scene. (C\#)
README
[TOC]
# MGS.SkinnedMesh
## Summary
- Unity plugin for create skinned mesh in scene.
## Platform
- Windows
## Environment
- .Net Framework 3.5 or above.
- Unity 5.0 or above.## Technology
### Build Vertices
```C#
//Create polygon vertices.
var vertices = new List();
var sector = 2 * Mathf.PI / edge;
var radian = 0f;
for (int i = 0; i <= edge; i++)
{
radian = sector * i;
vertices.Add(center + rotation * new Vector3(Mathf.Cos(radian), Mathf.Sin(radian)) * radius);
}
return vertices;
```### Build Triangles
```C#
//Create polygon triangles index base on center vertice.
var triangles = new List();
var offset = clockwise ? 0 : 1;
for (int i = 0; i < edge; i++)
{
triangles.Add(start + i + offset);
triangles.Add(start + i - offset + 1);
triangles.Add(center);
}
return triangles;//Create prism triangles index.
var triangles = new List();
var polygonVs = polygon + 1;
var currentSegment = 0;
var nextSegment = 0;
for (int s = 0; s < segment - 1; s++)
{
// Calculate start index.
currentSegment = polygonVs * s;
nextSegment = polygonVs * (s + 1);
for (int p = 0; p < polygon; p++)
{
// Left-Bottom triangle.
triangles.Add(start + currentSegment + p);
triangles.Add(start + currentSegment + p + 1);
triangles.Add(start + nextSegment + p + 1);// Right-Top triangle.
triangles.Add(start + currentSegment + p);
triangles.Add(start + nextSegment + p + 1);
triangles.Add(start + nextSegment + p);
}
}
return triangles;
```### Build UV
```C#
//Create polygon uv.
var uv = new List();
var sector = 2 * Mathf.PI / edge;
var radian = 0f;
var center = Vector2.one * 0.5f;
for (int i = 0; i <= edge; i++)
{
radian = sector * (clockwise ? i : edge - i);
uv.Add(center + new Vector2(Mathf.Cos(radian), Mathf.Sin(radian)) * 0.5f);
}
return uv;//Create prism uv.
var uv = new List();
var polygonVs = polygon + 1;
var vertices = polygonVs * segment;
var slice = 1.0f / polygon;
var u = 0f;
var v = 0f;
for (int i = 0; i < vertices; i++)
{
u = slice * (i % polygonVs);
v = (i / polygonVs) % 2;
uv.Add(new Vector2(u, v));
}
return uv;
```### Build Mesh
```C#
//Rebuild the mesh of hose.
mesh.vertices = CreateVertices(curve, segments, differ, isSeal);
mesh.uv = CreateUV(segments, isSeal);
mesh.triangles = CreateTriangles(segments, isSeal);mesh.RecalculateNormals();
#if UNITY_5_6_OR_NEWER
mesh.RecalculateTangents();
#endif
mesh.RecalculateBounds();
```### Shared Mesh
```C#
meshRenderer.sharedMesh = mesh;
meshRenderer.localBounds = mesh.bounds;
if (meshCollider)
{
meshCollider.sharedMesh = null;
meshCollider.sharedMesh = mesh;
}
```### Combine Mesh
```C#
var combines = new List();
foreach (var filter in filters)
{
var pos = filter.transform.position - center;
var combine = new CombineInstance
{
mesh = filter.sharedMesh,
transform = Matrix4x4.TRS(pos, filter.transform.rotation, filter.transform.lossyScale)
};
combines.Add(combine);
}
var rebornMesh = new Mesh();
rebornMesh.CombineMeshes(combines.ToArray(), mergeSubMeshes);#if !UNITY_5_5_OR_NEWER
//Mesh.Optimize was removed in version 5.5.2p4.
rebornMesh.Optimize();
#endif
```## Usage
### Curve Hose
- Attach mono curve component to a game object.
```tex
MonoHermiteCurve MonoBezierCurve MonoHelixCurve MonoEllipseCurve MonoSinCurve
```- Attach mono curve hose component to the game object.
```tex
MonoCurveSkinnedHose
```- Rebuild mono curve runtime, and mono curve hose component will auto Rebuild.
```C#
var curve = GetComponent();
curve.AddAnchor(new HermiteAnchor(point));
curve.Rebuild();//The mono curve hose component will auto Rebuild.
```## Demo
- Demos in the path "MGS.Packages/SkinnedMesh/Demo/" provide reference to you.
------
Copyright © 2021 Mogoson. [email protected]