原文地址:Docs>Shading>Shading reference>Shaders

简介

着色器是一种运行在GPU上的独特程序。它们会决定如何拾取网格模型的数据(诸如顶点位置,颜色,法线等)以及如何将它们绘制到屏幕上。着色器的工作原理与普通的程序区别很大,因为着色器是按照进行GPU的工作原理优化过的。一个直接的影响就是:当着色器执行完毕后不会保留任何数据;它们将最终颜色输出到屏幕以后,便去进行新的工作了。着色器甚至连自己上一次运行所输出的结果,也是无法获取到的。

Godot所使用的的着色器语言和GLSL非常相似,并且增加了一些功能又稍稍降低了复杂度。这应该归功于Godot整合了内置功能(built-in functionality),使得编写复杂的着色器程序变得简单。Godot还将一些用户无需操心的底层细节进行了封装,它们可以被解析并作用于渲染管线(Rendering Pipeline),对于一些更高阶需求,你可以将这个功能关闭并使用一种叫做**“render_mode”**的模式。

本文档将向你介绍一些针对Godot的Shader知识,如果想了解Godot版Shader的细节,请参考Godot着色器语言

着色器类型(Shader types)

Godot并未提供一种通用着色器,因此使用godot着色器必须先指定其用途(2D,3D,particles)。不同类型的着色器支持不同类型的渲染模式,内置变量以及处理函数。

所有的着色器必须在其第一行以如下形式声明其类型:

shader_type spatial;

有效的着色器类型如下:

译者注:3种着色器类型后文中会反复用到,为方便起见,统一使用意译

spatial:3D着色器
canvas_item:2D着色器
particles:粒子着色器

想要获得每种类型的更多细节,请阅读相关的参考文档

渲染模式(Render modes)

不同的着色器类型支持不同类型的渲染模式。渲染模式是个可选项,如果要指定的话,必须位于shader_type声明的后面。渲染模式被用来改变内置函数的处理方式。例如,我们经常会使用**"unshaded"渲染模式来忽略内置的光照处理器函数(light processor function)(译者注:下文中简称光函数**)

渲染模式在着色器类型声明的下方定义:

shader_type spatial;
render_mode unshaded, cull_disabled;

每一种着色器类型都对应着一个可用的渲染模式列表。请参看每种着色器类型的文档了解其对应的完整渲染模式列表。

处理器函数(Processor functions)

依据着色器类型,不同的处理器函数可能会被选择性地重定义(overridden)。对于3D着色器和2D着色器其顶点函数,片元函数或者光函数可能会被重定义。而对于粒子着色器只有顶点函数可以被重定义。

顶点处理器函数(Vertex processor)(译者注:文中简称顶点函数)

在3D着色器和2D着色器中,每一个顶点都会调用一次顶点函数;而在粒子着色器中则是每一个粒子都会调用一次顶点函数。

顶点函数用于修正逐顶点信息(per-vertex information),这些逐顶点信息将被传递到片元函数中(下文介绍)。并且顶点函数也会被用来创建varying变量(译者注:GLSL三种变量类型uniform,attribute和varying),以传递到片元函数中(见其它文档)。

在默认情况下,Godot会拾取顶点信息并进行变换(transform)以供绘制。如果这不是你所期望的,你可以使用渲染模式(译者注:上文提到的),然后自己来变换这些数据; 参见 Spatial shader doc 中提供的范例。

片元处理器函数(Fragment processor)(译者注:文中简称片元函数)

片元函数被用于设置每个像素(Pixel)的材质参数,这部分代码会运行于物体的每一个可见像素或者图元(primitive)绘制。片元函数仅仅对于3D着色器和2D着色器才有效。

片元函数的标准的用法是设置用于光照计算的材质属性。例如,你设置粗糙度(ROUGHNESS),镶边(RIM)或者()

光处理器函数(Light processor)(译者注:文中简称光函数)

光函数也是**逐像素计算(runs per pixel)**的,并且它还要计算每一个影响到对象的光源(如果对象没有受到光的影响,它将不进行计算),光函数在片元处理器的内部被调用,常用于处理片元函数内部设定的材质属性。

光函数在2D和3D中作用是不同的;想要了解它们之间的差异,请阅读文档 CanvasItem Shaders 和 Spatial Shaders

