@yangyc
2019-09-18T07:32:22.000000Z
字数 3810
阅读 682
书
学习畅销书的写作模式:
《30天自制操作系统》
《Orange S:一个操作系统的实现》
。。。
新手入门类书籍?
实战类? yes!!!
每节最后的代码,实例要能运行
分成多个部分:
30天自制3D引擎
30天自制编辑器
极简,减少用户负担
0依赖
高度抽象、精炼
多图
每节最终都可运行(每个功能点都能单独展示、运行)
多节,每节内容少
与Wonder解耦(不要与Wonder直接关联!)
控制篇幅,全书第一个版本在3万字內,总篇幅20万字內:
功能范围在1.0版本內,可增删些内容
实现产品最小功能闭环:
静态场景
把stream load, instance, imgui等功能移除
功能点控制在15个以内
加上测试
完全实战化
用户零基础上手
////加上托管平台???
展示完整的工程实践来实现最小功能产品。
整理功能点
梳理出功能的依赖关系,提出抽象层级关系
给出学习路线图
...
1.Reason语言基础语法
2.函数式编程思想
抽象架构与具体架构(可运行)
给出如何扩充内容的思路和方法、模式
可以与其他架构进行比较(如继承架构、oop等)
1.实现最基础的产品架构
(user should use Reason to extend!)
实现3d引擎最基础的架构
(进一步将component json化?)
需要将component,job,service完全分离出来,插件化
实现编辑器最基础的架构
需要将 ui组件、编辑器ui扩展、增加asset 完全分离出来,插件化
打包dist代码时,可自由+-插件,打出不同的包!
2.实现最基础的测试架构
3.实现最基础的工程架构
如持续集成、自动部署、打包等
增加基础的公共功能
如:
最小的scene graph(.wd)?
////最少的component(如transform?)
增加的功能代码最好都提出来集中,独立于架构代码(把架构代码和公共代码提到npm中?)。这样每个功能点就只需要展示增加的功能代码了,从而把读者的学习成本降到最低。
每一小节在基础架构上加一个功能:
相对独立。即下一个功能不在上一个功能的代码上增加,而是都在基础架构上增加!!!
保证增加的功能不会影响基础架构!!!
核心需求:模式
核心需求:开始商用,给出多个实战案例,补充对应功能点(如imgui、picking等)
如支持:
3D可视化
微信小游戏
核心需求:支持扩展,让用户最大限度自定义引擎和编辑器
imgui,job,component,editor ui 扩展...
核心需求:实现实时光线追踪
(Webgl(3D),数学等知识,在代码用到时,再做介绍)
(
每节给出习题吗?
作为:
引导读者思考本书后面的内容;
扩展思考;
练习实践;
)
(
架构的设计可以在需要的时候才通过重构提出
除了一些重要的设计思路(如 Data Oriented, Component, Extend等)
)
(
基于Type设计
给出领域模型图,不断迭代
)
(
本书重点:
1.把设计讲清楚
2.展现完整的工程实践
(只需要提出所有的测试方法,并给出相应的示例即可。不需要给出所有的测试case!)
具体的相关理论不用讲得太详细(如各种数学知识等),主要偏向应用
)
(
TODO 支持用户扩展引擎、编辑器:
(如扩展引擎component,编辑器ui组件,Service等)
(可扩展引擎的job, shader!)
(学习unity, creator的扩展方式)
用户使用Reason
////用户可调用Service,可依赖其他引擎component
提供封装的extend api to user
支持运行时(before init),加载string(用户扩展。Reason编译后的js->Js.Json.stringify ---> 得到的string)来扩展!!!
最后,扩展的string放在wpk文件中(专门增加ext文件?wpk=ext+wdb+asb)?
或者提出来作为另外的文件?!!!
)
(
TODO 升级Reason,bucklescript为最新版本
)
基础知识准备(Reason, 函数式编程, Reason-React?)
(
好久提出调试reason的方法?在需要的时候吗?
)
准备开发环境
快速写一个最小3d引擎,编辑器,打包(Demo1,原型,但可以运行。如渲染一个三角形)
分析代码(WebGL实现分析, React分析?)
提出基础架构
(
////比较各种设计思路(FP vs OOP; Data Oriented vs ?; ...)
)
重写Demo1
(
提出material, transform 组件?
)
...
书名暂定:
《从0写3D引擎和编辑器》
明确功能点范围
提出最小框架
支持用户扩展:
(
引擎的component等也用扩展的方式加载!!!
一起打包成一个文件?
优先扩展编辑器:
(参考creator的扩展)
ui
service
editor extend script/package
扩展引擎:
job
shader
component
service
engine extend script/package
扩展文件作为一个二进制文件(engine,editor 各一个?),可加载到engine,editor
)
(
示例代码不加入到主代码中!
)
升级Reason,bucklescript为最新版本
快速写一个最小3d引擎,编辑器,打包(Demo1,原型,但可以运行。如渲染一个三角形)
引擎:
component
//frp
shader
//job pipeline
config json
data oriented
编辑器:
...
改进原型
改进架构
给出领域模型图
给出测试用例
示例
扩展编辑器ui
扩展引擎component:
增加LightMaterial和纹理?
扩展引擎shader
改进原型
改进架构
给出领域模型图
给出测试用例
改进原型
改进架构
给出领域模型图
示例
加入defer shading job
加入ray tracing job
改进原型
改进架构
给出领域模型图
给出测试用例
////## 增加小功能1
////## 增加小功能2
用扩展的方式和基于Type的驱动设计,增加一个功能
改进原型
改进架构
给出领域模型图
提出frp
用扩展的方式和基于Type的驱动设计,增加一个功能
改进原型
改进架构
给出领域模型图
用扩展的方式和基于Type的驱动设计,增加一个功能
改进原型
改进架构
给出领域模型图
示例
展示run时相机事件
书名暂定:
《3D编程旅程-架构篇》
一切以架构为主,展示商业级的架构设计,支持各种应用场景和扩展
从0开始,完全实战可运行
需求:
支持用户扩展
支持各种应用场景(pc, mobile, ray tracing, rasterization, ...)
支持webgl1,webgl2
高性能
展示如何支持各种应用场景:
frp
service
用户扩展
支持webgl1,webgl2
job pipeline
component
data oriented
多线程
用户扩展
////new tab 运行:支持多线程
////- 纹理
基本的纹理。
////- 光照
支持方向光、点光源。
多线程渲染
通过浏览器的Shared ArrayBuffer和OffscreenCanvas,引擎支持开两个线程:主线程+渲染线程。
Scene Graph
使用自定义的.wdb格式保存场景数据
支持导入/导出.wdb
事件
绑定和封装了事件,统一了pc端和移动端的事件。
GameObject和Component
可直接操作GameObject和Component,如添加、删除、修改等。
场景管理
可通过场景树的形式看到该场景的所有GameObject
可进行添加、删除、修改等操作
撤销/重做
////- 输出
可在控制台输出日志、错误等信息
运行/停止
可直接运行/停止场景
资产Asset
可操作Material、纹理、模型等资产
////- Gizmo
可通过Transform Gizmo,设置GameObject->Transform组件的位移、旋转、缩放等属性
在编辑视图scene view中显示相机、光等小图标
导入/导出
可导入/导出场景、模型
发布本地包
可将做好的场景,发布为本地压缩包,然后自己部署到服务器上,供终端用户使用
一个架构框架,包含最小的功能
(只能渲染basic material gameObject?)
通过示例,展示如何加入功能:
加入光照
加入editor->scene tree/console?
通过示例,展示架构特性:
扩展性(如用户扩展?)
通用性(适用各种场景)
高性能(性能benchmark测试,与threejs比较?)
...