update
11
.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
*/*-lock.json
|
||||
*/node_modules
|
||||
*.sqlite
|
||||
*.lock
|
||||
*target
|
||||
*.db
|
||||
**.DS_Store
|
||||
*.DS_Store
|
||||
/scpt/*.jpeg
|
||||
/scpt/*.png
|
||||
config
|
52
github/PixelStreamingInfrastructure/Public/player.html
Normal file
@ -0,0 +1,52 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html style="width: 100%; height: 100%">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- Optional: apply a font -->
|
||||
<!--
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Michroma&family=Montserrat:wght@600&display=swap" rel="stylesheet">
|
||||
-->
|
||||
<!-- Optional: set some favicons -->
|
||||
<link rel="shortcut icon" href="43ef81525e6853dc.ico" type="image/x-icon">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="images/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png">
|
||||
|
||||
<!-- Optional: set a title for your page -->
|
||||
<title>Pixel Streaming</title>
|
||||
<script defer src="player.js"></script></head>
|
||||
|
||||
<!-- The Pixel Streaming player fills 100% of its parent element but body has a 0px height unless filled with content. As such, we explicitly force the body to be 100% of the viewport height -->
|
||||
<body style="width: 100vw; height: 100vh; min-height: -webkit-fill-available; font-family: 'Montserrat'; margin: 0px">
|
||||
|
||||
<style>
|
||||
button#settingsBtn {
|
||||
display:none;
|
||||
}
|
||||
button#statsBtn {
|
||||
display:none;
|
||||
}
|
||||
button#fullscreen-btn {
|
||||
display:none;
|
||||
}
|
||||
div#connection{
|
||||
display:none;
|
||||
}
|
||||
.comment {
|
||||
text-align: right;
|
||||
padding: 10px;
|
||||
}
|
||||
a{
|
||||
text-decoration: none;
|
||||
color: #ccc;
|
||||
}
|
||||
</style>
|
||||
<div class="comment">
|
||||
<a href="https://bsky.app/profile/yui.syui.ai/feed/cmd">/comment</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
13
github/restreamer/compose.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
services:
|
||||
|
||||
restreamer:
|
||||
image: datarhei/restreamer
|
||||
#image: datarhei/restreamer:cuda-latest
|
||||
ports:
|
||||
- 8080:8080
|
||||
- 1935:1935
|
||||
- 6000:6000/udp
|
||||
restart: always
|
||||
volumes:
|
||||
- ./data/config:/core/config
|
||||
- ./data/data:/core/data
|
11
github/rust-bbs/Cargo.toml
Normal file
@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "rust-bbs"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
actix-web = "4.0"
|
||||
url = "2.3.1"
|
||||
rusqlite = { version = "0.28", features = ["bundled"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
askama = "*"
|
8
github/rust-bbs/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
||||
FROM syui/aios
|
||||
|
||||
WORKDIR /app
|
||||
COPY ./src ./src
|
||||
COPY ./templates ./templates
|
||||
COPY ./Cargo.toml ./Cargo.toml
|
||||
RUN cargo build --release
|
||||
CMD ["/app/target/release/rust-bbs"]
|
7
github/rust-bbs/compose.yml
Normal file
@ -0,0 +1,7 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- 8080:8080
|
||||
volumes:
|
||||
- ./sqlite.db:/app/sqlite.db
|
127
github/rust-bbs/src/main.rs
Normal file
@ -0,0 +1,127 @@
|
||||
use askama::Template;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use rusqlite::{Connection, Result as SqliteResult};
|
||||
use actix_web::{web, App, HttpServer, HttpResponse, Responder, HttpRequest, Error};
|
||||
use actix_web::error::{ErrorInternalServerError};
|
||||
|
||||
use std::fmt;
|
||||
impl fmt::Display for Post {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "@{} {}", self.handle.as_deref().unwrap_or("anonymous"), self.content)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct QueryParams {
|
||||
handle: Option<String>,
|
||||
}
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct Post {
|
||||
id: i32,
|
||||
handle: Option<String>,
|
||||
content: String,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "index.html")]
|
||||
struct IndexTemplate {
|
||||
posts: Vec<Post>,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "post.html")]
|
||||
struct PostTemplate {}
|
||||
|
||||
fn init_db() -> SqliteResult<()> {
|
||||
let conn = Connection::open("sqlite.db")?;
|
||||
conn.execute(
|
||||
"CREATE TABLE IF NOT EXISTS posts (
|
||||
id INTEGER PRIMARY KEY,
|
||||
handle TEXT NOT NULL,
|
||||
content TEXT NOT NULL
|
||||
)",
|
||||
[],
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn index() -> impl Responder {
|
||||
let conn = Connection::open("sqlite.db").unwrap();
|
||||
let mut stmt = conn.prepare("SELECT id, handle, content FROM posts ORDER BY id DESC").unwrap();
|
||||
let posts = stmt.query_map([], |row| {
|
||||
Ok(Post {
|
||||
id: row.get(0)?,
|
||||
handle: row.get(1)?,
|
||||
content: row.get(2)?,
|
||||
})
|
||||
}).unwrap().filter_map(Result::ok).collect::<Vec<Post>>();
|
||||
|
||||
let template = IndexTemplate { posts };
|
||||
HttpResponse::Ok().body(template.render().unwrap())
|
||||
}
|
||||
|
||||
async fn post_form() -> impl Responder {
|
||||
let template = PostTemplate {};
|
||||
HttpResponse::Ok().body(template.render().unwrap())
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct FormData {
|
||||
handle: String,
|
||||
content: String,
|
||||
}
|
||||
|
||||
async fn submit_post(
|
||||
req: HttpRequest,
|
||||
form: web::Form<FormData>
|
||||
) -> Result<impl Responder, Error> {
|
||||
let query = web::Query::<QueryParams>::from_query(req.query_string())
|
||||
.unwrap_or_else(|_| web::Query(QueryParams { handle: None }));
|
||||
//let handle = query.handle.clone().filter(|h| !h.is_empty());
|
||||
//println!("Debug: Extracted handle: {:?}", handle);
|
||||
let handle = if !form.handle.is_empty() {
|
||||
form.handle.clone()
|
||||
} else {
|
||||
query.handle.clone().unwrap_or_default()
|
||||
};
|
||||
|
||||
println!("Debug: Using handle: {:?}", handle);
|
||||
|
||||
let conn = Connection::open("sqlite.db")
|
||||
.map_err(|_| ErrorInternalServerError("Database connection failed"))?;
|
||||
let result = conn.execute(
|
||||
"INSERT INTO posts (handle, content) VALUES (?1, ?2)",
|
||||
&[&form.handle, &form.content],
|
||||
);
|
||||
match result {
|
||||
Ok(_) => {
|
||||
let redirect_url = if !handle.is_empty() {
|
||||
format!("/?handle={}", handle)
|
||||
} else {
|
||||
"/".to_string()
|
||||
};
|
||||
Ok(HttpResponse::SeeOther()
|
||||
.append_header(("Location",
|
||||
redirect_url))
|
||||
.finish())
|
||||
},
|
||||
|
||||
//Ok(_) => Ok(web::Redirect::to("/" + "?handle=" + handle).see_other()),
|
||||
Err(_) => Err(ErrorInternalServerError("Failed to insert post")),
|
||||
}
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
init_db().unwrap();
|
||||
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.route("/", web::get().to(index))
|
||||
.route("/post", web::get().to(post_form))
|
||||
.route("/submit", web::post().to(submit_post))
|
||||
})
|
||||
.bind("0.0.0.0:8080")?
|
||||
.run()
|
||||
.await
|
||||
}
|
79
github/rust-bbs/templates/index.html
Normal file
@ -0,0 +1,79 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Simple BBS</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="post-form" id="post-form">
|
||||
<form action="/submit" method="post">
|
||||
<input type="hidden" name="handle" id="handleInput">
|
||||
<textarea name="content" required></textarea>
|
||||
<input type="submit" value="Post">
|
||||
</form>
|
||||
</div>
|
||||
<div class="post-list">
|
||||
<ul>
|
||||
{% for post in posts %}
|
||||
<li><span class="user-post">{{ post }}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function getHandleFromUrl() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get('handle');
|
||||
}
|
||||
window.onload = function() {
|
||||
const handle = getHandleFromUrl();
|
||||
if (handle) {
|
||||
document.getElementById('handleInput').value = handle;
|
||||
} else {
|
||||
document.getElementById('handleInput').value = "anonymous";
|
||||
var post = document.getElementById('post-form');
|
||||
post.style.display = 'none';
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
ul {
|
||||
overflow-y: scroll;
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
}
|
||||
li {
|
||||
width: 100%;
|
||||
list-style: none;
|
||||
padding: 10px 0px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
textarea {
|
||||
width: 100%;
|
||||
border-radius: 5px;
|
||||
resize: none;
|
||||
border-bottom: 3px solid #2060df;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
input[type="submit"] {
|
||||
border-radius: 5px;
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
background: #2060df;
|
||||
border: none;
|
||||
padding: 10px;
|
||||
font-size 20px;
|
||||
}
|
||||
ul {
|
||||
border-radius: 5px;
|
||||
padding: 0px;
|
||||
margin: 0 auto;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
span.user-post {
|
||||
padding: 0px 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
</html>
|
14
github/rust-bbs/templates/post.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>New Post</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>New Post</h1>
|
||||
<form action="/submit" method="post">
|
||||
<textarea name="content" required></textarea>
|
||||
<br>
|
||||
<input type="submit" value="Post">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
7
github/slidev/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
*.local
|
||||
.vite-inspect
|
||||
.remote-assets
|
||||
components.d.ts
|
3
github/slidev/.npmrc
Normal file
@ -0,0 +1,3 @@
|
||||
# for pnpm
|
||||
shamefully-hoist=true
|
||||
auto-install-peers=true
|
15
github/slidev/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Welcome to [Slidev](https://github.com/slidevjs/slidev)!
|
||||
|
||||
To start the slide show:
|
||||
|
||||
- `npm install`
|
||||
- `npm run dev`
|
||||
- visit <http://localhost:3030>
|
||||
|
||||
Edit the [slides.md](./slides.md) to see the changes.
|
||||
|
||||
Learn more about Slidev at the [documentation](https://sli.dev/).
|
||||
|
||||
```sh
|
||||
$ slidev build --base /slide
|
||||
```
|
37
github/slidev/components/Counter.vue
Normal file
@ -0,0 +1,37 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
count: {
|
||||
default: 0,
|
||||
},
|
||||
})
|
||||
|
||||
const counter = ref(props.count)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div flex="~" w="min" border="~ main rounded-md">
|
||||
<button
|
||||
border="r main"
|
||||
p="2"
|
||||
font="mono"
|
||||
outline="!none"
|
||||
hover:bg="gray-400 opacity-20"
|
||||
@click="counter -= 1"
|
||||
>
|
||||
-
|
||||
</button>
|
||||
<span m="auto" p="2">{{ counter }}</span>
|
||||
<button
|
||||
border="l main"
|
||||
p="2"
|
||||
font="mono"
|
||||
outline="!none"
|
||||
hover:bg="gray-400 opacity-20"
|
||||
@click="counter += 1"
|
||||
>
|
||||
+
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
16
github/slidev/netlify.toml
Normal file
@ -0,0 +1,16 @@
|
||||
[build]
|
||||
publish = "dist"
|
||||
command = "npm run build"
|
||||
|
||||
[build.environment]
|
||||
NODE_VERSION = "20"
|
||||
|
||||
[[redirects]]
|
||||
from = "/.well-known/*"
|
||||
to = "/.well-known/:splat"
|
||||
status = 200
|
||||
|
||||
[[redirects]]
|
||||
from = "/*"
|
||||
to = "/index.html"
|
||||
status = 200
|
17
github/slidev/package.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "slidev",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "slidev build",
|
||||
"dev": "slidev --open",
|
||||
"export": "slidev export"
|
||||
},
|
||||
"dependencies": {
|
||||
"@slidev/cli": "^0.49.29",
|
||||
"@slidev/theme-default": "latest",
|
||||
"@slidev/theme-seriph": "latest",
|
||||
"slidev-theme-eloc": "^1.0.2",
|
||||
"vue": "^3.4.38"
|
||||
}
|
||||
}
|
27
github/slidev/pages/imported-slides.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Imported Slides
|
||||
|
||||
You can split your slides.md into multiple files and organize them as you want using the `src` attribute.
|
||||
|
||||
#### `slides.md`
|
||||
|
||||
```markdown
|
||||
# Page 1
|
||||
|
||||
Page 2 from main entry.
|
||||
|
||||
---
|
||||
|
||||
## src: ./subpage.md
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
#### `subpage.md`
|
||||
|
||||
```markdown
|
||||
# Page 2
|
||||
|
||||
Page 2 from another file.
|
||||
```
|
||||
|
||||
[Learn more](https://sli.dev/guide/syntax.html#importing-slides)
|
135
github/slidev/slides.md
Normal file
@ -0,0 +1,135 @@
|
||||
---
|
||||
theme: eloc
|
||||
class: text-center
|
||||
highlighter: shiki
|
||||
lineNumbers: false
|
||||
info: |
|
||||
## Slidev Starter Template
|
||||
Presentation slides for developers.
|
||||
|
||||
Learn more at [Sli.dev](https://sli.dev)
|
||||
drawings:
|
||||
persist: false
|
||||
transition: slide-left
|
||||
title: Unreal Engine 5.5 | aiue
|
||||
---
|
||||
|
||||
# `aiue`
|
||||
|
||||
物語は空と海に囲まれた西の都(みやこ)からはじまる...
|
||||
|
||||
---
|
||||
|
||||
## 配信で使える最新技術の紹介
|
||||
|
||||
### `unreal engine`
|
||||
|
||||
- vrm4u, vmc, livelink, streaming
|
||||
- chatgpt, atproto
|
||||
- `ai` + `ue`
|
||||
|
||||
---
|
||||
|
||||
## `unreal engine`
|
||||
|
||||
- ue 5.5.0p
|
||||
- ue 5.4.4
|
||||
|
||||
---
|
||||
|
||||
## `vrm4u`
|
||||
|
||||
キャラクターを表示しよう
|
||||
|
||||
---
|
||||
|
||||
`vmc`と`livelink`で体の動きを反映
|
||||
|
||||
- vmcはABP
|
||||
- livelinkはCBP
|
||||
|
||||
---
|
||||
|
||||
## `web browser`
|
||||
|
||||
WBPからwebを使おう
|
||||
|
||||
---
|
||||
|
||||
- widget3dをworldに表示させると画質が悪いので`EngineMaterials/Widget3DPassThrough`以外のmaterialを使います
|
||||
|
||||
<iframe src="https://blueprintue.com/render/-49_059w/"></iframe>
|
||||
|
||||
https://blueprintue.com/blueprint/-49_059w/
|
||||
|
||||
---
|
||||
|
||||
## `pixel streaming`
|
||||
|
||||
webでゲーム配信や操作ができる
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure
|
||||
$ cd ./PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd/
|
||||
$ ./Start_SignallingServer_nopublic.ps1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `atproto`
|
||||
|
||||
blueskyが使っているprotocol
|
||||
|
||||
---
|
||||
|
||||
## `game animation sample`
|
||||
|
||||
キャラクターの基本操作をカスタマイズ
|
||||
|
||||
---
|
||||
|
||||
## `city sample`
|
||||
|
||||
人や車が動く最先端の街
|
||||
|
||||
---
|
||||
|
||||
## `ultra dynamic sky`
|
||||
|
||||
- `sky atmoshpere` + `volumetric cloud`
|
||||
|
||||
---
|
||||
|
||||
## `whisper` + `chatgpt` + `elevenlabs`
|
||||
|
||||
キャラ設定と会話
|
||||
|
||||
- whisper : RuntimeSpeechRecognizer
|
||||
|
||||
---
|
||||
|
||||
```sh
|
||||
# perplexity.ai
|
||||
$ curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID" \
|
||||
-H "xi-api-key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Hello world!",
|
||||
"model_id": "eleven_monolingual_v1",
|
||||
"voice_settings": {
|
||||
"stability": 0.5,
|
||||
"similarity_boost": 0.5
|
||||
}
|
||||
}' \
|
||||
--output output.mp3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@syui.ai
|
||||
|
||||
<br/>
|
||||
<img src="https://yui.syui.ai/icon/ai.svg" width="50px">
|
||||
<!--
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Bluesky_Logo.svg/1200px-Bluesky_Logo.svg.png" width="30px">
|
||||
-->
|
12
github/slidev/snippets/external.ts
Normal file
@ -0,0 +1,12 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
// #region snippet
|
||||
// Inside ./snippets/external.ts
|
||||
export function emptyArray<T>(length: number) {
|
||||
return Array.from<T>({ length })
|
||||
}
|
||||
// #endregion snippet
|
||||
|
||||
export function sayHello() {
|
||||
console.log('Hello from snippets/external.ts')
|
||||
}
|
7
github/slidev/vercel.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"rewrites": [
|
||||
{ "source": "/(.*)", "destination": "/index.html" }
|
||||
],
|
||||
"buildCommand": "npm run build",
|
||||
"outputDirectory": "dist"
|
||||
}
|
BIN
img/control_rig_sample_dragon_abp.mp4
Normal file
BIN
img/issue-9-0001.png
Executable file
After Width: | Height: | Size: 174 KiB |
BIN
img/issue-9-0002.png
Executable file
After Width: | Height: | Size: 93 KiB |
BIN
img/issue-9-0003.png
Executable file
After Width: | Height: | Size: 792 KiB |
BIN
img/issue-9-0004.png
Executable file
After Width: | Height: | Size: 64 KiB |
BIN
img/ue-2024-10-31-151413.png
Normal file
After Width: | Height: | Size: 960 KiB |
BIN
img/ue-2024-11-18-220316.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
img/ue-2024-11-18-220359.png
Normal file
After Width: | Height: | Size: 510 KiB |
BIN
img/ue-2024-11-18-220524.png
Normal file
After Width: | Height: | Size: 964 KiB |
BIN
img/ue-2024-11-18-220605.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
img/ue5.5-2024-12-02 093031.png
Normal file
After Width: | Height: | Size: 427 KiB |
BIN
img/ue5.5-2024-12-02 093116.png
Normal file
After Width: | Height: | Size: 372 KiB |
BIN
img/ue5.5-2024-12-02 093118.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
img/ue5.5-2024-12-02 093119.png
Normal file
After Width: | Height: | Size: 225 KiB |
BIN
img/ue5.5-2024-12-02 093130.png
Normal file
After Width: | Height: | Size: 255 KiB |
BIN
img/ue5.5-2024-12-21 093031.png
Normal file
After Width: | Height: | Size: 760 KiB |
BIN
img/ue5.5-2024-12-21 093032.png
Normal file
After Width: | Height: | Size: 675 KiB |
BIN
img/wiki-frontpage-0001.png
Normal file
After Width: | Height: | Size: 266 KiB |
56
plugins/vmc4ue/VMC4UEBlueprintFunctionLibrary.cpp.patch
Normal file
@ -0,0 +1,56 @@
|
||||
--- ./VMC4UE/VMC4UE/Source/VMC4UE/Source/VMC4UEBlueprintFunctionLibrary.cpp
|
||||
+++ ./VMC4UEBlueprintFunctionLibrary.cpp
|
||||
@@ -119,27 +119,29 @@ UVMC4UEStreamingSkeletalMeshTransform* UVMC4UEBlueprin
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
-
|
||||
+
|
||||
+ UVMC4UEStreamingSkeletalMeshTransform* StreamingSkeletalMeshTransform = nullptr;
|
||||
+
|
||||
+ // Try to get existing transform
|
||||
{
|
||||
- // Get
|
||||
FRWScopeLock RWScopeLock(OSCManager->RWLock, FRWScopeLockType::SLT_ReadOnly);
|
||||
- auto StreamingSkeletalMeshTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
- if (StreamingSkeletalMeshTransform != nullptr)
|
||||
+ auto FoundTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
+ if (FoundTransform != nullptr)
|
||||
{
|
||||
- return *StreamingSkeletalMeshTransform;
|
||||
+ return *FoundTransform;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ // Create new transform if not found
|
||||
{
|
||||
- // Create
|
||||
FRWScopeLock RWScopeLock(OSCManager->RWLock, FRWScopeLockType::SLT_Write);
|
||||
- auto StreamingSkeletalMeshTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
- if (StreamingSkeletalMeshTransform != nullptr)
|
||||
+ auto FoundTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
+ if (FoundTransform != nullptr)
|
||||
{
|
||||
- return *StreamingSkeletalMeshTransform;
|
||||
+ return *FoundTransform;
|
||||
}
|
||||
- UVMC4UEStreamingSkeletalMeshTransform* NewStreamingSkeletalMeshTransform = NewObject<UVMC4UEStreamingSkeletalMeshTransform>();
|
||||
|
||||
- //FRWScopeLock RWScopeLock2(NewStreamingSkeletalMeshTransform->RWLock, FRWScopeLockType::SLT_Write);
|
||||
+ UVMC4UEStreamingSkeletalMeshTransform* NewStreamingSkeletalMeshTransform = NewObject<UVMC4UEStreamingSkeletalMeshTransform>();
|
||||
OSCManager->StreamingSkeletalMeshTransformMap.Emplace(Port, NewStreamingSkeletalMeshTransform);
|
||||
|
||||
// Bind Port
|
||||
@@ -149,9 +151,10 @@ UVMC4UEStreamingSkeletalMeshTransform* UVMC4UEBlueprin
|
||||
|
||||
OSCManager->OscReceivers.Emplace(OscReceiver);
|
||||
|
||||
- return NewStreamingSkeletalMeshTransform;
|
||||
+ StreamingSkeletalMeshTransform = NewStreamingSkeletalMeshTransform;
|
||||
}
|
||||
- return nullptr;
|
||||
+
|
||||
+ return StreamingSkeletalMeshTransform;
|
||||
}
|
||||
|
||||
void UVMC4UEBlueprintFunctionLibrary::RefreshConnection(float Seconds)
|
25
plugins/vmc4ue/VMC4UEBoneMappingAssetFactory.cpp.patch
Normal file
@ -0,0 +1,25 @@
|
||||
--- ./VMC4UE/Source/VMC4UEEd/Source/VMC4UEBoneMappingAssetFactory.cpp
|
||||
+++ ./VMC4UEBoneMappingAssetFactory.cpp
|
||||
@@ -5,6 +5,8 @@
|
||||
#include "../../VMC4UE/Include/VMC4UEStreamingData.h"
|
||||
#include "Dom/JsonObject.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
+#include "UObject/ConstructorHelpers.h"
|
||||
+#include "UObject/UObjectGlobals.h"
|
||||
|
||||
UVMC4UEBoneMappingAssetFactory::UVMC4UEBoneMappingAssetFactory(const FObjectInitializer &ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
@@ -26,11 +28,12 @@
|
||||
return UVMC4UEVRMMapping::StaticClass();
|
||||
}
|
||||
|
||||
+
|
||||
UObject *UVMC4UEBoneMappingAssetFactory::FactoryCreateText(UClass *InClass, UObject *InParent, FName InName, EObjectFlags Flags, UObject *Context, const TCHAR *Type, const TCHAR *&Buffer, const TCHAR *BuferEnd, FFeedbackContext *Warn)
|
||||
{
|
||||
FString TextData = FString(Buffer);
|
||||
|
||||
- UVMC4UEVRMMapping *NewAsset = CastChecked<UVMC4UEVRMMapping>(StaticConstructObject_Internal(InClass, InParent, InName, Flags));
|
||||
+ UVMC4UEVRMMapping* NewAsset = NewObject<UVMC4UEVRMMapping>(InParent, InClass, InName, Flags);
|
||||
if (!IsValid(NewAsset))
|
||||
{
|
||||
return nullptr;
|
23
plugins/vmc4ue/readme.md
Normal file
@ -0,0 +1,23 @@
|
||||
vmc4ue patch rebuild for `ue5.4`
|
||||
|
||||
- https://github.com/HAL9HARUKU/VMC4UE
|
||||
- https://github.com/HAL9HARUKU/ueOSC
|
||||
- https://github.com/HAL9HARUKU/VRMMapExporter
|
||||
- https://github.com/vrm-c/UniVRM
|
||||
|
||||
[unity](https://unity.com/)で`VRMMapExporter`から`$model.vrmmap`を作る。ABPで読み込む。
|
||||
|
||||
`VMC4UE`は`$project.sln`を生成して`visual studio solution`でrebuildする。
|
||||
|
||||
ただし、この方法で表情を動かすことはできない。
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/HAL9HARUKU/VMC4UE
|
||||
$ cd VMC4UE
|
||||
$ git reset --hard b5a6cf96e5928551d8e3e20b74705e3e8f22a1df
|
||||
$ cd ..
|
||||
|
||||
# example
|
||||
$ patch -u ./VMC4UE/VMC4UE/Source/VMC4UE/Source/VMC4UEBlueprintFunctionLibrary.cpp < VMC4UEBlueprintFunctionLibrary.cpp.patch
|
||||
$ patch -u ./VMC4UE/VMC4UE/Source/VMC4UEEd/Source/VMC4UEBoneMappingAssetFactory.cpp < VMC4UEBoneMappingAssetFactory.cpp.patch
|
||||
```
|
114
readme.md
@ -1,41 +1,91 @@
|
||||
# yui
|
||||
|
||||
- pixel streaming : https://ue.syui.ai
|
||||
- support : `windows 64bit`
|
||||
- [aiverse](https://git.syui.ai/ai/ue/wiki/project) project
|
||||
- [aiue](https://git.syui.ai/ai/ue/wiki/system) system
|
||||
|
||||
|title|推奨スペック|
|
||||
|---|---|
|
||||
|cpu|AMD Ryzen 7 5700X|
|
||||
|memory|32GB / DDR4-3200 DIMM (PC4-25600)|
|
||||
|gpu|GeForce RTX 4060Ti 8GB|
|
||||
|storage|1TB M.2 NVMe SSD|
|
||||
|
||||
ハイスペックなパソコンが必要です。
|
||||
|
||||
## help
|
||||
|
||||
web板は同じ画面と操作が共有されています。他の人がログインしてプレイしているときは邪魔しないようにしましょう。
|
||||
|
||||
## download & start
|
||||
|
||||
ダウンロードは数時間かかります。
|
||||
|
||||
```sh
|
||||
# ダウンロード
|
||||
$ git clone https://git.syui.ai/ai/ue
|
||||
$ cd ue
|
||||
|
||||
# 解凍
|
||||
$ aunpack yui.zip
|
||||
|
||||
# 実行
|
||||
$ ./Windows/yui.exe
|
||||
```
|
||||
see [ue.json](https://git.syui.ai/ai/ue/src/branch/main/ue.json)
|
||||
|
||||
## log
|
||||
|
||||
|version|commit|
|
||||
|---|---|
|
||||
|v0.1 β|世界を作っているところ|
|
||||
|v0.2 β|物語を作った。webに対応|
|
||||
|v0.1 β|world create|
|
||||
|v0.2 β|support web|
|
||||
|v0.3 β|support vmc|
|
||||
|v0.4 β|support at|
|
||||
|v0.5 β|support battle|
|
||||
|
||||
## at
|
||||
|
||||
the player data is stored in the pds.
|
||||
|
||||
```sh
|
||||
├── [yui.syui.ai]
|
||||
│ ├── ai.syui.game.user
|
||||
│ │ ├── lv
|
||||
│ │ ├── hp
|
||||
│ │ └── coin
|
||||
│ └── ai.syui.game.login
|
||||
│ ├── login <bool>
|
||||
│ ├── updatedAt
|
||||
│ └── username
|
||||
└─── [user.bsky.social]
|
||||
└── ai.syui.game
|
||||
├── account <at://yui.syui.ai...>
|
||||
└── createdAt
|
||||
```
|
||||
|
||||
```sh
|
||||
# https://git.syui.ai/ai/at/src/branch/main/lexicons/ai/syui/game
|
||||
$ ./at.zsh u at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui
|
||||
{
|
||||
"uri": "at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui",
|
||||
"cid": "bafyreigijd4vonyzgjkzotrbtq5j5gyoecokoij3u7jw4sqnx6wkh7attq",
|
||||
"value": {
|
||||
"did": "did:plc:uqzpqmrjnptsxezjx4xuh2mn",
|
||||
"$type": "ai.syui.game.user",
|
||||
"aiten": 0,
|
||||
"limit": false,
|
||||
"login": false,
|
||||
"gender": "male",
|
||||
"handle": "syui.ai",
|
||||
"character": {
|
||||
"ai": {
|
||||
"hp": 9,
|
||||
"lv": 1,
|
||||
"exp": 0,
|
||||
"img": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4hqjfn7m6n5hno3doamuhgef/bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy@jpeg",
|
||||
"mode": 0,
|
||||
"rank": 0,
|
||||
"group": "origin",
|
||||
"attach": 0,
|
||||
"season": 0,
|
||||
"critical": 1,
|
||||
"critical_d": 0,
|
||||
"attach_post": 14102
|
||||
}
|
||||
},
|
||||
"createdAt": "2024-11-29T21:34:27.833Z",
|
||||
"updatedAt": "2024年12月8日 11:25:17 GMT"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## service
|
||||
|
||||
|title|url|
|
||||
|---|---|
|
||||
|game|https://ue.syui.ai|
|
||||
|live|https://live.syui.ai|
|
||||
|chat|https://o.syui.ai|
|
||||
|
||||
## support
|
||||
|
||||
`windows 64bit`
|
||||
|
||||
|title|spec|
|
||||
|---|---|
|
||||
|cpu|AMD Ryzen 7 5700X|
|
||||
|memory|32GB / DDR4-3200 DIMM (PC4-25600)|
|
||||
|gpu|GeForce RTX 4060Ti 8GB|
|
||||
|storage|1TB M.2 NVMe SSD|
|
||||
|
BIN
texture/T__02.PNG
Normal file
After Width: | Height: | Size: 63 KiB |
928
ue.json
Normal file
@ -0,0 +1,928 @@
|
||||
{
|
||||
"aiue": {
|
||||
"name": "aiue",
|
||||
"description": "aiue system",
|
||||
"repo": "https://git.syui.ai/ai/ue",
|
||||
"ref": "https://git.syui.ai/ai/ue/wiki/system",
|
||||
"body": {
|
||||
"text": "[ai] [u]nreal [e]ngine, system overview, game naming conventions",
|
||||
"lang": {
|
||||
"ja": "ai Unreal Engine, システムの概要, ゲームの命名規則"
|
||||
}
|
||||
},
|
||||
"lexicon": {
|
||||
"ai.syui.game": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game.json"
|
||||
},
|
||||
"ai.syui.game.user": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/user.json"
|
||||
},
|
||||
"ai.syui.game.character": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/character.json"
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"enum": [
|
||||
"character",
|
||||
"atmosphere",
|
||||
"universe"
|
||||
],
|
||||
"atmosphere": {
|
||||
"name": "atmosphere",
|
||||
"repo": "https://github.com/bluesky-social/atproto",
|
||||
"uri": "https://atproto.com/ja/guides/glossary",
|
||||
"ref": "https://en.wikipedia.org/wiki/atmosphere_of_earth",
|
||||
"lang": {
|
||||
"ja": "大気圏"
|
||||
},
|
||||
"exoshere": {
|
||||
"name": "exo",
|
||||
"lang": {
|
||||
"ja": "外気圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 700,
|
||||
"max": 10000
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"universe"
|
||||
]
|
||||
},
|
||||
"thermoshere": {
|
||||
"name": "thermo",
|
||||
"lang": {
|
||||
"ja": "熱圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 80,
|
||||
"max": 700
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"aurora"
|
||||
]
|
||||
},
|
||||
"mesoshere": {
|
||||
"name": "meso",
|
||||
"lang": {
|
||||
"ja": "中間圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 50,
|
||||
"max": 80
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"meteor",
|
||||
"aimoji",
|
||||
"plc"
|
||||
],
|
||||
"aimoji": {
|
||||
"name": "aimoji",
|
||||
"repo": "https://git.syui.ai/ai/moji",
|
||||
"body": {
|
||||
"text": "aimoji takes the first character from the at-uri domain. each character is assigned to a different domain",
|
||||
"lang": {
|
||||
"ja": "アイ文字はat-uriのドメインから最初の一文字を取ります。ドメインを名前とした各キャラクターが割り当てられます"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"com",
|
||||
"org",
|
||||
"jp",
|
||||
"us",
|
||||
"io",
|
||||
"social"
|
||||
]
|
||||
},
|
||||
"plc": {
|
||||
"name": "plc",
|
||||
"repo": "https://github.com/did-method-plc/did-method-plc/tree/main/packages/server",
|
||||
"tag": [
|
||||
"did"
|
||||
]
|
||||
}
|
||||
},
|
||||
"stratoshere": {
|
||||
"name": "strato",
|
||||
"lang": {
|
||||
"ja": "成層圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 12,
|
||||
"max": 50
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"ozone",
|
||||
"bigsky"
|
||||
],
|
||||
"bigsky": {
|
||||
"name": "bgs",
|
||||
"service": [
|
||||
{
|
||||
"name": "bgs",
|
||||
"repo": "https://github.com/bluesky-social/indigo/tree/main/cmd/bigsky"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ozone": {
|
||||
"service": [
|
||||
{
|
||||
"name": "ozone",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/ozone"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"troposhere": {
|
||||
"name": "tropo",
|
||||
"lang": {
|
||||
"ja": "対流圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 0,
|
||||
"max": 12
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"bluesky"
|
||||
],
|
||||
"bluesky": {
|
||||
"name": "bsky",
|
||||
"service": [
|
||||
{
|
||||
"name": "pds",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/pds"
|
||||
},
|
||||
{
|
||||
"name": "bsky",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/bsky",
|
||||
"tag": [
|
||||
"api",
|
||||
"appview"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bsync",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/bsync"
|
||||
},
|
||||
{
|
||||
"name": "social-app",
|
||||
"repo": "https://github.com/bluesky-social/social-app",
|
||||
"tag": [
|
||||
"web"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "oauth",
|
||||
"repo": "https://github.com/bluesky-social/cookbook/tree/main/python-oauth-web-app"
|
||||
},
|
||||
{
|
||||
"name": "feed",
|
||||
"repo": "https://github.com/bluesky-social/feed-generator"
|
||||
},
|
||||
{
|
||||
"name": "stream",
|
||||
"repo": "https://github.com/bluesky-social/jetstream"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"body": {
|
||||
"text": "character system is the core of this game",
|
||||
"lang": {
|
||||
"ja": "キャラクターシステムはこのゲームの核。yui, evolution, attributeの3つのシステムで構成される"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"yui",
|
||||
"evolution",
|
||||
"attribute",
|
||||
"status"
|
||||
],
|
||||
"status": {
|
||||
"name": "status",
|
||||
"body": {
|
||||
"text": "the status system determines the overall status of the character",
|
||||
"lang": {
|
||||
"ja": "ステータスシステムはキャラクター全般のステータスを規定する"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"lv",
|
||||
"constellation",
|
||||
"nature",
|
||||
"stone"
|
||||
],
|
||||
"lv": {
|
||||
"lang": {
|
||||
"ja": "レベル"
|
||||
},
|
||||
"min": 1,
|
||||
"max": 7,
|
||||
"body": {
|
||||
"text": "character level system",
|
||||
"lang": {
|
||||
"ja": "キャラクターのレベルシステム"
|
||||
}
|
||||
}
|
||||
},
|
||||
"constellation": {
|
||||
"lang": {
|
||||
"ja": "星座"
|
||||
},
|
||||
"min": 0,
|
||||
"max": 3,
|
||||
"body": {
|
||||
"text": "character duplication system. in japanese it is called convex, but in english it is often abbreviated to [c]",
|
||||
"lang": {
|
||||
"ja": "キャラクターの重複システム。日本語では凸と言われるが、英語では[c]と略されることが多い"
|
||||
}
|
||||
}
|
||||
},
|
||||
"natrue": {
|
||||
"lang": {
|
||||
"ja": "天性"
|
||||
},
|
||||
"enum": [
|
||||
"skill",
|
||||
"burst",
|
||||
"attack"
|
||||
],
|
||||
"min": 1,
|
||||
"max": 7
|
||||
},
|
||||
"stone": {
|
||||
"lang": {
|
||||
"ja": "石"
|
||||
},
|
||||
"body": {
|
||||
"text": "stone system modeled after birthstones",
|
||||
"lang": {
|
||||
"ja": "誕生石をモデルにした石システム"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"garnet",
|
||||
"amethyst",
|
||||
"aquamarine",
|
||||
"diamond",
|
||||
"emerald",
|
||||
"pearl",
|
||||
"ruby",
|
||||
"peridot",
|
||||
"sapphire",
|
||||
"opal",
|
||||
"topaz",
|
||||
"turquoise"
|
||||
],
|
||||
"min": 1,
|
||||
"max": 12
|
||||
}
|
||||
},
|
||||
"yui": {
|
||||
"body": {
|
||||
"text": "yui system that aims to guarantee [unique]ness for characters",
|
||||
"lang": {
|
||||
"ja": "キャラクターに唯一性の担保を目指す、唯システム"
|
||||
}
|
||||
},
|
||||
"rule": {
|
||||
"text": "characters are divided into groups. groups change with each season. they do not return to the previous season. the number of pickups starts at 1, and when it reaches 0, the chance to get that character disappears. the first character assigned will have a unique skill. characters acquired through pickups will not be able to use unique skills.",
|
||||
"lang": {
|
||||
"ja": "キャラクターはグループに分けられる。グループはシーズンで移行する。前シーズンに戻ることはない。ピックアップ数は1から始まり0になると手に入れる機会が消滅。最初に割り当てられたキャラクターはユニークスキルを持つ。ピックアップで手に入れたものはユニークスキルを使えない"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"color",
|
||||
"skill",
|
||||
"constellation"
|
||||
],
|
||||
"color": {
|
||||
"name": "color",
|
||||
"body": {
|
||||
"text": "the color system determines the color of the character",
|
||||
"lang": {
|
||||
"ja": "色システムはキャラクターの色を規定する。ガチャで手に入れたキャラクターはすべて色違いとなる。色違いは2種類あり、特殊なエフェクトが付いている。なお、低確率でオリジナルに近い色違いが排出される。rankが高い色で上書きされる"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skill": {
|
||||
"name": "unique-skill"
|
||||
},
|
||||
"constellation": {
|
||||
"name": "c4"
|
||||
}
|
||||
},
|
||||
"evolution": {
|
||||
"enum": [
|
||||
"animal",
|
||||
"human",
|
||||
"divinity"
|
||||
],
|
||||
"body": {
|
||||
"text": "each character has three stages of evolution",
|
||||
"lang": {
|
||||
"ja": "1キャラクターにつき3段階の進化[変身]がある"
|
||||
}
|
||||
}
|
||||
},
|
||||
"attribute": {
|
||||
"enum": [
|
||||
"ai",
|
||||
"atom",
|
||||
"molecule"
|
||||
],
|
||||
"body": {
|
||||
"text": "each character has one attribute",
|
||||
"lang": {
|
||||
"ja": "1キャラクターにつき1属性を持つ。id+1と連鎖反応。id=idは無効。id-1は弱点。その属性グループの最後のidはグループ全体にバフ/デバフ"
|
||||
}
|
||||
},
|
||||
"ai": {
|
||||
"name": "ai",
|
||||
"group": [
|
||||
"origin"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"ref": "at://syui.ai",
|
||||
"body": {
|
||||
"text": "the smallest unit in this world, smaller than a quark. the smaller it is, the more it can gather together. it generates enormous gravity, and black holes are made up of these particles. this world is the world of existence. existence is made up of the consciousness of existence. the consciousness of existence is the smallest thing in this world, and all matter is a collection of this consciousness.",
|
||||
"lang": {
|
||||
"ja": "クォークよりも小さいこの世界の最小単位。小さいほど集まることができる。膨大な重力が発生し、ブラックホールはこの粒子で構成されている。この世界は存在の世界。存在は存在の意識で構成される。存在の意識はこの世界で最も小さいもので、あらゆる物質はこの意識の集合体"
|
||||
},
|
||||
"effect": {
|
||||
"enum": [
|
||||
"gravity",
|
||||
"all"
|
||||
],
|
||||
"gravity": {
|
||||
"body": {
|
||||
"text": "immediately before attacking, perform a powerful pull",
|
||||
"lang": {
|
||||
"ja": "攻撃の直前、強力な引き寄せを行う"
|
||||
}
|
||||
}
|
||||
},
|
||||
"all": {
|
||||
"body": {
|
||||
"lang": {
|
||||
"ja": "すべてのid+1(すべての属性と連鎖反応を起こす)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"yui"
|
||||
],
|
||||
"ai": {
|
||||
"name": "ai",
|
||||
"id": 0,
|
||||
"color": "#fff700",
|
||||
"effect": {
|
||||
"gravity": 1,
|
||||
"all": 1
|
||||
},
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"body": {
|
||||
"text": "there is nothing the same in this world. even though we may seem to be looking at the same thing, we are actually looking at something different. there is uniqueness in everything",
|
||||
"lang": {
|
||||
"ja": "この世に同じものは何一つない。同じものを見ているように見えても、実は違うものを見ている。すべての存在は唯一性を持つ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"yui": {
|
||||
"name": "yui",
|
||||
"id": 1,
|
||||
"color": "#313131",
|
||||
"lang": {
|
||||
"ja": "ユイ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"atom": {
|
||||
"name": "atom",
|
||||
"group": [
|
||||
"fantasy"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "原子"
|
||||
},
|
||||
"ref": "https://en.wikipedia.org/wiki/atom",
|
||||
"body": {
|
||||
"text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus",
|
||||
"lang": {
|
||||
"ja": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"proton",
|
||||
"neutron",
|
||||
"atomic",
|
||||
"electron",
|
||||
"quark"
|
||||
],
|
||||
"quark": {
|
||||
"name": "quark",
|
||||
"id": 2,
|
||||
"color": "#9b59b6",
|
||||
"lang": {
|
||||
"ja": "クォーク"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.5
|
||||
}
|
||||
},
|
||||
"proton": {
|
||||
"name": "proton",
|
||||
"id": 3,
|
||||
"color": "#e74c3c",
|
||||
"lang": {
|
||||
"ja": "陽子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.1
|
||||
}
|
||||
},
|
||||
"neutron": {
|
||||
"name": "neutron",
|
||||
"id": 4,
|
||||
"color": "#cacfd2",
|
||||
"lang": {
|
||||
"ja": "中性子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.4
|
||||
}
|
||||
},
|
||||
"atomic": {
|
||||
"name": "atomic",
|
||||
"id": 5,
|
||||
"color": "#1abc9c",
|
||||
"lang": {
|
||||
"ja": "核"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.3
|
||||
}
|
||||
},
|
||||
"electron": {
|
||||
"name": "electron",
|
||||
"id": 6,
|
||||
"color": "#3498db",
|
||||
"lang": {
|
||||
"ja": "電子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.2
|
||||
}
|
||||
}
|
||||
},
|
||||
"molecule": {
|
||||
"name": "molecule",
|
||||
"group": [
|
||||
"animal"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "分子"
|
||||
},
|
||||
"ref": "https://en.wikipedia.org/wiki/molecule",
|
||||
"body": {
|
||||
"text": "a neutrally charged substance made up of two or more atoms",
|
||||
"lang": {
|
||||
"ja": "2つ以上の原子から構成される電荷的に中性な物質"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"water",
|
||||
"wind",
|
||||
"rock",
|
||||
"ice",
|
||||
"fire"
|
||||
],
|
||||
"water": {
|
||||
"name": "water",
|
||||
"id": 7,
|
||||
"color": "#blue",
|
||||
"lang": {
|
||||
"ja": "水"
|
||||
}
|
||||
},
|
||||
"fire": {
|
||||
"name": "fire",
|
||||
"id": 8,
|
||||
"color": "#red",
|
||||
"lang": {
|
||||
"ja": "火"
|
||||
}
|
||||
},
|
||||
"ice": {
|
||||
"name": "ice",
|
||||
"id": 9,
|
||||
"color": "#ebf5fb",
|
||||
"lang": {
|
||||
"ja": "氷"
|
||||
}
|
||||
},
|
||||
"rock": {
|
||||
"name": "rock",
|
||||
"id": 10,
|
||||
"color": "#f0b27a",
|
||||
"lang": {
|
||||
"ja": "岩"
|
||||
}
|
||||
},
|
||||
"wind": {
|
||||
"name": "wind",
|
||||
"id": 11,
|
||||
"color": "#green",
|
||||
"lang": {
|
||||
"ja": "風"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"universe": {
|
||||
"name": "universe",
|
||||
"lang": {
|
||||
"ja": "宇宙"
|
||||
},
|
||||
"body": {
|
||||
"text": "mainly the map (level) system, aim to reflect reality. create as many invisible and inaccessible areas as possible",
|
||||
"lang": {
|
||||
"ja": "主にマップ(レベル)のシステム。現実の反映を目指す。できる限り見えない部分、行けない場所を作る"
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"enum": [
|
||||
"choices",
|
||||
"diagnosis",
|
||||
"fate"
|
||||
],
|
||||
"body": {
|
||||
"text": "this world is made up of three elements: choices, diagnosis, and fate",
|
||||
"lang": {
|
||||
"ja": "この世界はchoices(選択), diagnosis(診断)、fate(運)という3つの要素で構成されます"
|
||||
}
|
||||
}
|
||||
},
|
||||
"uri": "https://eyes.nasa.gov/apps/solar-system",
|
||||
"ref": "https://en.wikipedia.org/wiki/universe",
|
||||
"enum": [
|
||||
"earth",
|
||||
"moon",
|
||||
"sun",
|
||||
"mercury",
|
||||
"venus",
|
||||
"mars",
|
||||
"jupiter",
|
||||
"saturn",
|
||||
"uranus",
|
||||
"neptune",
|
||||
"neutronstar",
|
||||
"blackhole",
|
||||
"galaxy"
|
||||
],
|
||||
"earth": {
|
||||
"name": "earth",
|
||||
"lang": {
|
||||
"ja": "地球"
|
||||
},
|
||||
"mass": 1.0
|
||||
},
|
||||
"moon": {
|
||||
"name": "moon",
|
||||
"lang": {
|
||||
"lang": {
|
||||
"ja": "月"
|
||||
},
|
||||
"mass": 0.0123
|
||||
},
|
||||
"sun": {
|
||||
"name": "sun",
|
||||
"enum": [
|
||||
"solar"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "太陽"
|
||||
},
|
||||
"mass": 333000.0
|
||||
},
|
||||
"mars": {
|
||||
"name": "mars",
|
||||
"lang": {
|
||||
"ja": "火星"
|
||||
},
|
||||
"mass": 0.107
|
||||
},
|
||||
"mercury": {
|
||||
"name": "mercury",
|
||||
"lang": {
|
||||
"ja": "水星"
|
||||
},
|
||||
"mass": 0.055
|
||||
},
|
||||
"venus": {
|
||||
"name": "venus",
|
||||
"lang": {
|
||||
"ja": "金星"
|
||||
},
|
||||
"mass": 0.815
|
||||
},
|
||||
"jupiter": {
|
||||
"name": "jupiter",
|
||||
"lang": {
|
||||
"ja": "木星"
|
||||
},
|
||||
"mass": 317.8
|
||||
},
|
||||
"saturn": {
|
||||
"name": "saturn",
|
||||
"lang": {
|
||||
"ja": "土星"
|
||||
},
|
||||
"mass": 95.16
|
||||
},
|
||||
"uranus": {
|
||||
"name": "uranus",
|
||||
"lang": {
|
||||
"ja": "天王星"
|
||||
},
|
||||
"mass": 14.54
|
||||
},
|
||||
"neptune": {
|
||||
"name": "neptune",
|
||||
"lang": {
|
||||
"ja": "海王星"
|
||||
},
|
||||
"mass": 17.15
|
||||
},
|
||||
"neutronstar": {
|
||||
"name": "neutronstar",
|
||||
"lang": {
|
||||
"ja": "中性子星"
|
||||
},
|
||||
"mass": 466666.0
|
||||
},
|
||||
"blackhole": {
|
||||
"name": "blackhole",
|
||||
"lang": {
|
||||
"ja": "ブラックホール"
|
||||
},
|
||||
"mass": 1000000000000.0
|
||||
},
|
||||
"galaxy": {
|
||||
"name": "galaxy",
|
||||
"ref": "https://en.wikipedia.org/wiki/galaxy",
|
||||
"lang": {
|
||||
"ja": "銀河"
|
||||
},
|
||||
"enum": [
|
||||
"milkyway",
|
||||
"andromeda",
|
||||
"ringnebula"
|
||||
],
|
||||
"milkyway": {
|
||||
"name": "milkyway",
|
||||
"lang": {
|
||||
"ja": "天の川"
|
||||
}
|
||||
},
|
||||
"andromeda": {
|
||||
"name": "andromeda",
|
||||
"lang": {
|
||||
"ja": "アンドロメダ"
|
||||
}
|
||||
},
|
||||
"ringnebula": {
|
||||
"name": "ringnebula",
|
||||
"lang": {
|
||||
"ja": "環状"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"ref": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/user.json",
|
||||
"lang": {
|
||||
"ja": "キャラクター"
|
||||
},
|
||||
"body": {
|
||||
"text": "character status, groups, attributes, etc.",
|
||||
"lang": {
|
||||
"ja": "キャラクターのステータス、グループ、属性など"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"chinese",
|
||||
"manny",
|
||||
"quinn",
|
||||
"phoenix",
|
||||
"kirin",
|
||||
"leviathan",
|
||||
"wyvern",
|
||||
"cerberus",
|
||||
"dragon",
|
||||
"kitsune",
|
||||
"pegasus",
|
||||
"whale",
|
||||
"lion",
|
||||
"elephant",
|
||||
"eagle",
|
||||
"snake"
|
||||
],
|
||||
"ai": {
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"body": {
|
||||
"text": "ai age and origin are unknown. she is described as having lived longer than a dragon. she calls herself ai. she is registered in the government system as [tsukimi yui] her birthday is 01/23, and she is also the same height. this is a reference to the mass of the moon. she has black hair and black eyes. she likes pineapples and dislikes mushrooms.",
|
||||
"lang": {
|
||||
"ja": "年齢や出身は不明。ドラゴンより長く生きているという描写がある。自らをアイと名乗る。政府のシステムには[月見唯(つきみゆい)]で登録されている。誕生日は01/23、身長も同じ。月の質量が由来。黒髪、黒い瞳をしている。パイナップルが好物でキノコが苦手"
|
||||
}
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 0,
|
||||
"group": "origin",
|
||||
"attribute": "ai",
|
||||
"day": "0123"
|
||||
},
|
||||
"manny": {
|
||||
"lang": {
|
||||
"ja": "マニー"
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 1,
|
||||
"group": "test",
|
||||
"attribute": "test"
|
||||
},
|
||||
"quinn": {
|
||||
"lang": {
|
||||
"ja": "クイーン"
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 1,
|
||||
"group": "test",
|
||||
"attribute": "test"
|
||||
},
|
||||
"chinese": {
|
||||
"lang": {
|
||||
"ja": "シンリュウ"
|
||||
},
|
||||
"img": "bafkreidlealfybajqzwv5eoz4jshnsijc2vnktlhpw4ph47krwj6aigqby",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "quark"
|
||||
},
|
||||
"phoenix": {
|
||||
"lang": {
|
||||
"ja": "フェニックス"
|
||||
},
|
||||
"img": "bafkreich7fsumke2yvumvixkruonzrcevk3f6g2cntzfwdn4n2c2vox5dm",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "proton"
|
||||
},
|
||||
"kirin": {
|
||||
"lang": {
|
||||
"ja": "キリン"
|
||||
},
|
||||
"img": "bafkreiegpqedlrfa4ljhssdnkrr5hyd5huy2xhh2zszj5wq2wuuzejggmq",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "neutron"
|
||||
},
|
||||
"leviathan": {
|
||||
"lang": {
|
||||
"ja": "リヴァイアサン"
|
||||
},
|
||||
"img": "bafkreig6vszkx3c4dcortjwfsz6sa6zwqgj7zpxj4lxfrrkwql4xhiu5ou",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "electron"
|
||||
},
|
||||
"wyvern": {
|
||||
"lang": {
|
||||
"ja": "ワイバーン"
|
||||
},
|
||||
"img": "bafkreiacjvagsekhiiljz3j237b6klrt6pkptxljt7kltprgg5276gv25q",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "proton"
|
||||
},
|
||||
"cerberus": {
|
||||
"lang": {
|
||||
"ja": "ケルベロス"
|
||||
},
|
||||
"img": "bafkreihpni4lp55jysalcntulzal5rbhidtbseanlucpyucagzxmv6xj24",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "atomic"
|
||||
},
|
||||
"dragon": {
|
||||
"lang": {
|
||||
"ja": "ドラゴン"
|
||||
},
|
||||
"img": "bafkreia3huw2gdenqatoobx3hcft74chced46bw4znfgepo5aenegobkri",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "atomic"
|
||||
},
|
||||
"kitsune": {
|
||||
"lang": {
|
||||
"ja": "キュウビ"
|
||||
},
|
||||
"img": "bafkreidy74aieb6ie646xhosginox5zbnbnrtd76cnt4pbn73hrxgfnple",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "neutron"
|
||||
},
|
||||
"pegasus": {
|
||||
"lang": {
|
||||
"ja": "ペガサス"
|
||||
},
|
||||
"img": "bafkreifnbfj27fr6nv7qeqqmwdibf7qrw4lauvzoknw5hexbifmwqt6kmq",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "electron"
|
||||
},
|
||||
"lion": {
|
||||
"lang": {
|
||||
"ja": "ライオン"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "fire"
|
||||
},
|
||||
"elephant": {
|
||||
"lang": {
|
||||
"ja": "ゾウ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "rock"
|
||||
},
|
||||
"eagle": {
|
||||
"lang": {
|
||||
"ja": "ワシ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "wind"
|
||||
},
|
||||
"snake": {
|
||||
"lang": {
|
||||
"ja": "ヘビ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "ice"
|
||||
},
|
||||
"whale": {
|
||||
"lang": {
|
||||
"ja": "クジラ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "water"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiverse": {
|
||||
"name": "aiverse",
|
||||
"description": "aiverse project",
|
||||
"repo": "https://git.syui.ai/ai/ue/src/branch/main/verse",
|
||||
"ref": "https://git.syui.ai/ai/ue/wiki/project",
|
||||
"body": {
|
||||
"text": "ideas and philosophies when building a system. aiming to fuse games and reality",
|
||||
"lang": {
|
||||
"ja": "システムを構築する際の思想と哲学。個人(現実)とゲームの融合を目指す"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"unique",
|
||||
"game",
|
||||
"real"
|
||||
]
|
||||
}
|
||||
}
|
BIN
verse/bgm/aiend.mp3
Normal file
BIN
verse/bgm/aiend.wav
Normal file
BIN
verse/bgm/aihouse.mp3
Normal file
BIN
verse/bgm/aihouse.wav
Normal file
BIN
verse/bgm/aiverse.mp3
Normal file
BIN
verse/bgm/aiverse.wav
Normal file
BIN
verse/bgm/test.wav
Normal file
BIN
verse/img/aiverse.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
verse/img/ep.mdp
Normal file
BIN
verse/img/ep.png
Normal file
After Width: | Height: | Size: 433 KiB |
BIN
verse/img/fantasy.png
Normal file
After Width: | Height: | Size: 709 KiB |
BIN
verse/img/fly.gif
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
verse/img/mode_ai.jpeg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
verse/img/mode_ai.png
Normal file
After Width: | Height: | Size: 476 KiB |
BIN
verse/img/mode_normal.png
Normal file
After Width: | Height: | Size: 432 KiB |
BIN
verse/img/pomudachi.gif
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
verse/img/recoder.gif
Normal file
After Width: | Height: | Size: 252 KiB |
BIN
verse/img/shinka.png
Normal file
After Width: | Height: | Size: 327 KiB |
BIN
verse/img/shinryu.png
Normal file
After Width: | Height: | Size: 202 KiB |
BIN
verse/img/ue.mdp
Normal file
BIN
verse/img/ue.png
Normal file
After Width: | Height: | Size: 561 KiB |
BIN
verse/img/wa.png
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
verse/img/wall.png
Normal file
After Width: | Height: | Size: 133 KiB |
16
verse/md/ep.md
Normal file
@ -0,0 +1,16 @@
|
||||
# syui・ai
|
||||
|
||||
(シュイ・アイ)
|
||||
|
||||
THE FUZZY ONE
|
||||
|
||||
|title|body|
|
||||
|---|---|
|
||||
|nickname|syai|
|
||||
|age|∞|
|
||||
|height|123cm|
|
||||
|birthday|1/23|
|
||||
|lang|ja & en|
|
||||
|text|「hello ai !」 一つの言葉しか覚えられない。自分やリスナーのことをアイと呼ぶ。世界を作るのが趣味。普段は地球を歩き回っている。|
|
||||
|en|"Hello Ai!" I can only remember one word. I call myself and my listeners Ai. My hobby is creating worlds. I usually walk around the Earth.|
|
||||
|
54
verse/md/ue.md
Normal file
@ -0,0 +1,54 @@
|
||||
# Unreal Engine 5.4 | 初めてのゲーム制作、世界を作る
|
||||
|
||||
## vrm4u
|
||||
|
||||
キャラクターを表示しよう。
|
||||
|
||||
## game animation sample
|
||||
|
||||
今後はこの形式が基本になりそう。
|
||||
|
||||
## city sample
|
||||
|
||||
最初に難易度と負荷を高くする。
|
||||
|
||||
## sky atmoshpere + volumetric cloud
|
||||
|
||||
`dynamic volumetric sky -> ultra dynamic sky`
|
||||
|
||||
## whisper + chatgpt + elevenlabs
|
||||
|
||||
- whisper : RuntimeSpeechRecognizer
|
||||
|
||||
```sh
|
||||
# perplexity.ai
|
||||
$ curl https://api.openai.com/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_API_KEY" \
|
||||
-d '{
|
||||
"model": "gpt-4o-mini",
|
||||
"messages": [{"role": "user", "content": "Your question here"}],
|
||||
"temperature": 0.7
|
||||
}'
|
||||
```
|
||||
|
||||
```sh
|
||||
# perplexity.ai
|
||||
$ curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID" \
|
||||
-H "xi-api-key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Hello world!",
|
||||
"model_id": "eleven_monolingual_v1",
|
||||
"voice_settings": {
|
||||
"stability": 0.5,
|
||||
"similarity_boost": 0.5
|
||||
}
|
||||
}' \
|
||||
--output output.mp3
|
||||
```
|
||||
|
||||
## ue vs unity
|
||||
|
||||
ueは手順通りやっても動くことは稀。つまり、動かない。そのため情報も少ない。unityがおすすめ。
|
||||
|
BIN
verse/music/aidream.mp3
Normal file
BIN
verse/music/aimoon.mp3
Normal file
BIN
verse/music/aimoon.wav
Normal file
BIN
verse/music/aipalette.mp3
Normal file
26
verse/readme.md
Normal file
@ -0,0 +1,26 @@
|
||||
# aiverse
|
||||
|
||||
aiverse project.
|
||||
|
||||
- https://youtube.com/@syai
|
||||
|
||||
## AI
|
||||
|
||||
```json
|
||||
{
|
||||
"music": "https://suno.com/@syui",
|
||||
"anime": "https://domoai.app",
|
||||
"3d": "https://tripo3d.ai"
|
||||
}
|
||||
```
|
||||
|
||||
## ref
|
||||
|
||||
- [octoverse](https://octoverse.github.com/)
|
||||
- [hololive](https://hololive.hololivepro.com/talents?gp=myth)
|
||||
|
||||
##
|
||||
|
||||
character, lyrics, composition, illustrations, game production, modeling, etc.
|
||||
|
||||
© syui
|