UNITY3D shader学习心得 贴图Fiter mode过滤器模式

出处:https://blog.youkuaiyun.com/u012322710/article/details/50858216

Fiter mode过滤器模式

因为贴图在屏幕里肯定会存在放大,缩小的情况,这种时候就会出现锯齿。 今天看到一个视频有讲解到这一块。

在UNITY3D中点开一张贴图,Fiter mode过滤器模式 ,下面有3个选项 point , Bilinear ,Trilinear

point :点采样模式,屏幕像素会需找最近的贴图像素点,来作为输出,这种比较生硬,但是性能好,不抗锯齿。

Bilinear :双线性采样模式, 采用最近的4个像素来做线性插值,有平缓的过渡。可以解决贴图放大的问题,但是贴图缩小依然有锯齿。 缩小可以用mip-map来解决。

Trilinear :三线性采样模式,可以比较好的解决贴图缩小和放大。
缺点:像素处理速度变慢,贴图大小增加1/3。
优点:画面好,GPU可以根据光栅化结果导入一层MIP-MAP到显存中,减轻硬件负担,综合起来,能弥补像素处理的速度。

### UnityShader 贴图颜色显示不准确的解决方案 在处理 Unity 中着色器 (Shader) 的贴图颜色显示不准确的问题时,有几个方面需要注意。这不仅涉及材质设置,还可能涉及到光照模型的选择以及纹理采样方式。 #### 材质属性配置不当可能导致的颜色偏差 当遇到贴图颜色看起来与预期不符的情况时,首先要检查的是材质球中的属性设定是否正确。确保所使用的 Texture 类型被设为适合当前用途的方式——例如对于非透明物体应选择 `Default` 或者 `Opaque` 模式;而对于带有半透效果的对象,则需考虑使用其他模式如 `Transparent Cutout` 或 `Fade` 等[^1]。 #### 正确应用伽马校正和线性空间渲染 另一个常见原因是由于 Gamma 和 Linear Color Space 设置不同造成的视觉差异。如果项目开启了 HDR 并选择了 Linear Rendering Path,在编写自定义 Shaders 时就需要特别注意如何处理输入 textures 及其 gamma correction。通常情况下,默认导入的图片会被认为是在 sRGB 颜色空间下保存的,因此应当通过特定函数将其转换到线性空间再参与计算[^2]。 ```csharp // 将sRGB转成LinearSpace float3 ToLinear(float3 color){ return pow(color, 2.2); } ``` #### 使用合适的纹理过滤方法 为了提高图像质量并减少锯齿现象的发生,可以调整 Texture Import Settings 下 Filter Mode 参数至 Bilinear 或 Trilinear,并开启 Mipmaps 功能来优化远距离视图下的表现[^3]。 #### 示例代码片段展示修正后的颜色读取逻辑 下面给出一段简单的 HLSL 代码作为示范,展示了如何从纹理中获取像素值的同时进行必要的色彩空间变换: ```hlsl fixed4 frag(v2f i): SV_Target { // 获取原始颜色数据 fixed4 col = tex2D(_MainTex, i.uv); // 如果处于线性工作流则执行gamma矫正 #ifdef UNITY_COLORSPACE_GAMMA float3 linearColor = col.rgb; #else float3 linearColor = pow(col.rgb, 2.2); #endif return fixed4(linearColor, col.a); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值