Search Unity

Question Skinning pass on skinned mesh renderer

Discussion in 'General Graphics' started by rile-s, Jan 12, 2023.

  1. rile-s

    rile-s

    Joined:
    Sep 18, 2019
    Posts:
    26
    I am trying to a achieve a smearing effect (example) on meshes and I am doing it via compute shader. While it works fine for a normal mesh. I can't get it to work on a skinned mesh. The skinning process seems to overwrite all changes done by the compute shader. Is there any way to execute my compute shader after the skinning process?
     
  2. rile-s

    rile-s

    Joined:
    Sep 18, 2019
    Posts:
    26
    I did some more digging and after installing RenderDoc I noticed that my compute shader allegedly has no bytebuffer set. Even though I set the buffer in LateUpdate.
    Code (CSharp):
    1. private void LateUpdate() {
    2.         GraphicsBuffer vertexBuffer = null;
    3.         if (renderer.vertexBufferTarget.HasFlag(GraphicsBuffer.Target.Raw)) {
    4.             vertexBuffer = renderer.GetVertexBuffer();
    5.  
    6.             shader.SetBuffer(kernelID, "vertices", vertexBuffer);
    7.             shader.SetInt("stride", vertexBuffer.stride);
    8.             shader.SetInt("vertexCount", vertexBuffer.count);
    9.         } else {
    10.             Debug.LogWarning("Vertex buffer isnt set as raw!");
    11.         }
    12.  
    13.         shader.Dispatch(kernelID, Mathf.CeilToInt(renderer.sharedMesh.vertexCount / 256f), 1, 1);
    14.         if (vertexBuffer != null) vertexBuffer.Dispose();
    15.     }
    renderdoc.png
     
  3. rile-s

    rile-s

    Joined:
    Sep 18, 2019
    Posts:
    26
    Turns out GPU skinning was turned off. I assumed it was on. Turning it back on fixed the issue.
     
    georgerh likes this.