Babylon.js着色器简明简称【Shader】

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景

为了生成 BabylonJS 场景,需要用 Javascript 编写代码,BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化,屏幕显示(帧)以每秒 60 帧的速度重新绘制。

简化一下,流程就是

  • 场景代码由 BJS 引擎代码在 CPU 中处理以生成虚拟 3D 模型
  • 虚拟 3D 模型由 BJS 引擎代码在 CPU 中处理,生成 Shader GPU 代码
  • 着色器 GPU 代码由 GPU 处理以生成屏幕图像。

例如 BabylonJS 引擎采用此代码:

var box = BABYLON.MeshBuilder.CreateBox("box", {}, scene);

并将其转换为顶点数据,包括位置、颜色和法线

BabylonJS 引擎为此数据创建着色器代码并传递到 GPU。

不仅仅是这个以及场景代码,你还可以编写自己的用户着色器代码,该过程变得

场景代码由 BJS 引擎代码在 CPU 中处理以生成虚拟 3D 模型

  • 虚拟 3D 模型和用户着色器代码由 BJS 引擎代码在 CPU 中处理,生成着色器 GPU 代码
  • 着色器 GPU 代码由 GPU 处理以生成屏幕图像。

1、着色器的类型

着色器是用图形库着色器语言 (GLSL) 编写的,分为两部分。

  • 顶点着色器 - 它获取每个顶点的数据并确定其像素在屏幕上的显示位置及其颜色。
  • 片段着色器 - 使用来自顶点着色器的数据来确定代表网格每个面的像素的位置和颜色。

片段着色器有时称为像素着色器。
在这里插入图片描述

2、传递变量

位置、法线和 uv 坐标的顶点数据作为类别属性的变量传递给顶点着色器。 用户数据可以作为uniform类别的变量传递给顶点着色器和片段着色器。 数据可以从顶点着色器传递到片段着色器,其中变量类别不同。

在顶点着色器中声明的一个重要的统一变量是 worldViewProjection,因为 BabylonJS 引擎使用它来将场景 3D - 2D 投影数据传递到顶点着色器。
在这里插入图片描述

3、变量类型

两个着色器中使用的所有变量都必须指定一个类型,并且分配给该变量的任何数字都必须与其类型一致。

例如

int n = 2;
float r = 2.0;

下面的例子抛出一个错误

float r = 2;

类型的一些示例如下:

  • vec2 ------ 浮点数的二维向量
  • vec3 ------ 浮点数的三维向量
  • mat4 ------ 4列4行浮点数矩阵
  • Sampler2D - 2D 纹理图像

由于顶点位置需要尽可能准确,因此所有浮点数都应设置为具有高精度。 这是在每个着色器的代码开头使用 -

precision highp float

GLSL 语言有许多内置变量。 两个对于两个着色器的操作至关重要并且始终是必要的是:

  • gl_Position 提供屏幕坐标的位置数据
  • gl_FragColor 为屏幕上的构面表示提供颜色数据

4、函数

函数需要像其参数一样键入并具有以下形式

float NAME(typed parameters) {
    *code*
}

5、运行着色器代码

顶点着色器和片段着色器都从一个必须称为 main 且类型为 void 的函数运行,因为它不返回结果。 它还必须将空参数列表键入为 void。

void main(void) {
    *code*
}

在这里插入图片描述

6、将着色器代码放入 BabylonJS 中

以下是将着色器代码放入场景的四种方法:

  • 使用 BabylonJS Create Your Own Shader (CYOS) 并下载 zip 文件
  • 将顶点和片段着色器代码写入

原文链接:Babylon.js着色器简介 — BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes中最小组件——Pod

目录 一、Pod简介 二、Pod的使用方式 三、Pause——Pod中底层基础容器 四、为什么kubernetes这样设计Pod 五、Pod的分类 1.自主式Pod 2.控制器管理的Pod 3.静态Pod 六、Pod容器的分类 1. 基础容器(infrastructure container) 2. 初始化容器&am…

MySQL DAL单表练习一(学生表)

目录 步骤: 1、创建学生表 2、插入数据 1)查询表中所有学生的信息 2)查询表中所有学生的姓名和英语成绩 3) 过滤表中的重复数据 4) 统计每个学生的总分 5) 所有学生总分上加上10 6) 使…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…

【Axure高保真原型】JS版日期区间下拉选择器

