1.如何防止Unity3D代码被反编译?
2.3d打印网站有哪些可以推荐的码论?
3.Unity3D MMORPG核心技术:AOI算法源码分析与详解
4.[技术随笔]🛠🛠从源码安装Pytorch3D详细记录及学习资料
5.3d稀疏卷积——spconv源码剖析(三)
如何防止Unity3D代码被反编译?
如果你没有统一的源代码,我认为这个问题基本上没有解决。码论它可能会下降,码论而IL iOS平台是码论有用的在AOT,但基本上没有其他平台。码论另一个想法是码论微源码裂变包装,但至少我没有在移动终端上测试过,码论但基本上是码论迈出了一步。另一种方法是码论在本地插件中编写一些关键代码,但我不认为这是码论使用Unity的优点,所以我并没有真正推荐它。码论
如果一个游戏涉及到网络,码论另一个有效的码论解决方案是把逻辑放在服务器端,基本上不信任客户端的码论游戏逻辑层。客户机只负责发送特定操作。码论我没有看到任何有效的非网络游戏解决方案。人们认为,不要花太多的力气折腾,人总是要想办法让你总有办法。即使不使用Unity,真正的所有者也是本机二进制文件。
如果一个游戏涉及到网络,另一个有效的解决方案是把逻辑放在服务器端,基本上不信任客户端的游戏逻辑层。客户机只负责发送特定操作。wm concat源码我没有看到任何有效的非网络游戏解决方案。人们认为,不要花太多力气,人们总是设法为你找到出路。即使不使用Unity,真正的所有者也是本机二进制文件。
直接使用GDB转储内存运行Android,不管你在内存末端加密的布局是相同的,但都是软的。因此,这是一个本机插件(麻烦),或者简单地加密和过滤%个新的解决方案。
3d打印网站有哪些可以推荐的?
在探索3D打印世界时,寻找合适的资源尤为重要。以下是一些知名的3D打印模型下载网站,供爱好者们参考: 1. Thingiverse作为世界上最大的可3D打印模型库,Thingiverse由MakerBot公司运营。它自年上线以来,已经成为3D设计社区的重要一员。在这里,用户可以自由上传、分享和下载3D打印文件,且完全免费。截至年底,ce c 源码Thingiverse的模型数量已经超过万个,下载量更是高达2亿次。
2. YouMagine虽然规模不及Thingiverse,但YouMagine隶属于Ultimaker,同样提供数百个免费的STL文件,涵盖了Ultimaker 2升级部件、玩具和家庭用品等。独特之处在于,它致力于保护3D设计师的权益,于年发布了针对3D打印对象的开放源代码许可,名为3DPL。
3. Pinshape作为3D内容世界的一匹黑马,Pinshape汇聚了超过,位3D设计师和创意者。这里既有免费的STL文件,也有需要付费的资源。设计师可以自主选择出售或分享其3D设计,并通过与3DPrinterOS的合作提供“流”服务,使用户无需下载文件即可编辑、切片和打印设计。Pinshape还支持OBJ文件和包含这些类型的压缩文件ZIP。
4. My Mini Factory自称为“世界上最大的精品3D对象下载平台”,MyMiniFactory以提供精选的免费3D打印STL文件著称。网站上的每个模型都经过社区成员的测试,确保可以被3D打印。proxy 源码分析除了免费资源,用户还可以请求专业的3D设计师为其设计特定模型。隶属于iMakr,后者是一家在线3D打印机销售商,并在伦敦市中心设有世界最大的3D打印机专业卖场。
5. CultsCults3D是法国最大的在线3D打印市场,提供收费和免费的高质量STL文件。网站支持法文、英文和西班牙文,旨在建立一个3D打印爱好者的社交网络,用户可以关注设计师、与其他建模者联系和保存最喜爱的3D模型。
6. GrabCAD作为由专业机械工程师建立的3D打印社区,GrabCAD不仅仅是一个资源库,它帮助工程师更快地创建产品,无需重新设计基本部件。在被Stratasys公司以1亿美元收购后,该社区拥有超过万工程师和1,,个免费CAD模型。
7. Autodesk D作为全球最大的CAD软件厂商,Autodesk拥有自己的3D建模网站。Autodesk D提供超过,个免费的STL文件,并为入门级3D设计爱好者提供了一系列3D建模应用软件。此外,Autodesk D允许用户浏览、引流iapp源码下载或编辑模型,并上传自己的作品。
8. 3Dagogo由一群对3D打印充满热情的黑客和设计师运营,3Dagogo提供免费和付费的3D模型购买和出售服务。网站上的每一个上传的3D设计都经过3D打印验证,甚至包含打印结果的。3Dagogo也是AstroPrint的开发商,后者提供基于云计算的3D打印软件和服务平台。
9. 3DShook3DShook提供免费试用模型和按需打印的订阅服务,适合经常需要3D打印新项目的用户。它按年度、月度、商业和教育用户分类,订阅费用从美元到美元不等。网站包含多个可3D打印的STL文件,分类细致,覆盖多种不同的类别。
. Instructables虽然Instructables的内容不仅仅是3D模型,但它是每位创客的必去之地,拥有成千上万的DIY项目教程。对于复杂的3D打印项目,设计者不仅提供免费的STL文件,还会上传详细的说明。如果您是创客,却未访问过Instructables,那么您可能会错过许多宝贵资源。
Unity3D MMORPG核心技术:AOI算法源码分析与详解
Unity3D是一款跨平台的游戏引擎,在游戏开发领域应用广泛。MMORPG(大型多人在线角色扮演游戏)作为游戏开发的重要领域,在Unity3D中也得到广泛应用。玩家之间的交互是游戏开发中一个重要问题。如何高效处理这些交互?AOI(Area of Interest)算法提供了一个有效解决方案。 AOI算法是一种空间索引算法,能够依据玩家位置快速确定周围玩家,从而提高交互效率。实现AOI算法通常采用Quadtree(四叉树)或Octree(八叉树),将空间划分为多个区域,每个区域可包含若干玩家。 以下为AOI算法实现方法和代码解释。 **实现方法**将空间划分为多个区域(Quadtree或Octree)。
玩家移动、加入或离开时,更新对应区域。
玩家查找周围玩家时,遍历相关区域。
**代码实现**使用C#语言实现Quadtree。
编写函数,实现玩家进入/离开、移动和查找玩家。
通过上述方法和代码,AOI算法可以在MMORPG中高效处理玩家交互,优化游戏性能和玩家体验。[技术随笔]🛠🛠从源码安装Pytorch3D详细记录及学习资料
这篇文章详细介绍了如何从源码安装Pytorch3D,包括选择合适的镜像、配置工具和编译步骤。首先,选择Pytorch 1.9的devel镜像,包含CUDA和驱动,确保与Pytorch3D的版本要求相匹配,比如Python 3.7和CUDA .2。在镜像内,需要检查nvcc编译器、CUDA工具箱和驱动是否正常,同时安装基本工具如git、vim、sudo和curl。
配置CUB工具是关键步骤,根据Pytorch3D文档,需要在编译前设置CUB_HOME。即使Pytorch镜像自带CUDA,也建议手动设置`FORCE_CUDA`为1以确保兼容。接着,如果遇到conda依赖问题,作者选择从源码编译Pytorch3D,编译过程中的安装log和版本检查是必要的。
最后,通过测试用例,如从ARkit导出数据并渲染白模,验证GPU的使用。结果显示GPU正常工作,安装成功。对于更深入的Pytorch3D使用,作者还分享了一些参考资源,以便初学者入门。
3d稀疏卷积——spconv源码剖析(三)
构建Rulebook
下面看ops.get_indice_pairs,位于:spconv/ops.py
构建Rulebook由ops.get_indice_pairs接口完成
get_indice_pairs函数具体实现:
主要就是完成了一些参数的校验和预处理。首先,对于3d普通稀疏卷积,根据输入shape大小,kernel size,stride等参数计算出输出输出shape,子流行稀疏卷积就不必计算了,输出shape和输入shape一样大小
准备好参数之后就进入最核心的get_indice_pairs函数。因为spconv通过torch.ops.load_library加载.so文件注册,所以这里通torch.ops.spconv.get_indice_pairs这种方式来调用该函数。
算子注册:在src/spconv/all.cc文件中通过Pytorch提供的OP Register(算子注册的方式)对底层c++ api进行了注册,可以python接口形式调用c++算子
同C++ extension方式一样,OP Register也是Pytorch提供的一种底层扩展算子注册的方式。注册的算子可以通过 torch.xxx或者 tensor.xxx的方式进行调用,该方式同样与pytorch源码解耦,增加和修改算子不需要重新编译pytorch源码。用该方式注册一个新的算子,流程非常简单:先编写C++相关的算子实现,然后通过pytorch底层的注册接口(torch::RegisterOperators),将该算子注册即可。
构建Rulebook实际通过python接口get_indice_pairs调用src/spconv/spconv_ops.cc文件种的getIndicePairs函数
代码位于:src/spconv/spconv_ops.cc
分析getIndicePairs直接将重心锁定在GPU逻辑部分,并且子流行3d稀疏卷积和正常3d稀疏卷积分开讨论,优先子流行3d稀疏卷积。
代码中最重要的3个变量分别为:indicePairs,indiceNum和gridOut,其建立过程如下:
indicePairs代表了稀疏卷积输入输出的映射规则,即Input Hash Table 和 Output Hash Table。这里分配理论最大的内存,它的shape为{ 2,kernelVolume,numAct},2表示输入和输出两个方向,kernelVolume为卷积核的volume size。例如一个3x3x3的卷积核,其volume size就是(3*3*3)。numAct表示输入有效(active)特征的数量。indiceNum用于保存卷积核每一个位置上的总的计算的次数,indiceNum对应中的count
代码中关于gpu建立rulebook调用create_submconv_indice_pair_cuda函数来完成,下面具体分析下create_submconv_indice_pair_cuda函数
子流线稀疏卷积
子流线稀疏卷积是调用create_submconv_indice_pair_cuda函数来构建rulebook
在create_submconv_indice_pair_cuda大可不必深究以下动态分发机制的运行原理。
直接将重心锁定在核函数:
prepareSubMGridKernel核函数中grid_size和block_size实则都是用的整形变量。其中block_size为tv::cuda::CUDA_NUM_THREADS,在include/tensorview/cuda_utils.h文件中定义,大小为。而grid_size大小通过tv::cuda::getBlocks(numActIn)计算得到,其中numActIn表示有效(active)输入数据的数量。
prepareSubMGridKernel作用:建立输出张量坐标(通过index表示)到输出序号之间的一张哈希表
见:include/spconv/indice.cu.h
这里计算index换了一种模板加递归的写法,看起来比较复杂而已。令:new_indicesIn = indicesIn.data(),可以推导得出index为:
ArrayIndexRowMajor位于include/tensorview/tensorview.h,其递归调用写法如下:
接着看核函数getSubMIndicePairsKernel3:
位于:include/spconv/indice.cu.h
看:
上述写法类似我们函数中常见的循环的写法,具体可以查看include/tensorview/kernel_utils.h
NumILP按默认值等于1的话,其stride也是gridDim.x*blockDim.x。索引最大值要小于该线程块的线程上限索引blockDim.x * gridDim.x,功能与下面代码类似:
参考: blog.csdn.net/ChuiGeDaQ...