Shader
卡通渲染全流程,以崩坏星穹铁道角色为例
本文详细介绍了卡通渲染的流程,深入探讨了LightMap的RGBA通道用法、SDF以及Ramp纹理的使用
- 漫反射部分介绍了二分阴影、使用SDF纹理生成脸部伦勃朗光影以及AO阴影的生成,并结合Ramp纹理实现了丰富的漫反射颜色变化
- 高光部分介绍了各向异性高光、自发光、Blink效果
- 实现了基于深度图和Back Facing Outline的RimLight以及Outline
- 最后还介绍了菲涅尔反射、透明物体渲染、后处理效果以及基于色相、饱和度、明度的色彩校正
Quantum Shader - 崩三量子怪物Shader还原
还原了量子怪物外观,主体是由不同的菲涅尔效果组成的:包括外层和底部的菲涅尔效果,以及基于菲涅尔效果的轮廓线。此外还结合了屏幕空间的贴图以及法线外扩的轮廓线,最后使用法线与视角方向的点积作为 Alpha 值,用来控制怪物的透明程度,呈现出最终的外观。
Game Play
Target System
锁定系统探索,实现了两个模式:FreeMode和SelectionMode,在FreeMode下,每次帧更新都会更新当前目标,而SelectionMode中有按下Lock按键才能更新当前目标。此外还实现了动画效果。
Universal RP
SSAO-屏幕空间的环境光遮蔽实现
本文使用了URP(Universal Render Pipeline)工作流,在其中的Renderer Feature上实现了一种基于屏幕后处理的屏幕空间环境光遮蔽。
- 在Renderer Feature中得到深度、法线缓冲,使用深度缓冲、法线缓冲获取物体的位置信息
- 使用一个法线半球对周围的随机点进行采样。
- 通过多Pass将采样得到的结果进行模糊算法处理得到AO值
- 最终将原场景和AO进行颜色混合实现了一种高性能的屏幕空间环境光遮蔽效果。
Custom URP Renderer Feature, 以Outline效果为例
本文探索了Unity通用渲染管线(URP)的Renderer Feature,并且在此基础上实现了一个屏幕后处理的Outline效果。
- Renderer Feature的工作是通过VolumeComponent、RendererFeature、RenderPass几个脚本的协同
- Volume Component 用于在Global Volume中通过控制面板参数调整后处理效果
- Renderer Feature 实现了创建和初始化渲染Pass的方法,以及将Pass加入渲染队列的方法
- Render Pass 执行渲染相关操作的脚本,从Volume Stack获取参数,将画面与Shader渲染的画面混合
- Outline效果使用的算法是深度和法线贴图的边缘检测
- 边缘检测 通过采样深度图和法线贴图,计算深度和法线梯度,结合一些阈值来判断是否存在边缘。
- 通过视角方向矫正深度阈值,避免在相近表面上检测到边缘。
计算机图形学
微表面模型
PBR(Physically Based Rendering)材质的实现基于微表面模型,应用了微表面材质的物体,在远距离观察下表面是平的,凑近了看则是有细节的,表现为带有颗粒状以及镜面反射。本文实现部分使用到的BRDF是Cook-Torrance BRDF,它包括漫反射和高光反射两部分,漫反射部分使用的是Lambertian漫反射,高光反射使用了菲涅尔项,几何项以及法线分布项分别计算光照贡献。代码实现使用的是路径追踪中的框架。
路径追踪
路径追踪是一种工业界常用的光线追踪方法,它在Whitted风格光线追踪基础上改进了加速结构算法,使用了AABBs(轴对齐包围盒)求交光线,构造BVH数据结构查找三角形,使用蒙特卡洛积分采样辐射度。本文在实现路径追踪的算法基础上还探讨了随机数引发的性能问题以及C++多线程优化。
质点弹簧系统
质点弹簧系统是用于模拟动画的一个基础物理模型,本文使用了半隐式欧拉法和显式 Verlet方法模拟了理想状态下多质点的绳结的物理效果。
VFX
风格化爆炸
本文从一个风格化的爆炸效果入手,逐步学习了Unity的粒子系统。采用的工作流为:Material Maker制作噪声贴图、Blender制作Mesh、Unity Shader Graph创建着色器,最终实现以下效果:
- Scroll mask 滚动遮罩
- Erode 侵蚀效果
- Animate vertices 顶点动画
- Distort 扭曲效果
- Parallax Occlusion 视察遮挡效果
Arcade Slash VFX
分享一个简单的Arcade风格Slash的VFX的做法,内容包括Slash Ring、Arcade Cube以及Star的粒子效果实现。
Diagram
Template Diagram
使用draw.io开源软件设计的一个模板图表,收集了用来表示各种类的Icon,设计了多种Block,可以使用不同的方法来表示对象的关系,并且提供了一个示例。
Full Game Demo
3D Action Game Demo
这个项目是一个俯视角的3D动作游戏Demo,包含角色控制、敌人行为、关卡互动系统,以及一些UI控制。
Computer Vision-based Sentiment Analysis and Generation Experience in Unity
本项目是基于URP和机器视觉的情感分析和生成体验,机器视觉使用了Unity Barracuda和OpenCV For Unity,实现了集绘画、交互和音乐推荐以及生成的体验,该项目参加过OpenCV Al Competition 2022比赛并获得三等奖。