Unity(2022.3.41LTS) - 着色器

目录

一、着色器的基本概念

二、表面着色器



一、着色器的基本概念

  1. 定义与作用:

    • 着色器是一种在图形硬件上运行的程序,用于控制物体的颜色、纹理、光照、透明度等视觉属性。它通过对输入的几何数据(如顶点位置、法线、纹理坐标等)进行计算和处理,输出最终的像素颜色值。
    • 着色器的主要作用是实现各种逼真的材质效果,如金属、玻璃、木材等,以及特效,如光影、粒子效果、后处理等。它可以让游戏场景更加生动、真实,提升玩家的沉浸感。
  2. 着色器的类型:

    • 表面着色器(Surface Shader):这是一种高级的着色器类型,它提供了一种简洁的方式来实现复杂的材质效果。表面着色器自动处理了光照、阴影、反射等复杂的渲染过程,开发者只需关注材质的表面属性和光照模型的定义。表面着色器适用于大多数材质效果的实现,尤其对于初学者来说,更容易上手。
    • 顶点片段着色器(Vertex Fragment Shader):也称为可编程着色器,它提供了对渲染过程的更多控制。顶点着色器负责处理物体的顶点数据,如位置、法线、纹理坐标等的变换;片段着色器负责处理每个像素的颜色计算。开发者需要手动编写顶点着色器和片段着色器的代码,以实现特定的渲染效果。顶点片段着色器适用于需要高度定制化的材质效果和特效的实现。
    • 固定功能着色器(Fixed Function Shader):这是一种传统的着色器类型,它使用固定的渲染流程和参数来实现材质效果。在现代游戏开发中,固定功能着色器已经逐渐被表面着色器和顶点片段着色器所取代,但在一些旧项目中仍然可能会使用到。

二、表面着色器

  1. 特点与优势:

    • 简洁高效:表面着色器使用 Cg/HLSL 语言编写,它提供了一种简洁的语法和结构,使开发者可以快速实现复杂的材质效果。表面着色器自动处理了许多底层的渲染细节,如光照计算、阴影处理等,大大提高了开发效率。
    • 易于理解:对于不熟悉图形编程的开发者来说,表面着色器的语法和结构更容易理解和掌握。它提供了一种高级的抽象,使开发者可以专注于材质的表面属性和光照模型的定义,而不必关心底层的渲染过程。
    • 兼容性好:表面着色器在不同的图形硬件上具有较好的兼容性,因为它自动适应不同的硬件特性和性能。这使得开发者可以在不同的平台上实现一致的材质效果,减少了跨平台开发的难度。
  2. 结构与组成:

    • 属性定义:表面着色器的开头部分是属性定义,用于指定材质的参数,如颜色、纹理、透明度等。这些参数可以在 Unity 的材质编辑器中进行调整,以实现不同的材质效果。
    • 表面函数:表面函数是表面着色器的核心部分,它用于计算物体表面的颜色和属性。表面函数接收输入数据,如顶点位置、法线、纹理坐标等,并根据光照模型和材质属性计算出最终的颜色值。表面函数可以使用内置的光照模型,也可以自定义光照模型,以实现特定的材质效果。
    • 光照模型:光照模型用于定义物体在不同光照条件下的外观。表面着色器提供了一些内置的光照模型,如 Lambert 光照模型、Blinn-Phong 光照模型等,开发者也可以自定义光照模型,以实现更复杂的材质效果。
  3. 示例与应用:

    • 金属材质:使用表面着色器可以很容易地实现金属材质的效果。通过调整材质的颜色、光泽度、反射率等参数,可以模拟出不同种类的金属,如铜、铁、铝等。金属材质通常需要较强的高光和反射效果,表面着色器可以自动处理这些效果,使金属看起来更加真实。
    • 玻璃材质:玻璃材质是一种具有透明和折射效果的材质,使用表面着色器可以实现逼真的玻璃效果。通过调整材质的透明度、折射率、反射率等参数,可以模拟出不同种类的玻璃,如透明玻璃、彩色玻璃、磨砂玻璃等。表面着色器可以自动处理玻璃的折射和反射效果,使玻璃看起来更加真实。
    • 皮肤材质:皮肤材质是一种具有复杂纹理和颜色变化的材质,使用表面着色器可以实现逼真的皮肤效果。通过调整材质的颜色、纹理、粗糙度等参数,可以模拟出不同肤色和肤质的皮肤。表面着色器可以自动处理皮肤的光照和阴影效果,使皮肤看起来更加真实。

