Netcode Bootstrap
This commit is contained in:
+95
@@ -0,0 +1,95 @@
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
|
||||
using Rukhanka.DebugDrawer;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka
|
||||
{
|
||||
public class GPUBoneRenderer
|
||||
{
|
||||
Material boneDrawerMat;
|
||||
Mesh boneMesh;
|
||||
|
||||
readonly int ShaderID_animatedBoneWorkload = Shader.PropertyToID("animatedBoneWorkload");
|
||||
readonly int ShaderID_animationJobs = Shader.PropertyToID("animationJobs");
|
||||
readonly int ShaderID_rigDefinitions = Shader.PropertyToID("rigDefinitions");
|
||||
readonly int ShaderID_rigBones = Shader.PropertyToID("rigBones");
|
||||
readonly int ShaderID_rigSpaceBoneTransforms = Shader.PropertyToID("rigSpaceBoneTransforms");
|
||||
readonly int ShaderID_rigVisualizationData = Shader.PropertyToID("rigVisualizationData");
|
||||
|
||||
GraphicsBuffer framePerBoneAnimationWorkloadGB;
|
||||
GraphicsBuffer frameRigAnimationJobsGB;
|
||||
GraphicsBuffer rigDefinitionGB;
|
||||
GraphicsBuffer rigBonesGB;
|
||||
GraphicsBuffer rigSpaceAnimatedBonesGB;
|
||||
int frameAnimatedBonesCount;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public GPUBoneRenderer()
|
||||
{
|
||||
boneDrawerMat = CoreUtils.CreateEngineMaterial(Shader.Find($"BoneRendererGPU"));
|
||||
boneDrawerMat.enableInstancing = true;
|
||||
boneMesh = DrawerManagedSingleton.CreateBoneMesh();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void SetGPUBuffersForFrame
|
||||
(
|
||||
GraphicsBuffer framePerBoneAnimationWorkloadGB,
|
||||
GraphicsBuffer frameRigAnimationJobsGB,
|
||||
GraphicsBuffer rigDefinitionGB,
|
||||
GraphicsBuffer rigBonesGB,
|
||||
GraphicsBuffer rigSpaceAnimatedBonesGB,
|
||||
int frameAnimatedBonesCount
|
||||
)
|
||||
{
|
||||
this.framePerBoneAnimationWorkloadGB = framePerBoneAnimationWorkloadGB;
|
||||
this.frameRigAnimationJobsGB = frameRigAnimationJobsGB;
|
||||
this.rigDefinitionGB = rigDefinitionGB;
|
||||
this.rigBonesGB = rigBonesGB;
|
||||
this.rigSpaceAnimatedBonesGB = rigSpaceAnimatedBonesGB;
|
||||
this.frameAnimatedBonesCount = frameAnimatedBonesCount;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void RenderBones(GraphicsBuffer rigVisualizationDataGB, float4 boneColor)
|
||||
{
|
||||
var rp = new RenderParams();
|
||||
rp.camera = null;
|
||||
rp.layer = 0;
|
||||
rp.lightProbeProxyVolume = null;
|
||||
rp.lightProbeUsage = LightProbeUsage.Off;
|
||||
rp.motionVectorMode = MotionVectorGenerationMode.ForceNoMotion;
|
||||
rp.receiveShadows = false;
|
||||
rp.reflectionProbeUsage = ReflectionProbeUsage.Off;
|
||||
rp.rendererPriority = 0;
|
||||
rp.renderingLayerMask = 0xffffffff;
|
||||
rp.shadowCastingMode = ShadowCastingMode.Off;
|
||||
rp.worldBounds = new Bounds(Vector3.zero, Vector3.one * 100000);
|
||||
|
||||
rp.matProps = new MaterialPropertyBlock();
|
||||
rp.matProps.SetBuffer(ShaderID_animatedBoneWorkload, framePerBoneAnimationWorkloadGB);
|
||||
rp.matProps.SetBuffer(ShaderID_animationJobs, frameRigAnimationJobsGB);
|
||||
rp.matProps.SetBuffer(ShaderID_rigDefinitions, rigDefinitionGB);
|
||||
rp.matProps.SetBuffer(ShaderID_rigBones, rigBonesGB);
|
||||
rp.matProps.SetBuffer(ShaderID_rigSpaceBoneTransforms, rigSpaceAnimatedBonesGB);
|
||||
rp.matProps.SetBuffer(ShaderID_rigVisualizationData, rigVisualizationDataGB);
|
||||
rp.material = boneDrawerMat;
|
||||
|
||||
rp.matProps.SetVector("boneColor", boneColor);
|
||||
Graphics.RenderMeshPrimitives(rp, boneMesh, 1, frameAnimatedBonesCount);
|
||||
boneColor.w = 0.3f;
|
||||
rp.matProps.SetVector("boneColor", boneColor);
|
||||
Graphics.RenderMeshPrimitives(rp, boneMesh, 0, frameAnimatedBonesCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user