[关闭]
@yangyc 2019-09-18T07:32:22.000000Z 字数 3810 阅读 682

2019.08.27思考


学习畅销书的写作模式:
《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

)

基础

(
示例代码不加入到主代码中!
)

引擎:
component
//frp
shader
//job pipeline
config json
data oriented

编辑器:
...

支持用户扩展

扩展编辑器ui

扩展引擎component:
增加LightMaterial和纹理?

扩展引擎shader

引擎支持webgl1,webgl2

引擎支持多种应用场景

加入defer shading job

加入ray tracing job

引擎支持多线程

////## 增加小功能1

////## 增加小功能2

编辑器增加Redo/Undo

增加相机和事件

提出frp

编辑器增加run/stop

展示run时相机事件

...

原型准备2

书名暂定:
《3D编程旅程-架构篇》

一切以架构为主,展示商业级的架构设计,支持各种应用场景和扩展

从0开始,完全实战可运行

需求:
支持用户扩展
支持各种应用场景(pc, mobile, ray tracing, rasterization, ...)
支持webgl1,webgl2
高性能

展示如何支持各种应用场景:

frp

service

引擎

用户扩展

支持webgl1,webgl2

job pipeline

component

data oriented

多线程

编辑器

用户扩展

////new tab 运行:支持多线程

工程

功能点(用于引出对应架构)

引擎功能点

////- 纹理
基本的纹理。

////- 光照
支持方向光、点光源。

编辑器功能点

////- 输出
可在控制台输出日志、错误等信息

////- Gizmo
可通过Transform Gizmo,设置GameObject->Transform组件的位移、旋转、缩放等属性
在编辑视图scene view中显示相机、光等小图标

成果

一个架构框架,包含最小的功能
(只能渲染basic material gameObject?)

通过示例,展示如何加入功能:
加入光照
加入editor->scene tree/console?

通过示例,展示架构特性:
扩展性(如用户扩展?)
通用性(适用各种场景)
高性能(性能benchmark测试,与threejs比较?)
...

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注