剖面模型(关于片段擦除和三角形面剔除)

这个教程覆盖了表面擦除(discarding fragments)、前脸剔除(front-face)和后脸剔除(back-face)。本篇文章假定你熟悉《RGB 立方体》章节。

性能消耗非常低的剖面,unity中默认情况下渲染引擎剔除了物体背面。

本篇教程的主题是切去渲染网格中三角形或者片段。这么做主要有两个原因:我们想看穿一个三角形或者片段,另一情况是三角形始终是不可见的。同时我们不处理不可见的元素还可以节省一些性能。这两种裁剪方式 GPU 都支持,我们将要讨论他们。

当坐标 y为正(大于零)时,片段会被裁剪掉。着色器的代码如下:

Shader "LT/Discard2"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_ClipYPos("ClipYPosition",Float) = 0.5
_MainTex ("Main Texture", 2D) = "white"{}
}
SubShader
{
Pass
{
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

fixed4 _Color;
float _ClipYPos;
sampler2D _MainTex;
half4 _MainTex_ST;

struct vertexOutput
{
float4 pos : SV_POSITION;
float4 posInObjectCoords : TEXCOORD1;
float2 uv : TEXCOORD0;
};

vertexOutput vert(appdata_full input)
{
vertexOutput output;
output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
output.uv = TRANSFORM_TEX(input.texcoord, _MainTex);
output.posInObjectCoords =  mul(unity_ObjectToWorld,input.vertex);  //把顶点坐标转换成世界坐标
return output;
}
fixed4 frag(vertexOutput input) : SV_Target
{
float clipY = input.posInObjectCoords.y - _ClipYPos;
if (clipY > 0.0)
{
discard; //判断是顶点坐标是否大于0要裁剪.
}
fixed4 col =_Color * tex2D(_MainTex,input.uv) *  input.posInObjectCoords.y;
return col;
}
ENDCG
}
}
}







 


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值