Godot着色器基础相关推荐

  1. OpenGL着色器基础

    前言: 本文翻译自LearnOpengl经典教程,OpenGL着色器基础介绍的比较通俗易懂,特总结分享一下! 为什么要使用着色器? 我们知道,OpenGL一般使用经典的固定渲染管线来渲染对象,但是随着 ...

  2. 《OpenGL编程指南》一第2章 着色器基础

    本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...

  3. Godot着色器语言

    引言 Godot 使用的了一种非常接近GLSL ES 3.0的着色器语言,并且支持其绝大多数的数据类型和函数,尚未完全支持的部分也会逐渐增加进去. 如果你对GLSL熟悉的话,可以直接阅读 <Go ...

  4. Unity渲染(二):Shader着色器基础入门之渲染Image图片

    Unity渲染(二):图片渲染 通过这里,你会学习到怎么将一张图片渲染到UI的Image组件或者SpriteRenderer上,以及透明物体的渲染. 上一章:Unity渲染(一):着色器基础入门之纯色 ...

  5. HLSL着色器原理:(一)着色器基础

    小光!小光!小光!小光!小光! 本文所总结视频为或许是小光从油管搬运到B站的视频:传送门 本篇主要汇总HLSL着色器的知识原理部分,并涉及少量必要的代码知识点,主要为知识点总结,实践部分建议参照其他S ...

  6. Three.js着色器基础【含源码】

    着色器(Shader)是在 GPU 上运行的程序.它们被称为着色器的原因是,最初它们只处理3D对象的着色,但后来扩展到了3D对象之外.它们需要与传统编程不同的思维方式,因为程序是针对每个顶点或像素并行 ...

  7. OpenGL(三)——OpenGL着色器基础

    上一篇我们介绍了OpenGL基础相关的知识:OpenGL图形绘制和OpenGL入门,今天介绍一下OpenGL另一重要的成员----OpenGL着色器. 什么是OpenGL着色器? Open GL ES ...

  8. WebGL基础:着色器基础知识

    今天由字节跳动的"yancy"童鞋给大家重磅推出一篇WebGL的干货接下来让我们开启奇幻旅程,进入 3D 的世界. 本文作者:yancy 1. 认识3D 首先我们要介绍的是几个概念 ...

  9. OpenGL 着色器基础

    Instagram,Snapchat,Photoshop. 所有这些应用都是用来做图像处理的.图像处理可以简单到把一张照片转换为灰度图,也可以复杂到是分析一个视频,并在人群中找到某个特定的人.尽管这些 ...

最新文章

  1. 皮一皮:这不叫分手...叫裁员...
  2. vba和python哪个好学-python和vba学哪个
  3. 向日葵远程使用备忘录
  4. 依赖注入通俗解释_我如何向团队解释依赖注入
  5. java outofmemory 处理_java.lang.OutOfMemoryError处理错误
  6. java条码大小_java - ML Kit条形码扫描:无效的图像数据大小
  7. 代理通信设计模式 - 代理模式、桥接模式、中介者模式
  8. Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array
  9. Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型 1 2. 提升战略眼光, 3 2.1. 视野与格局 3 2.2. 未来预测 未来发展负责,判断未来趋势, 3
  10. 现代语音信号处理之语音特征参数估计
  11. unix环境高级编程(第三版)-读书笔记1
  12. 新视野大学英语(第三版) 读写教程4 课后答案
  13. 公众号采集文章插件下载-支持各大网站自动采集发布的公众号插件
  14. win10系统文件拖拽卡顿_终于找到Win10卡顿病根了!看完秒懂
  15. win7计算机睡眠后无法唤醒,win7系统待机后打不开怎么办|win7待机无法唤醒的解决方法...
  16. java lda主题模型_主题模型(一):LDA 基本原理
  17. 二次规划问题的KKT 条件求解方法
  18. 彻底解决:fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached
  19. A - 小彭玉的扫荡食堂计划
  20. 计算机启动老是检测硬盘怎么解决,开机出现硬盘检测是怎么回事 硬盘检测的解决方法...

热门文章

  1. WiFi_combo模组功耗数据
  2. html判断是否在微信里打开,JavaScript判断浏览器内核,微信打开自动提示在浏览器打开...
  3. 编程入门:零基础想要学好C/C++编程?那你一定要看看这五个步骤!
  4. 学计算机高考英语听力考试时间,2020年北京高考英语听力首次机考时间定为12月14日...
  5. 职场修炼圣经-和繁重的工作一起修行
  6. Tensorflow环境搭建
  7. oracle 分组first,Oracle分析函数:First_Value
  8. 使用react开发谷歌插件
  9. word恢复默认样式
  10. 谷歌人工智能深度解剖:从HAL的太空漫游到AlphaGo,AI的春天来了