Merge remote-tracking branch 'origin/master'
@ -7,5 +7,12 @@
|
||||
|
||||
# 5.27~5.31
|
||||
1. 实现通用镜头Sequencer控制角色动画蓝图 <=> 动画切换功能。
|
||||
2. 优化EOE场景。
|
||||
2. 优化EOE场景。给其给出后续的优化方法。
|
||||
3. 给导播台添加切换RootMotion模式功能。
|
||||
4. 重新搭建p4流程,并且上传完功能与拉取测试。
|
||||
5. 完成6台手机的FaceMask部署。
|
||||
6. 帮助绑定同学使用UE5动画重定向程序实现贝拉动画=>思诺动画。
|
||||
|
||||
# 6.3~6.7
|
||||
1. 给所有同事的电脑部署p4v以及工作区。
|
||||
2. 完成3级导播台RootMotion、PostAnimBlueprint的启用/禁用切换功能。
|
@ -1,12 +1,16 @@
|
||||
# Wifi密码
|
||||
Nswl67730588
|
||||
|
||||
# NAS
|
||||
172.168.5.17
|
||||
admin
|
||||
NiceFuture0521
|
||||
|
||||
## 共享盘账号密码
|
||||
`\\172.168.5.17\NiceFutureNAS`
|
||||
用户名:dev
|
||||
密码:Develop
|
||||
`\\172.168.5.17\NSWL_TECH`
|
||||
NSWL_TECH,设置为Z盘。
|
||||
登录用户:dev
|
||||
密码:NiceFuture0521
|
||||
## Perforce
|
||||
```c++
|
||||
docker run -d --restart unless-stopped \
|
||||
@ -15,4 +19,8 @@ docker run -d --restart unless-stopped \
|
||||
blueroses/perforce-helix-p4d:2024.5
|
||||
```
|
||||
|
||||
# 文件共享
|
||||
## VPN
|
||||
- https://115.236.67.234:8443
|
||||
- loujiajie
|
||||
- ios支付账号
|
||||
- https://secloud1.ruijie.com.cn/SSLVPNClient
|
||||
|
9
02-Note/DAWA/ASoul/导播台笔记/启动逻辑.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 启动逻辑
|
||||
1. ULiveDirectorGameInstance::ParseCommandLine():解析DirectorMode、PGMMode字符串并设置。
|
||||
2. SetDirectorModeStr()
|
||||
3. SetDirectorMode()
|
||||
4. 调用蓝图事件OnDirectorModeChanged()
|
||||
|
||||
TsLiveDirectorGameInstance extends UE.LiveDirectorGameInstance
|
||||
|
||||
TsDirectorCamManagerActor.ts
|
@ -2,6 +2,19 @@
|
||||
继承关系:BP_XXX_Base -> BP_Idol_Base -> TsIdolActor -> AVCharacter -> ACharacter 。
|
||||
主要逻辑位于TsIdolActor中,文件路径为`Script/LiveDirector/Character/TsIdolActor.ts`
|
||||
|
||||
# 添加新角色流程笔记
|
||||
1. 添加一个Idol.xxx标签。
|
||||
|
||||
## 含有标签的文件
|
||||
1. Ts_HandHelodCamUI.tsx
|
||||
2. [ ] TsCharacterItem.ts `Script\LiveDirector\Character\View\TsCharacterItem.ts`
|
||||
3. [ ] TsCharacterMocapViewTmp.ts :这个是MotionProcess的UI,继承控件`/Content/UIAssets/Character/Mocap/WBP_CharacterMocapViewTmp`
|
||||
4. [ ] TsPropMocapItemTmp.ts
|
||||
5. [ ] TsDirectorConsoleCommandHandler.ts
|
||||
6. [ ] TsSpawnPointSettingItem.ts
|
||||
7. [ ] TsIdolPropManagerComponent.ts
|
||||
8. [ ] TsSimpleLevelManager.ts
|
||||
9. ~~CameraDebug.cpp ~~(这个不需求)
|
||||
# AVCharacter
|
||||
主要实现了`virtual void OnRep_AttachmentReplication() override;`,声明了若干BlueprintNativeEvent:
|
||||
- bool CanSyncRelativeTransform();
|
||||
|
@ -254,4 +254,221 @@ console.log(actor.K2_GetActorLocation().ToString());
|
||||
```
|
||||
|
||||
## UE C++访问Puerts
|
||||
通过UDynamicDelegateProxy,其成员记录了绑定的虚拟机与JS函数。
|
||||
通过UDynamicDelegateProxy,其成员记录了绑定的虚拟机与JS函数。
|
||||
|
||||
# QuickStart.ts
|
||||
```ts
|
||||
import * as UE from 'ue'
|
||||
import {$ref, $unref, $set, argv, on, toManualReleaseDelegate, releaseManualReleaseDelegate, blueprint} from 'puerts';
|
||||
|
||||
let obj = new UE.MainObject();
|
||||
|
||||
//调试器通过websocket发送断点信息,可能断点生效前脚本已经执行完备,可以通过debugger语句来主动触发断点
|
||||
//debugger;
|
||||
|
||||
//成员访问
|
||||
console.log("------------------------0----------------------------");
|
||||
console.log("before set", obj.MyString)
|
||||
obj.MyString = "PPPPP";
|
||||
console.log("after set", obj.MyString)
|
||||
|
||||
//简单类型参数函数
|
||||
console.log("------------------------1----------------------------");
|
||||
let sum = obj.Add(100, 300);
|
||||
console.log('sum', sum)
|
||||
|
||||
//复杂类型参数函数
|
||||
console.log("------------------------2----------------------------");
|
||||
obj.Bar(new UE.Vector(1, 2, 3));
|
||||
|
||||
//引用类型参数函数
|
||||
console.log("------------------------3----------------------------");
|
||||
let vectorRef = $ref(new UE.Vector(1, 2, 3))
|
||||
obj.Bar2(vectorRef);
|
||||
obj.Bar($unref(vectorRef));
|
||||
|
||||
//静态方法
|
||||
console.log("-----------------------4-----------------------------");
|
||||
let str1 = UE.JSBlueprintFunctionLibrary.GetName();
|
||||
let str2 = UE.JSBlueprintFunctionLibrary.Concat(', ', str1);
|
||||
UE.JSBlueprintFunctionLibrary.Hello(str2);
|
||||
|
||||
//扩展方法,和C#的扩展方法类似
|
||||
console.log("-----------------------5-----------------------------");
|
||||
let v = new UE.Vector(3, 2, 1)
|
||||
console.log(v.ToString());
|
||||
v.Set(8, 88, 888)
|
||||
console.log(v.ToString());
|
||||
|
||||
//静态wrap
|
||||
console.log("-----------------------6-----------------------------");
|
||||
let vec = new UE.Vector(1, 2, 3)
|
||||
console.log('vec', vec.ToString())
|
||||
vec.X = 3
|
||||
vec.Y = 2
|
||||
vec.Z = 1
|
||||
vec.Normalize(1)
|
||||
console.log('vec', vec.ToString())
|
||||
console.log(vec.Projection().ToString())
|
||||
console.log('vec', vec.ToString())
|
||||
|
||||
//枚举
|
||||
console.log("-----------------------7-----------------------------");
|
||||
obj.EnumTest(UE.EToTest.V1);
|
||||
obj.EnumTest(UE.EToTest.V13);
|
||||
|
||||
//默认值
|
||||
console.log("-----------------------8-----------------------------");
|
||||
obj.DefaultTest();
|
||||
obj.DefaultTest("hello john");
|
||||
obj.DefaultTest("hello john", 1024);
|
||||
obj.DefaultTest("hello john", 1024, new UE.Vector(7, 8, 9));
|
||||
|
||||
//定长数组
|
||||
console.log("-----------------------9-----------------------------");
|
||||
console.log("MyFixSizeArray.Num()", obj.MyFixSizeArray.Num())
|
||||
console.log("MyFixSizeArray[32]", obj.MyFixSizeArray.Get(32))
|
||||
console.log("MyFixSizeArray[33]", obj.MyFixSizeArray.Get(33))
|
||||
console.log("MyFixSizeArray[34]", obj.MyFixSizeArray.Get(34))
|
||||
obj.MyFixSizeArray.Set(33, 1000)
|
||||
console.log("MyFixSizeArray[32]", obj.MyFixSizeArray.Get(32))
|
||||
console.log("MyFixSizeArray[33]", obj.MyFixSizeArray.Get(33))
|
||||
console.log("MyFixSizeArray[34]", obj.MyFixSizeArray.Get(34))
|
||||
|
||||
//TArray
|
||||
console.log("------------------------10----------------------------");
|
||||
function printTArray<T>(arr: UE.TArray<T>)
|
||||
{
|
||||
console.log("-----Num:", arr.Num());
|
||||
for(var i=0; i < arr.Num(); i++) {
|
||||
console.log(i, ":", arr.Get(i));
|
||||
}
|
||||
}
|
||||
printTArray(obj.MyArray);
|
||||
obj.MyArray.Add(888);
|
||||
obj.MyArray.Set(0, 7);
|
||||
printTArray(obj.MyArray);
|
||||
|
||||
//TSet
|
||||
console.log("------------------------11----------------------------");
|
||||
console.log(obj.MySet.Num())
|
||||
console.log(obj.MySet.Contains("John"));
|
||||
console.log(obj.MySet.Contains("Che"));
|
||||
console.log(obj.MySet.Contains("Hello"));
|
||||
|
||||
//TMap
|
||||
console.log("------------------------12----------------------------");
|
||||
console.log(obj.MyMap.Get("John"))
|
||||
console.log(obj.MyMap.Get("Che"))
|
||||
console.log(obj.MyMap.Get("Hello"))
|
||||
obj.MyMap.Add("Che", 10)
|
||||
console.log(obj.MyMap.Get("Che"))
|
||||
|
||||
//ArrayBuffer
|
||||
console.log("-------------------------13---------------------------");
|
||||
let ab = obj.ArrayBuffer;
|
||||
let u8a1 = new Uint8Array(ab);
|
||||
for (var i = 0; i < u8a1.length; i++) {
|
||||
console.log(i, u8a1[i]);
|
||||
}
|
||||
obj.ArrayBufferTest(ab);
|
||||
obj.ArrayBufferTest(new Uint8Array(ab));
|
||||
let ab2 = obj.ArrayBufferTest(new Uint8Array(ab, 5));
|
||||
let u8a2 = new Uint8Array(ab2);
|
||||
console.log(u8a2.length);
|
||||
for (var i = 0; i < u8a2.length; i++) {
|
||||
console.log(i, u8a2[i]);
|
||||
}
|
||||
|
||||
//引擎方法
|
||||
console.log("--------------------------14--------------------------");
|
||||
//在FJsEnv启动,调用Start时传入的参数可以通过argv获取。如果是继承ue类方式,这里的argv是空的
|
||||
let gameInstance = (argv.getByName("GameInstance") as UE.GameInstance);
|
||||
let actor = UE.GameplayStatics.BeginDeferredActorSpawnFromClass(gameInstance, UE.MainActor.StaticClass(), undefined) as UE.MainActor;
|
||||
UE.GameplayStatics.FinishSpawningActor(actor, undefined);
|
||||
console.log(actor.GetName());
|
||||
console.log(actor.K2_GetActorLocation().ToString());
|
||||
|
||||
//蓝图加载
|
||||
//UE.Class.Load方式
|
||||
//let bpClass = UE.Class.Load('/Game/StarterContent/TestBlueprint.TestBlueprint_C')
|
||||
//let bpActor = UE.GameplayStatics.BeginDeferredActorSpawnFromClass(gameInstance, bpClass, undefined) as UE.Game.StarterContent.TestBlueprint.TestBlueprint_C;
|
||||
blueprint.load(UE.Game.StarterContent.TestBlueprint.TestBlueprint_C);
|
||||
const TestBlueprint_C = UE.Game.StarterContent.TestBlueprint.TestBlueprint_C; //别名
|
||||
let bpActor = UE.GameplayStatics.BeginDeferredActorSpawnFromClass(gameInstance, TestBlueprint_C.StaticClass(), undefined) as UE.Game.StarterContent.TestBlueprint.TestBlueprint_C;
|
||||
UE.GameplayStatics.FinishSpawningActor(bpActor, undefined);
|
||||
bpActor.Foo(false, 8000, 9000);
|
||||
//如果确定后续不需要使用TestBlueprint_C了,应该unload节省内存
|
||||
blueprint.unload(TestBlueprint_C);
|
||||
|
||||
//蓝图结构体加载
|
||||
//UE.UserDefinedStruct.Load方式
|
||||
//let TestStruct = UE.UserDefinedStruct.Load("UserDefinedStruct'/Game/StarterContent/TestStruct.TestStruct'");
|
||||
//let testStruct = UE.NewStruct(TestStruct) as UE.Game.StarterContent.TestStruct.TestStruct;
|
||||
blueprint.load(UE.Game.StarterContent.TestStruct.TestStruct);
|
||||
const TestStruct = UE.Game.StarterContent.TestStruct.TestStruct;
|
||||
let testStruct = new TestStruct();
|
||||
testStruct.age = 10;
|
||||
testStruct.speed = 5;
|
||||
bpActor.Bar(testStruct);
|
||||
blueprint.unload(TestStruct);
|
||||
|
||||
//蓝图枚举
|
||||
console.log("-------------------------15---------------------------");
|
||||
console.log(UE.Game.StarterContent.TestEnum.TestEnum.Blue);
|
||||
console.log(UE.Game.StarterContent.TestEnum.TestEnum.Red);
|
||||
console.log(UE.Game.StarterContent.TestEnum.TestEnum.Green);
|
||||
|
||||
//Delegate
|
||||
console.log("--------------------------16--------------------------");
|
||||
function MutiCast1(i) {
|
||||
console.warn("MutiCast1<<<", i);
|
||||
}
|
||||
|
||||
function MutiCast2(i) {
|
||||
console.warn("MutiCast2>>>", i);
|
||||
actor.NotifyWithInt.Remove(MutiCast2);//调用一次后就停掉
|
||||
}
|
||||
|
||||
actor.NotifyWithInt.Add(MutiCast1)
|
||||
actor.NotifyWithInt.Add(MutiCast2)
|
||||
|
||||
console.log("NotifyWithString.IsBound", actor.NotifyWithString.IsBound());
|
||||
console.log("NotifyWithRefString.IsBound", actor.NotifyWithRefString.IsBound());
|
||||
actor.NotifyWithRefString.Bind((strRef) => {
|
||||
//console.error("NotifyWithRefString");
|
||||
console.log("NotifyWithRefString", $unref(strRef));
|
||||
$set(strRef, "out to NotifyWithRefString");//引用参数输出
|
||||
});
|
||||
console.log("NotifyWithString.IsBound", actor.NotifyWithString.IsBound());
|
||||
console.log("NotifyWithRefString.IsBound", actor.NotifyWithRefString.IsBound());
|
||||
|
||||
actor.NotifyWithStringRet.Bind((inStr) => {
|
||||
return "////" + inStr;
|
||||
});
|
||||
|
||||
actor.NotifyWithInt.Broadcast(888999);
|
||||
let strRef = $ref("666");
|
||||
actor.NotifyWithRefString.Execute(strRef);
|
||||
console.log("out str:" + $unref(strRef));
|
||||
let retStr = actor.NotifyWithStringRet.Execute("console.log('hello world')");
|
||||
console.log("ret str:" + retStr);
|
||||
console.log("waiting native call script...........");
|
||||
|
||||
//Pass JsFunction as Delegate
|
||||
function IsJohn(str:string) : boolean {
|
||||
return str == "John";
|
||||
}
|
||||
obj.PassJsFunctionAsDelegate(toManualReleaseDelegate(IsJohn));
|
||||
//release after using
|
||||
releaseManualReleaseDelegate(IsJohn);
|
||||
|
||||
//unhandledRejection
|
||||
on('unhandledRejection', function(reason: any) {
|
||||
console.log('unhandledRejection~~~');
|
||||
});
|
||||
|
||||
new Promise(()=>{
|
||||
throw new Error('unhandled rejection');
|
||||
});
|
||||
```
|
@ -37,12 +37,15 @@ rating: ⭐
|
||||
6. [ ] ToonOutline(后处理)
|
||||
1. [ ] ID、Depth、Normal Outline
|
||||
2. [ ] SDF Outline
|
||||
1. [ ] https://www.shadertoy.com/view/4lfyR2
|
||||
3. [ ] BackFaceOutline
|
||||
7. [ ] ToonPostProcess
|
||||
1. [ ] ToonBloom
|
||||
2. [ ] 实现一波Anti-Lut。
|
||||
2. [ ] 实现一波Anti-Lut
|
||||
8. [ ] ToonRimLighting
|
||||
1. [ ] 后处理边缘光
|
||||
2. [ ] Matcap
|
||||
3. [ ] ASoul边缘光
|
||||
9. [ ] Reflection控制
|
||||
10. [ ] GI
|
||||
11. [ ] 阴影控制
|
||||
|
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222449.jpg
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222502.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222506.jpg
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222509.jpg
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222512.jpg
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222514.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222517.jpg
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222520.jpg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222523.jpg
Normal file
After Width: | Height: | Size: 124 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222526.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222528.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222531.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222533.jpg
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222536.jpg
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222538.jpg
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222541.jpg
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222545.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222547.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222550.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222553.jpg
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222555.jpg
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222557.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222559.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222603.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222606.jpg
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
03-UnrealEngine/卡通渲染相关资料/渲染功能/其他参考/丝袜参考/QQ图片20240605222608.jpg
Normal file
After Width: | Height: | Size: 109 KiB |
@ -97,6 +97,15 @@ docker push blueroses/perforce-helix-p4d:2024.5
|
||||
docker push ghcr.io/blueroses/perforce-helix-p4d:2024.5
|
||||
```
|
||||
|
||||
# IDE设置
|
||||
- VSCode - Settings - Extensions - Perforce
|
||||
- Client:工作区名称
|
||||
- Dir:工作目录
|
||||
- Password:密码
|
||||
- Port:服务器ip与端口
|
||||
- User:用户名
|
||||
- Rider - Settings - Version Control - Perforce
|
||||
- 输入Server、User、Workspace、utf8
|
||||
# Perforce
|
||||
## 参考
|
||||
- 官方文档
|
||||
@ -174,6 +183,17 @@ Example:
|
||||
4. ~~remote~~ (这个用户名无法登陆)
|
||||
5. qa
|
||||
|
||||
#### 权限管理
|
||||
`//仓库名/分支/目录/...`
|
||||
1. *
|
||||
1. read://...
|
||||
2. art:
|
||||
1. write://Project/Development/LiveDirector/Content/...
|
||||
3. director
|
||||
1. write://Project/Development/LiveDirector/Content/...
|
||||
4. qa
|
||||
1. write://Project
|
||||
|
||||
#### WorkSpace设置
|
||||
1. 编码使用:UTF8-no bom
|
||||
2. Connection–>Edit Current Workspace–>Advanced,设置为
|
||||
|