Sagging
This commit is contained in:
parent
7ee4755a6a
commit
e987949600
@ -156,8 +156,8 @@ MonoBehaviour:
|
|||||||
material: {fileID: 2100000, guid: 8f3914ac4291e664ba60ae208ae66460, type: 2}
|
material: {fileID: 2100000, guid: 8f3914ac4291e664ba60ae208ae66460, type: 2}
|
||||||
gradientA:
|
gradientA:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
key0: {r: 1, g: 1, b: 1, a: 0.3137255}
|
key0: {r: 0.764151, g: 0.18413278, b: 0, a: 0.3137255}
|
||||||
key1: {r: 1, g: 0, b: 0, a: 0.3529412}
|
key1: {r: 1, g: 1, b: 0, a: 0.3529412}
|
||||||
key2: {r: 0, g: 0, b: 0, a: 0}
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key3: {r: 0, g: 0, b: 0, a: 0}
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key4: {r: 0, g: 0, b: 0, a: 0}
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||||
@ -165,7 +165,7 @@ MonoBehaviour:
|
|||||||
key6: {r: 0, g: 0, b: 0, a: 0}
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key7: {r: 0, g: 0, b: 0, a: 0}
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||||
ctime0: 0
|
ctime0: 0
|
||||||
ctime1: 32768
|
ctime1: 65535
|
||||||
ctime2: 65535
|
ctime2: 65535
|
||||||
ctime3: 0
|
ctime3: 0
|
||||||
ctime4: 0
|
ctime4: 0
|
||||||
@ -181,12 +181,12 @@ MonoBehaviour:
|
|||||||
atime6: 0
|
atime6: 0
|
||||||
atime7: 0
|
atime7: 0
|
||||||
m_Mode: 0
|
m_Mode: 0
|
||||||
m_NumColorKeys: 3
|
m_NumColorKeys: 2
|
||||||
m_NumAlphaKeys: 2
|
m_NumAlphaKeys: 2
|
||||||
gradientB:
|
gradientB:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
key0: {r: 0, g: 0, b: 1, a: 0.54901963}
|
key0: {r: 0.40392157, g: 0.14109339, b: 0, a: 0.54901963}
|
||||||
key1: {r: 1, g: 1, b: 1, a: 0.627451}
|
key1: {r: 0, g: 0.6320754, b: 0, a: 0.627451}
|
||||||
key2: {r: 1, g: 1, b: 0, a: 0}
|
key2: {r: 1, g: 1, b: 0, a: 0}
|
||||||
key3: {r: 0, g: 0, b: 0, a: 0}
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key4: {r: 0, g: 0, b: 0, a: 0}
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||||
@ -194,7 +194,7 @@ MonoBehaviour:
|
|||||||
key6: {r: 0, g: 0, b: 0, a: 0}
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key7: {r: 0, g: 0, b: 0, a: 0}
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||||
ctime0: 0
|
ctime0: 0
|
||||||
ctime1: 32768
|
ctime1: 65535
|
||||||
ctime2: 65535
|
ctime2: 65535
|
||||||
ctime3: 0
|
ctime3: 0
|
||||||
ctime4: 0
|
ctime4: 0
|
||||||
@ -210,10 +210,12 @@ MonoBehaviour:
|
|||||||
atime6: 0
|
atime6: 0
|
||||||
atime7: 0
|
atime7: 0
|
||||||
m_Mode: 0
|
m_Mode: 0
|
||||||
m_NumColorKeys: 3
|
m_NumColorKeys: 2
|
||||||
m_NumAlphaKeys: 2
|
m_NumAlphaKeys: 2
|
||||||
leafColorA: {r: 0.45882356, g: 0.97647065, b: 0.29803923, a: 0.49803922}
|
leafColorA: {r: 0.45882356, g: 0.97647065, b: 0.29803923, a: 0.49803922}
|
||||||
leafColorB: {r: 0.21568629, g: 0.4901961, b: 0.13333334, a: 0.9019608}
|
leafColorB: {r: 0.21568629, g: 0.4901961, b: 0.13333334, a: 0.9019608}
|
||||||
|
maxSagAngleA: 15
|
||||||
|
maxSagAngleB: 25
|
||||||
--- !u!4 &197491476
|
--- !u!4 &197491476
|
||||||
Transform:
|
Transform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -221,13 +223,13 @@ Transform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 197491472}
|
m_GameObject: {fileID: 197491472}
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0.17364816, w: 0.9848078}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 4
|
m_RootOrder: 4
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 20}
|
||||||
--- !u!1 &705507993
|
--- !u!1 &705507993
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -29,12 +29,32 @@ public class Fractal : MonoBehaviour
|
|||||||
var parent = parents[i / 5];
|
var parent = parents[i / 5];
|
||||||
var part = parts[i];
|
var part = parts[i];
|
||||||
part.spinAngle += spinAngleDelta;
|
part.spinAngle += spinAngleDelta;
|
||||||
part.worldRotation = mul(parent.worldRotation,
|
|
||||||
|
float3 upAxis =
|
||||||
|
mul(mul(parent.worldRotation, part.rotation), up());
|
||||||
|
float3 sagAxis = cross(up(), upAxis);
|
||||||
|
|
||||||
|
float sagMagnitude = length(sagAxis);
|
||||||
|
quaternion baseRotation;
|
||||||
|
if (sagMagnitude > 0f)
|
||||||
|
{
|
||||||
|
sagAxis /= sagMagnitude;
|
||||||
|
quaternion sagRotation =
|
||||||
|
quaternion.AxisAngle(sagAxis, part.maxSagAngle * sagMagnitude);
|
||||||
|
baseRotation = mul(sagRotation, parent.worldRotation);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseRotation = parent.worldRotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
part.worldRotation = mul(baseRotation,
|
||||||
mul(part.rotation, quaternion.RotateY(part.spinAngle))
|
mul(part.rotation, quaternion.RotateY(part.spinAngle))
|
||||||
);
|
);
|
||||||
|
|
||||||
part.worldPosition =
|
part.worldPosition =
|
||||||
parent.worldPosition +
|
parent.worldPosition +
|
||||||
mul(parent.worldRotation, 1.5f * scale * part.direction);
|
mul(part.worldRotation, float3(0f, 1.5f * scale, 0f));
|
||||||
parts[i] = part;
|
parts[i] = part;
|
||||||
|
|
||||||
float3x3 r = float3x3(part.worldRotation) * scale;
|
float3x3 r = float3x3(part.worldRotation) * scale;
|
||||||
@ -44,8 +64,9 @@ public class Fractal : MonoBehaviour
|
|||||||
|
|
||||||
private struct FractalPart
|
private struct FractalPart
|
||||||
{
|
{
|
||||||
public float3 direction, worldPosition;
|
public float3 worldPosition;
|
||||||
public quaternion rotation, worldRotation;
|
public quaternion rotation, worldRotation;
|
||||||
|
public float maxSagAngle;
|
||||||
public float spinAngle;
|
public float spinAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +98,12 @@ public class Fractal : MonoBehaviour
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
Color leafColorB = default;
|
Color leafColorB = default;
|
||||||
|
|
||||||
|
[SerializeField, Range(0f, 90f)]
|
||||||
|
float maxSagAngleA = 15f;
|
||||||
|
|
||||||
|
[SerializeField, Range(0f, 90f)]
|
||||||
|
float maxSagAngleB = 25f;
|
||||||
|
|
||||||
static float3[] directions =
|
static float3[] directions =
|
||||||
{
|
{
|
||||||
up(), right(), left(), forward(), back()
|
up(), right(), left(), forward(), back()
|
||||||
@ -93,7 +120,7 @@ public class Fractal : MonoBehaviour
|
|||||||
{
|
{
|
||||||
return new FractalPart()
|
return new FractalPart()
|
||||||
{
|
{
|
||||||
direction = directions[childIndex],
|
maxSagAngle = radians(Random.Range(maxSagAngleA, maxSagAngleB)),
|
||||||
rotation = rotations[childIndex]
|
rotation = rotations[childIndex]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user