大家好~本课程为“真实感渲染”的线上课程,从0开始,介绍相关的图形学算法和数学基础,给出详细的数学推导、伪代码和实现代码,最终带领大家开发出基于物理的渲染器

线上课程资料:

本节课录像回放1

本节课录像回放2

加QQ群,获得ppt等资料,与群主交流讨论:106047770

本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章

本课程系列文章可进入索引查看:

真实感渲染系列文章索引

回顾相关课程内容

  • 为什么要学习真实感渲染?

为什么要学习本课

  • WebGPU是什么?
  • WebGL和WebGPU相比有什么区别?
  • 如何用WebGPU绘制一个三角形?

主问题:WebGPU是什么

  • WebGPU是什么?

    答:Web端图形API。浏览器封装了现代图形API(Dx12、Vulkan、Metal),提供给Web 3D程序员WebGPU API
  • 它有什么用?

    答:

主问题:如何渲染

  • 在哪里渲染?

    答:GPU

  • 有哪些渲染管线?

    答:

  • 每个渲染管线分别用于什么用途?

    答:光栅化管线用于渲染;光追管线用于光线相交计算,实现了硬件光线相交计算加速;计算管线用于通用GPU计算,也可以实现光线相交计算,还可以实现遮挡剔除等计算

主问题:WebGPU和WebGL是什么关系

  • WebGL是什么?

    答:和WebGPU一样,都是Web端图形API

  • 它对应本地端的什么图形API?它的版本是如何演进的?

    答:

  • WebGL和WebGPU相比有什么区别?

    答:

  • WebGPU相比WebGL有什么优势?

    答:

    • WebGPU提供了对GPU更大范围地控制,从而能提高性能
    • WebGPU更好地支持多线程
    • WebGPU支持计算管线,从而让程序员能使用GPU进行计算
    • WebGPU与WebGL2的区别很大,两者不容易兼容。如果要从WebGL1升级,最好直接升级到WebGPU,一劳永逸
    • 各大浏览器都会支持WebGPU,而IOS不支持WebGL2

主问题:如何学习WebGPU

任务:准备开发环境

  • WebGPU Node开源项目是干什么的?

    答:运行在Node.js环境中,底层封装了Vulkan等本地图形API,上层提供WebGPU API
  • 为什么要用WebGPU Node开源项目而不是WebGPU标准?

    答:因为它有下面的优点:

    • WebGPU标准目前不支持光追管线,但是WebGPU Node开源项目支持它(需要RTX显卡)
    • WebGPU标准使用的WGSL着色器语言缺少很多特性;而WebGPU Node开源项目使用GLSL,更成熟

然而它也有缺点: WebGPU Node提供的WebGPU API版本较老(2020年的版本)

  • 我们使用什么管线?

    答:考虑到大多数同学的电脑没有RTX显卡,所以我们主要使用计算管线而不是光追管线来实现光线追踪

  • 安装nodejs

Node.js 是能够在服务器端运行JavaScript 的开放源代码、跨平台 JavaScript 运行环境

下载最新版本,版本至少为13及以上

在Windows上安装时务必选择全部组件,包括勾选Add to Path

检查npm

npm是Node.js的包管理工具,通过下面的方式来检查是否已安装:

//应该能打印出版本号
npm -v
  • 安装VS Code

进入官网下载并安装

  • 准备项目代码

    • clone本课程的Github项目(HTTPS clone):https://github.com/yyc-git/PotorealisticRenderEdu-3

    • clone 后,请在根目录上执行:yarn

    • 没有yarn的同学请先执行:npm install --global yarn

    • 每个同学可以在项目中新建“mine/”文件夹(已经被git ignore),用于存放自己的文件

在项目根目录下,输入:

node lessons/2_triangle/code/index.js

应该能看到运行结果:

  • Shader languages support for VS Code

安装这个用于GLSL高亮的VS Code插件

  • Shaderc GLSL Linter

安装这个用于GLSL编译检查的VS Code插件:

1.下载shaderc,选择对应的操作系统的版本,解压

(在cloud storage中,可以找到历史版本)

2.VS Code中安装Shaderc GLSL Linter插件

3.设置它:

"glslcPath": "your-install-dir/bin/glslc"(e.g. /Users/yang/File/install/bin/glslc)

"glslcArgs": "--target-env=vulkan1.2"

4.验证:

打开项目的scene.vert文件,随便写一些错误的glsl代码,应该会有红线出现。

按f8后出现错误信息,如下图所示:

  • Clang-Format

安装这个用于GLSL格式化的VS Code插件:

1.终端上执行:

npm install -g clang-format

2.VS Code中安装Clang-Format插件

3.设置它:

"executable": "your-global-node_module-dir/clang-format/bin/your-os-dir/clang-format"

(e.g. /usr/local/lib/node_modules/clang-format/bin/darwin_x64/clang-format)

4.验证:

打开项目的scene.vert文件,把格式打乱(如缩进代码);然后格式化代码,应该能够正确格式化

主问题:如何使用光栅化管线实现“绘制一个三角形”

  • WebGPU坐标系介绍

    右手坐标系

  • 已知一个三角形的三个顶点(2D坐标,z为0),如何通过光栅化管线渲染出一个三角形?

结学

  • 如何通过光栅化管线渲染出一个三角形?

任务:使用光栅化管线实现“绘制一个三角形”

node lessons/2_triangle/code/index.js

