[Shader 着色器]终极DIY双面材质攻略

Unity3D 双面渲染Shader实现 概述 在建模软件中可以为每个顶点设置法线,三个顶点可以组成一个三角面,三角面的法线是根据其顶点的法线插值而来,这个法线朝向就代表了这个平面的正面。 而在现代大部分引擎和游戏中,会默认只显示平面的正面,即对每个三角面进行一次面法线和摄像机出射向量的点积,判断正负,如果当前平面是背面朝向摄像机,则不渲染该面片。 Unity 的standard shader就是这样,我们只要创建一个平面就能看出这种效果。 创建一个平面,默认此平面正面朝上。 我们调整角度从下往上看,平面完全不渲染了。除了一个选中的什么都看不见( 阅读详情




Unity内置的Shader,都是单面效果,想必导入Mesh的同学都碰到过这样的痛苦,布料飘起的背面部分看起来是空气,汽车透过车窗看到是路面...各种蛋疼。

有些文章教导大家 把模型做出厚度来吧,这种做法实在太那个啥了......

其实用改写Shader的方法可以很方便的实现双面材质。
Unity里有3种Shader方式:
1.Fixed Function Shaders 
2.Vertex and Fragment Shaders
3. Surface Shaders
关于这部分的详细介绍,请参考官方的教程。
这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。
但是 直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。
在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。

这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。
Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。

首先去Unity官方网站下载一个内置Shader的代码包,链接如下:
http://unity3d.com/download_unity/builtin_shaders.zip  
打开后看见一堆.shader文件,可以用任何文本编辑器打开。可以看见系统内建的Shader基本都是Surface方式。
这里随便打开一个Normal-BumpSpec.Shader 这是普通的高光-凹凸贴图材质
  1. Shader "Bumped Specular" {
  2. Properties {
  3.     _Color ("Main Color", Color) = (1,1,1,1)
  4.     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
  5.     _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
  6.     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
  7.     _BumpMap ("Normalmap", 2D) = "bump" {}
  8. }
  9. SubShader {
  10.     Tags { "RenderType"="Opaque" }
  11.     LOD 400
  12.     
  13. CGPROGRAM
  14. #pragma surface surf BlinnPhong
  15. sampler2D _MainTex;
  16. sampler2D _BumpMap;
  17. fixed4 _Color;
  18. half _Shininess;
  19. struct Input {
  20.     float2 uv_MainTex;
  21.     float2 uv_BumpMap;
  22. };
  23. void surf (Input IN, inout SurfaceOutput o) {
  24.     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
  25.     o.Albedo = tex.rgb * _Color.rgb;
  26.     o.Gloss = tex.a;
  27.     o.Alpha = tex.a * _Color.a;
  28.     o.Specular = _Shininess;
  29.     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
  30. }
  31. ENDCG
  32. }
  33. FallBack "Specular"
  34. }

简单解说一下几个关键行:
第一行Shader "Bumped Specular" 指定了这个shader出现在Unity系统Shader菜单里的名字,如果要修改系统内建Shader的源代码,最好把这个名字改掉,否则和系统内建Shader重名啦。我是这样写的: Shader "Hog's shaders/BumpSpec_Twoside" ,这个shader会出现在Hog's shaders组里,系统会自动完成这个加载。
第二行Properties后面的一组以下划线开头的变量表示了这个渲染器需要设置的参数。对于一个高光-凹凸材质来说,需要材质颜色、反光颜色、反光率、材质贴图和法线贴图,这5个变量就对应这5个东西啦,详细请参考系统手册。
在第11行LOD 400 后面加上一行:Cull off,这个材质就会自动双面渲染了 Cull off表示双面都渲染,不写默认是Cull back,不渲染背面。你也可以写上Cull front,不渲染正面。
改完这行 ,把第一行改成你希望的名字,把这个shader文件拷贝到工程的assets目录底下,系统就能自动加载啦。
效果如图:


双面是双面了,但是哪有两面是一样亮、一样高光区域的....,全透光的砖墙,这种双面很少会用到吧。

如何做到双面不同效果呢?
前面说了Surface shader是不能写两个pass渲染不同面的,但其实surface方式可以写多个渲染过程,根本不需要pass的概念,Surface Shader可以这样写:
Call back 
渲染正面的代码
Call front
渲染反面的代码

就可以实现双面不同的控制了。
根据这个原理,其实我们只要把系统内建shader的源代码复制一份,就能实现另一面不同效果了。以下供参考:
  1. Shader "Hog's shaders/BumpSpec_Twoside" {
  2. Properties {
  3. //正面5个参数
  4.     _Color ("Main Color", Color) = (1,1,1,1)
  5.     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
  6.     _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
  7.     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
  8.     _BumpMap ("Normalmap", 2D) = "bump" {}
  9. //反面拷贝 改名 也是5个
  10.     _BackColor ("Back Main Color", Color) = (1,1,1,1)
  11.     _BackSpecColor ("Back Specular Color", Color) = (0.5, 0.5, 0.5, 1)
  12.     _BackShininess ("Back Shininess", Range (0.03, 1)) = 0.078125
  13.     _BackMainTex ("Back Base (RGB) Gloss (A)", 2D) = "white" {}
  14.     _BackBumpMap ("Back Normalmap", 2D) = "bump" {}
  15. }
  16. SubShader {
  17. Tags { "RenderType"="Opaque" }
  18.     LOD 400
  19.     Cull back
  20. //开始渲染正面    
  21. CGPROGRAM
  22. //表明是surface渲染方式 主渲染程序是surf 光照模型是BLinnPhong
  23. #pragma surface surf BlinnPhong  
  24. sampler2D _MainTex;
  25. sampler2D _BumpMap;
  26. fixed4 _Color;
  27. half _Shininess;
  28. struct Input {
  29.     float2 uv_MainTex;
  30.     float2 uv_BumpMap;
  31. };
  32. void surf (Input IN, inout SurfaceOutput o) {
  33.     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
  34.     o.Albedo = tex.rgb * _Color.rgb;
  35.     o.Gloss = tex.a;
  36.     o.Alpha = tex.a * _Color.a;
  37.     o.Specular = _Shininess;
  38.     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}
  39. ENDCG
  40.     Cull front
  41. //开始渲染反面 其实和就是拷贝了一份正面渲染的代码 除了变量名要改    
  42. CGPROGRAM
  43. #pragma surface surf BlinnPhong
  44. sampler2D _BackMainTex;
  45. sampler2D _BackBumpMap;
  46. fixed4 _BackColor;
  47. half _BackShininess;
  48. struct Input {
  49.     float2 uv_BackMainTex;
  50.     float2 uv_BackBumpMap;
  51. };
  52. void surf (Input IN, inout SurfaceOutput o) {
  53.     fixed4 tex = tex2D(_BackMainTex, IN.uv_BackMainTex);
  54.     o.Albedo = tex.rgb * _BackColor.rgb;
  55.     o.Gloss = tex.a;
  56.     o.Alpha = tex.a * _BackColor.a;
  57.     o.Specular = _BackShininess;
  58.     o.Normal = UnpackNormal(tex2D(_BackBumpMap, IN.uv_BackBumpMap));}
  59. ENDCG
  60. }
  61. FallBack "Specular"
  62. }
这是个双面可以分别指定的高光-凹凸材质,注意几个要点:
properties部分只能出现一次,所以这是不能直接拷贝的。因为要为双面指定不同的参数,双面的参数变量名肯定不能一样,这个论坛里都是程序猿,没必要多解释了。我简单的把用于正面的5个参数前面都加上了一个Back用于反面。
在CG代码内部也要对应的应用相应的参数,反面的渲染代码就用刚才全部加了Back的那5个参数。
正面代码段用Cull back 开始 反面的代码用Cull front开始
以下是渲染效果:


一面是砖墙一面是木板。。蛋疼了没
这个模式下,双面也完全可以指定不同的材质,基本上你不用学习很多内建Shader和CG语法,通过简单的copy-paste就能组合出无穷的双面材质来了。

再提升一下,其实我们常用的双面效果,除了透明的材质以外,无非是两种:
一是反面和正面同样纹理,但是不需要高光、反射,只需要一个相对黯淡的被环境光照亮的材质,比如砖墙木盒衣服什么的
二是反面显示为单身或其他纹理,但也不需要高光、反射,只需要被环境光照亮,比如汽车内部 建筑物内部等等。
第一种情况,反面可以沿用正面纹理,但是以普通的Diffuse方式着色
第二种情况,反面不指定或者单独指定纹理,也以普通的Diffuse方式着色
两种情况,反面的渲染都可以借用系统内建Shader的Diffuse渲染代码来实现,方式一的代码:
  1. Shader "Hog's shaders/BumpSpec_Twoside1" {
  2. Properties {
  3.     _Color ("Main Color", Color) = (1,1,1,1)
  4.     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
  5.     _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
  6.     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
  7.     _BumpMap ("Normalmap", 2D) = "bump" {}
  8.     _BackColor ("Back Main Color", Color) = (1,1,1,1)
  9. }
  10. SubShader {
  11.     Tags { "RenderType"="Opaque" }
  12.     LOD 400
  13.     Cull back
  14.     
  15. CGPROGRAM
  16. #pragma surface surf BlinnPhong
  17. sampler2D _MainTex;
  18. sampler2D _BumpMap;
  19. fixed4 _Color;
  20. half _Shininess;
  21. struct Input {
  22.     float2 uv_MainTex;
  23.     float2 uv_BumpMap;
  24. };
  25. void surf (Input IN, inout SurfaceOutput o) {
  26.     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
  27.     o.Albedo = tex.rgb * _Color.rgb;
  28.     o.Gloss = tex.a;
  29.     o.Alpha = tex.a * _Color.a;
  30.     o.Specular = _Shininess;
  31.     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}
  32. ENDCG
  33.     Cull front
  34.     
  35. CGPROGRAM
  36. #pragma surface surf Lambert
  37. sampler2D _MainTex;
  38. fixed4 _BackColor;
  39. struct Input {
  40.     float2 uv_MainTex;
  41. };
  42. void surf (Input IN, inout SurfaceOutput o) {
  43.     fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _BackColor;
  44.     o.Albedo = c.rgb;
  45.     o.Alpha = c.a;
  46. }
  47. ENDCG
  48. }
  49. FallBack "Specular"
  50. }
反面渲染的运算就直接借用了系统的Diffuse Shader,只不过纹理是沿用正面的纹理,只增加了一个反面的颜色变量用来模拟环境光亮度,与纹理混合实现反面效果。渲染效果如下:



方式二代码:
  1. Shader "Hog's shaders/BumpSpec_Twoside2" {
  2. Properties {
  3.     _Color ("Main Color", Color) = (1,1,1,1)
  4.     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
  5.     _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
  6.     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
  7.     _BumpMap ("Normalmap", 2D) = "bump" {}
  8.     _BackColor ("Back Main Color", Color) = (1,1,1,1)
  9.     _BackMainTex ("Back Base (RGB) Gloss (A)", 2D) = "white" {}
  10. }
  11. SubShader {
  12.     Tags { "RenderType"="Opaque" }
  13.     LOD 400
  14.     Cull back
  15.     
  16. CGPROGRAM
  17. #pragma surface surf BlinnPhong
  18. sampler2D _MainTex;
  19. sampler2D _BumpMap;
  20. fixed4 _Color;
  21. half _Shininess;
  22. struct Input {
  23.     float2 uv_MainTex;
  24.     float2 uv_BumpMap;
  25. };
  26. void surf (Input IN, inout SurfaceOutput o) {
  27.     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
  28.     o.Albedo = tex.rgb * _Color.rgb;
  29.     o.Gloss = tex.a;
  30.     o.Alpha = tex.a * _Color.a;
  31.     o.Specular = _Shininess;
  32.     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}
  33. ENDCG
  34.     Cull front
  35.     
  36. CGPROGRAM
  37. #pragma surface surf Lambert
  38. sampler2D _BackMainTex;
  39. fixed4 _BackColor;
  40. struct Input {
  41.     float2 uv_BackMainTex;
  42. };
  43. void surf (Input IN, inout SurfaceOutput o) {
  44.     fixed4 c = tex2D(_BackMainTex, IN.uv_BackMainTex) * _BackColor;
  45.     o.Albedo = c.rgb;
  46.     o.Alpha = c.a;
  47. }
  48. ENDCG
  49. }
  50. FallBack "Specular"
  51. }
此方式下反面可以单独指定纹理,不指定就直接显示指定的反面颜色,渲染效果如下



以上只是介绍一个基本思想,在这个基础上能应该能衍生出无穷的变化。对自定义shader有兴趣的可以参考系统手册和Nvidia的CG教学手册。
不过千万不要动不动就使用双面材质,因为会增加系统负荷,应该只用在需要的地方。

把以上代码起个名字另存为.shader文件,导入工程assets,就能直接使用。

http://game.ceeger.com/forum/read.php?tid=3024

unity3d双面材质_Unity Shader之双面材质和多Pass渲染 默认情况下,我们编写的Shader都只对模型的正面进行渲染,因为大多数模型都是封闭的,我们看不到反面。在实际的开发过程中,也经常会遇到需要正反面都渲染的时候,比如开发手游的时候经常需要用一个面片+透明的方式表示远处的植物和围墙,如果我们用默认的单面渲染,从另一面就无法看到,只能通过增加一倍面数来实现。通过Cull语句实现双面材质实现双面渲染最简单的方法是用Cull Off。“Cull”意为“剔除”... 阅读详情

相关推荐

Unity中双面显示shader

Unity中比较常用的双面显示shader,希望对需要的朋友带来帮助!

Unity Shader Cull(双面显示)

双击打开编辑器后点击空白地方找到左上角GraphSettings属性下的RenderFace 设置属性默认Front Back反向 Both前置 这个呢 我理解官方说明文档上的差不多参照,网站上看见很多带Two Sided开关的不知道怎么创建的,根据实际情况就不一一一列举了。我们会得到一个S的一个编辑器,右击找到Show is Explorer 打开本地位置,这边呢看大家自己喜欢用什么样的编辑器打开,系统自带txt也能打开,高大上可以用VS,这边呢用的N++平时简单的编辑文档用的挺好!

beita126的博客 4264

unity 双面材质

unity 双面材质 创建一个shader 然后选择这个doubleside就可以了。

【Shader着色器】终极DIY双面材质攻略

Unity内置的Shader,都是单面效果,想必导入Mesh的同学都碰到过这样的痛苦,布料飘起的背面部分看起来是空气,汽车透过车窗看到是路面... 其实用改写Shader的方法可以很方便的实现双面材质。 Unity里有3种Shader方式: 1.Fixed Function Shaders 2.Vertex and Fragment Shaders 3. Surface Shaders

痞子龙3D编程 2091

巨量千川M-API实战:异步报表与批量操作自动化指南

API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了服务间交互的协议和规范。在数字营销领域,营销API(Marketing API)通过程序化接口实现了广告账户管理、数据获取和操作自动化的能力,其技术价值在于将重复性人工操作转化为高效、准确的自动化流程,显著提升运营效率并降低人为错误。在广告投放精细化运营场景中,面对海量数据报表的获取与批量广告状态管理的需求,异步任务处理和批量操作接口成为关键技术解决方案。本文聚焦巨量千川M-API,深入解析其异步报表获取机制与批量操作实现,涵盖从任

weixin_32932149的博客 429

带隙基准源要点

要点: 负反馈>正反馈;电流镜匹配;双极型晶体管匹配;电阻匹配; 经过R0的电流????????????=????????????????−????????????????????????=∆????????????????????i_R0=(〖VBE〗_1-〖VBE〗_2)/R_0 =∆VBE/R_0 经过R1的电流????????????=i_R1= ????????????????????VBE/R_1 零温电流I = ∆????????????????????∆VBE/R_0 +

HI_WALLE的博客 2266

Shader学习13——双面材质

双面材质其实很简单,就增加一句话:Cull Off 控制模型的哪个面会被渲染: // Cull Off 不剔除 // Cull Back 剔除背面(背向摄像机的面) // Cull Front 剔除前面 (朝向摄像机的面) image.png 代码如下: Shader "Unlit/双面材质" { Properties { ...

eevee_1的博客 762

STM32H743玩转以太网:不用FreeRTOS,手把手搞定LAN8742和DHCP(附MPU配置避坑指南)

本文详细介绍了在STM32H743裸机环境下实现以太网通信的完整方案,重点讲解了LAN8742 PHY芯片的配置和DHCP自动获取IP的实现。通过CubeMX配置、内存布局优化和MPU设置,避开了H7系列常见的Cache陷阱,提供了无操作系统环境下的高效网络通信解决方案。

weixin_42709044的博客 201

Unity双面材质--Shader

是不是在Unity开发中会遇到双面材质问题,双面材质就是在3dmax或者maya中用了片或者单面,可以从一面可以透过。可以对Metallic、Smoothness进行调整,选择Source模式。shader中 Rendering Mode中提供了几种渲染模式。

GarFe的博客 1318

基于eBPF和LSM的强制文件访问控制系统架构设计和实现

本文介绍了一种基于 eBPF 与 Linux 安全模块(LSM)实现的强制文件访问控制系统。该系统利用 eBPF 的高性能和动态加载能力以及 LSM 的系统调用拦截功能,提供了灵活且强大的文件访问控制策略。文章详细描述了系统的设计思路、架构组成、关键代码实现及错误处理方式。通过用户空间程序与内核态 eBPF 程序的协作,实现了对文件操作的实时监控和控制,支持动态更新安全策略而无需重启系统。此外,文中还讨论了未来可能的扩展方向,如增加更多 hook 点、集成其他安全模块以及性能优化等。

Linux内核研究者 1839

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 374

Unity的双面材质 Two-Side

双面材质 是不是在Unity开发中会遇到双面材质问题,双面材质就是在3dmax或者maya中用了片或者单面,可以从一面可以透过。 shader中 Rendering Mode中提供了几种渲染模式。 可以对Metallic、Smoothness进行调整,选择Source模式。 上代码: Shader "GarFey/Standard(Two Side)" { Properties { _Color("Color", Color) = ...

大话程序员 8823

基于simulink的AI融合与深度学习控制的场景实例:基于强化学习的电动汽车能量管理策略优化仿真

本文介绍了基于强化学习的电动汽车能量管理策略优化仿真方法。通过Simulink构建包含驾驶循环输入、电池子系统、电机驱动系统和强化学习控制器的仿真模型,采用DQN等算法训练智能代理,设计奖励函数优化能量分配。详细说明了建模步骤和参数设置,包括环境定义、代理训练和性能评估指标。该方法能有效提升电动汽车的续航里程、电池寿命和能源利用效率,为智能能量管理系统设计提供参考。

xiaoheshang_123的博客 154

UnityShader学习教程之<双面材质>

我的群里面有个同学问我双面材质怎么写,我就详细的解释一下双面材质的一种做法! 第一: 首先,我们肯定需要两个pass,一个用来渲染正面,一个用来渲染背面Shader "Unlit/任务26双面材质" { Properties { _MainTexOne ("TEXONE", 2D) = "white" {}//正面贴图 _MainTexTwo ("

xiongwen_li的博客 4258

【项目实战】使用Python - Mediapipe、OpenCV进行手部面部检测(Python源码)

本文介绍了使用MediaPipe和OpenCV库进行实时面部和手部关键点检测的方法。通过MediaPipe的Holistic模型,可以获取468个面部特征点及每只手21个特征点。文章详细说明了环境配置、模型初始化参数设置,并提供了完整的代码实现,包括视频流处理、关键点绘制和FPS计算等功能。这套方案可应用于手语识别、疲劳检测等计算机视觉场景,为开发者提供了一套高效的开箱即用解决方案。

梦想起飞的地方 482

数据分享|1961-2017年中国0.25°×0.25° 逐日地表水文数据集(VIC-CN05.1)

其中,全球径流中心(University of New Hampshire and Global Runoff Data Centre, UNH/GRDC)的复合产流场集成了观测的河道径流和水量平衡模式模拟的地表和地下径流,常被用来评估模拟的径流。在长白山、海北灌丛和千烟洲通量站,模拟与观测的逐月潜热通量的平均NSE为0.61。VIC-CN05.1受益于较准确的大气驱动场、先进的地表水文参数化方案以及更真实丰富的土壤信息,可作为中国水文气象研究的参照数据,用于陆面模式的评估和长期的趋势分析等。

J_Giser的博客 1833

Unity双面Shader(Two Side)

【代码】Unity双面Shader(Two Side)

RandomValue的博客 773

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Unity中的模型双面 显示

修改为:Particles-Standard Surface ,并勾选 Two Sided( 如下图) 即可!中都是 单面显示的(如下图),由于是VR项目,在场景中360度都可以被看到,所以模型必须要双面显示,工作中发现建模师给发的模型放到。,一般默认是Standard。

qq_37524903的博客 6989

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Unity URP Shader双面材质渲染 找不到two side

在2022.3版本里,Portal Shader中Graph Setting的two Side选项取消了,若需要开启双面渲染可以将Render Face改为Both。在unity中物体一面是有图案的,另一面是透明的。

m0_52681311的博客 2996

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Unity中的模型双面显示修改操作

最近工作中发现建模师给发的模型放到Unity中都是单面显示的,由于是VR项目,在场景中360度都可以被看到,所以模型必须要双面显示,记录一下单面模型修改为双面显示的操作过程。

m0_37640877的博客 6321

Unity双面材质Shader

Unity双面材质Shader。 正面渲染支持漫反射贴图、法线贴图、高光度等。背面渲染支持漫反射贴图。 Shader代码如下: Shader "LiangHaoXiangShaders/DoubleFace" { Properties { _Color("Main Color", Color) = (1,1,1,1) _SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess("Shininess", Ra

LHXvs2015的博客 6963

【Unity】材质设置1双面材质2HDRP材质转换3烘焙渲染

2 选中Edit->Render Pipeline->Universal Render Pipeline->将选中材质更新为URP材质,然后材质的shader就变成了这样:Universal Render Pipeline/Particles/Lit。当使用VR或高效果的渲染时,电脑就会很卡,此时查看后发现是可能是实时光照,需要烘焙一下:window->rendering->lighting settings。在HDRP场景中,选中材质后按照上面的操作,发现材质变成粉色,需要做如下操作(HDRP材质转换)

Mrcsdn001的博客 5733

ShaderGraph学习双面材质贴图

先上图 是不是很简单,主要搞明白 Blend(混合)节点 和Is Front Face (是否正面节点)就OK了,剩下的基本颜色其他等等可以自己再添加

qq_40795166的博客 2524

Unity 设置双面材质Material 双面材质 (设置 Tow Sided)

qq_41862125的博客 3981
上一篇: Lightmapping使用及动态加载lightmap方案
下一篇: SVN服务器客户端以及环境的搭建和使用
夜色。
博客等级 码龄16年 468粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值