游戏
文章平均质量分 58
飞天大蟾蜍
这个作者很懒,什么都没留下…
展开
-
jps(Jump Point Search)跳点寻路算法代码实现
JPS(jumppointsearch)寻路算法JPS(jumppointsearch)跳跃点寻路算法是对AStar寻路算法的一个改进。AStar算法在扩展节点时会把所有相邻的节点考虑进去,当地图比较大时,openList中的节点数量会很多,搜索效率较低。在两点之间没有障碍物时,那么中间的节点对我们来说是没有用的,不希望添加到openList如下可以看到JPS算法不是每个节点都紧密连接的,而是跳跃性的或者说只有需要转弯的节点(也叫拐点)才会被考虑,所以叫跳跃点(JumpPoin。..............原创 2022-07-16 17:27:36 · 1455 阅读 · 0 评论 -
unity gpu instance skin mesh骨骼动画
运行效果图如上原理很简单,1 先对动画进行采样(利用Animator StartRecording/Update/StopRecording这三个接口)2 然后回放(利用Animator StartPlayback/Update/playbackTime这三个接口)3 从SkinnedMeshRenderer里取出mesh数据(该mesh数据应该是包含bone index的)对每个bone(就是transform)计算变换矩阵4将生成的矩阵数据存入纹理5将纹理传递给...原创 2021-10-12 18:14:00 · 3473 阅读 · 0 评论 -
unity gpu instancing
Unity gpu instancingunity可以自动合并相同的material对象渲染将对应shader enable instancing的选项勾上本文说明一下直接调用unity api的方式,实现合并渲染参考opengl gl_Instanceunity提供了一组api,向gpu批量提交渲染数据以其中的一个为例Graphics.DrawMeshInstanced参数为网格数据,shader,以及每个instance的变换矩阵Material.SetB原创 2021-09-24 10:28:56 · 2095 阅读 · 1 评论 -
rvo动态避障算法源码分析
rvo动态避障算法源码: https://github.com/snape本文就rvo中动态避障的算法源码做一个简单分析代码取自:https://github.com/warmtrue/RVO2-Unity大约是2021-8-10这个时间取的,是一个例子, 将rvo整合..原创 2021-08-16 14:42:00 · 19742 阅读 · 7 评论 -
unity urp raytrace体积光god ray效果
试了一下在unity中使用raytrace方式实现体积光,运行效果如下raytrace开销较大,采样加到200几乎卡得跑不动了首先在光源处拍摄场景(unity对mainlight做了这个处理,并且是级联可设置)基本原理是在全屏路径下,根据场景深度,还原出世界坐标根据世界坐标判断是哪个裁切球(如果不是级联阴影,比如spotlight就不需要这个操作)然后将世界坐标变换到光源观察坐标light_view_pos再根据投影矩阵对应到光源纹理的深度纹理比较当前点在光源摄像原创 2021-06-24 17:37:25 · 1872 阅读 · 6 评论 -
Unity urp级联阴影接缝问题
Unity urp级联阴影接缝问题试了一下unity自带的阴影,发现有接缝问题,上网找了一些解决方案,都非常庞大,基本是要自己处理级联阴影看了urp的build-in之后,想了一个比较暗黑的方式,简单处理一下,运行对比图如下,左边是unity自带的级联阴影效果,右边是平滑后的级联阴影思路比较简单,从unity内部函数中抽几个出来改造计算当前像素点(世界坐标)位于哪个裁切球,代码如下:强制取某个裁切球的级联阴影映射,代码如下:原创 2021-06-23 20:09:26 · 2189 阅读 · 1 评论 -
[unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析
recast navigation navmesh导航网格算法源码分析Author: 林绍川recast navigation navmesh是unity3d ue4内置的寻路算法原创 2021-06-01 10:10:28 · 5486 阅读 · 0 评论 -
unity urp管线扫光效果
urp管线下实现扫光效果基本思路,还是根据深度还原世界坐标(以下简称world_pos),根据坐标的xyz判断是否在一些范围内,然后进行基于xyz两个坐标轴进行扫光这里进行一个扩展,让扫光可以沿着任一方向进行,就是传入一个旋转变换矩阵,对world_pos进行变换,然后判断aabb盒,这样就可以实现非xyz轴方向的扫光效果运行效果如下:可以沿任意方向扫光代码如下:shader:Shader "lsc/screen_scan_...原创 2021-06-21 17:36:49 · 1842 阅读 · 1 评论 -
unity urp内置的SAMPLER SamplerState
处理云阴影,打算直接在post阶段做个贴花了事根据世界坐标的xz做为纹理采样的坐标,加上旋转缩放,形成运行的云阴影采样器要用clamp方式于是这样声明了一个SAMPLER(sampler_CloudTex){Filter = MIN_MAG_MIP_LINEAR;AddressU = Clamp;//no workAddr...原创 2021-06-21 14:55:44 · 3603 阅读 · 0 评论 -
urp简单入门(unity2020.3版本)
Urp导入urp包,打开package manager窗口,点击install即可创建一个空的unity项目创建一个urp assert在project setting里,选中创建的urp assert先在graphics中红框处选一次再在Quality处选一次(好像不是必要的)camera的属性面板会改变,成这样,把Post Processing勾上...原创 2021-06-17 18:14:31 · 5236 阅读 · 4 评论 -
unity软粒子softparticle仿真实现
unity粒子系统自带了软粒子shader,目的是当粒子的billboard与场景中的多边形相交时,产生一个过渡,避免出现生硬的边界本文还原一下这个shader处理方式运行效果图如下:基本原理就是,在shader的片元处理阶段,判断当前像素点的视深,与_CameraDepthTexture里的深度差值,如果深度小于某个阀值,对alpha进行加一个衰减,产生过渡效果对应的shader代码如下:Shader "lsc/UnlitShader_softparticl...原创 2021-06-15 15:38:28 · 2920 阅读 · 3 评论 -
unity全局雾处理
全屏后处理全局雾网上找到的基本是要计算摄影机边界的4条射线,然后标准化插值后射线方向,利用深度还原场景的世界坐标,代码比较繁琐,要向shader多传递4条射线参数如下图其实有更简化的处理方式, 用unity shader自带的全局变量与函数,加上场景深度,可以直接在shader里面还原世界坐标,然后完成雾效处理unity_CameraInvProjection:投影矩阵的逆unity_CameraToWorld:变换矩阵的逆_CameraDepthText...原创 2021-06-10 09:59:05 · 1293 阅读 · 2 评论 -
视差贴图 parallax map
视差贴图,不同于法线贴图的是,会根据视角调整纹理映射的偏移,从而产生遮挡效果,但在多边形的边缘仍然是平的。(这个需要用浮雕映射来解决,利用gs阶段,输出更多的顶点,从而产生新的多边形,需要硬件能支持相应的渲染管线,题外话,此处略过不表,笔者认为如果边缘一般距离视点较远的话,一般情况下影响的效果有限)首先要有一个高度图根据视角,以观察到的点为终点,以纹理的最大高度(1原创 2015-05-13 07:46:39 · 2595 阅读 · 0 评论 -
q3 bsp碰撞检测
在quake bsp场景中漫游,需要检测是否与场景中物体碰撞,如主角从一个台阶上跳下,经过自由落体,然后接触到地板碰撞是由brush来实现的,brush有多种形式,简单情况下,可以理解为一个六面体(长方体或者立方体),并且六个面都朝内,这样带来一个性质,如果一个点位于某一个面后面,它一定不在brush之内,也就是不与brush碰撞.quake首先确定一条线段原创 2015-02-10 09:21:27 · 1926 阅读 · 1 评论 -
光线跟踪算法
光线跟踪算法,在网上查了一下,大概的思路,可能说得不太清楚,记下来,免得以后忘了。比较容易找到cpu中的算法,gpu的如gsls找一个,不过不能编译通过,也完全没搞懂cpu中的算法容易理解,但处于的几何体基本是球体,平面之类的,而且不涉及纹理,描述原理多于工程实践。根据渲染区域的大小,即宽h和高w,以及摄影机的位置,生成 h * w条光线(逆向的)程原创 2015-01-15 09:08:47 · 2114 阅读 · 0 评论 -
纹理阴影实现笔记
ogre纹理阴影实现的三种方法ogre包含两种阴影实现技术,阴影体与阴影纹理.阴影体需要主cpu计算出物体的轮廓,同时生成更多的多边形,会降低帧率并且在骨骼蒙皮时,会存在问题(如果采用硬蒙皮,无法计算轮廓,软蒙皮则降低帧率)阴影体只需要将几何体按不同的视角绘制(往显卡数据传输量增加),对帧率影响较小.阴影体实现的原理.假设场影中有一个点光源,原创 2013-12-31 16:16:10 · 2592 阅读 · 0 评论 -
irricht阴影体实现笔记
阴影体是一种动态阴影技术。仔细一看,这玩意儿其实很简单。利用的模拟缓冲的功能,把阴影体画进模板缓冲即可。这要求计算出物体对着光线的轮廓。本来觉得,怎么样高效地求出这个轮廓,发现irricht实现得非常简单,同时也意味着不够优化(笔者看的irricht版本是1.7的,可能最新的版本优化了)irricht直接取面对光线的那些多边形,然后利用这些多边形构造阴影体。(可原创 2013-12-07 23:18:28 · 1485 阅读 · 0 评论 -
irricht的水特效
水特效,但代码的名字却是 createHillPlaneMeshsin cos 波长 波动速度 每帧更新, 水面就是由许多点组成。分成若干块,每块贴上水纹理,以及水底的纹理(如水底的鹅卵石),双重纹理。(透明效果还得加入alph)好像很简单?原创 2013-12-07 23:24:27 · 1247 阅读 · 0 评论 -
ogre的动态光照
光照涉及大量的浮点数运算。ogre做了优化处理对于场景中的每个光源,首先根据摄影机,做一遍过滤。即,无法影响视截体的光源去除形成一个光源数组:mLightsAffectingFrustum对于每一个渲染对象rendableObject(类名大概是这样,派生了n多子类的那个).也要过滤,判断mLightsAffectingFrustum列表里的光源,是否会原创 2013-11-14 23:01:51 · 938 阅读 · 0 评论 -
tremulous
这是linux下面的一款游戏,有点类似cs吧,反正我是玩不了这种游戏了,反应太慢。在linux虚拟机里编译,运行,5fps,根本没法做调试,编译过程很简单,make即可。但makefile的一处要更新tool/asm里的 -Werr要删掉另外需要要openal支持。下面openal即可,解压openal。在build目录下面运行 cmake ..啥啥?你的系统没装cma原创 2012-07-13 20:39:54 · 690 阅读 · 0 评论 -
tremulous
tremulous采用的是雷神之锤的游戏引擎。雷神之锤自带了一个编译器,会把c代码编译成一个qvm包,然后在游戏进行的时候,再根据配置,编译成对应平台的机器码,直接执行或编译成字节码,交由雷神之锤的虚拟机来执行。tremulous 的三个模块game ui cgame这三个模块就是按这种方式处理的。这在quake所处的那个年代,相当于游戏自带了一个交叉编译工具。原创 2012-07-22 02:31:14 · 944 阅读 · 0 评论 -
tremulous移植到windows
这里整理一个完整版的tremulous移植到windows下面的步骤.linux下面直接make就搞定了,但在是linux虚拟机里运行只有5fps...所以还是得移到windows下面编译step 1下载mingw http://ncu.dl.sourceforge.net/project/mingw/Installer/mingw-get-inst/mingw-get原创 2012-07-23 17:31:53 · 866 阅读 · 0 评论 -
quake 3场景源码分析
原文http://www.mralligator.com/q3/#LeaffacesUnofficial Quake 3 Map SpecsIntroduction[top]This document describes the Quake 3 BSP file format. Th转载 2013-06-24 19:02:02 · 1801 阅读 · 0 评论 -
q3 bsp随笔(2)
看完了q3的port生成,以及pvs的生成做个记录由于q3 bsp树生成时,将场景中所有的brush平面都参与,所以就可用bsp树的分割平面来切分portport从根节点开始,初始winding是根节点分割平面,与场景最大包围盒平面切割而成之后,剃归处理每个节点,对port进行切分,每个子节点的分割平面也做为port,被父节点的port切分这样,可以原创 2013-07-30 22:32:20 · 1317 阅读 · 0 评论 -
如何自学3d游戏
找一本opengl(或者directX)的入门教程,了解相应的api了解的过程,顺便回忆一下线性代数相关的零点知识,主要是矩阵相关的那一块。知道一些概念,比如判断一个点在平面的哪一则,如何旋转矩阵等(学习骨骼动画时,必不可少的知识)基本上知道一点皮毛,入门不成问题。找一份开源代码,开源3d引擎是一个不错的选择。比如鬼怪,鬼火等但这都不如直接找一款游戏来学习来得直接。原创 2013-07-27 23:37:43 · 1071 阅读 · 0 评论 -
q3 bsp随笔
阅读q3的bsp实现,做一些随笔记录,免得自己也忘了。首先谈到的是brush概念。笔者用最通俗的方法来解释一下brush用q3场景编缉,画一个六面体(长方体),观察得到的map文件会看到里面记录了一个brush信息,其实就是记录了brush的六个面!这就是brush。假设我们的场景都是由长方体构成,那么场景里有brush信息就都是长方体的信息(q3的br原创 2013-07-27 23:58:27 · 1115 阅读 · 0 评论 -
q3explore
把q3的多边形导入至程序中,主要是导入bsp树,以及pvs,q3代码对每个pvs节点,与视截体进行测试,如果与视截体相交,才会画会一个大循环,判断当前叶子节点有哪些pvs,判断这些pvs节点是否落在视截体之内原创 2013-08-19 01:12:15 · 1540 阅读 · 0 评论 -
q3 bsp绘制的直观展示
在得到q3 bsp数据后,就可以根据当前所在结点,以及pvs画出。所有的pvs还需要做进一步裁减,即,在当前可视截体(所谓的frustm)内的节点,才会被绘制如下图所示,白色的是当前节点,浅灰色是处于frustum当中的pvs节点,深灰色不处于frustum中的节点4个frustum平面的法线(被笔者移到了观察点)由彩色线条标出原创 2013-08-25 16:04:33 · 1003 阅读 · 0 评论 -
q3的灯光效果
q3光照效果的一部分,利用了多重纹理。预先计算好光照效果,生成光照效果位图。程序加载相应的纹理,以及对应的光照位图.不加光照的效果打开光照效果至此,q3的渲染仿真已经实现了差不多了,接下来玩玩q3的碰撞检测原创 2013-09-09 22:55:24 · 1654 阅读 · 0 评论 -
关于纹理炫目的问题
其实不是什么大问题,翻开任何一入门级的游戏开发教程,都会在纹理这一节提到,解决的方法也很简单,对于opengl相关的函数调用为 glTexImage2D (GL_TEXTURE_2D, miplevel, GL_RGB, scaled_width, scaled_height, 0, GL_RGB, GL_UNSIGNED_BYTE, pc_image );原创 2013-09-04 00:43:54 · 829 阅读 · 0 评论 -
椭圆与三角形碰撞测试
看irrich代码,对里面的三角形碰撞检测代码一直搞不清楚,上网找到一篇文章,看样子,应该就是了相应的公式推导原文链接:http://www.job168.com/info/read_88279.html以下是原文(不知道作者是谁啊):胶囊和凸多边形的动态碰撞检测发表日期:2011-04-15 在使用广义碰撞阶段迅速排除了大量物体以后,将会使用精确转载 2013-09-13 15:56:15 · 1795 阅读 · 0 评论 -
irrlicht bsp浏览器
看了irrlicht 的一个碰撞检测demo,里面导入了bsp,但是看了相应的导入代码,发现没有导入bsp pvs数据。/*!*/void CQ3LevelMesh::loadVisData(tBSPLump* l, io::IReadFile* file){ // ignore}确实没导入irrlicht把bsp里所有的面原创 2013-09-23 00:45:13 · 1135 阅读 · 1 评论 -
quake中的aas部分
大概看了aas的reachability生成部分。同样也是借助bsp树。利用portal计算每个区域的可达性(分为是否需要爬梯,游戏,跳跃,或者直接走过去)area其实就是bsp树的叶子节点(经过合并,以及按重力方向进行分割,可以简单地认为就是bsp的叶子节点)生成时,采用遍历,计算每个area与周围的area是否可达,area有个属性 face链表(它们就是porta原创 2013-10-27 11:21:21 · 962 阅读 · 0 评论 -
quake aas初探
aas这块数据,从代码上来看,就是用于机器人寻路的。quake根据bsp树来生成aas这里简要说明一下bsp树,简单的说,就是利用场景中的每一个面,对空间进行分割(area)。quake会计算每个空间的连勇性,这样就得到了cluster,每个相连通的area处在同一个cluster里一般来说,一个场景只有一个cluster如果存在不连通的情况,说明场景里原创 2013-11-01 07:32:01 · 992 阅读 · 0 评论 -
irrlicht代码法线贴图相关问题
irrlicht的代码关于法线贴图的范例即 PerPixelLighting。程序准备资源部分,先是一个砖墙普遍纹理,设到 text0然后是一个法线纹理贴图,设到text1(中间经过处理,将对比度,转换成相应的法线数据)然后是在COpenGLDriver::drawVertexPrimitiveList函数中,会走到case EVT_TANGENTS原创 2013-11-25 22:07:01 · 1576 阅读 · 0 评论 -
一个游戏程序员的学习资料
转来的,原文链接如下:http://software.intel.com/zh-cn/blogs/2012/03/20/400010004/?cid=sw:prccsdn2194#comment-72959想起写这篇文章是在看侯杰先生的《深入浅出MFC》时, 突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源转载 2012-04-17 13:18:01 · 1068 阅读 · 0 评论