Unity URP 屏幕黑白 保留亮度

该代码段展示了如何从纹理采样中获取颜色信息,并使用RGB到亮度的转换公式来计算像素的亮度值。通过将红色、绿色和蓝色分量按特定权重相加,得到Luminance值并返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv);
float luminance = (col.r * 0.29 + col.g * 0.59 + col.b * 0.12);

return luminance;

 

### 实现 Unity URPShader Graph 的水墨风格效果 在 Unity 中使用 URP(Universal Render Pipeline)和 Shader Graph 创建水墨风格的效果,可以通过以下方式实现: #### 1. **黑白转换** 为了模拟水墨画的质感,通常需要先将彩色图像转换为灰度图。可以利用 `Sample Texture` 节点读取基础贴图的颜色值,并通过简单的数学运算将其转为灰度。 ```python float4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv); float texGrey = (baseMap.r + baseMap.g + baseMap.b) * 0.33; ``` 此部分代码展示了如何从 RGB 颜色中提取平均亮度并生成灰度值[^4]。 --- #### 2. **增强对比度** 为了让画面更接近传统水墨画的艺术感,需进一步强化灰度图中的明暗对比。可采用幂函数 (`pow`) 来调整灰度分布,使亮部更加明亮而暗部更深沉。 ```python texGrey = pow(texGrey, 0.3); // 使用较低指数增加高光区域强度 ``` 随后还可以加入余弦函数处理边缘过渡,让整体看起来柔和自然[^4]。 ```python texGrey *= 1 - cos(texGrey * 3.14); ``` 以上操作均可以在 Shader Graph 内完成,只需连接相应的 Math 节点即可。 --- #### 3. **模糊与扩散效果** 真实的水墨绘画常带有晕染特性,因此引入 Gaussian Blur 或其他类型的滤镜很有必要。虽然直接写 HLSL 更灵活,但在 Shader Graph 下也可以借助内置节点达成相似目的——比如添加 Noise 节点作为随机扰动源,再配合 Lerp 进行混合。 具体做法如下: - 添加一个 Gradient Noise 节点; - 设置其 Scale 参数决定干扰范围大小; - 将结果送入 Subtract 或 Multiply 操作改变原有像素位置关系从而形成类似泼洒墨汁后的散射现象[^3]。 --- #### 4. **后期调优** 最后一步是对整个场景施加全局性的艺术加工。例如降低饱和度直至完全去色、叠加颗粒噪点模仿宣纸质地等等。这些都可以依靠 Post Processing Stack v2 完成配置无需额外编码工作量大减。 注意切换至 Lit 类型 Fragment Shader 后记得关闭 Specular Reflections 开启 Alpha Clipping 才能获得最佳表现效果[^1]。 --- ### 示例 Shader Graph 构建流程 以下是基于上述理论的一个简化版构建指南: 1. 新建材质球关联目标对象。 2. 在 Shader Graph 编辑界面拖拽 Base Color 输入端口出来新建 Sample Texture 2D 获取纹理数据流。 3. 继续串联 Arithmetic Nodes 计算最终输出给 Master Node 使用。 4. 测试运行观察实际成果不断微调各项系数直到满意为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值