Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见
Posted _Captain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见相关的知识,希望对你有一定的参考价值。
这两天从其它游戏里面拔一些资源来给美术做参考,碰到很多模型都是只有一半可见,另一半要转动视角才可见。
用的是最简单的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"
那这个问题,其实是背面剔除的导致的。
我们知道物体都有两面,一个立方体盒子,有外面和里面之分,对于我们游戏来说,玩家一般只能看到外面,里面其实是不需要的。
所以默认Unity会开启背面剔除,把背对摄像机的面都剔除掉。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
三角面的正面朝向有两种定义方式:
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
以上是关于Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见的主要内容,如果未能解决你的问题,请参考以下文章
Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器
Unity Shaders and Effects Cookbook (6-1) 使用 alpha 参数的 半透明着色器
Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序
Unity Shaders and Effects Cookbook (7-3) 在地形中使用顶点颜色做混合
Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见
Unity Shaders and Effects Cookbook (5-1)LitSphere lighting model