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
相关文章:
Babylon.js着色器简明简称【Shader】
推荐:用 NSDT设计器 快速搭建可编程3D场景 为了生成 BabylonJS 场景,需要用 Javascript 编写代码,BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化,屏…...
深入理解Linux内核--信号
信号的作用 信号(signal)是很短的消息,可以被发送到一个进程或一组进程。 使用信号的两个主要目的是: 1.让进程知道已经发生了一个特定的事件。 2.强迫进程执行它自己代码中的信号处理程序。 POSIX标准还引入了一类新的信号,叫做…...
转圈打印矩阵
转圈打印矩阵 【题目】 给定一个整型矩阵 matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,1…...
Elasticsearch 与 OpenSearch:揭开性能差距
作者:George Kobar, Ugo Sangiorgi 对于任何依赖快速、准确搜索数据的组织来说,强大、快速且高效的搜索引擎是至关重要的元素。 对于开发人员和架构师来说,选择正确的搜索平台可以极大地影响你的组织提供快速且相关结果的能力。 在我们全面的…...
100个Java工具类之41:系统工具类Apache之SystemUtils
系统工具类Apache之 org.apache.commons.lang3.SystemUtils 根据Apache SystemUtils源码中介绍,SystemUtils是java.lang.System的帮助程序。当因安全限制无法读取系统属性时,则会返回null。下面是为大家整理的几个主要用法。 一、获取主机名 String ho…...
maven Jar包反向install到本地仓库
maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错,缺少一个jar包。 但是在maven仓库都找不到此jar包,其他人提供了这个jar包。 需要把这个jar包install到本地仓库,使项目能正常打包运行。 实现 使用git bash命令执行以下脚…...
.NET6使用SqlSugar操作数据库
1.//首先引入SqlSugarCore包 2.//新建SqlsugarSetup类 public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,string dbName "ConnectString"){SqlSugarScope sqlSugar new Sq…...
MySQL8是什么-MySQL8知识详解
从今天起,开始更新MySQL8的教程,今天更新MySQL8的第一篇文章,主要讲了MySQL8是什么、MySQL数据库的概念、MySQL的优势和MySQL的发展历史。 1、MySQL8是什么 MySQL 8是一个开源的关系型数据库管理系统。它是MySQL数据库的最新版本,…...
Spring Gateway+Security+OAuth2+RBAC 实现SSO统一认证平台
背景:新项目准备用SSO来整合之前多个项目的登录和权限,同时引入网关来做后续的服务限流之类的操作,所以搭建了下面这个系统雏形。 关键词:Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Jav…...
flutter开发实战-TextPainter计算文本内容的宽度
flutter开发实战-TextPainter计算文本内容的宽度 最近开发过程中根据Text文本的大小判断是否需要进行显示跑马灯效果,获取文本的大小,需要TextPainter来获取Size 一、TextPainter TextPainter主要用于实现文本的绘制。TextPainter类可以将TextSpan渲染…...
竞赛项目 深度学习的动物识别
文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...
MySQL相关的SQL语句、数据库、数据表、字段、类型
文章目录 前言MySQL整数类型MySQL字符串类型MySQL小数类型MySQL时间类型常用的基本SQL语句 前言 1、SQL语句不区分大小写。 MySQL整数类型 序号数据类型数据范围1TINYINT-128~1272SMALLINT-32768~327673MEDIUMINT-223~223-14INT-231~231-15BIGINT-263~263-1 MySQL字符串类型 …...
微信个人小程序申请 (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. 获取小程…...
使用zap日志替代xorm日志
xorm提供了自定义日志的接口,它的接口定义如下: // Logger is a logger interface type Logger interface {Debug(v ...interface{})Debugf(format string, v ...interface{})Error(v ...interface{})Errorf(format string, v ...interface{})Info(v ..…...
YOLOv5-7.0实例分割+TensorRT部署
一:介绍 将YOLOv5结合分割任务并进行TensorRT部署,是一项既具有挑战性又令人兴奋的任务。分割(Segmentation)任务要求模型不仅能够检测出目标的存在,还要精确地理解目标的边界和轮廓,为每个像素分配相应的…...
回归决策树模拟sin函数
# -*-coding:utf-8-*- import numpy as np from sklearn import tree import matplotlib.pyplot as pltplt.switch_backend("TkAgg") # 创建了一个随机数生成器对象 rng rngnp.random.RandomState(1) print("rng",rng) #5*rng.rand(80,1)生成一个80行、1列…...
NeRF基础代码解析
embedders 对position和view direction做embedding。 class FreqEmbedder(nn.Module):def __init__(self, in_dim3, multi_res10, use_log_bandsTrue, include_inputTrue):super().__init__()self.in_dim in_dimself.num_freqs multi_resself.max_freq_log2 multi_resself…...
职场新星:Java面试干货让你笑傲求职路(三)
职场新星:Java面试干货让你笑傲求职路 1、token 为什么存放在 redis 中?2、索引的底层原理是什么?3、Spring IOC和AOP的原理4、接口和抽象类有什么共同点和区别?5、为什么要使用线程池?直接new个线程不好吗?…...
获取指定收获地址的信息
目录 1 /// 获取指定收获地址的信息 2 /// 删除指定的收获地址信息 3 /// 取消订单 4 /// 确认订单收货 /// <summary> /// 获取指定收获地址的信息</...
突破笔试:力扣全排列(medium)
1. 题目链接:46. 全排列 2. 题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[…...
PlantUML甘特图进阶玩法:自定义样式、关联JIRA任务、嵌入Confluence,打造可视化项目管理中心
PlantUML甘特图企业级实战:从可视化工具到项目管理中枢的蜕变之路 当团队规模超过20人、项目周期跨越季度时,静态的甘特图已经无法满足协作需求。上周我为一个跨国团队调试PlantUML工作流时发现,他们虽然每天更新JIRA任务,却要手动…...
从‘消费者-订单’到‘汽车-驾驶员’:用Mermaid erDiagram讲好你的业务模型故事
业务模型可视化的艺术:用ER图讲好你的领域故事 在数字化转型的浪潮中,清晰表达业务逻辑的能力已成为技术团队的核心竞争力。我曾参与过一个汽车共享平台的项目,当开发团队用"用户-订单"这样的通用术语讨论时,业务方频频…...
HTML中的Canvas可以干哪些事情
在Web开发的动态世界中,HTML5的<canvas>元素犹如一把瑞士军刀,凭借其强大的图形渲染能力,正在重塑网页交互的边界。从实时数据可视化到沉浸式游戏开发,从图像处理到增强现实应用,Canvas通过JavaScript的像素级控…...
STM32-HAL-UART
同步工作模式就是在异步工作模式下多加了一根线CK(clock时钟)线,有了这条线之后收发双方就可以同步起来USART 简介USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是一种通用串行通信接口,…...
为什么92%的微生物组论文在R 4.5中重现失败?——基于Nature Microbiology近3年217篇论文的可重复性审计报告
更多请点击: https://intelliparadigm.com 第一章:R 4.5 微生物组多组学分析的可重复性危机全景 近年来,R 4.5 环境下基于 Bioconductor 3.19 的微生物组多组学整合分析(如 16S rRNA、宏基因组、代谢组与宿主转录组联合建模&…...
Henghao恒浩HH温度开关原厂一级代理分销经销
品牌 元件类别 型号 描述 包装 数量 恒浩 温度开关 H20 250V 5A 90℃ 100 5,000...
ESP32内存告急?手把手教你用ESP-IDF的cJSON库避免内存泄漏(附实战代码)
ESP32内存告急?手把手教你用ESP-IDF的cJSON库避免内存泄漏(附实战代码) 在ESP32开发中,处理JSON数据是物联网设备与服务器通信的常见需求。cJSON作为轻量级的JSON解析库,因其高效和易用性被广泛采用。然而,…...
智能体系统构建:剖析机制与BDI模型实践
1. 智能体剖析:构建自主决策系统的核心要素在人工智能领域,智能体(Agent)的设计与实现一直是个复杂而富有挑战性的课题。作为一名长期从事AI系统开发的工程师,我发现许多项目在初期往往过分关注算法优化,而…...
Android系统去广告技术深度解析:Universal Android Debloater架构设计与实现原理
Android系统去广告技术深度解析:Universal Android Debloater架构设计与实现原理 【免费下载链接】universal-android-debloater Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and ba…...
IDM无限试用完整指南:彻底解决30天限制的终极方案
IDM无限试用完整指南:彻底解决30天限制的终极方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否正在为IDM(Internet Download Manager)的…...
