博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Shader】黑白灰深度图渲染
阅读量:4086 次
发布时间:2019-05-25

本文共 2022 字,大约阅读时间需要 6 分钟。

Shader "Custom/RenderDepthMapShader"{    Properties    {        _MainTex ("Texture", 2D) = "white" {}    }    SubShader    {        Tags { "RenderType"="Opaque" }        LOD 100        Pass        {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"            // 顶点着色器希望得到的数据类型通过关键字区分            struct appdata            {                float4 vertex : POSITION;                float2 uv : TEXCOORD0;            };            // 顶点着色器要传递给片段着色器的数据种类            struct v2f            {                float2 uv : TEXCOORD0;                float4 vertex : SV_POSITION;            };            // 自定义纹理图片            sampler2D _MainTex;            // 摄像机开启深度模式之后,深度信息自动传入该内置变量            // Camera.main.depthTextureMode = DepthTextureMode.Depth;            // 渲染路径为:Deferred(否则图像会上下对称颠倒)            sampler2D _CameraDepthTexture;            // ST解释1:SamplerTexture(采样图)            // ST解释2:是指纹理图片的缩放和偏移,S指Scale,T指Transform            // 如果不定义采样图TRANSFORM_TEX()函数就无法正确使用            float4 _MainTex_ST;            // 顶点着色器            v2f vert (appdata v)            {                // 定义一个结构体用于传递给片段着色器                v2f o;                // 校正图像位置和大小                // 用顶点的UV图和材质球的图的tiling和offset做运算                // 确保材质球里的缩放和偏移量是正确的                o.uv = TRANSFORM_TEX(v.uv, _MainTex);                // 转换对象坐标到屏幕像素坐标                 // 等价于:mul(UNITY_MATRIX_MVP, v.vertex)                o.vertex = UnityObjectToClipPos(v.vertex);                return o;            }            // 片段着色器            fixed4 frag (v2f i) : SV_Target            {                // 深度信息保存在_CameraDepthTexture中                // 通过贴图的纹理来获取深度信息,使用UNITY_SAMPLE_DEPTH                // tex2D 二维纹理查询,获取图的不同像素点的深度信息                float depth = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv));                // 讲深度值变为[0,1]的线性深度                float linear01Depth = Linear01Depth(depth);                return linear01Depth;            }            ENDCG        }    }}

转载地址:http://rbkii.baihongyu.com/

你可能感兴趣的文章
浏览器兼容性问题解决方案 · 总结
查看>>
一个很棒的Flutter学习资源列表
查看>>
为什么你应该放弃React老的Context API用新的Context API
查看>>
Flutter 布局控件完结篇
查看>>
Koa2初体验
查看>>
Koa 2 初体验(二)
查看>>
Koa2框架原理解析和实现
查看>>
vue源码系列文章good
查看>>
你不知道的Virtual DOM
查看>>
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
查看>>
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>