【Reading Notes】CP1-Create a basic Standard Shader

OpenGL学习笔记-2015.3.24——transform feedback缓存&粒子系统示例分析 transform feedback是OpenGL中比较酷炫的特性之一,他让客户端应用程序可以获取到渲染流水线上的顶点数据。基于这一特性实现了基于z-pass场景决策渲染技术,当然在此并没有去了解何为z-pass场景决策渲染技术,总之是一个可以有效减少渲染数据的输送。这里只是通过一个简单的例子系统,去了解transform feedback对象的使用方法。 阅读详情

开篇

每一个使用Unity的开发人员都应该熟悉components(组件)这个概念。在Unity游戏中所有的Object(对象)都包含的一定数量的的components,这些components实际影响了Oject的显示和行为。Scripts(脚本)决定了Object的行为,renderers(渲染器)决定了它们如何显示在屏幕上。Unity当中有几种渲染器,使用那种这取决于我们想要显示对象的类型。每一个3D模型都有MeshRenderer(网格渲染器),一个Object应该只有一个renderer,但每个renderer可以拥有多个matrials(材质)。这里的每个材质使用了一个Shader去修饰(定义),Shader是3D渲染流程的最后一环.组件之间的关系如下:
image

第一个Shader

选择合适的文件夹,鼠标右键创建材质和Shader.

Shader "cookbook/StandardDiffuse" {
    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 200

        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard fullforwardshadows

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _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 color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

技术上来说,这是一个基于物理的(physically-based)Surface Shader, 在Unity5成为了标准Shader。从名称上可以看出,这个类型的Shader较为真实的模拟了当光照射到物体表面的时候的物理表现。如果你使用Unity4版本,将会看到生成的代码有很大的不同。在介绍基于物理的Shader之前,先看看Unity4相对来说技术上比较简单的Shader.所有这些类型的Shader都会在下一章节一一探讨。

着色器如何工作

在Unity中使用Surface Shader的环境和运行将是十分简单的工作,对于你来说只是点击几下鼠标就好。但有很多关于Surface Shader的工作Unity都已经为了做了。Unity 使用Cg 着色器语言,对其进行了精心的封装,封装了大量的细节。Surface Shader更多的是使用基于组件的思想去编写。一些例如处理纹理坐标,矩阵的变换的任务都已经为你做好了,所以再也不需要去重新编写这些逻辑。在以前,我们在编写一个新的Shader的时候我们不得不一遍一遍的重复书写一些相同的代码,随着你越来越了解Surface Shaders, 会很自然的会想要了解CG语言的底层函数和Unity在底层是怎么处理这个GPU的渲染任务的。

在Unity5中内建的Shaders是默认隐藏的,你不能在Editor中打开官方的Shader. 大部分Unity内建的CG函数,都可以在Unity的安装目录中找到(Unity45\Editor\Data\CGIncludes),在这里你可以看到Unity使用的一些工具函数的源码。还可以到官网网站上下站各个版本的内建Shaders源码.

Unity5中遗留的Unity4版本的Shanders

不可以否认的是在过去十年视频图像游戏发生了翻天覆地的变化。每一款使用了最顶尖技术的新游戏都越来越接近现实环境[?]. 所以不必为Unity Shader变化十分大这个事实感到惊讶。在Unity5之前,主要有两种Shader:Diffuse & Specular. 如名称意义,它们用于不光滑和反光的材质,另外,如果以正在使用Unity5,可以选择跳过这一章节。本章节主要说明怎样移植这些效果到Unity5中。

Unity5可以自动升级Unity4版本的工程,untiy4中的shader将被替换成Unity5中的Lagacy Shader(Unity5为了兼容,而保留)

为Shader添加properties(属性)

Properties 在Shader的渲染管线中十分重要,让用户可以改变纹理,调整shader的各种属性。Properties提供了为Shader的调整提供了可视化的途径。

属性的结构:

_AmbientColor (“Ambient Color”, Color) = (1, 1, 1, 1)

[变量名]   [Inspector 名称] [Type]  [默认值]

属性类型:

Range(min, max) float 滑动条

Color 颜色(float, float, float, float)

2D 2D 纹理

Rect ?纹理

Cube 立方体纹理

Float 浮点值

Vector 向量(float, float, float, float)

使用properties

需要再SubShader中再次声明属性才可以使用。

OpenGL 学习笔记-2015.4.18——立方体纹理映射-天空盒子-环境映射 立方体映射(cube-map)纹理是一种特殊类型的纹理,用于环境映射,使用一组图像并把他们作为立方体的面。立方体映射的6个面用正方形并且大小相同的6个子纹理表示。要从立方体纹理中采样的时候,使用的纹理坐标是3维,并且被看做来自原点的方向!方向指向用来读取纹理的立方体映射表面的位置。在这里例子中,有关于环境映射的代码,主要思想是通过观察向量和表面的法向量反射来确定采样的纹理坐标。     通过将一 阅读详情

相关推荐

利用MATLAB 4f光学系统,在Python中进行弗劳恩霍夫衍射和傅里叶面滤波——用镜头模拟光学图像处理。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

OpenGL学习笔记-2015.4.1——纹理加载与控制

在纹理贴图技术问世之前,虚拟3维世界只能通过几何模型去模拟现实,可想而知,现实世界的错综复杂,计算量之大并不能满足实时显示的需求。纹理映射带来了革命性的变换,简单的使得虚拟的3维世界得以无限接近于现实。纹理映射技术最早是由Catmull 在1947年率先提出的,Catmull首先找到了以(u,v)表示的双变量实数空间(纹理空间)和以参数(s,t)表示的三维曲面之间的对应关系(映射关系)。

所学、所思、所悟——coderling 6388

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

OpenGL学习日记-2015.3.13——多实例渲染

实例化(instancing)或者多实例渲染(instancd rendering)是一种连续执行多条相同渲染命令的方法。并且每个命令的所产生的渲染结果都会有轻微的差异。是一种非常有效的,实用少量api调用来渲染大量几何体的方法。OpenGL提供多种机制,允许着色器对不同渲染实例赋予不同的顶点属性。

所学、所思、所悟——coderling 4226

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

OpenGL学习日记-2015.3.5——Hello glsl(着色器)

过年前忍不住买了本新版的OpenGL编程指南,主要的目的还是为了系统的学习着色器编程,另外就是接触新版的OpenGL技术和思想。看了几页,就过年了QAQ.回来后也是各种不在状态,不想上班,不想工作,不想写代码。。。昨天终于强迫自己继续看书,也找回了些状态。     书本基础知识的全面性和权威性就不用说了,不过这个源代码就。。。。这第一个例子照着代码来抄结果。。。我想应该是原来的代码一个参

所学、所思、所悟——coderling 3775

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

OpenGL学习日记-2014.12.21--光照

一、光照和颜色密切相关,光照也是由不同颜色的光去描述,所以由于颜色的表示有两种模式:rgba模式和颜色索引模式,所以光照也分为rgba下的光照,和颜色索引模式下的光照。不过同样的是rgba模式下的光照灵活方便,主要还是使用rgba下的光照模式。 二、隐藏表面消除工具。 三、现实世界和OpenGL关照 四、材料和颜色 五、创建光源 六、选择光照模型 七、定义材料属性

所学、所思、所悟——coderling 2475

高德地图JS API私有化部署实战:从数据爬取到内网集成

本文详细介绍了高德地图JS API私有化部署的完整流程,涵盖从地图瓦片数据爬取、JS API离线化改造到内网项目集成的实战步骤。重点解决了在封闭内网环境中实现地图功能的核心难题,并提供了Vue.js项目中的具体集成代码与调试技巧,帮助开发者在离线环境下构建稳定可靠的地图应用。

weixin_29062255的博客 318

用树莓派Pico低成本更新USB-C PD控制器固件实战指南

固件更新是嵌入式系统开发与维护中的核心环节,它直接决定了硬件设备的功能、性能与兼容性。其原理通常是通过特定的通信接口(如SWD、JTAG、UART或USB)与设备内部的Bootloader建立连接,将新的程序代码安全写入非易失性存储器。在USB Power Delivery(PD)和Type-C生态中,固件更新技术尤为重要,它能修复协议握手Bug、适配新设备并提升供电策略的灵活性。本文聚焦于一个典型的工程实践场景:如何利用广泛普及且成本极低的树莓派Pico开发板,作为USB-C协议到I²C协议的转换桥,实现

weixin_27869497的博客 452

OpenGL学习日记-2014.1.21--混合

混合可以实现很多效果,笔记单纯的记录混合的原理,和混合公式,混合函数的使用。最后分析书中的两个混合代码例子,两个例子结合起来说明了绘图顺序对混合最终效果的影响,及如何去规避这样的问题。在颜色中之前一直忽略的第四个分量alpha终于派上用场。在启用混合情况下,alpha常常用于把被处理片断的颜色值与已经存在帧缓冲区的像素颜色值进行组合。混合操作是在场景进行了光栅化并转换为像素之后,但是在最终的像素绘

所学、所思、所悟——coderling 1314

ESP32S3编译micropython固件

编译ESP32芯片的micropython固件

m0_73253860的博客 2553

【Reading Notes】CP5-Vertex Functions (着色器顶点处理)

写在前面Shader主要是用来模拟3D对象光照的真实情况,但不仅仅如此,他不仅仅定义了Objects看起来怎么样,还可以完全的重定义Objects的形状。在这一章节,将学到: + 在Surface Shader访问顶点颜色 + 在Surface Shader实现顶点动画 + 挤压使模型变形 + 实现雪 + 实现体积爆炸效果简介在第一章节,创建了第一个shader,解释了3D模型不仅仅是三角

所学、所思、所悟——coderling 1168

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 384

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 730

OpenGL学习日记-2014.11.26--简单裁剪

Opengl中,除了视景体的立方体裁剪平面之外,另外还可以额外指定多达6个裁剪平面,对视景体做进一步限制。每一个平面都由平面公式定义:Ax+By+Cz+D = 0.裁剪平面的指定通过函数:glClipPlane(GLenum plane,const GLdouble* equation)确定。plane可能值为:GL_CLIP_PLANE0--GL_CLIP_PLANE6。。。equation为大

所学、所思、所悟——coderling 970

AUTOSAR-WdgM篇

Wdg通常有两种:一种是芯片内部自带的片内看门狗,另一种是在芯片外部通过SPI这种接口连接的片外看门狗。MCAL只负责常用的有MCU内部看门狗,片内看门狗的特点是Wdg模块是直接访问相关硬件寄存器。内部看门狗依赖于系统时钟片外看门狗属于设备抽象层负责,通常需要使用MCAL提供的其他模块(比如SPI,DIO,PWM等)来访问/控制外扩看门狗芯片。这种不能直接访问硬件寄存器。Wdg Driver:有三种模式slow mode,fast mode ,off mode。

qq_329563867的博客 5828

【Reading Notes】CP2-Surface Shaders and Texture Mapping

Introduce在这一章节,我们将探索Surface Sshader.将会从非常简单的材质开始,最后完成一个全息投影?和地形纹理融合(Blending)。还可以使用纹理动画,混合,以及其他任何我们想要的属性。本章知识点: + Diffuse shading 漫反射 + Using packed arrays 使用数组 + Adding texture to a shader 为shader添

所学、所思、所悟——coderling 940

科研绘图系列:R语言绘制差异蝴蝶图(Butterfly Chart)

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

专注生信领域 1390

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenGL学习日记-2014.11.6--OpenGL缓冲区对象

1.何为OpenGL缓冲区对象,他有什么作用     其实在字面意义上来看,就应该知道缓冲区对象的大体做那个,多半是用来解决数据传输问题。在OpenGL,由于OpenGL是按照客户机-服务器模式设计的,在OpenGL中任何时候需要数据,都必须从客户机内存存到服务器,如果数据并没有修改,或者客户机和服务器位于不同的计算机(分布式渲染--不懂。。),就会产生不必要的传输,或者传输比较缓慢。缓冲区对象

所学、所思、所悟——coderling 802

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OpenGL学习日记-2014.11.23--OpenGL变换

由于是重温系列,只是简单记录下迷惑的地方和,以前不知道的地方。 1,观察坐标系的确定,以前一直迷惑摄像机的up向量的确定,由于定位三个向量互相垂直是必须的,而我们在调用gluLookAt()指定的向量都是比较随意,对于摄像机变换并没有很好的理解。终究是由于远离没懂,所以前天特意研究了下,摄像机坐标系的确定:1.首先确定摄像机的位置。2.确定视线方向view。2.接下来只需要在确定其他两个

所学、所思、所悟——coderling 800

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OpenGL学习日记-2014.12.2--颜色

颜色这章还挺有意思的,感觉上了节物理和生物课样。从光子理论,光谱,到光子作用视网膜上的锥细胞,而人终于感知了色彩。 计算机表示颜色有两种模式:RGBA模式和颜色索引模式。无论是那种模式,每个像素都存储雷丁的颜色数据。这个数量由缓冲区的位平面决定。在每个像素中,1个位平面表示1位数据。如果每个像素用8位表示则他可以最多表示2的8次方颜色。 一、RGBA模式:     硬件为R,G,B,A成分保

所学、所思、所悟——coderling 794

【Reading Notes】cp8-Screeen Effects with Unity Render Textures

写在前面在本章节,将学习一下内容: + 建立简单的screen effects 脚本系统 + 使在screen effects中用亮度,饱和度,对比度 + 实现照片风格的screen effects + 在screen effect中使用Overlay Blend介绍要想更深刻地理解着色器的过程,是去创建我们自己的着色器,同样对于screen effects。通过编写screen effec

所学、所思、所悟——coderling 695

【Reading Notes】CP3-Understanding Lighting Models

了解光照模型在前一章节我们学习了Surface Shader,知道怎么样去改变物理材质计算不同的纹理,那么他们到底是怎么工作的呢,这个核心的部分就是光照模型。光照模型是一个计算每一个像素最终的颜色的函数。Unity总是去隐藏了光照函数的实现,因为去编写一个光照模型函数你需要了解光是怎么样从物体表面反射。这一章节将介绍光照模型是如何工作的

所学、所思、所悟——coderling 670
上一篇: 【CSS学习小抄】简要入门
下一篇: 【Reading Notes】CP2-Surface Shaders and Texture Mapping
CoderLing
博客等级 码龄15年 40粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值