2024年又快结束了,回顾这一年学习了不少进阶的ta技术,用ComputeShader绘制大量物体并做剔除,用RenderFeature做简单的模糊后处理等。还有在公司做的3D融球角色,虽然是手机小游戏,但是在unity中给融球做的眉清目秀的也是独一份了。不过还有一些遗憾,年前没把风格化山谷的昼夜变换材质细节做好,得留到春节前做了。下面是这些目前作品的技术要点简单介绍。
风格化山谷
昼夜天空球
这个天空球是学习Kerry佬的做法,天际线不是像一般的天空球那样处在中间线上,而是偏向太阳位置方向,目的是Trik出类似大气米氏散射的那种效果,适合移动端。
昼夜GI烘焙切换
使用magic light probe插件自动铺设Light Probe,使用Magic Lightmap Switcher完成昼夜的lightmap和lightprobe过渡循环。
伪体积云
方案参考来自于UE的一款插件StylizedWeather,与之前对noise采样uv直接做光方向偏移来模拟光照的优势在偏移以光源为中心向周围偏移并且有光的衰减,更符合物理。
水面以及反射
处理了水底扭曲的bug。
在反射上远处采用SSPR,近处采用SSR,并且对于屏幕空间光线步进被近处遮挡的SSR修补上CubeMap的颜色。
SSR实现参考屏幕空间反射
GPU Instance+视锥体剔除草绘制+Hiz-Culling遮挡剔除
一键收集场景中所有的草(Prefab草+Terrain草)位置数据写入到json中,再通过读取json中的数据实例化生成草,并做视锥体剔除和Hiz-Culling遮挡剔除。
Hiz-Culling遮挡剔除实现参考HiZ_grass_culling
详细解析前往GPUInstance+Hi-z Map Occlusion Culling+FrustumeCulling绘制草(上)
谓尔项目
下载体验APP前往谓尔官网(仅支持Android和IOS)
融球角色
技术要点已详细汇总成文档,详见: 手搓融球版星之卡比-上 手搓融球版星之卡比-下
昼夜变换的天空,环境光照
天空球计算基本于风格化山谷的相同,不同的是这里的云是直接绘制到天空球里面,并且光照也是直接uv沿光照方向平移模拟的,参考这位大佬的方案风格化的动态天空球,云的噪声贴图是SD做的偏卡通风格。
环境光照是沿用Unity的LightSetting中的Sky Color,Equator Color, GroundColor。并且光照模型是基于经验光照模型。
基于SDL的CPU软光栅
这是跟着一个国外大佬的课边学边做的,基本从0到1实现了从读obj文件顶点法线uv数据到模型空间转换世界空间,再转换到相机空间做视锥体剔除(跟现代GPU流水线不同)然后经过投影矩阵投影到NDC空间做透视除法,最后映射到屏幕上。 3D Computer Graphics Programming课程笔记专辑