diff --git a/.obsidian/plugins/various-complements/histories.json b/.obsidian/plugins/various-complements/histories.json index 1d31b03..459a169 100644 --- a/.obsidian/plugins/various-complements/histories.json +++ b/.obsidian/plugins/various-complements/histories.json @@ -1 +1 @@ -{"582020846":{"582020846":{"currentFile":{"count":1,"lastUpdated":1727792069567}}},"实现了一个在屏幕空间宽度恒定的":{"实现了一个在屏幕空间宽度恒定的":{"currentFile":{"count":1,"lastUpdated":1728700795488}}},"TsDirectorCamManagerActor":{"TsDirectorCamManagerActor":{"currentFile":{"count":1,"lastUpdated":1729139925413}}},"Bloom":{"Bloom":{"currentFile":{"count":1,"lastUpdated":1729490733473}}},"FBloomFinalizeApplyConstantsCS":{"FBloomFinalizeApplyConstantsCS":{"currentFile":{"count":1,"lastUpdated":1729584275683}}},"解决NaiLin高跟":{"解决NaiLin高跟":{"currentFile":{"count":1,"lastUpdated":1729587089926}}},"优化项目举例,参与多个项目。":{"优化项目举例,参与多个项目。":{"currentFile":{"count":1,"lastUpdated":1729696025968}}},"制作各种编辑器工具":{"制作各种编辑器工具":{"currentFile":{"count":1,"lastUpdated":1729696038138}}},"RigidBodyIndex":{"RigidBodyIndex":{"currentFile":{"count":1,"lastUpdated":1730280351906}}}} \ No newline at end of file +{"实现了一个在屏幕空间宽度恒定的":{"实现了一个在屏幕空间宽度恒定的":{"currentFile":{"count":1,"lastUpdated":1728700795488}}},"TsDirectorCamManagerActor":{"TsDirectorCamManagerActor":{"currentFile":{"count":1,"lastUpdated":1729139925413}}},"Bloom":{"Bloom":{"currentFile":{"count":1,"lastUpdated":1729490733473}}},"FBloomFinalizeApplyConstantsCS":{"FBloomFinalizeApplyConstantsCS":{"currentFile":{"count":1,"lastUpdated":1729584275683}}},"解决NaiLin高跟":{"解决NaiLin高跟":{"currentFile":{"count":1,"lastUpdated":1729587089926}}},"优化项目举例,参与多个项目。":{"优化项目举例,参与多个项目。":{"currentFile":{"count":1,"lastUpdated":1729696025968}}},"制作各种编辑器工具":{"制作各种编辑器工具":{"currentFile":{"count":1,"lastUpdated":1729696038138}}},"RigidBodyIndex":{"RigidBodyIndex":{"currentFile":{"count":1,"lastUpdated":1730280351906}}},"IOS&Android Engine Package":{"IOS&Android Engine Package":{"internalLink":{"count":1,"lastUpdated":1730702690372}}}} \ No newline at end of file diff --git a/01-Diary/周小结/2024.11.md b/01-Diary/周小结/2024.11.md new file mode 100644 index 0000000..f40a81f --- /dev/null +++ b/01-Diary/周小结/2024.11.md @@ -0,0 +1,4 @@ +# 11.4~11.8 +1. 给心仪的代码添加闪光效果,并且调整频率与指定音乐相同。 +2. 给NaiLin、BeiLa、JiaRan的夏日服制作IKRig以及重定向资产。 +3. 解决道具Spot会被剔除的问题。 \ No newline at end of file diff --git a/03-UnrealEngine/Gameplay/Gameplay/RuntimeLoadStaticMesh.md b/03-UnrealEngine/Gameplay/Gameplay/RuntimeLoadStaticMesh.md new file mode 100644 index 0000000..c1e771d --- /dev/null +++ b/03-UnrealEngine/Gameplay/Gameplay/RuntimeLoadStaticMesh.md @@ -0,0 +1,45 @@ +--- +title: Untitled +date: 2024-11-05 16:57:23 +excerpt: +tags: +rating: ⭐ +--- +# 前言 +- StaticMesh:https://zhuanlan.zhihu.com/p/702589732 +- 其他代码 + - [RuntimeStaticMeshImporter](https://github.com/RianeDev/RuntimeStaticMeshImporter) + - [RuntimeMeshLoader](https://github.com/Chrizey91/RuntimeMeshLoader) + +## 相关函数 +```text +bool FSceneImporter::ProcessMeshData(FAssetData& MeshData) +UStaticMesh::BuildFromMeshDescription +``` + +```c++ +FDatasmithMeshElementPayload MeshPayload; +{ + if (!Translator->LoadStaticMesh(MeshElement, MeshPayload)) + { // If mesh cannot be loaded, add scene's resource path if valid and retry + bool bSecondTrySucceeded = false; + + if (FPaths::DirectoryExists(SceneElement->GetResourcePath()) && FPaths::IsRelative(MeshElement->GetFile())) + { MeshElement->SetFile( *FPaths::Combine(SceneElement->GetResourcePath(), MeshElement->GetFile()) ); + bSecondTrySucceeded = Translator->LoadStaticMesh(MeshElement, MeshPayload); + } + if (!bSecondTrySucceeded) + { // #ueent_datasmithruntime: TODO : Update FAssetFactory + ActionCounter.Add(MeshData.Referencers.Num()); + FAssetRegistry::UnregisteredAssetsData(StaticMesh, SceneKey, [](FAssetData& AssetData) -> void + { + AssetData.AddState(EAssetState::Completed); + AssetData.Object.Reset(); + }); + UE_LOG(LogDatasmithRuntime, Warning, TEXT("CreateStaticMesh: Loading file %s failed. Mesh element %s has not been imported"), MeshElement->GetFile(), MeshElement->GetLabel()); + + return true; + } }} + +TArray< FMeshDescription >& MeshDescriptions = MeshPayload.LodMeshes; +``` \ No newline at end of file diff --git a/03-UnrealEngine/LevelScene/World Partition(世界分区).md b/03-UnrealEngine/LevelScene/WorldPartition(世界分区).md similarity index 100% rename from 03-UnrealEngine/LevelScene/World Partition(世界分区).md rename to 03-UnrealEngine/LevelScene/WorldPartition(世界分区).md diff --git a/03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md b/03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md index a8b0583..5dceb14 100644 --- a/03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md +++ b/03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md @@ -43,6 +43,11 @@ https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest ## Dockerhub Token dckr_pat_mWBh2SVqaaIU1QuAzSngrt8H6Do +# IOS +- 38100977@qq.com +- bluerose_us@qq.com +- loujiajie2@sina.com + # 路由器DDNS https://blueroses.asuscomm.com:8443/Main_Login.asp diff --git a/04-ComputerGraphics/Assimp/Assimp使用笔记.md b/04-ComputerGraphics/Assimp/Assimp使用笔记.md new file mode 100644 index 0000000..fea4e6e --- /dev/null +++ b/04-ComputerGraphics/Assimp/Assimp使用笔记.md @@ -0,0 +1,57 @@ +# 前言 +- https://github.com/assimp/assimp +- 知乎文章 + - Assimp与模型渲染的故事:模型加载,骨骼蒙皮动画:https://zhuanlan.zhihu.com/p/559637598 + - Assimp库的编译总结:https://zhuanlan.zhihu.com/p/533138560 + +# 数据结构 +![[assimp_structure.png]] + +|Struct|Content| +|---|---| +|aiScene|mRootNode,mMeshes,mMaterials,mAnimations,mTextures,mLights,mCameras| +|aiNode|mTransformation,mParent,mChildren,mMeshes(索引)| +|aiMesh|mVertices,mNormals,mTangents,mBitangents,mColors,mTextureCoords,mFaces,mBones,mAnimMeshes| +|aiFace|mIndices| +|aiMaterial|GetTextureCount(...),GetTexture(...)| +|aiAnimation|mDuration,mTicksPerSecond,mChannels,mMeshChannels| +|aiNodeAnim|mNodeName,mPositionKeys,mRotationKeys,mScalingKeys,mPostState| +## Model类 +## Scene(场景) +- mRootNode:[根节点](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E6%A0%B9%E8%8A%82%E7%82%B9&zhida_source=entity),是整个场景图的起点,包含了其他所有[子节点](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E5%AD%90%E8%8A%82%E7%82%B9&zhida_source=entity)的引用。 +- mMeshes[]:包含了场景中所有的网格(Mesh)数据的数组。 +- mMaterials[]:包含了场景中所有材质的数组。 + +## Node(节点) +- Root Node:顶层的根节点,可以有多个子节点。 +- Child Node:子节点,可以进一步包含更多的子节点和网格。 +- mChildren[]:[子节点数组](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E5%AD%90%E8%8A%82%E7%82%B9%E6%95%B0%E7%BB%84&zhida_source=entity)。 +- mMeshes[]:当前节点所含网格的数组。 +- 每个节点都可能包含对其他子节点的引用和/或对一个或多个网格的引用。这构成了一个[树状结构](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84&zhida_source=entity),用于表示3D模型的层次和组成。 +## Mesh(网格) +- mVertices[]:存储网格顶点的数组。 +- mNormals[]:存储顶点法线的数组,用于光照和渲染。 +- mTextureCoords[]:存储[纹理坐标](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E7%BA%B9%E7%90%86%E5%9D%90%E6%A0%87&zhida_source=entity)的数组,用于将[纹理映射](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E7%BA%B9%E7%90%86%E6%98%A0%E5%B0%84&zhida_source=entity)到模型上。 +- mFaces[]:存储面(由顶点构成)的数组。 +- mMaterialIndex:材质索引,用于从场景中的材质数组mMaterials[]中引用对应的材质。 + +## Face(面) +- mIndices[]:存储构成面的顶点索引的数组。 + +# 载入文件 +```c++ +mScenePtr = mImporter.ReadFile(file, + aiProcess_Triangulate | + aiProcess_MakeLeftHanded | + aiProcess_CalcTangentSpace | + aiProcess_GenSmoothNormals | + aiProcess_OptimizeMeshes); +``` + +## 枚举说明 +- aiProcess_Triangulate:非三角形几何图元,主动拆分成三角形。 +- aiProcess_MakeLeftHanded:转换成左手坐标系,一般用于Direct3D渲染程序。 +- aiProcess_CalcTangentSpace: +- aiProcess_GenSmoothNormals:生成平滑法线。 +- aiProcess_OptimizeMeshes:优化模型,减少模型数量? + diff --git a/07-Other/简历/方向.md b/07-Other/简历/方向.md index ab1fef6..e205626 100644 --- a/07-Other/简历/方向.md +++ b/07-Other/简历/方向.md @@ -55,7 +55,7 @@ 1. Stat Unit、FPS。 2. RenderDoc + ProfileGPU。 3. UnrealInsight。 - 10. 程序完全没有问题,语言方面,修改渲染管线。说明现在正在开发的卡通渲染引擎与之后的路线图。 + 3. 程序完全没有问题,语言方面,修改渲染管线。说明现在正在开发的卡通渲染引擎与之后的路线图。 1. 接手ASoul项目。 2. c++/Puerts/蓝图项目。20% / 70% / 10% 2. 卡通渲染引擎。***TODO*** @@ -83,12 +83,12 @@ - ToonDiffusion:对场景亮部进行降采样,之后将亮度信息叠加到Toon物体的暗部上。 - Anti-ToneMapping - 延迟 + 前向混合管线(原神) - 1. 其他技术栈。Nodejs系列的前后端APP;Qt、Pyside2; - 11. 手游美术效果研发 + 4. 其他技术栈。Nodejs系列的前后端APP;Qt、Pyside2; + 4. 手游美术效果研发 - 重点就是跟项目侧对齐下探机型,以及根据最低机型来做效果对齐。 - 针对机型分档提供一套美术效果方案,最高开哪些特性,中档开哪些特性,低档开哪些特性。跟项目定好的规范再去框技术方案。之后再拆分每个模块细节,进行深入分析。 - 评估很多相对再PC上表现效果好的技术,能不能在进行一些算法简化后,移植到移动端。 - 12. 手游平台的优化 + 5. 手游平台的优化 - 根据项目类型不同,侧重不同的优化方向: - 大世界项目,主要针对场景性能优化。比如定制距离加载策略、场景HLOD、植被按距离控制WPO等。 - 箱庭类ARPG项目,会着重于战斗与表演效果。所以会集中于材质、特效方面的优化 @@ -121,18 +121,57 @@ 3. 边缘光:基于后处理的RimLighting。 4. 阴影偏移方案: 5. 其他方案: - 1. 角色捏人、表情、 - 2. 配色方案。 + 1. 角色捏人、表情 + 1. Girls Band cry + 2. 蓝色协议使用全骨骼的表情方案: + 1. 眉毛37个、眼睛42个、 嘴巴53个、轮廓/鼻子18个 + 2. 捏脸 + - 骨骼 + - BlendShape + - 贴花 + - 参考游戏 + - DAZ3D + - 恋爱活动2 + - Honey Select + - VAM + 1. 身体分成多个部分,且每个部分采用公共骨骼。 + - 部位 + - 帽子 + - 后头部 + - 头发 + - 脸 + - 手 + - 上半身 + - 下半身 + - 脚 + - 内衣 + - 身体数据,使用自定义的数据资产进行管理(ID)。 + 1. 身体部分与数值偏移 + 1. 子组件 + 1. 数值类型 + 2. 骨骼ID + 3. 默认值 + 4. 最小最大值 + - 衣服 + 1. 使用骨骼来控制衣服长短? + - 头发 + 1. 为同一个发型制作多种头发来适配不同的帽子 + 2. KawaiiPhysics + - 表情 + 1. 25种基础表情 + 2. 嘴部的轮廓是双层的,以此来实现漫画中的效果。 + 3. 脸部调整了法线,来解决面部阴影问题。 2. CEDEC 2023 1. BMG Dream。 3. CEDEC 2024 1. 学院偶像大师分享。 2. 次世代 NPR の輪郭線表現 4. 部分分享没有公开实属可惜,比如2022的异度神剑3没有及时下载,视频没了,还好知乎有人分享心得。 - 2. 根据需求查看gdc的文章。 + 6. 根据需求查看gdc的文章。 1. FastSSS。 2. GDC 2004 Marschner Hair paper的Kajiya-Kay Model -6. 最后问问题 +6. 捏脸 +7. 最后问问题 1. 如果我没有通过面试,那可能是什么方面的原因?***TODO是否可以以及有必要问?*** diff --git a/08-Assets/Images/ImageBag/Rendering/Direct3D12/assimp_structure.png b/08-Assets/Images/ImageBag/Rendering/Direct3D12/assimp_structure.png new file mode 100644 index 0000000..b93ef0d Binary files /dev/null and b/08-Assets/Images/ImageBag/Rendering/Direct3D12/assimp_structure.png differ