Loading gfx/src/shader_nodes.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -928,14 +928,17 @@ void ShaderGraph::CosineNode::add_code(StagesCode &code, Stage stage) const { void ShaderGraph::LinearBlendSkinningUnlitNode::add_code(StagesCode &code, Stage stage) const { INVARIANT(stage == Stage::VERTEX); auto decl = R"(layout(std140) uniform BoneMatrices { auto decl = R"(layout(std140, binding = 0) uniform BoneMatrices { mat4 bones[)" + std::to_string(m_num_of_joints) + R"(]; }; layout(std140, binding = 1) uniform InverseMatrices { mat4 inverseBindMatrices[)" + std::to_string(m_num_of_joints) + R"(]; }; vec3 get_skinned_position(vec3 position, vec4 weights, uvec4 bone_indices) { vec3 result = vec3(0); for (int i = 0; i < 4; ++i) // We assume 4 weights per vertex. result += vec3(weights[i] * bones[bone_indices[i]] * vec4(position, 1)); result += vec3(weights[i] * bones[bone_indices[i]] * inverseBindMatrices[bone_indices[i]] * vec4(position, 1)); return result; })"; Loading Loading
gfx/src/shader_nodes.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -928,14 +928,17 @@ void ShaderGraph::CosineNode::add_code(StagesCode &code, Stage stage) const { void ShaderGraph::LinearBlendSkinningUnlitNode::add_code(StagesCode &code, Stage stage) const { INVARIANT(stage == Stage::VERTEX); auto decl = R"(layout(std140) uniform BoneMatrices { auto decl = R"(layout(std140, binding = 0) uniform BoneMatrices { mat4 bones[)" + std::to_string(m_num_of_joints) + R"(]; }; layout(std140, binding = 1) uniform InverseMatrices { mat4 inverseBindMatrices[)" + std::to_string(m_num_of_joints) + R"(]; }; vec3 get_skinned_position(vec3 position, vec4 weights, uvec4 bone_indices) { vec3 result = vec3(0); for (int i = 0; i < 4; ++i) // We assume 4 weights per vertex. result += vec3(weights[i] * bones[bone_indices[i]] * vec4(position, 1)); result += vec3(weights[i] * bones[bone_indices[i]] * inverseBindMatrices[bone_indices[i]] * vec4(position, 1)); return result; })"; Loading