Unity游戏图形学 Shader结构

shader结构

shader语言

openGL:SLG跨平台
=>GLSL:openGL shaderlauguge
DX:微软开发,性能很好,但是不能跨平台
=>HLSL:high level shader language
CG:微软和Nvidia公司联合开发,跨平台,基于c语言开发,性能很好

Unity shader语言

openGL、dx、cg都包含
CG和HLSL包括在CGPROGRAM...ENDCG语法快内
GLSL包括在GLSLPROGRAM...ENDGLSL语法快内

自己的语言:shaderlab

一般掌握shaderlab和cg就够了,其他的大同小异

shader的分类

fixed shader :shader1.0 主要是开关式
顶点片段着色器 :shader2.0 功能内的公式我们可以自定义
surface shader:shader3.0 也类似于前两种的封装

shader的结构

Shader "Custom/NewSurfaceShader" //名字
{//属性块,定义属性页的展示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}SubShader{Tags { "RenderType"="Opaque" }LOD 200Pass{CGPROGRAM// 基于物理的标准光照模型,并在所有光照类型上启用阴影#pragma surface surf Standard fullforwardshadows// 使用shader model 3.0目标,以获得更好的外观照明#pragma target 3.0sampler2D _MainTex;struct Input{float2 uv_MainTex;};half _Glossiness;half _Metallic;fixed4 _Color;// 为这个着色器添加实例支持。你需要在使用着色器的材质上勾选` Enable Instancing `。// 有关实例化的更多信息,请参见https://docs.unity3d.com/Manual/GPUInstancing.html。// #pragma instancing_options assumeuniformscalingUNITY_INSTANCING_BUFFER_START(Props)// 但更多的每个实例属性在这里UNITY_INSTANCING_BUFFER_END(Props)oid 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"
}

Shader “Custom/NewSurfaceShader”

表示shader的名字,这里是Custom下的NewSurfaceShader

Properties

属性块,定义属性页的展示

    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}

在这里插入图片描述

subShader

对应显卡
可能存在多个subshader,unity会在所有能用的subshader内选择第一个subshader
如果都不符合,就会进入FUllback,去找指定的shader,这里是Diffuse,支持所有的显卡

Pass

可能存在多个pass,每个pass都会引起一次渲染过程
Pass和subshader之间的公共区域可以定义一些测试

pass内就是一些纹理的设定,渲染,寻值等等,内容比较多,后面会讲
支持所有的显卡

Pass

可能存在多个pass,每个pass都会引起一次渲染过程
Pass和subshader之间的公共区域可以定义一些测试

pass内就是一些纹理的设定,渲染,寻值等等,内容比较多,后面会讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

open3d相关操作总结

open3d其实有很多交互式命令,在运行程序打开了open3d渲染的窗口后,鼠标点击窗口,按H就会弹出,交互命令的帮助,如下图所示: 其中比较常用的有: Q :退出当前窗口 H:打印帮…

5 - 异常处理

目录 1. 总览 1.1 Exception 与 Error 1.2 checked unchecked 异常 1)使用 try-catch 进行捕获 2)使用 throws 关键字抛出 1.3 throw 与 throws 1)throw 2)throws 3)区别 1.4 try-catch-finally 2. try wit…

Airflow大揭秘:如何让大数据任务调度变得简单高效?

介绍:Airflow是一个开源的、用于创建、调度和监控数据管道的工作流平台。这个平台使用Python编写,并通过有向无环图(Directed Acyclic Graph, DAG)来管理任务流程,使得用户不需要知道业务数据的具体内容,只…

Python爬虫学习笔记(一)---Python入门

一、pycharm的安装及使用二、python的基础使用1、字符串连接2、单双引号转义3、换行4、三引号跨行字符串5、命名规则6、注释7、 优先级not>and>or8、列表(list)9、字典(dictionary)10、元组(tuple)11…

SDRAM小项目——写模块

写模块跟着视频看了一个多星期,一开始始终有点弄不清楚,现在记录一下理解的过程。 阅读文档信息: 首先阅读文档信息,了解SDRAM写过程的状态转换和时序图 SDRAM整体状态流程如图所示: 在SDRAM整体系统中&#xff0c…

【算法小课堂】动态规划

动态规划 动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都…

Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中(补充)

文章目录 前言步骤测试结果 前言 通过Java–业务场景:在Spring项目启动时加载Java枚举类到Redis中,我们成功将Java项目里的枚举类加载到Redis中了,接下来我们只需要写接口获取需要的枚举值数据就可以了,下面一起来编写这个接口吧。 步骤 在…

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法(违背题意)2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题,一开始并没有想到好的解题思路,写篇博客再来梳理一下吧。 题目要求: 不使用除法在O(n)时间复杂度内 1.使用除法&am…

新一代数字原住民:市场痛点与“繁”思维应对之道

随着科技的迅速发展,尤其是互联网的普及,新一代数字原住民经营者已经逐渐成为市场的主力军。不同于传统的消费者,有着独特的消费习惯和心理需求。企业要在这激烈的市场竞争中获得优势,深入了解这一群体的特征和心理、行为&#xf…

有趣的事,讲给有趣的人听

哈哈哈,今天不写技术了,今天分享一下生活,技术我们什么时候都可以学,但是生活更值得我们现在就去更好的体验! 两年多的涤生大数据,认识了形形色色的小伙伴,陆续沟通下来6000多人,彼时…

数据库锁表原因、排查、解决

一.场景 场景1场景2二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML( insert 、update 、delete ) A操作进行全量数据同步,对整个表的粒度进行上锁,导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表…

Elasticsearch windows开箱即用【记录】

一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…

PyTorch项目源码学习(3)——Module类初步学习

torch.nn.Module Module类是用户使用torch来自定义网络模型的基础,Module的设计要求包括低耦合性,高模块化等等。一般来说,计算图上所有的子图都可以是Module的子类,包括卷积,激活函数,损失函数节点以及相…

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

VR全景技术如何应用在城市发展,助力城市宣传展示

引言&#xff1a; 随着科技的不断发展&#xff0c;VR全景技术正逐渐渗透到各行各业&#xff0c;其中较为广泛的应用之一便是城市展示。那么VR全景技术如何运用在城市展示领域&#xff0c;这项技术给城市发展带来了哪些好处&#xff1f; 一. VR全景技术简介 1.什么是VR全景技术…

怎样制作一本旅游电子相册呢?

​随着数码技术的发展&#xff0c;旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆&#xff0c;还能分享给亲朋好友&#xff0c;甚至上传到社交媒体上&#xff0c;让更多人了解您的旅行故事。那么&#xff0c;如何制作一本精美的旅游…

Postman接口测试之断言,全网最细教程没有之一!

一、断言 在 postman 中我们是在Tests标签中编写断言&#xff0c;同时右侧封装了常用的断言&#xff0c;当然 Tests 除了可以作为断言&#xff0c;还可以当做后置处理器来编写一些后置处理代码&#xff0c;经常应用于&#xff1a; 【1】获取当前接口的响应&#xff0c;传递给…

【数据开发】BI数据报表之数据可测试性设计与分析

文章目录 1、什么是BI&数据报表2、什么是可测试性3、数据测试与方法3.1 数据准确性与对比&#xff08;重要&#xff09;3.2 数据安全性 1、什么是BI&数据报表 数据报表是一种数据可视化工具 用于将数据以图表、表格和其他可视化形式呈现出来&#xff0c;以便用户可以…

BRC20通证的深度科普:它的潜力与如何导入到bitget

​BRC-20通证是什么&#xff1f; BRC-20通证&#xff1a;比特币上的“变形金刚”&#xff1f;&#xff01;不依赖智能合约&#xff0c;它们就像拥有超能力的外星人&#xff0c;直接在比特币的最小单位——聪上刻写JSON代码。哈哈&#xff0c;这比把房子建在乐高积木上还要刺激…