三、顶点片段着色器

  1. 特点与优势:

    • 高度定制化:顶点片段着色器提供了对渲染过程的完全控制,开发者可以根据自己的需求编写任意的顶点和片段处理代码。这使得顶点片段着色器可以实现非常复杂和独特的材质效果和特效,如自定义的光照模型、粒子效果、后处理等。
    • 性能优化:由于顶点片段着色器可以手动控制渲染过程中的各个阶段,开发者可以根据硬件性能和项目需求进行优化。例如,可以减少不必要的计算,使用纹理压缩,优化顶点和片段处理代码等,以提高渲染性能。
    • 学习价值:编写顶点片段着色器需要对图形编程有更深入的理解,因此它是学习图形编程的一个很好的途径。通过编写顶点片段着色器,开发者可以深入了解图形硬件的工作原理和渲染过程,提高自己的图形编程能力。
  2. 结构与组成:

    • 顶点着色器:顶点着色器是顶点片段着色器的第一部分,它负责处理物体的顶点数据。顶点着色器接收输入的顶点数据,如位置、法线、纹理坐标等,并进行一系列的变换和计算,最终输出顶点的最终位置和其他属性。顶点着色器可以使用内置的函数和变量,也可以自定义函数和变量,以实现特定的顶点处理效果。
    • 片段着色器:片段着色器是顶点片段着色器的第二部分,它负责处理每个像素的颜色计算。片段着色器接收顶点着色器输出的属性,如位置、法线、纹理坐标等,并根据光照模型和材质属性计算出每个像素的最终颜色值。片段着色器可以使用内置的函数和变量,也可以自定义函数和变量,以实现特定的片段处理效果。
  3. 示例与应用:

    • 自定义光照模型:顶点片段着色器可以实现自定义的光照模型,以实现更加逼真的材质效果。例如,可以实现基于物理的光照模型,如 PBR(Physically Based Rendering)光照模型,以模拟真实世界中的光照效果。自定义光照模型需要对光照原理和物理特性有深入的了解,同时需要进行大量的计算和优化,以保证渲染性能。
    • 粒子效果:顶点片段着色器可以实现各种粒子效果,如火焰、烟雾、爆炸等。通过编写顶点着色器和片段着色器,可以控制粒子的位置、速度、颜色、大小等属性,以及实现粒子的动画效果。粒子效果通常需要大量的计算和优化,以保证渲染性能和效果的真实性。
    • 后处理效果:顶点片段着色器可以实现各种后处理效果,如颜色调整、模糊、景深等。通过在渲染完成后对图像进行进一步的处理,可以增强画面的表现力和真实感。后处理效果通常需要在片段着色器中进行处理,对图像的每个像素进行计算和调整。

四、固定功能着色器

  1. 特点与优势:

    • 简单易用:固定功能着色器使用固定的渲染流程和参数来实现材质效果,不需要开发者编写复杂的着色器代码。这使得固定功能着色器非常容易上手,适合初学者和快速开发。
    • 兼容性好:由于固定功能着色器使用固定的渲染流程和参数,它在不同的图形硬件上具有较好的兼容性。这使得开发者可以在不同的平台上实现一致的材质效果,减少了跨平台开发的难度。
  2. 结构与组成:

    • 材质参数:固定功能着色器通过调整材质的参数来实现不同的材质效果,如颜色、纹理、透明度、光照模型等。这些参数可以在 Unity 的材质编辑器中进行调整,以实现不同的材质效果。
    • 渲染流程:固定功能着色器使用固定的渲染流程来处理物体的几何数据和材质参数,如顶点变换、光照计算、纹理采样等。这些流程是固定的,开发者无法进行修改和定制。
  3. 示例与应用:

    • 简单材质效果:固定功能着色器适用于实现一些简单的材质效果,如纯色材质、纹理材质、透明材质等。这些材质效果不需要复杂的光照计算和特效,使用固定功能着色器可以快速实现。
    • 旧项目维护:在一些旧项目中,可能仍然使用了固定功能着色器。如果需要对这些项目进行维护和更新,可以继续使用固定功能着色器,以保证项目的稳定性和兼容性。

