- 博客(11)
- 收藏
- 关注
原创 Unity中的BRDF
一般在DCC软件(SP,SD,Max,Maya)输出,Diffuse,Normal,Mask贴图,UV,顶点色等。SurfaceData储存了基础属性输入的值,InputData储存了世界坐标,世界法线,裁剪空间坐标,世界空间视线方向等。BRDFData除了存储基础属性外,还储存了reflectivity,roughness等,供后续光照计算使用。整个光照计算部分分为直接光和间接光,直接光和间接光又分漫反射和高光反射。二,InputData&SurfaceData。三,BRDFData。
2024-12-02 15:38:09
146
原创 Unity中的卡通渲染
标准材质 卡通材质。现实中边缘光是由背光产生的,风格化渲染中可以通过菲尼尔计算出来。NdotH,卡通渲染高光边缘比较硬,加个Smoothstep。增加额外Pass渲染一张头发阴影图,脸部采样这张图。描边有几种算法,这里选择法线外扩描边。用NdotL采样一张ramp贴图。
2024-10-22 16:26:46
536
1
原创 Unity中的常见Shader
丝绸 丝绒 标准。预积分次表面散射(透射+皮肤明暗过渡部分泛红)KajiyaKay光照模型。Thickness反向。
2024-10-15 15:27:53
343
原创 Unity中常见的水面渲染
毛神 @浅墨_毛星云 整理的图。正弦波在竖直方向上运动,Gerstner波在正弦波的基础上增加了水平方向上的运动。叠加多次可以增加更多细节,模拟水面一般需要64或128层,性能方面存在一定压力。波形出来了,但着色不对,法线没有随着顶点一起变化,需要重新计算法线。1.利用视空间下的深度值计算深水区和浅水区颜色。利用上面算出的边缘Mask,叠加一张泡沫贴图。采样深度图和不透明图时在UV上加入偏移量。单层波效果太单一,再叠加一层看看。可以参考这篇文章,写的比较详细。和不透明颜色做个lerp。
2024-10-11 15:00:03
273
原创 在Unity中基于URP实现基础光照模型
PBR:直接光漫反射+直接光镜面反射+间接光漫反射+间接光照镜面反射。HalfLambert:世界法线与光照方向的点积(NdotL)Lambert:世界法线与光照方向的点积(NdotL)BlinnPhong:半角向量与世界法线的点积。Phong:反射向量与视线方向的点积。
2024-06-18 14:40:39
376
原创 Unity中的反射效果(基于URP)
ReflectionProbe反射探头会采样周围生成一张CubeMap,在Shader中通过变量访问。ReflectionProbe有三种模式,baked,custom,realtime。baked提前烘培,custom可以烘培,也可以在定义一张CubeMap。SSR的一种改进方案,性能更好,会用到ComputeShader,某些手机不支持在Shader里写Buffer,需要注意。适用于表明平整物体的反射,镜子,湖面等。通过步进方式获取反射信息,只会反射屏幕中出现过的像素。ComputeShader部分。
2024-06-18 14:38:18
739
1
原创 Unity中的模糊效果(基于URP)
六、移轴模糊 (Tilt Shift Blur)十、方向模糊(Directional Blur)三,Kawase模糊(Kawase Blur)一,高斯模糊(Gaussian Blur)八、粒状模糊(Grainy Blur)九、径向模糊(Radial Blur)五、散景模糊(Bokeh Blur)四、双重模糊(Dual Blur)七、光圈模糊(Iris Blur)二,方框模糊(Box Blur)十种模糊效果,以后处理方式实现。
2024-06-18 14:28:44
3266
原创 在Unity中用ComputeShader实现草地剔除(基于URP)
需要传到ComputeShader里的数据:草的数量,所有草的矩阵信息,包围盒尺寸,相机的VP矩阵,还有用于计算遮挡剔除的深度图信息。模型可以动态创建,也可以直接用静态模型,声明一个uint数组储存模型信息。首先声明两个ComputeBuffer,用来储存Mesh和剔除后的数据。声明一个ComputeBuffer储存草的transform信息。二,将数据传到ComputerShader里做剔除。三,将剔除后的数据传到Shader渲染。草地数据包括模型,旋转,位置,缩放。步骤:一,获取所有草的数据。
2024-06-18 11:52:09
887
原创 Unity 资源优化
下图有4张UI图片,但它们都用了系统默认材质,都是共享图集的元素,并且它们在场景中顺序也是相连的,所以满足合批优化的条件,最终SetPass Calls(Draw Calls)是1。·To smaller:纹理缩放到最小尺寸大小值的“2的幂”的尺寸大小。·To larger:纹理缩放到最大尺寸大小值的“2的幂”的尺寸大小。·Resample Curves: 将动画曲线重新采样为四元数值,并为动画中的每个帧生成一个新的四元数关键帧。·To nearest:纹理缩放为最接近“2的幂”的尺寸大小。
2024-06-18 11:38:04
2252
原创 Unity 动态天气系统(基于URP)
值用float,颜色用Color,是一个定制,无法满足随时间变化而变化,用AnimationCurve和Gradient替换,AnimationCurve.Evaluate(Time time),Gradient.Evaluate(Time time)。白天时,灯光朝向与太阳一致,晚上时,灯光朝向与月亮一致,太阳朝向与Y轴的夹角大于0为白天,小于0为夜晚。1,太阳(月亮)随时间旋转:采样贴图贴在天空盒上,直接用天空盒UV会有拉伸问题,采样的UV需要C#传矩阵到Shader。创建太阳,月亮,灯光的引用。
2024-06-18 11:02:46
750
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人