# try3d **Repository Path**: JoyClm/try3d ## Basic Information - **Project Name**: try3d - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-29 - **Last Updated**: 2022-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # try3D #### 介绍 正式命名为Try3d.js(早期为TEORT_WebGL),是我在webGL上的一次尝试,有一些功能尚未实现(可以查看下面的待完善清单),这个渲染器包含一些曾经流行且目前流行的一些技术,我参考了一些引擎,并尝试设计高层材质系统,以及CorePipeline架构的初步实现。 #### 展示      #### 特性 1. 基本 1. 场景管理 1. 基于场景图 2. 基于Component 2. 优化 1. 默认下,对场景使用FrustumCulling 2. 可以为指定的节点添加OctCullingControl,这将对其节点(该节点下的所有物体)使用Octree加速过滤(不会与默认的FrustumCulling冲突) 3. 可以为物体(通常是继承自Geometry的节点)添加LodControl,这将获得“细节层次过滤”,注意,目前未集成创建Lod数据的API(理论上,不应该在web上实现这个,所以这里我假设数据是建模阶段完成的) 4. 遮挡剔除(目前删掉了,有待改进这一步) 5. 材质合并渲染与shaderHash缓存 6. 实例化渲染(待实现,预计封装实例化渲染,以便可以方便进行数据实例化,对于动画,目前不能使用实例化) 7. 改进的batch技术,预计实现一种改进思路的batch技术(待实现) 8. VirtualTexture(待实现) 3. 一些常用 1. FirstPersonController 2. SceneBrowsingController 3. 自动计算和修复Tangents(以便渲染需要) 4. 没有依赖其他数学库,而是自己封装的一套(尽可能独立) 4. 支持的外部格式 1. 支持glTF模型(包括动画,拓展的几种核心材质) 2. 支持Obj模型 2. Pipeline 1. CorePipeline 1. 支持几种主流RenderPipeline(包含Forward,ForwardPlus(待实现),Deferred,TileDeferred,Clustered(待实现)) 2. 支持几种RenderProgram(包含SinglePass,MultiPass等) 3. 支持混合Pipeline,可以同时在一帧渲染中包含以上提到的组合Pipeline 2. ShadowPipeline 1. 独立ShadowPipeline,以便于CorePipeline分离,可以使得任意材质(即使是用户自定义的简单输出颜色的材质定义)下都可以获得Shadow 2. 阴影Cast集合裁剪与Receiver集合裁剪 3. 基于Pssm实时阴影 3. FilterPipeline 1. 将PostFilter独立于CorePipeline,以便使得PostFilter可以尽可能不受CorePipeline影响 2. 内置几种常见的PostFilter(BloomFilter,DofFilter,FogFilter,FxaaFilter等) 3. MaterialDef 1. 对比其他WebGL渲染器,提供更良好自定义材质定义的接口,以便使用者可以更加方便的定义材质 2. 一个Material定义可以包含多个技术块(Technology),以便在实现在不同策略需求下的技术支持 3. 一个技术块(Technology)可以包含多个渲染块(SubPass),每个渲染块可以指定其所使用的渲染路径(RenderPath),以便实现高级复杂的渲染需要 4. 一个渲染块(SubPass)可以包含多个渲染阶段(Pass),复杂的渲染通常需要多阶段渲染 5. 一个渲染阶段(Pass)可以指定其渲染状态,以便在指定渲染状态下完成渲染 6. 一个材质定义可以包含自定义全局变量,这些全局变量在整个渲染器都可以被访问,所以可以在不同的Material之间共享并访问 4. Material 1. 内置了多个材质定义,以便提供常用的材质实例构建需要 2. BasicLightingDef,用于经验光照 3. PrincipledLightingDef,基于更加真实的brdf实现的光照模型 4. 还有一些常用的内置材质,包括ColorDef等 4. 光照 1. 支持DirectionalLight,PointLight,SpotLight 2. RefProbe(反射探头,待添加)和GIProbe(光探头,只实现了全局GI探头,待实现混合GI探头) 3. 实现了基于IBL的全局光照,LPV(待实现) 4. 支持SinglePass和MultiPass完成多光源渲染 5. 光源裁剪,包括快速锥体剔除与光锥裁剪 6. 对光源管理,使得你可以很方便的操作灯光,以及在着色器中访问灯光信息 5. 阴影 1. 支持Pssm实时阴影,支持点阴影与聚光阴影 2. 内置了基本的软阴影过滤 3. 用户编写的自定义材质不需要包含阴影或光照的函数逻辑,Shadow在独立Pipeline处理 6. 动画 1. 支持节点动画和骨骼动画(硬件蒙皮) 2. 多动画剪辑,多动画通道以及动画混合(待实现) 3. 附件绑定,你可以将装备或附件附加到指定关节上(待测试) 7. 地形(待实现) 1. 预计加入基于QuadTree和TerrainLod的地形管理 2. 预计加入基于多数据来源(heightmap,噪声图,alphamap,分型数据)创建地形 3. 预计加入多通道混合创建地形,以便创建包含植被,道路,河流覆盖的地形纹理 #### 安装教程 1. 目前,仅打包了普通的js包,意味着你只能通过script标签引入该库 2. 你也可以clone该项目,然后使用webpack打包为amd或umd库 #### 使用说明 1. 以下是一个快速使用案例: 1. 添加一个Canvas: ```html