Unity でシェーダーを使用して楕円体を描画しようとしています
手順に従って
ください 1.インターネットチュートリアルの助けを借りてカスタムシェーダーを作成し
ました 2.マテリアルにシェーダーを追加しました
3.そのマテリアルをオブジェクトに適用しました
Shader "Custom/HoleMaker" {
Properties{
_Position("Position", Vector) = (0,0,0,0)
_Radius("Radius", Range(0,1)) = 0.01
_Color("Color", Color) = (1,1,1,1)
_CutawayColor("Cutaway Color", Color) = (1,1,1,1)
}
SubShader{
Tags { "RenderType" = "Opaque"}
LOD 200
Cull Front
CGPROGRAMtypes
#pragma surface surf MonoColor fullforwardshadows vertex:vert
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
fixed4 _CutawayColor;
float4 _Position;
float _Radius;
struct Input
{
float2 uv_MainTex;
float3 worldPos;
};
void vert(inout appdata_full v, out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input, o);
v.normal *= -1;
}
half4 LightingMonoColor(SurfaceOutput s, half3 lightDir, half atten) {
return _CutawayColor;
}
void surf(Input IN, inout SurfaceOutput o)
{
//spherical clipping
float dist = distance(IN.worldPos.xyz, _Position.xyz);
if (dist < _Radius)
clip(-1);
o.Albedo = _CutawayColor.rgb;
}
ENDCG
}
FallBack "Diffuse"
}
このコードは円を作成するために機能していますが、関数 clip() を使用して楕円体を作成しようとすると、機能しません。ドキュメントによると、clip(float4 x) を使用してサーフェスをクリップすることもできます。変数 _Radius はワールド空間で完全な球を作成しますが、_Radius.x と _Radius.y を使用しようとすると、コードが機能しません。こちらに添付の画像をご参照ください。