【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

相关文章

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除