五、着色器的创建和使用

  1. 创建着色器:

    • 在 Unity 中,可以使用内置的着色器编辑器或者外部的文本编辑器来创建着色器。内置的着色器编辑器提供了一种可视化的方式来编写着色器代码,方便开发者进行调试和优化。外部的文本编辑器则提供了更多的功能和灵活性,适合有经验的开发者使用。
    • 着色器文件通常以 “.shader” 为扩展名,它使用 Cg/HLSL 语言编写。着色器文件中包含了着色器的代码和属性定义,可以在 Unity 的材质编辑器中进行引用和调整。
  2. 应用着色器:

    • 创建好着色器后,可以将其应用到材质上。在 Unity 的材质编辑器中,可以选择不同的着色器类型,并调整材质的参数来实现所需的外观效果。材质可以应用到游戏场景中的物体上,使物体具有特定的材质效果。
    • 可以通过脚本动态地切换和调整材质的着色器,以实现不同的效果和动画。例如,可以在游戏中根据不同的场景和状态切换不同的着色器,或者通过调整着色器的参数来实现动态的材质效果。
  3. 优化着色器:

    • 为了提高渲染性能,可以对着色器进行优化。优化的方法包括减少计算量、使用纹理压缩、避免不必要的光照计算等。
    • 可以使用 Unity 的性能分析工具来分析着色器的性能,找出性能瓶颈并进行优化。性能分析工具可以提供着色器的执行时间、内存占用、GPU 使用率等信息,帮助开发者进行优化。

代码

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 200CGPROGRAM// 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.0sampler2D _MainTex;struct Input{float2 uv_MainTex;};half _Glossiness;half _Metallic;fixed4 _Color;// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.// #pragma instancing_options assumeuniformscalingUNITY_INSTANCING_BUFFER_START(Props)// put more per-instance properties hereUNITY_INSTANCING_BUFFER_END(Props)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;}ENDCG}FallBack "Diffuse"
}

这里就是路径和名字.

给材质使用刚才新建的Shader

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

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

相关文章

项目:基于TCP的文件传输系统

项目介绍: 模拟FTP原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在,…

代码随想录Day 23|回溯Part02,39.组合总和、40.组合总和Ⅱ、131.分割回文串

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 第七章 回溯算法part03一、题目题目一: 39. 组合总和解题思路:回溯三部曲剪枝优化小结: 题目二:40.组合总和Ⅱ解题思路:回溯三部曲 题目…

【项目源码】终于有人将打字游戏和编程英语结合起来啦!编程初学者的福音

Hello!各位彦祖,亦菲们!又是美好的一天!今天给大家分享一个Java项目源码:Java打字游戏项目源码! 看到这里,你可能会说! 一个破打字游戏有什么可神气的!!&…

Leetcode面试经典150题-28.找出字符串第一个匹配项的下标

