Games202学习笔记1:Recap of CG Basics

学习教程来自:GAMES202-高质量实时渲染

笔记

1. Basic GPU hardware pipeline

渲染管线

2. OPenGL

是一系列在CPU端调用的API用来调用GPU工作。

  1. 优点:跨平台。
  2. 缺点:碎片化,有很多版本。语言风格为C style,非面向对象。

渲染过程类比:

  1. 放置物体/模型:模型声明(VBO),模型变换矩阵(glTranslate等)
  2. 放置画架:声明相机(gluPerspective等),使用/声明一个FrameBuffer
  3. 画布和画架关系:一个Pass可以输出多个Texture(MRT),Fragment Shader决定了其内容
  4. 在画布上作画:着色。本课程重点在顶点着色器、片元着色器2个部分

3. OpenGL Shading Language (GLSL)

描述着色器如何着色的语言:着色器语言经过编译变为在GPU上执行的汇编语言

  1. HLSL for DX(vertex + pixel)
  2. GLSL for OpenGL(vertex + fragment)

一些变量的声明

  1. attribute:顶点着色器中的本地变量
  2. uniform:固定的全局变量
  3. varying:顶点着色器的变量插值后送给片元着色器
  4. highp:高精度

3.1 Debug

工具:Nsight Graphics、RenderDoc
方法:打印颜色

4. The Rendering Equation

正确的用来描述光线传播的公式

PBR:
L o ( p , ω o ) = L e ( p , ω o ) + ∫ H 2 f r ( p , ω i → ω o ) L i ( p , ω i ) cos ⁡ θ i d w i L_o(p, \omega_o) = L_e(p, \omega_o) + \int_{H^2}^{}f_r(p, \omega_i \to \omega_o) L_i(p, \omega_i) \cos \theta_i dw_i Lo(p,ωo)=Le(p,ωo)+H2fr(p,ωiωo)Li(p,ωi)cosθidwi

In Real Time Rendering:对入射光源是否被遮挡(V)单独描述

L o ( p , ω o ) = ∫ Ω + L i ( p , ω i ) f r ( p , ω i , ω o ) cos ⁡ θ i V ( p , ω i ) d w i L_o(p, \omega_o) = \int_{\Omega^+}^{}L_i(p, \omega_i) f_r(p, \omega_i, \omega_o) \cos \theta_i V(p, \omega_i) dw_i Lo(p,ωo)=Ω+Li(p,ωi)fr(p,ωi,ωo)cosθiV(p,ωi)dwi

作业

作业0:在框架里实现Bulin-Phong,所有代码已给出
碰到的问题:
没有渲染出来是因为uViewMatrix和uViewMatrix这2个矩阵没有传过来,需要

  1. 在Material.js中this.#flatten_uniforms部分声明这2个参数
  2. 在MeshRender.js的Draw函数中定义对应的2个矩阵,然后通过gl.uniformMatrix4fv函数传给下一层(参考作业1中的对应代码)

如果没有对vFragPos进行世界空间的转换而仅仅将aVertexPosition传入,那么原本(52,52,52)的缩放就没有起作用,导致光线的衰减是基于(1,1,1)缩放后的世界空间位置计算的

最终效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值