【UnityShader自学日志】线框自发光着色器

2023-12-20 13:08

本文主要是介绍【UnityShader自学日志】线框自发光着色器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、新建一个无光照着色器(Unlit Shader),重命名为“Unlit_wire”

2、修改其代码如下

Shader "PACKT/unlit_wireframe1" {Properties{//线框着色器所需要的三个属性_Color("Color", Color) = (0,0,0,0) //模型的颜色_EdgeColor("Edge Color", Color) = (0,1,0,1) //线框的颜色_Width("Width", float) = 0.1 //线框的粗细}SubShader{//指定着色器以透明方式渲染Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" }LOD 100//第一遍绘制背面Pass{//指定混合模式//混合模式,即产生新颜色的方式,可用下面公式来表达//新颜色 = 源颜色 * 源因数 + 目的颜色 * 目的因数//SrcAlpha和OneMinusSrcAlpha的含义为使用源颜色中的alpha通道值作为源因数,用1减去alpha通道值作为目的因数Blend SrcAlpha OneMinusSrcAlpha//渲染模型背面Cull Front//AlphaTest令着色器只渲染Alpha通道大于一定值的像素,而将小于该值的像素直接丢弃AlphaTest Greater 0.5 CGPROGRAM#pragma vertex vert  //顶点处理器函数vert#pragma fragment frag  //片元处理器函数fraguniform float4 _Color;uniform float4 _EdgeColor;uniform float _Width;//定义了顶点处理器的输入数据struct appdata{float4 vertex : POSITION; //顶点坐标float4 texcoord1 : TEXCOORD0; //贴图的纹理坐标float4 color : COLOR; //顶点颜色};//定义了由顶点处理器向片元处理器传送的数据struct v2f{float4 pos : POSITION;float4 texcoord1 : TEXCOORD0;float4 color : COLOR;};//顶点处理器代码//为模型的顶点计算正确的投影坐标,并且把顶点所对应的纹理坐标和颜色一起打包传送给片元处理器代码v2f vert(appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.texcoord1 = v.texcoord1;o.color = v.color;return o;}//片元处理器代码//最终为模型在画面中覆盖的像素计算颜色值fixed4 frag(v2f i) : COLOR{fixed4 answer;float lx = step(_Width, i.texcoord1.x);float ly = step(_Width, i.texcoord1.y);float hx = step(i.texcoord1.x, 1.0 - _Width);float hy = step(i.texcoord1.y, 1.0 - _Width);answer = lerp(_EdgeColor, _Color, lx*ly*hx*hy);return answer;}ENDCG}//第二遍绘制正面Pass{Blend SrcAlpha OneMinusSrcAlphaCull BackAlphaTest Greater 0.5CGPROGRAM#pragma vertex vert#pragma fragment fraguniform float4 _Color;uniform float4 _EdgeColor;uniform float _Width;struct appdata{float4 vertex : POSITION; float4 texcoord1 : TEXCOORD0; float4 color : COLOR; };struct v2f{float4 pos : POSITION;float4 texcoord1 : TEXCOORD0;float4 color : COLOR;};v2f vert(appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.texcoord1 = v.texcoord1;o.color = v.color;return o;}fixed4 frag(v2f i) : COLOR{fixed4 answer;float lx = step(_Width, i.texcoord1.x);float ly = step(_Width, i.texcoord1.y);float hx = step(i.texcoord1.x, 1.0 - _Width);float hy = step(i.texcoord1.y, 1.0 - _Width);answer = lerp(_EdgeColor, _Color, lx*ly*hx*hy);return answer;}ENDCG}}Fallback "Vertex Colored", 1
}

PS:对于透明渲染方式来说,必须先绘制距离摄像机较远的表面,后绘制较近的表面才能获得正确的透明结果。由于物体的背面一定比正面远,所以第一遍渲染必须先绘制背面。

PS Again:此着色器更加接近底层的硬件着色器,若想更加深入了解硬件着色器可查找“可编程图形管线”的相关知识。

 

这篇关于【UnityShader自学日志】线框自发光着色器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516162

相关文章

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的