解法都在代码里,不懂就留言或者私信,比第一题稍微难点 用KMP解这个题简直就像大炮打蚂蚁,但是没办法,现在都是这么卷 package dataStructure.bigFactory;public class _28Strstr {public static int strStr(String s1, String s…

springboot3.x入门系列【5】支持unix sock 套接字服务

目录 一、简介 二、springBoot3.x 套接字的支持 1. 环境要求 2. springboot内置tomcat 2.1 支持unix 设置 unixDomainSocketPath 2.2 windows 下unix服务测试 3. springboot外置tomcat 3.1 tomcat 配置unix socket 套接字 3.2 启动tomcat 服务 3.3 nginx 支持unix…

android13固定app方向 强制app方向

总纲 android13 rom 开发总纲说明 1.前言 经常遇到客户有固定或者设置应用方向,不让他们改成其他方向的需求。今天我们就来处理这种问题。 2.问题分析 在 Android 10 之前,显示旋转的处理逻辑分散在多个类和模块中,Android 10 统一了这些逻辑,集中在 DisplayRotation.ja…

MATLAB 沿任意方向分层点云(82)

MATLAB 沿任意方向分层点云(82) 一、算法介绍二、算法实现1.代码2.效果更多内容参考: MATLAB点云处理学习 一、算法介绍 沿着某个方向,将点云分割为多层,每层点云使用不同颜色进行可视化显示,具体代码和不同方向的分层效果如下: 二、算法实现 1.代码 % Load point c…

【文档合集】软件类常用文档整理大全,软件工程,软件项目管理,技术标书方案,模

目的:规范系统开发流程,提高系统开发效率。 立项申请需求分析方案设计方案评审开发调整测试阶段系统培训试运行测试验收投入使用 所有文档过去进主页获取。 获取方式:本文末个人名片直接获取。 软件资料清单列表部分文档清单:工作…

【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch12 随机森林(Random Forest)

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-…

(三)、软硬件全开源手表,具有Wi-Fi和蓝牙LE连接,并可连接互联网,超多表盘。(Watchy)

Watchy 是一款具有开源硬件和软件的 E-Ink watch。它采用准系统设计,利用 PCB 作为表身,可以原样佩戴,或进一步定制不同的 3D 打印表壳和表带。这是一款独特的设计,也是一个可穿戴开发平台,让用户可以创造自己的应用。…

【功能自动化】使用HTMLTestRunner生成测试报告

配置环境: 1.部署webtours网站 2.user.txt 3.HTMLTestRunner.py """ A TestRunner for use with the Python unit testing framework. It generates a HTML report to show the result at a glance.The simplest way to use this is to invoke it…

【论文阅读|cryoET】本周粗读汇总

论文1:CryoDRGN-ET:深度重建生成网络以可视化细胞内动态生物分子 Abstract 虽然冷冻电子断层扫描可以以分子分辨率揭示结构,但图像处理算法仍然是解决原位生物分子结构异质性的瓶颈。本文介绍CryoDRGN-ET用于cryoET断层图的异质重建。CryoD…

Figma 替代品 Penpot 安装和使用教程

在设计领域,Figma 无疑是一个巨人。它彻底改变了设计流程,将协作带到了一个全新的高度。然而,随着 Adobe 收购 Figma 的消息传出,许多设计师和开发者开始担心:Figma 未来会如何演变?那些好用的特性会不会被…

灵办AI:解锁办公新境界,让工作更智能、更高效!

在这个信息爆炸的时代,我们每个人都在寻找能够提升效率、简化工作流程的工具。如果您正在寻找一个能够全方位提升工作效率的AI助手,那么灵办AI绝对值得您的关注。 为什么选择灵办AI? 在众多AI工具中,灵办AI凭借其卓越的性能和独…

简单的C程序基础知识

C程序大致分为3种基本结构: 顺序结构、分支结构、循环结构 由这3种结构可以组成各式各样的复杂程序。 01--C语句 C语句分为以下几类: ①表达式语句 ②函数调用语句 ③控制语句 ④复合语句 ⑤空语句 1.表达式语句: 由表达式分号组成 表…

ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享

上一篇我们分析了 Workflow、WorkflowTemplate、template 之间的关系。本篇主要分析如何在 argo-workflow 中使用 S3 存储 artifact 实现步骤之间的文件共享。 本文主要解决两个问题: 1)artifact-repository 如何配置2)Workflow 中如何使用 …

用AppleScript做macOS UI自动化

用AppleScript做macOS UI自动化 一、定位到System Setting → General → Login Items& Extensions 页面1. 获取页面锚点,以便直接滑动到锚点区域2. 滑动到Extensions 区域 二、根据名称找到元素,再点击元素的按钮三、获取元素位置并点击 一、定位到…

Datawhale X 李宏毅苹果书 AI夏令营 Task2笔记

Datawhale X 李宏毅苹果书 向李宏毅学深度学习(进阶) 是 Datawhale 2024 年 AI 夏令营第五期的学习活动(“深度学习 进阶”方向) 往期task1链接:深度学习进阶-Task1 我做的task1的笔记博客:传送门 Datawhal…

【C语言】宏定义详解

目录 C语言宏定义详解1. 宏定义关键词总览2. #define3. #undef4. #ifdef5. #ifndef6. #if7. #else8. #elif9. #endif10. #include11. #error12. #pragma12.1 #pragma once12.2 #pragma pack12.3 #pragma warning12.4 #pragma GCC 13. #line14. 字符串化和标识符连接14.1 字符串…

C# 对桌面快捷方式的操作设置开机启动项

首先在项目中引入Windows Script Host Object Model,引入方式如下图。 对于桌面快捷方式的修改无非就是将现有的快捷方式修改和添加新的快捷方式。 1、遍历桌面快捷方式,代码如下。 string desktopPath Environment.GetFolderPath(Environment.Special…