【UnityShader自学日志】透明着色器(透明头盔效果)

2023-12-20 13:08

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

新建一个Standard Surface Shader,将其命名为Glass

1、打开Glass,将其名称改为"PACKT/Glass"

2、在Subshader下面,找到Tags一行,将Opaque改为Transparent(即从“不透明”改为“透明”)

3、找到着色器的编译指令代码#pragma surface surf Standard fullforwardshadows,并在其后面添加关键字alpha,此关键字使得着色器支持透明,透明度由着色器的颜色属性的alpha通道决定

此时的着色器可以使得外表面有高光效果

 

出于对运行效率的考虑,Unity默认忽略物体的背面,只渲染正面

可以在Subshader代码块中,在LOD一行的下面添加Cull off,此时正面和背面均会被渲染,但因Cull off指令使得正面和背面在同一道绘制调用里被渲染,因此偶尔会出现由于顺序错误而导致的渲染错误。

因此可以通过用两块Cg代码分两次渲染正面和背面来提高画面质量,即多遍渲染

 

1、首先在Properties代码块中添加_Thickness ("Thickness", Range(-1,1)) = 0.5

     _Thickness 表示厚度,用来控制在其中一遍渲染中,模型被放大或缩小的程度

2、将Cull off改为Cull Back(即剔除背面,只渲染正面)

3、往下找到ENDCG一行,在该行下添加

Cull Front//剔除正面(即只渲染背面)CGPROGRAM//指令vertex:vert使得我们可以向着色器插入自定义的顶点处理代码#pragma surface surf Standard fullforwardshadows alpha vertex:vertstruct Input {float2 uv_MainTex;};float _Thickness;//顶点处理代码//以_Thickness属性的值为移动距离,将模型的每一个顶点沿着表面的法线移动,从而便可实现模型的缩放void vert(inout appdata_full v) {v.vertex.xyz += v.normal * _Thickness;}sampler2D _MainTex;half _Glossiness;half _Metallic;fixed4 _Color;void surf(Input IN, inout SurfaceOutputStandard o) {fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;o.Metallic = _Metallic;o.Smoothness = _Glossiness;o.Alpha = c.a;}ENDCG

此部分为渲染背面的代码

 

综上,该shader文件的完整代码如下

Shader "PACKT/Glass" {Properties {_Color ("Color", Color) = (1,1,1,1)_MainTex ("Albedo (RGB)", 2D) = "white" {}_Glossiness ("Smoothness", Range(0,1)) = 0.5_Metallic ("Metallic", Range(0,1)) = 0.0_Thickness ("Thickness", Range(-1,1)) = 0.5//厚度,用来控制在其中一遍渲染中,模型被放大或缩小的程度}SubShader {Tags { "RenderType"="Transparent" }LOD 200//Cull off//关闭剔除,使得正面和背面在同一道绘制调用里被渲染,可能会导致渲染错误Cull Back//剔除背面(即只渲染正面)		CGPROGRAM// Physically based Standard lighting model, and enable shadows on all light types#pragma surface surf Standard fullforwardshadows alpha// Use shader model 3.0 target, to get nicer looking lighting#pragma target 3.0sampler2D _MainTex;struct Input {float2 uv_MainTex;};half _Glossiness;half _Metallic;fixed4 _Color;void surf (Input IN, inout SurfaceOutputStandard o) {// Albedo comes from a texture tinted by colorfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;// Metallic and smoothness come from slider variableso.Metallic = _Metallic;o.Smoothness = _Glossiness;o.Alpha = c.a;}ENDCGCull Front//剔除正面(即只渲染背面)CGPROGRAM//指令vertex:vert使得我们可以向着色器插入自定义的顶点处理代码#pragma surface surf Standard fullforwardshadows alpha vertex:vertstruct Input {float2 uv_MainTex;};float _Thickness;//顶点处理代码//以_Thickness属性的值为移动距离,将模型的每一个顶点沿着表面的法线移动,从而便可实现模型的缩放void vert(inout appdata_full v) {v.vertex.xyz += v.normal * _Thickness;}sampler2D _MainTex;half _Glossiness;half _Metallic;fixed4 _Color;void surf(Input IN, inout SurfaceOutputStandard o) {fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;o.Metallic = _Metallic;o.Smoothness = _Glossiness;o.Alpha = c.a;}ENDCG}FallBack "Diffuse"
}

 

这篇关于【UnityShader自学日志】透明着色器(透明头盔效果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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中的

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL