# 9.2~9.6 1. 测试ACL以及其他CommandLet针对项目启动的影响。 2. 搭建大小棚用的P4 Server,并且测试。 # TODO 1. [x] 恢复P4的权限设置。 2. [x] 北京相关人员的P4工作区更换。 3. [x] Bink播放视频没有声音问题解决。 4. [ ] 传动道具继续开发完善。 5. [ ] Sequence 播放VJ逻辑解决。 6. [ ] 曹老师切换LiveArea时RootMotion 问题。(切换前需要换回enable RootMotion,并在切换后再禁用) 7. [ ] 所有手机APP部署一次FaceMask。 8. [ ] P4触发器 1. [ ] https://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.triggers.variables.html 2. [ ] https://www.cnblogs.com/itech/archive/2011/08/17/2141310.html 3. [ ] https://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.triggers.command.html 4. [ ] Python检查代码: https://gist.github.com/cmcginty/8d99e0eac345e06dc1ba 5. [ ] [创建 Perforce 表单触发器以更改多行默认描述](https://stackoverflow.com/questions/76824451/creating-a-perforce-form-trigger-to-change-default-description-with-multi-lines) https://stackoverflow.com/questions/76824451/creating-a-perforce-form-trigger-to-change-default-description-with-multi-lines 6. [ ] ## Case Sensitivity: https://portal.perforce.com/s/article/3081 7. [ ] https://swarm.workshop.perforce.com/files/guest/perforce_software/sdp/dev/Unsupported/Samples/triggers/CheckCaseTrigger.py?v=%40%3D29027 8. [ ] https://swarm.workshop.perforce.com/files/guest/perforce_software/sdp/dev/Server/Unix/p4/common/bin/triggers/CheckCaseTrigger.py?v=4 # 问题 1. 功能测试问题: 1. 因为才艺资产会影响到直播性能,所以上次贝拉生日会之后就将才艺数据删除了。一些问题需要等到生日会技术彩排时才会出现是个非常大的问题。 2. 考虑购买P4或者再搞几台电脑在新棚的工位上布置用于测试的环境。 3. 给老六设置一个测试功能清单。 2. P4 文件夹大小写的问题。 1. 使用触发器+脚本检查。 2. 人工检查。 3. ~~P4 Shelf协作方法测试。~~ 理论可行,但字节并没有使用这种方式。 4. 之后大活的实现方式。新建大地图,需要的场景手动移植到新的大地图。 ```c++ /** Adds a render graph pass to copy a region from one texture to another. Uses RHICopyTexture under the hood. * Formats of the two textures must match. The output and output texture regions be within the respective extents. */ RENDERCORE_API void AddCopyTexturePass( FRDGBuilder& GraphBuilder, FRDGTextureRef InputTexture, FRDGTextureRef OutputTexture, const FRHICopyTextureInfo& CopyInfo); /** Simpler variant of the above function for 2D textures. * @param InputPosition The pixel position within the input texture of the top-left corner of the box. * @param OutputPosition The pixel position within the output texture of the top-left corner of the box. * @param Size The size in pixels of the region to copy from input to output. If zero, the full extent of * the input texture is copied. */ inline void AddCopyTexturePass( FRDGBuilder& GraphBuilder, FRDGTextureRef InputTexture, FRDGTextureRef OutputTexture, FIntPoint InputPosition = FIntPoint::ZeroValue, FIntPoint OutputPosition = FIntPoint::ZeroValue, FIntPoint Size = FIntPoint::ZeroValue) { FRHICopyTextureInfo CopyInfo; CopyInfo.SourcePosition.X = InputPosition.X; CopyInfo.SourcePosition.Y = InputPosition.Y; CopyInfo.DestPosition.X = OutputPosition.X; CopyInfo.DestPosition.Y = OutputPosition.Y; if (Size != FIntPoint::ZeroValue) { CopyInfo.Size = FIntVector(Size.X, Size.Y, 1); } AddCopyTexturePass(GraphBuilder, InputTexture, OutputTexture, CopyInfo); } ``` SSR: SHADER_PARAMETER_RDG_TEXTURE_SRV(Texture2D, SceneColor) ```c++ FRDGTextureSRVRef InputColor = GraphBuilder.CreateSRV(FRDGTextureSRVDesc(CurrentSceneColor)); if (SSRQuality != ESSRQuality::VisualizeSSR) { if (View.PrevViewInfo.CustomSSRInput.IsValid()) { InputColor = GraphBuilder.CreateSRV(FRDGTextureSRVDesc( GraphBuilder.RegisterExternalTexture(View.PrevViewInfo.CustomSSRInput.RT[0]))); } else if (GSSRHalfResSceneColor && View.PrevViewInfo.HalfResTemporalAAHistory.IsValid()) { InputColor = GraphBuilder.CreateSRV(FRDGTextureSRVDesc( GraphBuilder.RegisterExternalTexture(View.PrevViewInfo.HalfResTemporalAAHistory))); } else if (View.PrevViewInfo.TemporalAAHistory.IsValid()) { FRDGTextureRef TemporalAAHistoryTexture = GraphBuilder.RegisterExternalTexture(View.PrevViewInfo.TemporalAAHistory.RT[0]); InputColor = GraphBuilder.CreateSRV(TemporalAAHistoryTexture->Desc.IsTextureArray() ? FRDGTextureSRVDesc::CreateForSlice(TemporalAAHistoryTexture, View.PrevViewInfo.TemporalAAHistory.OutputSliceIndex) : FRDGTextureSRVDesc(TemporalAAHistoryTexture)); }} ```