【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

相关文章

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果,需要被统计的对象出现上千次,但是如果整个样本只有几千字,被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”? 古德-图灵折扣估计法 在词语统计中,有点词语虽然是出现0次,但是实际的出现概率并不是永远不可能的零。 那需要把一些概率转移给到这些词语。 古德的做法实际上就是把出现1次的单词的总量,给了

如何使用Selenium捕获控制台日志

Selenium是一个流行的开源工具,用于自动化Web浏览器。其中一个关键功能是能够与浏览器的开发者控制台交互。本文将向您展示如何在Selenium中使用Java获取控制台日志。这些日志对于调试和解决Selenium脚本的问题非常有用。 如何查看任何网页的控制台日志 首先,打开浏览器的开发者控制台。在大多数浏览器中,您可以通过右键点击页面并选择“检查”来做到这一点。我们将在我们的测试网站——h

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta