Unity3D Built-in Shader详解一

Unity_Shader扩展篇_18_Unity Shader入门精要 第18章 基于物理的渲染 在之前的章节中,我们学习了Lambert光照模型、Phong光照模型和Blinn-Phong光照模型。但这些光照模型的缺点在于,它们都是经验模型。如果我们需要渲染更高质量的画面,这些经验模型就显得不再能满足我们的要求了。 近年来,基于物理的渲染技术(Physical Based Shading,PBS)被逐渐应用于实时渲染中。总体来说,PBS是为了对光和材质之间的行为进 阅读详情

Unity3D Built-in Shader详解一

Unity3D的Shader

 

Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader 还是使用标准的Cg/HLSL 编程语言编写的。(因此Unity文档里面的Shader,都是指用ShaderLab编写的代码) 然后我们来看下Unity3D自带的60多个Shader。 这些Shader被分为五个大类:Normal,Transparent,Transparent Cutout,Self-llluminated,Reflective。由于数量比较多,将分几个篇幅一一介绍。

 

(一) Normal Shader Family 这个家族一共9个Shader,都是针对不透明的对象的。 (1) Vertex-Lit: 最简单的一种Shader之一,所有照射在该物体上的光在一个Pass里面渲染完,光源只在顶点计算。所以不会有任何基于像素渲染得效果,比如说:normal mapping,light cookies和shadows.这个shader对模型的剖分(将一个物体从几何描述变为多边形表示的过程)非常敏感,如果你将一个点光源放在很靠近一个立方体的一个顶点那里,并且对立方体使用这个shader,光源只会在角落计算。基于像素光照的shader对剖分没有要求,在表现圆形高光上效果也很好。如果上述情况时你想要的效果,你可以考虑使用一个基于像素光照的shader或者增加模型的剖分。(增加顶点数) 总的来说,这个shader的渲染代价比较小。这个shader包含了2个subshader,分别对应可编成管线和固定管线。是所有硬件都支持的一个最基本的shader。如果设备支持可编成管线,那使用可编成管线的subshader,否则使用固定管线的。

 

(2) Diffuse: Diffuse基于一个简单的光照模型-Lambertian,光照强度随着物体表面和光入射角夹角的减小而减小(即光垂直于表面时强度最大)。光照的强度只和该角度有关系,和摄像机无关。由于这是一个基于像素光照的shader,因此他有这类shader的优势,同时他需要设备支持可编程管线,如果设备不支持,则自动使用Vertex-Lit这个Shader。 总的来说,这个shader渲染代价比较小。

 

(3) Specular Specular 使用和Diffuse相同的光照模型,但是添加了一个和观察角度相关的反射高光。这个被称为Blinn-Phong光照模型。他包含了一个反射强光,这个反射高光物体表面角度,光的入射角度以及观察者角度都有关系。这种高光计算方法实际上是对实时光源模糊反射的一种具有可行性的模拟。模糊的等级通过inspector里面Shininess这个变量控制。 主纹理的alpha通道被用来当作Specular Map来使用(有时候也称gloss map),它定义了物体的反光率。纹理中alpha里面全黑 的部分将完全不反光(即反光率为0%)。而全白的的部分反光率为100%。这个Map在你的物体在不同的部分有不同的反光率的时候非常有用。比如说,锈迹斑斑的金属会反光率低,而磨光的金属反光率比较高。口红的反光率比皮肤高,而皮肤的反光率比棉质衣服高。一个精心制作的Specular Map将会让玩家身临其境。如果目标设备不支持可编程管线,则自动使用Vertex-Lit这个Shader。 这个shader的渲染代价会比较大。

 

