イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

shader ジオメトリシェーダで平面、立方体を書く

平面,頂点の入力順が重要

    			[maxvertexcount(4)]
			void geom(triangle appdata vg[3], inout TriangleStream outStream){
				float p = 0.5;

				g2f gf = (g2f)0;

				gf.pos = UnityObjectToClipPos(float4(p,p,0,1));
				outStream.Append(gf);

				gf.pos = UnityObjectToClipPos(float4(p,-p,0,1));
				outStream.Append(gf);

				gf.pos = UnityObjectToClipPos(float4(-p,p,0,1));
				outStream.Append(gf);

				gf.pos = UnityObjectToClipPos(float4(-p,-p,0,1));
				outStream.Append(gf);

				outStream.RestartStrip();
			}

立方体

カリングしないとひっくり返ってうまいこといかない

Cull Off
[maxvertexcount(16)]
void geom(triangle appdata vg[3], inout TriangleStream<g2f> outStream){
	float p = 0.5;

	g2f gf;

	gf.fpos = float4(p,p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,-p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,-p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,-p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,-p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	outStream.RestartStrip();

	gf.fpos = float4(-p,-p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,-p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,-p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,-p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,-p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(p,p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,p,p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	gf.fpos = float4(-p,p,-p,1);
	gf.pos = UnityObjectToClipPos(gf.fpos);
	outStream.Append(gf);

	outStream.RestartStrip();

}