GPU渲染阶段介绍+Shader基础结构实现

GPU是什么

        (CPU)Center Processing Unit:逻辑编程

        (GPU)Graphics Processing Unit:图形处理(矩阵运算,数据公式运算,光栅化)

渲染管线

        渲染管线也称为渲染流水线,就是CPU准备一些数据,然后告诉GPU渲染出一个二维的

        图像的过程。

        渲染管道的三个阶段:应用程序阶段,几何阶段,光栅化阶段

        1.应用阶段(CPU)

                主要就是CPU将硬盘中的数据加载后,和内存进行通讯后,将需要显示的数据信息

                (顶点数据,纹理坐标,法线信息),传递GPU处理。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Process : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//从硬盘加载数据GameObject prefab = Resources.Load<GameObject>("Capsule");//将数据放置在内存中GameObject capsule = Instantiate<GameObject>(prefab);//物体上面,带有材质球,材质球会引用Shader着色器,因为Shader是GPU编程,所以就会将数据传递给GPU//注意:Unity采用了材质球调用Shader,所以Unity是通过材质球将数据传递给GPU的,别的引擎不一定是材质球实现}
}
          2.几何阶段(GPU)

                几何阶段最重要的工作就是“变换三维顶点坐标”,变换的工作由矩阵运算完成。

                空间

                        模型空间:3D物体的原始坐标,存储在模型中。

                        世界空间:物体放在场景中,才能构成整个游戏场景。

                        观察空间:需要以相机为原点的三维空间。

                        裁剪空间:物体是否在相机的渲染范围内。

                        屏幕空间:3D物体,投影到屏幕上。

                物体最终显示:需要GPU进行一系列的矩阵运算,将模型空间下的点,转换到屏间

                下(转换点的过程是并行)

                非模型顶点信息中记录的点,GPU会以线性插值的方式获得并提示

        3.光栅化阶段(GPU)

                使用上一个阶段(几何阶段)递过来的数据,对像素点进行染色,最终显示出来,

                染色过程为并行执行。

        着色器(Shader)是什么?

                给GPU编程的语言,代码会在GPU上并行执行(几何运算,光栅化)

        Unity的Shader类型

                固定管线Shader:很古老显卡的编程着色器,现在很少使用,画质不好

                顶点/片元Shader:通用的着色器类型(重点学习),可编程

                表面体Shader:Unity自己创建的着色器类型,基于顶点/片元着色器二次封装实

                现,降低了着色器的编写难度。

        材质球和Shader的关系

                Unity中Material用来关联游戏物体和Shader着色器,所以编写Shader前,需要先

                建立材质球

        建立Shader方法

                1.建立材质球

                2.建立Shader文件

                        (1)表面体Shader

                        (2)顶点/片元Shader

                        (3)图片效果Shader

                        (4)GPU运算Shader

        Pass通道和SubShader的区别

                Pass通道在SubShader内部,SubShader不执行,则内部的Pass通道也不会执行

                SubShader从上向下依次执行,每次只会执行一个,同一个SubShader中的Pass通

                道会依次向下执行。

        Shader的基本结构
//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{}//SubShader根据显卡等级只执行一个SubShader{//Pass依次向下执行Pass{}}SubShader{}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}

        实现染色着色器效果(shader文件):

//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{//用于在材质球上面配置的颜色//属性名"_Color()"//参数1:材质面板上显示的名称//参数2:属性的类型Color//等号右边:当前属性的默认值_Color("颜色",Color)=(1,1,1,1)}//SubShader根据显卡等级只执行一个SubShader{Pass{//使用固定管线着色器染色//Color[]是固定管线着色器的染色命令Color[_Color]}}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}

                

该系列专栏为网课课程笔记,仅用于学习参考。       

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

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

相关文章

Spring Boot + MyBatis 动态字段更新方法

在Spring Boot和MyBatis中&#xff0c;实现动态更新不固定字段的步骤如下&#xff1a; 方法一&#xff1a;使用MyBatis动态SQL&#xff08;适合字段允许为null的场景&#xff09; 定义实体类 包含所有可能被更新的字段。 Mapper接口 定义更新方法&#xff0c;参数为实体对象&…

单例模式:确保唯一实例的设计模式

单例模式&#xff1a;确保唯一实例的设计模式 一、模式核心&#xff1a;保证类仅有一个实例并提供全局访问点 在软件开发中&#xff0c;有些类需要确保只有一个实例&#xff08;如系统配置类、日志管理器&#xff09;&#xff0c;避免因多个实例导致状态混乱或资源浪费。 单…

UnoCSS原子CSS引擎-前端福音

UnoCSS是一款原子化的即时按需 CSS 引擎&#xff0c;其中没有核心实用程序&#xff0c;所有功能都是通过预设提供的。默认情况下UnoCSS应用通过预设来实现相关功能。 UnoCSS中文文档&#xff1a; https://www.unocss.com.cn 前有很多种原子化的框架&#xff0c;例如 Tailwind…

【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)

API 调用 阿里云百炼平台的海内外 API 的区别&#xff1a; 海外版&#xff1a;需要进行 API 基础 URL 设置国内版&#xff1a;无需设置。 本人的服务器在香港&#xff0c;采用海外版的 API 时&#xff0c;需要进行如下API端点配置 / API基础URL设置 / API客户端配置&#xf…

C语言笔记(鹏哥)上课板书+课件汇总(结构体)-----数据结构常用

结构体 目录&#xff1a; 1、结构体类型声明 2、结构体变量的创建和初始化 3、结构体成员访问操作符 4、结构体内存对齐*****&#xff08;重要指数五颗星&#xff09; 5、结构体传参 6、结构体实现位段 一、结构体类型声明 其实在指针中我们已经讲解了一些结构体内容了&…

