vault backup: 2023-08-16 16:55:46
This commit is contained in:
parent
42fe752952
commit
b464052bac
@ -1,2 +1,3 @@
|
||||
## AIMotionRender
|
||||
1. UE服务化实现完成,目前可以通过WebSocket控制进行重定向并且生成fbx文件。
|
||||
1. UE5动画重定向服务化实现完成,目前可以通过WebSocket控制进行重定向并且生成fbx文件。
|
||||
2. 尝试使用Pyside6库实现WebSocketServer来实现Blender动画重定向服务化,但因为Blender的动画重定向功能都由插件提供,而且效果不如UE5,所以放弃。
|
@ -15,3 +15,125 @@ sys.path.insert(0, my_python_path)
|
||||
```bash
|
||||
pip install PySide6-Addons
|
||||
```
|
||||
|
||||
# WebSocketServer for Blender
|
||||
https://github.com/KoltesDigital/websocket-server-for-blender
|
||||
|
||||
## Pyside6实现
|
||||
TODO:添加多线程,防止退出。
|
||||
```python
|
||||
# blender --background test.blend --python mytest.py -- example args 123
|
||||
import sys
|
||||
import pathlib
|
||||
# import pyside6
|
||||
my_python_path = "C:\Python311\Lib\site-packages"
|
||||
sys.path.insert(0, my_python_path)
|
||||
|
||||
import bpy
|
||||
from PySide6.QtNetwork import QHostAddress
|
||||
from PySide6.QtWebSockets import QWebSocket
|
||||
from PySide6.QtWebSockets import QWebSocketServer
|
||||
|
||||
class QRetargetWebsocketServer(QWebSocketServer):
|
||||
def __init__(self):
|
||||
super(QRetargetWebsocketServer, self).__init__("RetargetWebsocketServer", QWebSocketServer.NonSecureMode)
|
||||
self.closed.connect(self.onClosed)
|
||||
self.newConnection.connect(self.onNewConnection)
|
||||
|
||||
def onClosed():
|
||||
print('connect closed!')
|
||||
|
||||
def onNewConnection(self, context, event):
|
||||
client: QWebSocket = self.nextPendingConnection()
|
||||
client.textMessageReceived.connect(self.onTextReceived)
|
||||
|
||||
def onTextReceived(self, text: str):
|
||||
client: QWebSocket = self.sender()
|
||||
|
||||
if text == "Retarget":
|
||||
print("Retarget")
|
||||
client.sendTextMessage("Retarget")
|
||||
else:
|
||||
print("text:", text)
|
||||
|
||||
# 提取输出的命
|
||||
argv = sys.argv
|
||||
print(argv)
|
||||
# argv = argv[argv.index("--") + 1:] # get all args after "--"
|
||||
# print(argv) # --> ['example', 'args', '123']
|
||||
|
||||
WebSocketServer = QRetargetWebsocketServer()
|
||||
WebSocketServer.listen(QHostAddress.LocalHost,9091)
|
||||
|
||||
```
|
||||
|
||||
# Http Server
|
||||
```python
|
||||
bl_info = {
|
||||
"name": "My Awesome Server",
|
||||
"blender": (2, 80, 0),
|
||||
"category": "Object",
|
||||
}
|
||||
|
||||
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
import threading
|
||||
import bpy
|
||||
|
||||
class MyServer(BaseHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
if self.path == '/test':
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type','text/html')
|
||||
self.end_headers()
|
||||
message = "This is a test page2."
|
||||
self.wfile.write(bytes(message, "utf8"))
|
||||
else:
|
||||
self.send_response(404)
|
||||
self.send_header('Content-type','text/html')
|
||||
self.end_headers()
|
||||
message = "404 Not Found."
|
||||
self.wfile.write(bytes(message, "utf8"))
|
||||
return
|
||||
|
||||
httpd = None
|
||||
thread = None
|
||||
thread2 = None
|
||||
|
||||
def start_server():
|
||||
global httpd
|
||||
|
||||
server_address = ('localhost', 8080)
|
||||
# Server is not running, start it
|
||||
httpd = HTTPServer(server_address, MyServer)
|
||||
print("Server started")
|
||||
httpd.serve_forever()
|
||||
|
||||
def stop_server():
|
||||
global httpd
|
||||
global thread
|
||||
httpd.shutdown()
|
||||
thread.join()
|
||||
print("Server stopped")
|
||||
|
||||
def stop_server_thread():
|
||||
global thread2
|
||||
thread2 = threading.Thread(target=stop_server)
|
||||
thread2.start()
|
||||
|
||||
def register():
|
||||
global thread
|
||||
print("Hello World")
|
||||
|
||||
# Start the server on a new thread
|
||||
thread = threading.Thread(target=start_server)
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
|
||||
def unregister():
|
||||
print("Goodbye World")
|
||||
|
||||
stop_server_thread()
|
||||
global thread2
|
||||
thread2.join()
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user