阿诺德给物体加描边_Arnold 如何抠透明通道?透明物体后期合成方案!

过去在Arnold渲染的图像中,如果包含了透明对象,就非常尴尬,众所周知,Arnold在后期难以分离透明物体,也就是将透明对象与背景分离,即使是现在,这个问题也困扰了很多小伙伴,殊不知Arnold早已经悄悄解决了这个问题,告别过去不能解决透明背景得问题,那么就来看看吧…

场景说明:

作为测试场景,只是简单的布置一下。

对象&材质:圆盘地面(默认材质)、圆柱体(默认材质)、圆锥体(金材质)、球体(玻璃预设材质);

Arnold天空:加载了一张HDR贴图,关闭了摄像机可见(如图所示);

6c41179e35c6e3f4872f582bd6077a96.png

标签说明:

71f3f070b244745427fed0a71e691eef.png

Arnold Tag:过去透明物体需要在Arnold标签中禁用Opaque,而新版据说能自动识别透明物体,所以这里保持默认,顺便测试一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你的问题。 首先,你需要使用 Unity Shader 编辑器来创建一个新的 Shader。在编辑器中,你需要为 Shader 指定一个名称,并设置它的渲染类型为 "Opaque"。 其次,你需要在 Shader 中编写代码,以实现物体只有描边的效果。这可以通过使用描边技术来实现。一种常见的描边方法是使用 Sobel 算法,该算法可以检测物体表面法线变化的边缘。 最后,你需要为描边添加一个材质,以使其看起来更加逼真。这可以通过使用 Unity 的材质编辑器来完成。在编辑器中,你需要指定描边材质和其属性,例如颜色、宽度和透明度等。 下面是一个简单的 Shader 代码示例,可以实现物体描边的效果: ``` Shader "Custom/Outline" { Properties { _OutlineColor ("Outline Color", Color) = (1,1,1,1) _OutlineWidth ("Outline Width", Range(0.0, 0.1)) = 0.01 } SubShader { Tags {"Queue"="Transparent" "RenderType"="Opaque"} Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // 描边宽度 uniform float _OutlineWidth; // 描边颜色 uniform float4 _OutlineColor; struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // 计算描边边缘 float2 ddx = ddx(i.vertex.xy); float2 ddy = ddy(i.vertex.xy); float edge = fwidth(length(float2(ddx.x, ddy.x))) + fwidth(length(float2(ddx.y, ddy.y))); // 判断当前像素是否在描边边缘 float4 color = tex2D(_MainTex, i.uv); if (edge > _OutlineWidth) { color = _OutlineColor; } return color; } ENDCG } } FallBack "Diffuse" } ``` 希望这个代码示例能够帮助你实现物体描边的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值