今天和大家分享JS版日期区间下拉选择器的原型模板,该模板通过调用浏览器的下拉列表,所以可以获取真实的日历效果,具体包括哪一年二月份有29天,几号对应星期几,都是真实的。建议使用谷歌浏览器来演示,其他浏…

Apache2.4源码安装与配置

环境准备 openssl-devel pcre-devel expat-devel libtool gcc libxml2-devel 这些包要提前安装,否则httpd编译安装时候会报错 下载源码、解压缩、软连接 1、wget下载[rootnode01 ~]# wget https://downloads.apache.org/httpd/httpd-2.4.57.tar.gz --2023-07-20 …

leetcode870. 优势洗牌(java)

优势洗牌 leetcode870. 优势洗牌题目描述双指针 排序代码 滑动窗口 leetcode870. 优势洗牌 难度 - 中等 leetcode870. 优势洗牌 题目描述 给定两个长度相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描…

Kubernetes集群部署

环境 > 192.168.50.53 k8s-master > 192.168.50.51 k8s-node1 > 192.168.50.50 k8s-node2 必须不能少于两核两G 所有主机共同操作 主机初始化配置 所有主机配置禁用防火墙和selinux [rootserver ~]# setenforce 0 [rootserver ~]# iptables -F [rootserver ~]…

【MySQL】ER模型(十六)

🚗MySQL学习第十六站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ ⭐学习汇总贴,超详细思维导图:【MySQL】学习汇总(完整思维导图) 一.引入 数据库设计是牵一发而动全…

RocketMQ Learning(一)

目录 一、RocketMQ 0、RocketMQ的产品发展 1、RocketMQ安装 1.1、windows下的安装 注意事项 1.2、Linux下的安装 1.3、源码的安装 1.4、控制台 2、消息发送方式 2.1、发送同步消息 2.2、发送异步消息 2.3、单向发送 3、消息消费方式 3.1、负载均衡模式&#xff0…

编写第一个 React Native 程序

React Native 目录 使用React Native CLI命令创建的目录如下图所示: 重要目录说明 目录说明__tests__存放测试用例的目录.bundle / config配置文件(一般不会用到)android 和 IOS 文件夹这两个文件夹主要是存放安卓和 ios 相关的配置文件和…

XML 学习笔记 7:XSD

本文章内容参考自: W3school XSD 教程 Extensible Markup Language (XML) 1.0 (Second Edition) XML Schema 2001 XML Schema Part 2: Datatypes Second Edition 文章目录 1、XSD 是什么2、XSD 内置数据类型 - built-in datatypes2.1、基本数据类型 19 种2.1.1、基本…

【Spring Boot】构建RESTful服务 — 构建RESTful应用接口

构建RESTful应用接口 RESTful架构是目前最流行的互联网软件架构规范,是Web API(应用编程接口)的大趋势和主流规范,了解了RESTful的众多优点之后,接下来一步一步地学习如何使用Spring Boot构建RESTful Web API。 1.Sp…

途乐证券-光伏、储能板块拉升 德业股份、固德威等大幅走高

光伏、储能等新能源板块10日盘中震荡上扬,截至发稿,德业股份涨近8%,锦浪科技、固德威、阿特斯等涨逾6%,禾迈股份、昱能科技涨近4%。 消息面上,据中关村储能产业技术联盟计算,2021年至2023年上半年&#xff…

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包,Crate 关于包,Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回…

安装CUDA与CUDNN与Pytorch(最新超级详细图文版本2023年8月最新)

一、安装CUDA 1.1、下载安装包 cuda可以认为就是Nvidia为了显卡炼丹搞的一个软件,其下载地址为:CUDA Toolkit 12.2 Update 1 Downloads | NVIDIA Developer 当你点进这个链接的时候,你需要依次选择 1是选择系统,这里选windows…

Netty面试题1

计算机网络模型 OSI采用了分层的结构化技术,共分七层, 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 Open System Interconnect 简称OSI,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参…

医疗保健中的 NLP:实体链接

一、说明 HEalthcare和生命科学行业产生大量数据,这些数据是由合规性和监管要求,记录保存,研究论文等驱动的。但随着数据量的增加,搜索用于研究目的的必要文件和文章以及数据结构成为一个更加复杂和耗时的过程。例如,如…

微信小程序中的分包使用介绍

一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包:放置默认启动页面/TabBar 页面,公共资源/JS 脚本 分包:根据开发者的配置进行划分 限制:所有分包大小不超过 20M,单…