应该能看到运行结果:

  • 移植该程序到WebGPU标准需要哪些修改?

总结

  • 请回顾本节课的内容?
  • 回答开始的问题?

参考资料

谢谢你~

真实感渲染:WebGPU介绍和使用光栅化管线绘制一个三角形的更多相关文章

  1. 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】

    http://blog.csdn.net/xiajun07061225/article/details/7628146 以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的. 下 ...

  2. WebGPU学习(二): 学习“绘制一个三角形”示例

    大家好,本文学习Chrome->webgl-samplers->helloTriangle示例. 准备Sample代码 克隆webgl-samplers Github Repo到本地. ( ...

  3. Direct3D 11 Tutorial 2: Rendering a Triangle_Direct3D 11 教程2:渲染一个三角形

    概要 在之前的教程中,我们建立了一个最小的Direct3D 11的应用程序,它用来在窗口上输出一个单一颜色.在本次教程中,我们将扩展这个应用程序,在屏幕上渲染出一个单一颜色的三角形.我们将通过设置数据 ...

  4. 基于显卡的光栅化渲染器Gaius计划

    决定实现一个基于显卡的光栅化渲染器,能将一些基于显卡的新算法融入其中.

  5. 用 windows GDI 实现软光栅化渲染器--gdi3d(开源)

    尝试用windows GDI实现了一个简单的软光栅化渲染器,把OpenGL渲染管线实现了一遍,还是挺有收获的,搞清了以前一些似是而非的疑惑. ----更新2015-10-16代码已上传.gihub地址 ...

  6. 软件光栅化渲染器Augustus计划

    在看完Real-Time Rendering后,我决定动手实现一个软件的光栅化渲染器.我就称它为Augustus计划吧. 计划使用MFC和GDI+来做它的UI.可以访问GitHub来查看它的源代码.

  7. Unity Shader入门精要学习笔记 - 第14章非真实感渲染

    转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...

  8. DirectX11 With Windows SDK--11 混合状态与光栅化状态

    前言 虽然这一部分的内容主要偏向于混合(Blending),但这里还需提及一下,关于渲染管线可以绑定的状态主要有如下四种: 光栅化状态(光栅化阶段) 采样器状态(像素着色阶段) 混合状态(输出合并阶段 ...

  9. shouldRasterize 光栅化、(缓存)复用、内存、内容稳定

    使用场景:稳定的视图(layer)被反复使用或进行动画: 本质:牺牲内存解放cpu: 反例:牺牲内存牺牲cpu. 单次使用或者视图有变动,shouldRasterize不会有任何用途,反而会牺牲内存. ...

  10. GPU大百科全书 第二章 凝固生命的光栅化

    光栅化——死神来了……   前言:在上一期的GPU大百科全书里,我们目睹了可爱的香草从抽象世界走向现实,从方程还原成实体的全过程.可以说香草活了,因为几何单元,我们赋予了她完整的灵魂. 如果你正在为G ...

随机推荐

  1. 又有新框架上线了,测试、AI 通通有「GitHub 热点速览」

    本周热点之一可能就是 Apple 刚开源便获得 8k+ star 的机器学习框架 mlx,顺带官方开源的 mlx-example(示例仓)也在热门榜上有一席之位,据说它已经跑通了大模型 Llama 7 ...

  2. 踩坑:nacos启动报错提示需要设置JDK环境 ,报错:ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!

    换了个Windows11的新电脑,因为个人工作.学习需要,就重新下载了Nacos并解压使用,结果就踩了个坑,使用下面命令启动Nacos服务端时: startup.cmd -m standalone 直 ...

  3. ProtocolBuffer详细教程

    下面大佬写的特别详细,直接参考他的吧! 推荐参考大佬写的ProtocolBuffer详细教程

  4. SpringBoot事件机制

    1.是什么? SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理.我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以 ...

  5. 后端程序员必会的前端知识-05:React

    五. React 1. React 基础 react 是前端三大框架之一 没有 vue 的基础更好,因为两者思想不太一样,不能用 vue 的习惯学习 react 需要有 js 基础,视频 19-58 ...

  6. 使用Redis实现一个分布式的全局ID

    当然实现方式有很多中,这里主要是记录一下使用Redis的实现方式 import lombok.extern.slf4j.Slf4j; import org.springframework.beans. ...

  7. 聊聊ChatGLM-6B部署与微调的深入理解

    ChatGLM的部署,主要是两个步骤: 在Github上下载chatglm的库文件 在Hugging Face上下载模型参数与配置文件 ChatGLM包 从Github上看ChatGLM项目文件的结构 ...

  8. JavaFx之Ikonli图标库大全(十五)

    JavaFx之Ikonli图标库大全(十五) Ikonli给java提供了大量的图标库, 官网:https://kordamp.org/ikonli/ Ikonli 提供了可以在 Java 应用程序中 ...

  9. ubuntu安装mysql8,debian安装mysql8,linux安装mysql8,x86_64架构,deb包

    作者主页:https://www.cnblogs.com/milkbox 参考: 修改大小写:MySQL8.0安装后更改不区分大小写!包你必生效!_mysql8.0不区分大小写-CSDN博客 整个安装 ...

  10. tmux 增加历史回滚缓冲区 buffer

    tmux 默认回滚 2000 行,如果要查看更多记录(比如编译报错)可以在.tmux.conf文件中增加一行 set -g history-limit 5000 重启 tmux session 生效