【本文参与征文活动】
About / 关于
一句话介绍一下这个项目,就是基于 cocos
引擎的 2d
光线追踪,视野范围计算,渲染相关的东西。
Resources / 资源
Repository / 仓库
Online Demo / 在线演示
codesandbox.io
基于 cocos2d-x
版本
SSRLoS-Cocos2dx-Dirty-Detection
Native Demo / 原生演示
creator v2.4.0 纯 js 版本
creator v1.10 纯 js 版本
cocos2dx v3.17 jsbinding 版本
cocos2dx v3.17 纯 js 实现版本,无 jsbinding 实现
Doc / 文档
Plan / 计划
后续的计划,同时包括了很多 2d
的光照,阴影相关的技术文章,有兴趣可以看下。
这里稍微贴一点:
Algorithm / 算法相关
Triangulation
三角化算法的实现方式,当然这对于地图和障碍物可能会有一些特殊要求。但是换句话说,只要满足了条件,这样的算法的效率肯定是高于现在算法的,毕竟是 量身定做
的算法。
Bresenham
直线光栅化算法的实现方式。
Spatial Hashing / 空间散列
基于空间散列实现的光照系统,值得参考。
Better Collineation Culling / 优化共线剔除
. Culling
的处理中,过滤掉了可能出现的重复的端点,但是对于存在于同一射线上的端点,却是在后期生成射线的步骤中,才过滤掉。这期间经历了 生成辅助射线
的步骤。
考虑是否可以在 Culling
的阶段就过滤掉,如:
. 对需要保存的端点,计算斜率,象限
. 用 斜率_象限 的形式作为 key
. 判断待添加的端点,是否有已经存在的 斜率_象限
. 没有,则直接保存
. 有,则进一步计算距离平方,只保存一个距离光源更近的端点
目前暂时没有尝试,因为精度的问题,使用斜率作为 Key
,很少的情况才会出现命中的情况,换句话说,这种机制可以剔除的共线情况会很少。
需要寻找更好的剔除共射线的方式是最好的。暂时没有尝试。
Better Sort / 优化排序
Better Hashcode / 优化哈希码
Quadtree / 四叉树
Specific Obstacle Support / 特定障碍物对应
Bretter Intersection / 更好的相交算法
Process / 过程相关
Obstacle Merge / 障碍物合并
Event System / 事件系统
Render / 渲染
SDF Ray-Marching / 有向距离场 光线行进
2D global illumination - Shadertoy
SDF arbitary 2D polygon - Shadertoy
sdf 2D lights and shadows - Shadertoy
Less Triangulate Render / 减少三角化渲染
Better Light Shader / 更好的光照
Better Blend Mode / 更好的混合模式
Shadow / 阴影
Normal Map
Shadow Map
Light
Reflect / Refraction
这些效果也可简单的在 cocos2dx
和 creator
中实现:
Voronoi diagrams / 维诺图
Fast Voronoi Diagrams and Distance Field Textures on the GPU With the Jump Flooding Algorithm
Misc / 杂项
Better Creator / 更好的 Creator 支持
Better Camera / 更好的相机
3D Support / 3D 支持
Voxel Cone Trace / 基于体素锥形光线追踪
More Refactor / 重构
Gizmo Support / 编辑器可视化支持
TileMap Demo
在我看来,截至到现在,这个项目的 80%
精力都是放在了算法
的优化在优化上,剩下的 20%
精力则是在渲染
上。项目陆陆续续的已经做了很久,但是还有很多很多想做的。随便写几个:
- 已有通用算法的优化
- 定制型算法,针对一些特定使用场景的算法
- 纯
GPU
算法,半CPU
半GPU
算法 - 算法已经做了很多,要的数据也到手了,那当然在渲染上要花大力气优化,做出酷炫的效果了
- 更多的就写在文末的
后续计划
里了 …
项目是从 cocos2dx
开始的,目前几乎所有功能都已经移植了 Creator v1, v2
版本。而且所有版本都做了 Native Binding
。
但是因为精力有限,后面的新功能打算暂时只对应 cocos2dx
和 creator v2
,当然 creator v3
出来的话也会考虑。暂时只对应 Web
版,当然原生也是可以直接用的,Native Binding
暂时不会去对应新功能。
最后打个广告,最近上架了一款关于 FBO
的插件扩展,后续也会用到 GPU
阴影算法的实现中,有兴趣的朋友也可以支持一下 [cc.RenderTexture cc.Camera FBO] 截图, 放大镜, Shader 伴侣