UV: Python包和项目管理器(从入门到不放弃教程)

目录 UV: Python包和项目管理器&#xff08;从入门到不放弃教程&#xff09;1. 为什么用uv&#xff0c;而不是conda或者pip2. 安装uv&#xff08;Windows&#xff09;2.1 powershell下载2.2 winget下载2.3 直接下载安装包 3. uv教程3.1 创建虚拟环境 (uv venv) 4. uvx5. 此pip非…

网络开发基础(游戏方向)之 概念名词

前言 1、一款网络游戏分为客户端和服务端两个部分&#xff0c;客户端程序运行在用户的电脑或手机上&#xff0c;服务端程序运行在游戏运营商的服务器上。 2、客户端和服务端之间&#xff0c;服务端和服务端之间一般都是使用TCP网络通信。客户端和客户端之间通过服务端的消息转…

java将pdf转换成word

1、jar包准备 在项目中新增lib目录&#xff0c;并将如下两个文件放入lib目录下 aspose-words-15.8.0-jdk16.jar aspose-pdf-22.9.jar 2、pom.xml配置 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><versi…

【C/C++】插件机制:基于工厂函数的动态插件加载

本文介绍了如何通过 C 的 工厂函数、动态库&#xff08;.so 文件&#xff09;和 dlopen / dlsym 实现插件机制。这个机制允许程序在运行时动态加载和调用插件&#xff0c;而无需在编译时知道插件的具体类型。 一、 动态插件机制 在现代 C 中&#xff0c;插件机制广泛应用于需要…

【音视频】AAC-ADTS分析

AAC-ADTS 格式分析 AAC⾳频格式&#xff1a;Advanced Audio Coding(⾼级⾳频解码)&#xff0c;是⼀种由MPEG-4标准定义的有损⾳频压缩格式&#xff0c;由Fraunhofer发展&#xff0c;Dolby, Sony和AT&T是主 要的贡献者。 ADIF&#xff1a;Audio Data Interchange Format ⾳…

机器学习 Day12 集成学习简单介绍

1.集成学习概述 1.1. 什么是集成学习 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它类似于&#xff1a; 超级个体 vs 弱者联盟 单个复杂模型(如9次多项式函数)可能能力过强但容易过拟合 组合多个简单模型(如一堆1次函数)可以增强能力而不易过拟合 集成…

通过爬虫方式实现头条号发布视频(2025年4月)

1、将真实的cookie贴到代码目录中toutiaohao_cookie.txt文件里,修改python代码里的user_agent和video_path, cover_path等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如requests等; 3、2025年4月份最新版; 代码如下: import js…

Linux ssh免密登陆设置

使用 ssh-copy-id 命令来设置 SSH 免密登录&#xff0c;并确保所有相关文件和目录权限正确设置&#xff0c;可以按照以下步骤进行&#xff1a; 步骤 1&#xff1a;在源服务器&#xff08;198.120.1.109&#xff09;生成 SSH 密钥对 如果还没有生成 SSH 密钥对&#xff0c;首先…

《让机器人读懂你的心:情感分析技术融合奥秘》

机器人早已不再局限于执行简单机械的任务&#xff0c;人们期望它们能像人类伙伴一样&#xff0c;理解我们的喜怒哀乐&#xff0c;实现更自然、温暖的互动。情感分析技术&#xff0c;正是赋予机器人这种“理解人类情绪”能力的关键钥匙&#xff0c;它的融入将彻底革新机器人与人…

Linux笔记---进程间通信:匿名管道

1. 管道通信 1.1 管道的概念与分类 管道&#xff08;Pipe&#xff09; 是进程间通信&#xff08;IPC&#xff09;的一种基础机制&#xff0c;主要用于在具有亲缘关系的进程&#xff08;如父子进程、兄弟进程&#xff09;之间传递数据&#xff0c;其核心特性是通过内核缓冲区实…

Ollama API 应用指南

1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST&#xff08;主要&#xff09;、GET&#xff08;部分接口&#xff09; 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…

【OSCP-vulnhub】Raven-2

目录 端口扫描 本地/etc/hosts文件解析 目录扫描&#xff1a; 第一个flag 利用msf下载exp flag2 flag3 Mysql登录 查看mysql的运行权限 MySql提权&#xff1a;UDF 查看数据库写入条件 查看插件目录 查看是否可以远程登录 gcc编译.o文件 创建so文件 创建临时监听…

Podman Desktop:现代轻量容器管理利器(Podman与Docker)

前言 什么是 Podman Desktop&#xff1f; Podman Desktop 是基于 Podman CLI 的图形化开源容器管理工具&#xff0c;运行在 Windows&#xff08;或 macOS&#xff09;上&#xff0c;默认集成 Fedora Linux&#xff08;WSL 2 环境&#xff09;。它提供与 Docker 类似的使用体验…

极狐GitLab 权限和角色如何设置?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 权限和角色 (BASIC ALL) 将用户添加到项目或群组时&#xff0c;您可以为他们分配角色。该角色决定他们在极狐GitLab 中可以执…

解锁现代生活健康密码,开启养生新方式

在科技飞速发展的当下&#xff0c;我们享受着便捷生活&#xff0c;却也面临诸多健康隐患。想要维持良好状态&#xff0c;不妨从这些细节入手&#xff0c;解锁科学养生之道。​ 肠道是人体重要的消化器官&#xff0c;也是最大的免疫器官&#xff0c;养护肠道至关重要。日常可多…