(4)Bumped Diffuse 同Diffuse Shader一样,这个Shader基于Lambertian光照模型,同时使用了normal mapping技术来增加物体表面细节。相对于通过增加剖分来表现物体表面细节的方式,normal mapping并不改变物体的形状,而是使用一张称为Normal Map的特殊纹理来达到这种效果。在normal map中,每个象素的颜色代表了该像素所在物体表面的法线,然后通过这个法线(而不是通过物体模型计算而来的法线)来计算光照。可以说Normal Map在计算光照的过程中“高效地修改”了整个模型。 如何创建Normal maps:你可以通过导入一张普通的灰度图(白色表示凸起,黑色表示凹进)Unity会自动将它转换为Normal Map。 技术细节:这里使用Normal map是一种“Tangent space Normal Map”,Tangent space(正切空间)是一个跟随模型物体表面的空间。在这个空间中,z轴始终从表面指向外面。Tangent space Normal Map相对于另一种被称为“Object space Normal Map”来说有点复杂,但是他有一些优势。1)可以使用在各种奇形怪状的表面 2)便于在同一物体不同区域或者不同物体间复用 具体关于Tangent Space Normal Map和Object Space Normal Map的区别,下次再讲。 如果调用这个shader失败,则会调用Diffuse这个shader,一般而言,该shader渲染代价低。

(5) Bumped Specular 和Specular一样的光照模型,相比Specular而言,它使用一张Tangent Space Normal Map来描述物体表面法向量的变化,来增加物体细节。(关于normal map具体见Bumpped Diffuse)如果调用失败,则使用Specular这个shader,一般而言,这个shader的渲染代价会比较大。

(6) Parallax Diffuse Parallax Normal mapped与传统的normal mapped一样,但是对“深度”的模拟更佳。额外的深度效果是通过Height Map(高度图)来实现的。Height Map在Normal map的alpha通道里面保存。全黑表示么有高度,而白色表示有高度。通常这用来表现石头或者砖块间的裂缝。 Parallax mapping的技术很简单,因此会有些人工痕迹或者不太正常的效果出现。尤其是,急剧陡峭的高低转换在高度图里面应该避免。在inspector里面调整height数值来调整高度的范围,有时候会造成物体不真实,凌乱的情况。因此建议使用高度变化平缓的高度图或者将高度数值设置比较低,让表面看起来比较平缓。 这个shader的渲染代价相比bumped diffuse而言更大。如果调用这个Shader失败,则自动使用Bumped Diffuse。

(7) Parallax Specular 与Bumped Spcular相比,增加了一张Height Map来描述深度细节。关于Height Map,见parallax Diffuse。如果调用失败,则调用Bumped Specular这个Shader。

 

 

(8) Decal 这个Shader在unity文档里面的描述和Unity3.0有明显的实现区别,文档由于比较老,07年写的,官网下的Built-in Shader里面,decal是使用可编程管线实现的,就是说,如果你的机器不支持可编程管线,会使用diffuse,因为diffuse也不需要可编程管线,所以只能使用vertex-lit。这个Shader除了主纹理之外,这个Shader还是用了第二张纹理用来描述细节。第二张用来Decal(贴花)的纹理使用alpha通道来确定是否覆盖主纹理。贴花用的纹理只是对主纹理的补充。比如说你有一个砖砌的墙壁,你可以使用一个砖块的纹理作为主纹理,然后使用带有alpha通道的Decal纹理在墙壁的不同地方涂鸦。

(9) Diffuse Detail 这是一个普通的diffuse shader加上一些额外数据的shader。它允许你定义第二张纹理,称为Detail Texture。当camera靠近的时候,Detail Texture逐渐显示出来,一般用于地形。比如说,当你使用一张低分辨率的纹理拉升到整个地形上的时候。随着camera逐渐拉近,低分辨率的纹理开始模糊,这不是我们想要的效果。为了避免这个效果,创建一张Detail 纹理会将地形tile化。在这种模式下,随着camera逐渐拉近,额外的细节将会出现以避免出现模糊的效果。 Detail 纹理是覆盖在主纹理上面的。Detail纹理中深色的部分将会使得主纹理变深,而淡色的部分将会使主纹理变亮,Detail纹理通常是浅灰色。(与Decal里面Decal纹理不同的是,Decal纹理是RGBA,通过alpha控制Decal Texture与Main Texture的融合,而Detail的纹理是RGB,直接是两张纹理的rgb通道分别相乘再*2,就是说,Detail纹理中颜色数值 = 0.5不会改变主纹理颜色,>0.5会变亮,<0.5加深)


转载:http://www.web3d.com.cn/bbs/viewthread.php?tid=1446

