1.合成指标:宝塔与筹码(主 源码 贴 说明)
2.UE4源码剖析——光照贴图(LightMap) 之 由烘焙到渲染流程
3.Shader内实现四叉树压缩贴图
4.[3D游戏开发实践] Cocos Cyberpunk 源码解读-目录结构
合成指标:宝塔与筹码(主 源码 贴 说明)
合成指标:宝塔与筹码
合成指标旨在通过筹码分布确定宝塔线平底翻红的贴图图素有效性,并判断股价所在筹码峰的网源大小以辨别阻力与支撑。此指标结合决策曲线,码贴具有较高的材网操作性。
指标源码如下:
筹码分布定义:
DA1:当总天数超过天时,贴图图素取总天数;否则取天。网源datatohex源码
DA:在当前天数超过DA1时,码贴取0;否则取DA1。材网
HI:当前日期的贴图图素最高价的天内的历史最高价。
LO:当前日期的网源最低价的天内的历史最低价。
C1:当前价格与最高价或最低价的码贴比较结果。
GZ:对HI与LO计算对数的材网指数。
LH系列:分别计算不同GZ倍数的贴图图素V值总和。
宝塔线定义:
VAR系列:定义变量,网源判断价格变动情况,码贴包括价格上升、下降和维持不变的逻辑判断。
STICKLINE函数:根据VAR系列变量,绘制不同颜色的宝塔线。
使用方法:结合筹码分布和宝塔线平底翻红的有效性进行操作分析。指标源码提供,thinkphp开发项目源码如有需要可私信获取。
UE4源码剖析——光照贴图(LightMap) 之 由烘焙到渲染流程
在离线编辑器阶段,通过构建(Build)按钮启动光照烘焙流程,UE4引擎在构建场景光照、反射球信息、预计算静态网格可见性、构建导航网格、构建HLOD、构建流式贴图等,仅关注光照相关只构建光照(Build Lighting Only)阶段,Lightmass系统负责计算光照,Swarm分布式工具加速并分担计算任务。
Swarm初始化并启动烘焙流程,Startup阶段计算光照构建的关卡与灯光信息,统计静态几何体数据并初始化Swarm,Swarm分为协调与代理程序,负责数据导出与任务分配。AmortizedExport阶段进行分摊式数据导出,SwarmKickoff阶段Swarm全面启动,AsynchronousBuilding阶段消费者程序执行任务,短信拦截全套源码完成光照信息计算。AutoApplyingImport阶段根据配置决定是否自动导入烘焙结果,WaitingForImport与ImportRequested阶段等待导入烘焙数据,Import阶段完成数据导入,Finished阶段地图构建完成。
光照贴图合并大图过程,为每个静态几何体独立生成光照贴图后,UE4将多张贴图尽可能合并到一张大贴图中,以优化IO加载与渲染性能。合并算法简单,通过排序、读取最大尺寸限制与重新摆放光照贴图完成。
贴图像素设置与Mipmap生成,合并后的光照贴图设置像素值,为每种类型的光照贴图创建,最终将数据以真实形式存储。贴图包含SkyOcclusionTexture、AOMaterialMaskTexture、ShadowMapTexture与低分辨率系数贴图。
贴图渲染资源合并中,供暖收费系统源码判断不同几何体使用的贴图集合是否一致,优化判断效率。创建FLightmapClusterResourceInput类代表贴图集合,并统计所有集合用于判断几何体是否使用相同贴图集合。
运行时光照贴图传递到Shader流程包括UE4几何体渲染架构窥探、光照信息存储、赋值LCI与生成渲染批次、绑定Shader。FLODInfo类存储光照信息,FMeshBatchElement中设置LCI字段,FBasePassMeshProcessor绑定贴图集合到Shader。在Shader代码中访问LightmapResourceCluster变量访问贴图集合中的光照贴图。
UE4通过Swarm分布式框架、Lightmass光照系统与优化的贴图合并与传递流程,实现了高效、实时的光照计算与渲染。
以上内容详细介绍了UE4引擎中光照贴图从烘焙到渲染的完整流程,包括分布式工具、数据合并、贴图存储与Shader访问,萝莉论坛源码实现了高性能的光照计算与渲染。
Shader内实现四叉树压缩贴图
四叉树在Shader中实现压缩贴图的效率和效果令人印象深刻。通过使用x像素(实际可压缩)的RGBAFLOAT格式,可以实现高质量的静态阴影,即使是大型场景或需要极高精度的场景,也能显著减少对实时shadowmap的频繁绘制调用,节省资源。
尽管实际项目中通常采用八叉树进行体积阴影,但理解四叉树的实现方式有助于建立清晰的思路。开始时,作者从二叉树扩展到四叉树,但尝试过程中遇到了代码合并的困难,导致数据冗余。经过调整,作者采用均匀四叉树结构,其中每个节点包含x、z坐标、区域大小、子节点信息和flag状态,以表示阴影区域。
关键部分在于节点的创建和插入函数,确保节点是完满四叉树,以便通过偏移计算子节点索引。当节点大小减小到1时,表示达到最小细化级别,flag设置为1。绘制函数则递归地在阴影内绘制红色,外部绘制绿色,避免重复绘制。在合并节点时,通过检查子节点的flag值,可以有效减少重复数据。
Shader部分的解析相对简单,通过两个pass绘制屏幕阴影和主相机混合。在写入图形时,根据世界坐标和节点位置,使用flag来判断并确定查找的下一层节点。源码的详细部分在最后部分提供。
[3D游戏开发实践] Cocos Cyberpunk 源码解读-目录结构
在深入解读Cocos Cyberpunk源码之前,首先,让我们打开scene-game-start场景,启动游戏预览,进入游戏场景。点击START按钮,游戏正式开始。漫游摄像机将带你漫游整个场景,再次点击START,可以进入游戏。
在电脑端按ESC键或手机端点击设置按钮,查看操作说明。接下来,让我们浏览Cocos Cyberpunk项目的目录结构。在左下角的Assets窗口中,我们可以看到项目文件的分层。
首先,animations目录中仅包含用于场景漫游的摄像机动画文件。LightFX目录存储了光照贴图,这些是光照烘焙系统自动生成的,无需手动修改。res目录是整个游戏资源的集中地,包括动画、特效、模型、shader、UI、音效等资源。
resources目录则存放动态加载的资源,当前内容较少,随着游戏的完善,资源将会增多。scene目录包含了环境反射探针文件,与场景文件名对应的文件夹存放反射贴图。scene-development目录则包含一些用于单元测试的开发场景。
scripts目录存放所有游戏逻辑脚本,而src目录可能包含项目开发过程中的测试文件。test目录同样是用于测试的,存放的文件与项目无关。scene目录则是游戏主场景,而scene-game-start则为游戏启动场景,进行UI逻辑初始化,并加载游戏主场景。
自定义管线以编辑器扩展的形式存在,可将其移至项目中。管线对应自定义管线,通过在场景中新建节点并添加pipeline/graph/pipeline-graph.ts组件来查看可视化管线图。实时探针相关组件在反射探针节点上挂载,提供实时更新功能。
反射探针节点上的ReflectionUtils脚本组件实现了实时更新探针的逻辑,适用于需要实时探针的项目。此外,Cocos Cyberpunk还实现了SphereProjection修正,使得反射更符合物体形状。
静态遮挡剔除机制在Cocos Cyberpunk中实现,通过将可见关系预存入空间格子,渲染时直接查表获得渲染列表,极大提升效率。这一部分主要在scene场景中的static-occlusion-culling结点中处理。
机型适配策略在Cocos Cyberpunk中实现,根据设备性能选择渲染效果,确保流畅帧率。处理了不同设备上的效果调整,包括性能开关策略、机型分档策略,主要在href-settings.ts、gpu.ts和gpu-mobiles.ts文件中实现。
游戏逻辑方面,Cocos Cyberpunk包含完整的TPS游戏逻辑,init节点包含了特效、UI、对象池等节点,挂载的init.ts脚本组件确保游戏逻辑在主场景加载后持续运行。接下来,我们将对游戏逻辑相关源码进行深入解读。