#osc #virtual #capture #motion #protocols #tracking

vmc

实现虚拟运动捕捉协议,用于虚拟角色跟踪

3个版本 (破坏性更新)

0.3.0 2023年8月17日
0.2.0 2023年8月11日
0.1.0 2023年8月11日

#9 in #osc

MIT/Apache

90KB
2K SLoC

vmc

Rust中异步实现的虚拟运动捕捉协议

虽然这个crate专为虚拟运动捕捉设计,但它也可以用作基于VMC的Open Sound Control协议的实现。

示例

有关更详细的示例,请参阅examples/

表演者

use vmc::{
	VMCApplyBlendShapes, VMCBlendShape, VMCModelState, VMCResult, VMCStandardVRMBlendShape, VMCState, VMCTime
};

#[tokio::main]
async fn main() -> VMCResult<()> {
	let socket = vmc::performer!("127.0.0.1:39539").await?;
	loop {
		socket
			.send(VMCBlendShape::new(VMCStandardVRMBlendShape::Joy, 1.0))
			.await?;
		socket.send(VMCApplyBlendShapes).await?;
		socket.send(VMCState::new(VMCModelState::Loaded)).await?;
		socket.send(VMCTime::elapsed()).await?;
	}
}

木偶

use tokio_stream::StreamExt;
use vmc::{VMCMessage, VMCResult};

#[tokio::main]
async fn main() -> VMCResult<()> {
	let mut socket = vmc::marionette!("127.0.0.1:39539").await?;
	while let Some(packet) = socket.next().await {
		let (packet, _) = packet?;
		for message in vmc::parse(packet)? {
			match message {
				VMCMessage::BoneTransform(transform) => {
					println!("\tTransform bone: {} (pos {:?}; rot {:?})", transform.bone, transform.position, transform.rotation)
				}
				_ => {}
			}
		}
	}

	Ok(())
}

许可证

❤️ 此软件包基于Andreas Linz的rosc和Franz Heinzmann的async-osc。许可协议为MIT License或Apache-2.0。

依赖关系

~6–19MB
~207K SLoC