Unity3d URP 渲染管线和 Built in 渲染管线中 shader 的区别 URP使用HLSL语言;BIPR使用CG语言 URP 的SubShader的Tags中需要添加"RenderPipeline" = “UniversalPipeline” URP使用单一的forward通道,多个光照通过数组形式传入;BIPR每一个光照跑一个pass 合批流程不同,URP给每个不同的材质球建立持久化数据在gpu中,每一个shader变体一次合批,无论多少材质球;URP每一个材质球一次合批(下图)CBUFFER_START, CBUFFER_END URP需要定义取样器S.. 阅读详情

相关推荐

【Unity3D优化】优化内置shader的内存占用

在打AB包的过程中,并不会把这些Built-in的shader单独打包,并与材质球和预设体做好依赖,因此打AB包时,Unity会自行在材质球和预制体的AB包内每一个都包含进去用到的Built-in的Shader,而且运行时,由于加载的是不同的AB包,shader也是不同的实例,占用的也是多份内存。结合项目特点可以分析,由于项目里使用了大量的粒子特效,一些特殊的效果,会给特效师写定制的shader,但是这些常见的效果,特效师直接使用了Unity Built-in的shader。继续优化内存占用。

a310989583的专栏 2313

【亲测免费】 Unity-Built-in-Shaders 安装和配置指南

### 项目基础介绍 Unity-Built-in-Shaders 是一个非官方的 Unity 内置着色器仓库,由 TwoTailsGames 维护。这个项目包含了 Unity 内置的着色器源代码,适用于 Unity 2019.4.1 版本。这些着色器主要用于渲染 3D 模型和场景,提供了多种视觉效果和渲染技术。 ### 主要的编程语言 该项目主要使用以下编程语言: - **ShaderLab*...

gitblog_09126的博客 1350

Unity3D转微信小程序全流程实战:从开发适配到性能优化的避坑指南

WebGL技术为在Web端实现高质量3D渲染提供了可能,其核心原理是通过JavaScript API调用GPU进行图形绘制,从而在浏览器中实现接近原生应用的视觉体验。这项技术的价值在于打破了平台限制,让复杂的3D应用得以在轻量级环境中运行。在电商展示、在线教育、数字营销等应用场景中,3D交互能显著提升用户体验和转化率。微信小程序基于WebGL的渲染能力不断进化,为3D内容落地提供了广阔平台。Unity3D作为成熟的游戏引擎,拥有强大的编辑器和资源生态,通过官方转换工具链,开发者可以高效地将3D项目适配至小程

weixin_30566111的博客 483

