今天又是学习UnityShader的一天,今天在实现使用深度法线纹理做边缘检测,从而实现边界判断和描边的过程中,描边效果始终无法实现。反复检查摄像机的脚本和shader都发现不了问题。
好家伙不描个边我都看不到我摆下去的东西到底在阴影的哪里哈哈。
怒启动frame debugger查看。
整整比深度纹理少了一个阶段,其实这个阶段就是渲染摆放在场景中的物体阶段(我的场景里平面+物体共7个,一共7次渲染)。
我百度来谷歌去都没能找到到底是为什么导致法线贴图渲染错误。
- 实际上到这里我就在想,为什么明明前一个深度渲染中就会渲染场景物件,而深度法线渲染里面却什么都不做?在渲染的时候又不是把纹理也渲染上了,只渲染网格的,还能是物体的shader的问题么?
- 其实这里我是有点被OPENGL的思维误导了,毕竟OPENGL的逻辑来说,渲染物体深度贴图,阴影贴图之类的shader肯定是会在物体的漫反射贴图shader之前运作的,所以我理所当然的排除了是问题的漫反射贴图shader出问题的可能。
怀疑人生了一天之后,我怒不可遏地往场景中添加了一个新的3D元件。
我人麻了。
臭小子你咋就这么显眼呢。
果然是漫反射贴图的shader出问题了。
我立马循迹重构漫反射贴图的shader,原来发现竟然是少加了SubShader的Tags标签。
Shader "Unity Shaders Book/Chapter 7/Normal Map In World Space" {
Properties {
_Color ("Color Tint", Color) = (1, 1, 1, 1)
_MainTex ("Main Tex", 2D) = "white" {
}
_BumpMap ("Normal Map", 2D) = "bump" {
}
_BumpScale ("Bump Scale", Float) = 1.0
_Specular ("Specular", Color) = (1, 1, 1, 1)
_Gloss ("Gloss", Range(8.0, 256)) = 20
}
SubShader {
//下面就是前一步中缺少的指定RenderType的部分
Tags{
"RenderType" = "Opaque"}
Pass {
Tags {
"LightMode"="ForwardBase" }
CGPROGRAM
#pragma multi_compile_fwdbase
#pragma vertex vert
#pragma fragment frag
行吧,臭小子们这下全部都棱角分明了。
深度法线贴图也恢复正常了。