1.JSMJSM开源软件
2.游戏引擎随笔 0x36:UE5.x Nanite 源码解析之可编程光栅化(下)
3.RAD威力雷达指标怎么用?RAD威力雷达指标源码?
4.汇编是源码用什么软件编的
5.CAD内核:几何建模引擎分类
6.什么是文件后缀
JSMJSM开源软件
JSM,全称为技术迷的源码首字母缩写,其SqlHelper项目自发布以来,源码深受程序开发者的源码喜爱。目前,源码已经发展到了SqlHelper 2.0的源码安卓源码库路径版本,这个工具因其高效和易用性赢得了广大技术爱好者的源码青睐。
JSM的源码官方团队在其博客上透露,未来他们计划进一步推动开源进程,源码即将分享一些大型社区和JS组件的源码源码。这对于寻求高质量开源资源的源码开发者来说,无疑是源码一个好消息。想要了解更多关于JSM的源码开源计划和技术资讯,可以访问他们的源码官方网站——技术迷官网,那里会有详细的源码项目介绍和更新动态。
游戏引擎随笔 0x:UE5.x Nanite 源码解析之可编程光栅化(下)
书接上回。
在展开正题之前,先做必要的铺垫,解释纳尼特(Nanite)技术方案中的Vertex Reuse Batch。纳尼特在软光栅路径实现机制中,将每个Cluster对应一组线程执行软光栅,每ThreadGroup有个线程。在光栅化三角形时访问三角形顶点数据,但顶点索引范围可能覆盖整个Cluster的个顶点,因此需要在光栅化前完成Cluster顶点变换。纳尼特将变换后的顶点存储于Local Shared Memory(LDS)中,进行组内线程同步,确保所有顶点变换完成,光栅化计算时直接访问LDS,实现软光栅高性能。
然而,在使用PDO(Masked)等像素可编程光栅化时,纳尼特遇到了性能问题。启用PDO或Mask时,可能需要读取Texture,根据读取的Texel决定像素光栅化深度或是否被Discard。读取纹理需计算uv坐标,而uv又需同时计算重心坐标,增加指令数量,降低寄存器使用效率,影响Active Warps数量,降低延迟隐藏能力,导致整体性能下降。复杂材质指令进一步加剧问题。
此外,当Cluster包含多种材质时,同一Cluster中的三角形被重复光栅化多次,尤其是材质仅覆盖少数三角形时,大量线程闲置,java源码赚钱浪费GPU计算资源。
为解决这些问题,纳尼特引入基于GPU SIMT/SIMD的Vertex Reuse Batch技术。技术思路如下:将每个Material对应的三角形再次分为每个为一组的Batch,每Batch对应一组线程,每个ThreadGroup有个线程,正好对应一个GPU Warp。利用Wave指令共享所有线程中的变换后的顶点数据,无需LDS,减少寄存器数量,增加Warp占用率,提升整体性能。
Vertex Reuse Batch技术的启用条件由Shader中的NANITE_VERT_REUSE_BATCH宏控制。
预处理阶段,纳尼特在离线时构建Vertex Reuse Batch,核心逻辑在NaniteEncode.cpp中的BuildVertReuseBatches函数。通过遍历Material Range,统计唯一顶点数和三角形数,达到顶点去重和优化性能的目标。
最终,数据被写入FPackedCluster,根据材质数量选择直接或通过ClusterPageData存储Batch信息。Batch数据的Pack策略确保数据对齐和高效存储。
理解Vertex Reuse Batch后,再来回顾Rasterizer Binning的数据:RasterizerBinData和RasterizerBinHeaders。在启用Vertex Reuse Batch时,这两者包含的是Batch相关数据,Visible Index实际指的是Batch Index,而Triangle Range则对应Batch的三角形数量。
当Cluster不超过3个材质时,直接从FPackedCluster中的VertReuseBatchInfo成员读取每个材质对应的BatchCount。有了BatchCount,即可遍历所有Batch获取对应的三角形数量。在Binning阶段的ExportRasterizerBin函数中,根据启用Vertex Reuse Batch的条件调整BatchCount,表示一个Cluster对应一个Batch。
接下来,遍历所有Batch并将其对应的Cluster Index、Triangle Range依次写入到RasterizerBinData Buffer中。启用Vertex Reuse Batch时,通过DecodeVertReuseBatchInfo函数获取Batch对应的三角形数量。对于不超过3个材质的Cluster,DecodeVertReuseBatchInfo直接从Cluster的VertReuseBatchInfo中Unpack出Batch数据,否则从ClusterPageData中根据Batch Offset读取数据。
在Binning阶段的AllocateRasterizerBinCluster中,还会填充Indirect Argument Buffer,将当前Cluster的Batch Count累加,用于硬件光栅化Indirect Draw的订货网页源码Instance参数以及软件光栅化Indirect Dispatch的ThreadGroup参数。这标志着接下来的光栅化Pass中,每个Instance和ThreadGroup对应一个Batch,以Batch为光栅化基本单位。
终于来到了正题:光栅化。本文主要解析启用Vertex Reuse Batch时的软光栅源码,硬件光栅化与之差异不大,此处略过。此外,本文重点解析启用Vertex Reuse Batch时的光栅化源码,对于未启用部分,除可编程光栅化外,与原有固定光栅化版本差异不大,不再详细解释。
CPU端针对硬/软光栅路径的Pass,分别遍历所有Raster Bin进行Indirect Draw/Dispatch。由于Binning阶段GPU中已准备好Draw/Dispatch参数,因此在Indirect Draw/Dispatch时只需设置每个Raster Bin对应的Argument Offset即可。
由于可编程光栅化与材质耦合,导致每个Raster Bin对应的Shader不同,因此每个Raster Bin都需要设置各自的PSO。对于不使用可编程光栅化的Nanite Cluster,即固定光栅化,为不降低原有性能,在Shader中通过两个宏隔绝可编程和固定光栅化的执行路径。
此外,Shader中还包括NANITE_VERT_REUSE_BATCH宏,实现软/硬光栅路径、Compute Pipeline、Graphics Pipeline、Mesh Shader、Primitive Shader与材质结合生成对应的Permutation。这部分代码冗长繁琐,不再详细列出讲解,建议自行阅读源码。
GPU端软光栅入口函数依旧是MicropolyRasterize,线程组数量则根据是否启用Vertex Reuse Batch决定。
首先判断是否使用Rasterizer Binning渲染标记,启用时根据VisibleIndex从Binning阶段生成的RasterizerBinHeaders和RasterizerBinData Buffer中获取对应的Cluster Index和光栅化三角形的起始范围。当启用Vertex Reuse Batch,这个范围是Batch而非Cluster对应的范围。
在软光栅中,每线程计算任务分为三步。第一步利用Wave指令共享所有线程中的Vertex Attribute,线程数设置为Warp的Size,目前为,每个Lane变换一个顶点,最多变换个顶点。由于三角形往往共用顶点,java post源码直接根据LaneID访问顶点可能重复,为确保每个Warp中的每个Lane处理唯一的顶点,需要去重并返回当前Lane需要处理的唯一顶点索引,通过DeduplicateVertIndexes函数实现。同时返回当前Lane对应的三角形顶点索引,用于三角形设置和光栅化步骤。
获得唯一顶点索引后,进行三角形设置。这里代码与之前基本一致,只是写成模板函数,将Sub Pixel放大倍数SubpixelSamples和是否背面剔除bBackFaceCull作为模板参数,通过使用HLSL 语法实现。
最后是光栅化三角形写入像素。在Virtual Shadow Map等支持Nanite的场景下,定义模板结构TNaniteWritePixel来实现不同应用环境下Nanite光栅化Pipeline的细微差异。
在ENABLE_EARLY_Z_TEST宏定义时,调用EarlyDepthTest函数提前剔除像素,减少后续重心坐标计算开销。当启用NANITE_PIXEL_PROGRAMMABLE宏时,可以使用此机制提前剔除像素。
最后重点解析前面提到的DeduplicateVertIndexes函数。
DeduplicateVertIndexes函数给每个Lane返回唯一的顶点索引,同时给当前Lane分配三角形顶点索引以及去重后的顶点数量。
首先通过DecodeTriangleIndices获取Cluster Local的三角形顶点索引,启用Cluster约束时获取所有Lane中最小的顶点索引,即顶点基索引。将当前三角形顶点索引(Cluster Local)减去顶点基索引,得到相对顶点基索引的局部顶点索引。
接下来生成顶点标志位集合。遍历三角形三个顶点,将局部顶点索引按顺序设置到对应位,表示哪些顶点已被使用。每个标志位是顶点的索引,并在已使用的顶点位置处设置为1。使用uint2数据类型,最多表示个顶点位。
考虑Cluster最多有个顶点,为何使用位uint2来保存Vertex Mask而非位?这是由于Nanite在Build时启用了约束机制(宏NANITE_USE_CONSTRAINED_CLUSTERS),该机制保证了Cluster中的三角形顶点索引与当前最大值之差必然小于(宏CONSTRAINED_CLUSTER_CACHE_SIZE),因此,生成的Triangle Batch第一个索引与当前最大值之差将不小于,并且每个Batch最多有个唯一顶点,顶点索引差的最大值为,仅需2个位数据即可。约束机制确保使用更少数据和计算。
将所有Lane所标记三个顶点的Vertex Mask进行位合并,得到当前Wave所有顶点位掩码。通过FindNthSetBit函数找出当前Lane对应的源码泄露 svnMask索引,加上顶点基索引得到当前Lane对应的Cluster Local顶点索引。
接下来获取当前Lane对应的三角形的Wave Local的三个顶点索引,用于后续通过Wave指令访问其他Lane中已经计算完成的顶点属性。通过MaskedBitCount函数根据Vertex Mask以及前面局部顶点索引通过前缀求和得到当前Lane对应的Vertex Wave Local Index。
最后统计Vertex Mask所有位,返回总计有效的顶点数量。
注意FindNthSetBit函数,实现Lane与顶点局部索引(减去顶点基索引)的映射,返回当前Lane对应的Vertex Mask中被设置为1的位索引。如果某位为0,则返回下一个位为1的索引。如果Mask中全部位都设置为1,则实际返回为Lane索引。通过二分法逐渐缩小寻找索引范围,不断更新所在位置,最后返回找到的位置索引。
最后,出于验证目的进行了Vertex Reuse Batch的性能测试。在材质包含WPO、PDO或Mask时关闭Vertex Reuse Batch功能,与开启功能做对比。测试场景为由每颗万个三角形的树木组成的森林,使用Nsight Graphics进行Profiling,得到GPU统计数据如下:
启用Vertex Reuse Batch后,软光栅总计耗时减少了1.毫秒。SM Warp总占用率有一定提升。SM内部工作量分布更加均匀,SM Launch的总Warp数量提升了一倍。长短板Stall略有增加,但由于完全消除了由于LDS同步导致的Barrier Stall,总体性能还是有很大幅度的提升。
至此,Nanite可编程光栅化源码解析讲解完毕。回顾整个解析过程,可以发现UE5团队并未使用什么高深的黑科技,而是依靠引擎开发者强悍的工程实现能力完成的,尤其是在充分利用GPU SIMT/SIMD机制榨干机能的同时,保证了功能与极限性能的实现。这种能力和精神,都很值得我们学习。
RAD威力雷达指标怎么用?RAD威力雷达指标源码?
RAD威力雷达指标怎么用:
1、白线上穿黄线为金叉,表示强势,为买入建仓机会。
2、白线下穿黄线为死叉,表示弱势,为卖出了结机会。
3、白色指标线向上的趋势越陡,表示其强势股的形式越强。
4、当个股有除权情况时,请先使用复权功能,然后进行分析,这样可以避免指标失真。
RAD威力雷达指标源码:
SM:=(OPEN+HIGH+CLOSE+LOW)/4;
SMID:=MA(SM,D);
IM:=(INDEXDATA("1a",&OPEN)+INDEXDATA("1a",&HIGH)+INDEXDATA("1a",&LOW)+INDEXDATA("1a",&CLOSE))/4;
IMID:=MA(IM,D);
SI1:=(SMID-REF(SMID,1))/SMID;
II:=(IMID-REF(IMID,1))/IMID;
RADER1:SUM((SI1-II)*2,S)*;
RADERMA:SMA(RADER1,M,1);
IF(CODETYPE>0)
{
RAD="该指标只用于指数。";
}
汇编是用什么软件编的
汇编语言编程的软件工具概览 学习并编写汇编语言,需要借助特定的软件工具。这些工具主要包括汇编器,它们能够将汇编语言代码转化为计算机能够执行的机器语言。 1. 汇编器的角色与种类 汇编语言通常使用一种名为汇编器的软件来进行编译。汇编器是一种计算机程序,其核心功能是将汇编语言写的源代码转换为机器语言代码,使得计算机的中央处理器(CPU)能够理解和执行。在众多的汇编器中,MASM、NASM和FASM是较为知名且常用的工具。 * MASM(Macro Assembler):这是微软公司提供的一款用于x架构的汇编语言工具。其出色的宏支持和全面的条件编译指令,使其在微软操作系统底层开发中占有重要地位。特别是对于初学者来说,MASM的易用性和灵活性是理想的选择。 * NASM(Netwide Assembler):这是一款开源的x架构汇编器,支持多种输出格式,并且能够在几乎所有的x平台上运行,包括Linux, Mac OS X和Windows。它的跨平台性和强大的宏处理器使其在专业级的汇编编程中备受青睐。 * FASM(Flat Assembler):同样针对x架构,FASM以体积小巧、代码速度快及源码公开等特点受到用户喜爱。它支持多种操作系统,包括DOS、Windows和Linux等。 2. 汇编语言的使用流程 使用这些汇编器编写和编译汇编语言的流程大致如下: 1. 编辑:使用编辑软件(如EDIT.EXE或记事本)形成源程序(.ASM),例如LX.ASM。 2. 汇编:使用汇编程序(如MASM.EXE)对源程序进行编译,形成目标文件(.OBJ)。 3. 连接:使用连接程序对目标程序进行连接,形成可执行文件(.EXE)。 4. 执行与调试:如果程序需要在屏幕上显示结果,则直接执行可执行文件。之后,可以使用调试程序(如DEBUG.EXE)对程序进行调试。 3. 集成汇编工具 现在,有许多集成化的汇编工具,如visualasm,它们提供可视化的环境,使得汇编语言的编写和使用更为便捷。 4. 编译程序与汇编程序的分类 从软件分类的角度来看,编译程序和汇编程序属于系统软件。系统软件的主要功能是提高程序设计者的工作效率、方便用户使用、并对计算机进行管理。而只有为解决某一特殊问题而编写的程序才能被称为应用软件。 综上所述,汇编语言的编写与编译离不开各类汇编器的支持,这些工具为程序员提供了从源代码到机器语言的桥梁。希望以上内容能够帮助您更好地理解汇编语言的编程过程及其相关软件工具的作用。CAD内核:几何建模引擎分类
几何建模引擎是3D建模系统的核心,用于精确表示产品三维形状并管理模型。内核的价值在于为应用程序提供功能,CAD系统通过图形用户界面向用户提供内核功能的访问。世界上有几十个知名的数学内核,包括来自EDS的Parasolid、Spatial Corp的ACIS、Matra Datavision的Open CASCADE,以及Thinkdesign、VX Overdrive、KOMPAS-3D和CrownCAD等。
使用相同的内核,产品的功能和限制相似,主要区别在于用户界面。几何建模引擎分为三种类型:许可、专有和源代码形式提供。
许可内核由公司开发和维护,授权给其他CAD系统的用户。例如,Parasolid和ACIS内核广泛用于CAD,其中Parasolid是Unigraphics的核心,ACIS由Dassault Systemes开发。这两个内核在实体建模、混合建模和广义网格建模方面提供技术。
专有内核由CAD开发人员开发和维护,专门用于其应用程序,提供更深入的集成。例如,Thinkdesign和VX Overdrive内核分别作为Think3和Varimetrix产品的基础。
源代码形式的内核允许用户拥有内核的源代码,便于定制。Open CASCADE和SMLib是著名的开源内核,前者免费,后者需要付费。
使用购买的核心成本包括在产品价格中,购买格式的导入导出模块需要额外费用。自定义内核成本较低,管理更灵活。购买核心并不意味着绝对可靠性,错误可以通过修改内核得到纠正。
CAD开发人员选择内核时需考虑成本、功能和集成深度。许可内核提供了广泛的兼容性和功能,但成本较高。专有内核集成度高,适用于特定需求,成本较低。源代码内核允许定制,但维护成本较高。选择哪种内核取决于CAD系统的特定需求和预算。工业公司购买CAD时,内核能力、打磨程度和成本都应考虑。多数情况下,企业会购买几个高级CAD工作站和数十个较便宜的许可证来满足不同设计需求。在某些情况下,所有工作场所都配备高级CAD可能在俄罗斯不可行。
什么是文件后缀
文件的后缀名,即文件的扩展名,是操作系统用来标志文件类型的一种机制,是一个类型的元数据。举例:“小说.txt”的文件名中,小说是主文件名,txt为扩展名(文本、外语全称:Text),表示这个文件是一个纯文本文件。
一个文件可以有或没有扩展名。对于打开文件操作,没有扩展名的文件需要选择程序去打开它,有扩展名的文件会自动用设置好的程序去尝试打开,文件扩展名是一个常规文件的构成部分,但一个文件并不一定需要一个扩展名。
扩展资料
常用的文件扩展名
1、doc/docx
表示:Word文档,用微软的word等软件打开。
2、wps
表示:Wps文字编辑系统文档,用金山公司的wps软件打开。
3、xls/xlsx
表示:Excel电子表格,用微软的excel软件打开。
4、ppt/pptx
表示:Powerpoint演示文稿,用微软的powerpoint等软件打开。
5、rar
表示:WinRAR压缩文件,用WinRAR等打开 。
6、pdf
表示:可移植文档格式,用用pdf阅读器打开(比如Acrobat)、用pdf编辑器编辑
7、dwg
表示:CAD图形文件,用AutoCAD等软件打开。
8、exe
表示:可执行文件、可执行应用程序,是Windows视窗操作系统。
百度百科—文件扩展名
扩展名为“.s”的是什么文件?起什么作用?
扩展名为".s"的文件类型多种多样,它们在不同的软件和系统中扮演着各种角色。以下是部分".s"文件的常见用途和类型:S:通常指的是汇编源代码文件,用于编写和编译程序。
S3M, Scream Tracker v3声音模块文件:音乐制作中的文件格式,支持音效编辑和播放。
SAV:游戏保存文件,用于存储游戏进度和个人数据。
SB:原始带符号字节数据,常见于一些特定的编程或设备文件中。
SBK, SBL: 分别是Soundfont银行文件和Shockwave Flash对象文件,与音频和多媒体相关。
SC2, SC3: 游戏文件,如Microsoft Schedule+7和SimCity 的游戏存档。
SCH, SCI, SCN, SCP, SCR: 分别对应不同的文件格式,如命令文件、本地文件格式、MIDI样本文件、拨号网络脚本和屏幕保护文件。
SCD, SD, SD2, SDX: 与声音设计和数据库相关的文件格式。
SDF: 系统数据文件格式,用于特定的旧系统如Unisys。
SRC: 各种压缩或自解压档案,如RAR档案。
SHB, SHG, SHP, SHS: 演示文稿、热点图、3D模型和恶意软件文件。
SHTML: 含有服务器端包括的HTML文件,用于动态内容。
SHW: Corel Show演示文稿。
SIG: 符号文件,用于编码和解码。
SIT, SIZ: 分别是Mac StuffIt档案文件和Oracle 7配置文件。
SKA, SKL: PGP密钥和Macromedia导演资源文件。
SL: PACT布局扩展名。
SLB, SLD: AutoCAD Slide库和文件格式。
SLK: 符号链接文件。
SM3: DataCAD标志文件。
SMP: Samplevision格式抽样文件。
SND: 声音文件,支持多种平台和格式。
SNDT: Sndtool声音文件。
SOU: SB Studio Ⅱ声音文件。
SPL: Shockwave Flash对象和抽样文件。
SPPACK: 声音抽样包。
SPRITE: Acorn位图格式。
SQC, SQL, SQR: 结构化查询语言文件,用于数据库和脚本编程。
SSDO1, SSD: SAS数据集合和数据库文件。
SSF: 可用的电子表格文件。
ST: Atari ST磁盘映像文件。
STM: HTML文件的简化形式,可能包含服务器端包括。
STR: 屏幕保护文件。
STY: Ventura Publisher的风格表。
SVX: Amiga声音文件格式。
SW: 带符号字节数据,位。
SWF: Shockwave Flash对象。
SWP: DataCAD交换文件。
SYS: 系统文件。
SYW: Yamaha SY系列波形文件。