【雷区蹦迪系列】UnityShader camera无法输出正确的法线纹理

今天又是学习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

行吧,臭小子们这下全部都棱角分明了。
在这里插入图片描述
深度法线贴图也恢复正常了。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/misaka12807/article/details/115740083