Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见
来源:程序员人生 发布时间:2016-11-28 13:56:33 阅读次数:3743次
这两天从其它游戏里面拔1些资源来给美术做参考,碰到很多模型都是只有1半可见,另外一半要转动视角才可见。
用的是最简单的Diffuse Shader:
Shader "Custom/MyDiffuse"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Standard
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
那这个问题,实际上是背面剔除的致使的。
我们知道物体都有两面,1个立方体盒子,有外面和里面之分,对我们游戏来讲,玩家1般只能看到外面,里面实际上是不需要的。
所以默许Unity会开启背面剔除,把背对摄像机的面都剔除掉。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
3角面的正面朝向有两种定义方式:
1、顶点的绘制顺序
2、面法线的朝向
我不知道Unity是哪一种方式。
但是我可以关闭背面剔除。
首先。
Unity 中的背面剔除有几种模式:
1、Cull Back 剔除背面,这是默许的方式
2、Cull Front 剔除正面
3、Cull Off 关闭剔除
默许是 Cull Back
使用 Cull Front 的话,修改Shader以下
Shader "Custom/MyDiffuse"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Cull Front
CGPROGRAM
#pragma surface surf Standard
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
效果
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
剔除正面,留下了背面,背面是不受光照的,所以会更暗。
关闭背面剔除,修改Shader 以下
Shader "Custom/MyDiffuse"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Cull Off
CGPROGRAM
#pragma surface surf Standard
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
效果
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