###前提・実現したいこと
3DのキャラクターをUnity上に配置して、シェーダを設定しています。
一部テクスチャが透過pngで設定されていて、透過部分のメッシュは何もないものとして奥にあるものが描画されるようになってほしいです。
###発生している問題・エラーメッセージ
いろいろなサイトでやり方を探してみましたが、いずれもうまくいかず。。。
特に標準のToonShaderを少し書き換えた以下のソースでアルファが反映されないのはなぜなのかがわからず困っています。
###該当のソースコード
ader "Custom/ToonAlpha" {
Properties{
_Color("Main Color", Color) = (0.5,0.5,0.5,1)
_OutlineColor("Outline Color", Color) = (0,0,0,1)
_Outline("Outline width", Range(.002, 0.03)) = .005
_MainTex("Base (RGB) Alpha (A)", 2D) = "white" {}
_Ramp("Toon Ramp (RGB) Alpha(A)", 2D) = "gray" {}
}
CGINCLUDE
#include "UnityCG.cginc"
struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f { float4 pos : SV_POSITION; UNITY_FOG_COORDS(0) fixed4 color : COLOR; }; uniform float _Outline; uniform float4 _OutlineColor; v2f vert(appdata v) { v2f o; o.pos = v.vertex; o.pos.xyz += v.normal.xyz *_Outline * 0.2; o.pos = mul(UNITY_MATRIX_MVP, o.pos); o.color = _OutlineColor; return o; } ENDCG SubShader{ Tags{ "RenderType" = "Transparent" } Blend SrcAlpha OneMinusSrcAlpha LOD 200 CGPROGRAM
#pragma surface surf ToonRamp
sampler2D _Ramp; // custom lighting function that uses a texture ramp based // on angle between light direction and normal
#pragma lighting ToonRamp exclude_path:prepass
inline half4 LightingToonRamp(SurfaceOutput s, half3 lightDir, half atten)
{
#ifndef USING_DIRECTIONAL_LIGHT
lightDir = normalize(lightDir);
#endif
half d = (dot(s.Normal, lightDir)*0.5 + 0.5) * atten; half3 ramp = tex2D(_Ramp, float2(d,d)).rgb; half4 c; c.rgb = s.Albedo * _LightColor0.rgb * ramp * 2; c.a = s.Alpha; return c; } sampler2D _MainTex; float4 _Color; struct Input { float2 uv_MainTex : TEXCOORD0; }; void surf(Input IN, inout SurfaceOutput o) { half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG
// UsePass "Toon/Basic Outline/OUTLINE"
Pass{
Name "OUTLINE"
Tags{ "LightMode" = "Always" }
Cull Front
ZWrite On
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
fixed4 frag(v2f i) : SV_Target
{
UNITY_APPLY_FOG(i.fogCoord, i.color);
return i.color;
}
ENDCG
}
} Fallback "Diffuse"
}
###試したこと
課題に対してアプローチしたことを記載してください
c.a = s.Alpha;
の部分でアルファの適用ができると思っていたのですが、なぜか適用されなくて困っています。。。
お願いします。
あなたの回答
tips
プレビュー