百度网盘
希望可以给大家一个参考
https://pan.baidu.com/s/1G4UrNZrtZZaoimJC6D1Xxw
8nzm
作业2
自定义的LUT图
在Unity中使用后期渲染。
然后使用RenderDoc工具截取LUT图
将图片路径替换成自己的LUT
Shader代码
实现效果
整体实现偏向蔚蓝的风格。
自定义外扩线PASS(原创shader算法)
新建立一个PASS,根据像素的深度来进行外扩线的绘制。
这个PASS有两个input_attachment_binding ,一个是颜色缓冲,一个是深度缓冲。
还要设置视口大小为全屏
Shader
在计算周色点周围深度梯度变化时, 设UV偏移量为offset,采样uv+offset的深度加上采样uv-offset处的深度,减去两倍当前uv的深度。作为深度梯度变化的大小,梯度变化越大,说明越有可能在边界处,那么就混合设置的外扩线颜色。
顶点着色器
片元着色器
效果
作业3
1.状态机update
1.1代码截图
1.2实现思路
基本按照上图的状态机图实现,不过没有walk_end状态。
当进入一个状态后,满足切换状态的条件后,开始切换状态。
如果有多个切换状态被满足,选择优先级高的。
- AnimationPose::blend
2.1代码截图
2.2实现思路
首先得到自己和要混合骨骼的权重和就是sum_weight,然后用1减去自己骨骼权重除以sum_weight,就得到要混合的lerp值就是cur_weight。
通过Vector3中的lerp函数和Quaternion中的nlerp函数实现两个骨骼的混合,混合值为cur_weight。然后将自己的权重变为sum_weight。
3 CharacterController::move
3.1代码截图
3.2实现思路
人物的水平位移分为三步:
直接水平位移,如果有碰撞到物体,位移到碰撞物体处,并进行下一步。
设置一个最大跳跃台阶值,如同碰撞点的相对高度小于这个值,将人物抬升到碰撞点的高度继续位移。
进行以上两步的水平位移小于期望的水平位移值,那么就进行沿着碰撞物移动。首先得到碰撞点的法线,然后叉乘Z轴方向,得到沿着物体移动的方向,再根据人物移动方向点成沿着物体的方向,得到是沿着物体移动的正方向还是反方向。沿着这个方向移动继续移动,直到移动的总位移达到期望值。
作业4
- 新增Struct
新增一个结构体MyStruct。
value:表示实际值。
min_value:表示最小值。
max_value:表示最大值。
在MotorComponent中新加一个成员
表示自己的跳跃高度,默认值为1.0f,最小跳跃高度 是0.5f,最大跳跃高度是5.0f。
- 面板显示
在editor_ui.cpp中加入如下代码。
对于MyStruct的显示,这里使用了ImGui的滑动条,min_value作为滑动条最小值,max_value作为滑动条最大值。
- 跳跃逻辑修改
将跳跃的高度设置为MyStruct中value的高度。
从而实现跳跃高度的修改。