[转] Unity3D Built-in Shader详解一

Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象.       首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader 还是使用标准的Cg/HLSL 编程语言编写的。(因此Unity文档里面...

weixin_34227447的博客 117

unity builtin_shaders - unity自带shader源码

unity builtin_shaders - unity自带shader源码 Transparent的是alpha开头的

Unity内置着色器源码 版本:builtin_shaders-2017.4.32f1.zip

Unity内置着色器源码 版本:builtin_shaders-2017.4.32f1.zip

【Unity3D】Shader Graph简介

Shader Graph 是 Unity 官方在 2018 年推出的 Shader 制作插件,是图形化的 Shader 制作工具,类似于 Blender 中的 Shader Editor 和 UE 中的 Material Editor,它使用流程图的形式表达顶点变换和片元着色的流程,通过节点(Node)的连接实现各种复杂的特效,关于节点的介绍详见→Shader Graph节点。

little_fat_sheep 5202

FOC项目知识点总结三 | 完全搞懂 Clarke 与 Park 变换(附动图,仿真文件以及详细讲解数学推导过程)

本文目的,最终可以完整推算两种变换 Clarke 变换 首先先看我们需要用到的两种坐标系 1. 自然坐标系 abcabcabc 我们知道,通过三相逆变电路,我们可以画出一个自然坐标系 abcabcabc ,即三相电压的坐标系,通入的电流在这三轴坐标系中变化: 将三个矢量相加合并在一起就如下图所展现: 使用三个坐标轴来表示十分的麻烦与不直观,因为其是非正交的,于是乎我们想要将其转化成使用两个正交的坐标轴来表示,于是乎便有了 Clarke变换。 Clarke 变换的作用: 将基于三轴二维的定子静止坐标系的各

Wilson Huang的博客 3万+

Unity3D内建参数文档翻译与解析——Built-in shader variables

本篇将会结合Unity3D官方文档对Unity3D内置参数或函数进行讲解及文档翻译。 本篇将会持续更新,更新结束后这一句话将会删除。光照部分本次讲解的内容为光照相关,因为我接下来的篇章将会对Unity3D光照相关的知识进行分析,所以在此处对一些光照方面的基础性的知识作一些整理。本次的内容为光照相关的内建参数。 注:为了避免网络上中文术语混乱带来的理解障碍,一些专业术语将保留使用英语。

kevlis的博客 1866

VS2022下C# WPF项目一键打包成独立exe的完整指南

本文提供了一份在Visual Studio 2022中将C# WPF项目一键打包成独立可执行exe文件的完整指南。通过配置项目属性、启用单文件发布和自包含模式,开发者无需依赖第三方工具,即可生成可在未安装.NET运行时的电脑上直接运行的独立程序,极大简化了桌面应用的分发流程。

weixin_28831399的博客 674

224G PAM-4 通道的 PCB 和封装设计

该行业正在努力实现层厚非常低的 sub-Dk = 3 材料,以及更先进的加工,这将使封装和 PCB 中的透射电镜截止值更高。当回波损耗占主导地位时,我们基本上需要去除沿互连产生阻抗失配的任何元件,就像上面描述的更光滑的铜和更低的 Dk 值一样。第二个影响是传输线阻抗匹配在 56 GHz 范围内的非常高的频率下非常困难的主要原因之一,另一个因素是 Tx 或 Rx 封装/缓冲器中的寄生效应。由于 PCB 和封装中的长度刻度,这是 BGA 上的焊盘、过孔和球等小结构开始在输入阻抗中产生明显偏差的频率范围。

jkh920184196的博客 843

Unity3D Built-in Shader,unity3d内置shader详解1

http://wenku.baidu.com/view/e82c4e196bd97f192279e922.html Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象.        首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的ve

naoomi的专栏 1483

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

Unity Built-in Shader详解三

上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求。       Transparent Cutout Shader Family是对半透明对象Shader的一类补充,与Transparent Shader Family有所区别的是:Cutout Shader Faimily中的Shaders不允许绘制部分透明的区域。就是说...

weixin_33727510的博客 125

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 425

对单周期 RISC-V 处理器进行扩展

对单周期 RISC-V 处理器进行扩展

xiaoxian666的博客 1484

Unity3d精品插件_专项Shader专门扫描和管理Shader Control

扫描和管理的插件本来就很多了 有Excel数据库的 有Assets的 有AssetsBundle的 也有BuildReport的 这算时Shader专门插件最好用的,没有之一 特色 代码略屌,硬分析 全扫描 有跳转 文档清晰 因为底层源码通用,所以支持多个版本,相对于。2019后官方增加的keywords毫不逊色 支持Built-in Resource扫描 ...

大话程序员 659

【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?

介绍了一种由汇编代码得到C代码的方法

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

物理渲染(PBR)详解

PBR(Physically Based Rendering,物理渲染)是一种基于物理原理的渲染技术,旨在模拟真实世界中光照和材质的行为。PBR渲染方程是PBR渲染技术的核心,描述了光线在与物体表面相互作用时的行为。PBR渲染方程通常分为表面反射(Specular)和表面漫反射(Diffuse)两部分。Lo​pωo​∫Ω​fr​pωi​ωo​Li​pωi​ωi​⋅ndωi​Lo​pωo​表示观察点p上沿观察方向ω。

yasin的博客 3690

Transformer实战(40)——Transformer时间序列数据建模

Transformer 因其在自然语言处理 (Natural Language Processing, NLP) 任务中的优异表现而被广泛应用,其主要优势在于能够有效建模时间序列数据。这些数据可以是文本,也可以是非文本。本节将介绍如何使用 Transformer 进行时间序列数据建模和预测,将学习时间序列的基本概念,并在此基础上使用一个简单的模型,用以初步了解时间序列数据,并为各种预测任务奠定基础。

盼小辉丶的博客 2414

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 转载自风宇冲Unity3D教程学院 ----shader分类
下一篇: unity3d 凹凸贴图、法线贴图、置换贴图
coding_most
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值