浏览代码
Adjusted code in TwistChain constraints. Added intermediate step after
Adjusted code in TwistChain constraints. Added intermediate step after
binder implementation./main
Simon Bouvier-Zappa
6 年前
当前提交
7e481d69
共有 14 个文件被更改,包括 1156 次插入 和 58 次删除
-
14Assets/AnimationRiggingWorkshop/Constraints/TwistChain.cs
-
2Assets/AnimationRiggingWorkshop/Constraints/TwistChainStep0.cs
-
31Assets/AnimationRiggingWorkshop/Constraints/TwistChainStep1.cs
-
2Assets/AnimationRiggingWorkshop/Constraints/TwistChainStep1.cs.meta
-
8Assets/AnimationRiggingWorkshop/Scenes/TwistChainStep1.unity
-
2Assets/AnimationRiggingWorkshop/Scenes/TwistChainStep1.unity.meta
-
30Assets/AnimationRiggingWorkshop/Scenes/TwistChainStep2.unity
-
2Assets/AnimationRiggingWorkshop/Scenes/TwistChainStep2.unity.meta
-
104Assets/AnimationRiggingWorkshop/Constraints/TwistChainStep2.cs
-
11Assets/AnimationRiggingWorkshop/Constraints/TwistChainStep2.cs.meta
-
1001Assets/AnimationRiggingWorkshop/Scenes/TwistChainFinal.unity
-
7Assets/AnimationRiggingWorkshop/Scenes/TwistChainFinal.unity.meta
-
0/Assets/AnimationRiggingWorkshop/Scenes/TwistChainExtra.unity
-
0/Assets/AnimationRiggingWorkshop/Scenes/TwistChainExtra.unity.meta
|
|||
fileFormatVersion: 2 |
|||
guid: b79fd49596d1243ce932098d72141bc5 |
|||
guid: d369f59a4b18c47d8991e7fb8fbcbed3 |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|
|||
fileFormatVersion: 2 |
|||
guid: 691e854e5e9cf4ef19eac00eadc7eccc |
|||
guid: b79fd49596d1243ce932098d72141bc5 |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|
|||
using System.Collections.Generic; |
|||
using Unity.Collections; |
|||
|
|||
namespace UnityEngine.Animations.Rigging |
|||
{ |
|||
using Experimental.Animations; |
|||
|
|||
[Unity.Burst.BurstCompile] |
|||
public struct TwistChainStep2Job : IWeightedAnimationJob |
|||
{ |
|||
public ReadWriteTransformHandle rootTarget; |
|||
public ReadWriteTransformHandle tipTarget; |
|||
|
|||
public NativeArray<ReadWriteTransformHandle> chain; |
|||
|
|||
public NativeArray<float> steps; |
|||
|
|||
public FloatProperty jobWeight { get; set; } |
|||
|
|||
public void ProcessRootMotion(AnimationStream stream) {} |
|||
|
|||
public void ProcessAnimation(AnimationStream stream) |
|||
{ |
|||
// Retrieve root and tip rotation.
|
|||
Quaternion rootRotation = rootTarget.GetRotation(stream); |
|||
Quaternion tipRotation = tipTarget.GetRotation(stream); |
|||
|
|||
float mainWeight = jobWeight.Get(stream); |
|||
|
|||
// Interpolate rotation on chain.
|
|||
for (int i = 0; i < chain.Length; ++i) |
|||
{ |
|||
chain[i].SetRotation(stream, Quaternion.Lerp(chain[i].GetRotation(stream), Quaternion.Lerp(rootRotation, tipRotation, steps[i]), mainWeight)); |
|||
} |
|||
|
|||
// Update position of tip handle for easier visualization.
|
|||
rootTarget.SetPosition(stream, chain[0].GetPosition(stream)); |
|||
tipTarget.SetPosition(stream, chain[chain.Length - 1].GetPosition(stream)); |
|||
} |
|||
} |
|||
|
|||
[System.Serializable] |
|||
public struct TwistChainStep2Data : IAnimationJobData |
|||
{ |
|||
public Transform root; |
|||
public Transform tip; |
|||
|
|||
[SyncSceneToStream] public Transform rootTarget; |
|||
[SyncSceneToStream] public Transform tipTarget; |
|||
|
|||
bool IAnimationJobData.IsValid() => !(root == null || tip == null || !tip.IsChildOf(root) || rootTarget == null || tipTarget == null); |
|||
|
|||
void IAnimationJobData.SetDefaultValues() |
|||
{ |
|||
root = tip = rootTarget = tipTarget = null; |
|||
} |
|||
} |
|||
|
|||
public class TwistChainStep2JobBinder : AnimationJobBinder<TwistChainStep2Job, TwistChainStep2Data> |
|||
{ |
|||
public override TwistChainStep2Job Create(Animator animator, ref TwistChainStep2Data data, Component component) |
|||
{ |
|||
// Retrieve chain in-between root and tip transforms.
|
|||
Transform[] chain = ConstraintsUtils.ExtractChain(data.root, data.tip); |
|||
|
|||
// Extract steps from chain.
|
|||
float[] steps = ConstraintsUtils.ExtractSteps(chain); |
|||
|
|||
// Build Job.
|
|||
var job = new TwistChainStep2Job(); |
|||
job.chain = new NativeArray<ReadWriteTransformHandle>(chain.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); |
|||
job.steps = new NativeArray<float>(chain.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); |
|||
job.rootTarget = ReadWriteTransformHandle.Bind(animator, data.rootTarget); |
|||
job.tipTarget = ReadWriteTransformHandle.Bind(animator, data.tipTarget); |
|||
|
|||
// Set values in NativeArray.
|
|||
for (int i = 0; i < chain.Length; ++i) |
|||
{ |
|||
job.chain[i] = ReadWriteTransformHandle.Bind(animator, chain[i]); |
|||
job.steps[i] = steps[i]; |
|||
} |
|||
|
|||
return job; |
|||
} |
|||
|
|||
public override void Destroy(TwistChainStep2Job job) |
|||
{ |
|||
job.chain.Dispose(); |
|||
} |
|||
|
|||
public override void Update(TwistChainStep2Job job, ref TwistChainStep2Data data) |
|||
{ |
|||
} |
|||
} |
|||
|
|||
[DisallowMultipleComponent, AddComponentMenu("SIGGRAPH 2019/Twist Chain Step 2")] |
|||
public class TwistChainStep2 : RigConstraint< |
|||
TwistChainStep2Job, |
|||
TwistChainStep2Data, |
|||
TwistChainStep2JobBinder |
|||
> |
|||
{ |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 4b3181e1d19db44d2ac12062bbe9637a |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
1001
Assets/AnimationRiggingWorkshop/Scenes/TwistChainFinal.unity
文件差异内容过多而无法显示
查看文件
文件差异内容过多而无法显示
查看文件
|
|||
fileFormatVersion: 2 |
|||
guid: 691e854e5e9cf4ef19eac00eadc7eccc |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
撰写
预览
正在加载...
取消
保存
Reference in new issue