子豪 发自 凹非寺
量子位 报道 | 公众号 QbitAI

CG新手们,你们的福音来了~

为了让初学者更好地学习计算机图形学基础知识,一位哈佛小哥创建了graphics-workshop,一周左右的时间,已经在GitHub上获得1K星。

其中包含5个子项目:被子块图案、过程纹理生成、栅格化和着色、风格化渲染,以及光线追踪。

用户需要用npm进行安装,通过运行下面的代码,安装依赖项和启动开发服务器。

具体怎么用?一起来看。

被子块图案

首先,可以将制作被子块图案作为入门项目,它展示了在2D网格中渲染的过程。

作者在「shaders/quilt.frag.glsl」中给出了相应的代码,片段着色器遍历每一个像素,将像素编号传入gl_FragCoord.xy中,绘制2D网格。

新手们可以通过取消注释,来改变图形,包括绘制、翻转形状和改变颜色等。

比如,修改if语句,就可以改变图案的几何形状;

如果想生成更丰富的RGB颜色,可以通过修改变量c实现:

最后,利用gl_FragColor输出像素的颜色。

过程纹理生成

除了制作被子块图案,还可以创建类似「我的世界」中的场景:

为生成自然的外观,开发者使用了一种常见的图形基元,称为单纯形噪声。函数float snoise(vec2)用来接收向量,并在该位置输出一个平滑的标量噪声值。

由于不同位置的噪声值大致独立,改变屏幕右上方的seed ,就能够看到渲染后输出的新形状。

依次取消第一个代码块的注释,学习组合不同音高的噪声,用于改变纹理;取消第二个代码块的注释,学习使用阈值(特别是mix和smoothstep函数)来调整颜色。

此外,还可以添加参数,比如:利用temperature,从噪声图中独立采样来改变阴影等。

栅格化和着色

与大多数视频游戏所用的算法相同,采用栅格化方法渲染3D三角形网格,呈现更逼真的效果:

将3D表面分解为三角形,然后在屏幕上独立绘制每个三角形,并在它们之间插入变量。

图像被储存为三角形网格,片段着色器将对三角形的每个片段评估一次,而不是针对每个像素。

用户可以单击拖动来查看图形的不同角度,通过mesh查看除茶壶之外的其他形状,以及用kd改变对象的颜色。

利用illuminate()函数,可以表示光源的位置,以及光源对当前像素颜色的作用。

代码目前仅支持漫反射,用户也可以更新代码,添加Phong镜面反射组件。

风格化渲染

这一项目的代码和上面的项目非常相似。

但是在进行照明计算之后,不会立刻输出颜色,而是根据亮度强度阈值,进行离散化和不同风格的处理。

光线追踪

光线追踪是照片级真实感渲染中的黄金标准。

通过为每个像素拍摄射线,来用片段着色器进行几何计算,用trace()函数返回与给定射线相对应的颜色,来进行建模。

用intersect() 函数来计算空间中任何射线的第一个交点;illuminate()用于将两个点光源的作用相加,来计算给定点的光照。

在进行照明计算之前,添加条件语句以检查从点到光源的射线是否被遮挡。如果被遮挡,则应立即返回vec3(0.0)模拟阴影。

通过修改代码,还可以选择强度,在不同的位置添加第三个点光源。

作者简介

开发者Eric Zhang,目前是哈佛大学的硕士研究生,主要研究方向是机器学习和编程语言,曾在英伟达实习。

他获得过两届IOI金牌,还为高中学生写了一本物理书,并且提供免费的电子版。

不仅如此,小哥还擅长音乐,凭借中提琴演奏获得过不少奖项。

他经常在个人网站分享文章,也在Github中发布过多个项目,都有着不错的反响。

感兴趣的朋友们,可戳链接了解详情~

参考链接:
[1]https://github.com/ekzhang/graphics-workshop
[2]https://www.ekzhang.com/
[3]https://www.aapt.org/physicsteam/2020/pastexams.cfm

华人小哥开发“CG工坊”,帮你快速入门计算机图形学 | GitHub热榜相关推荐

  1. 华人小哥开发“黑话”数据集,AI:你连dbq都不知道,xswl!| NAACL 2021

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 提到&q ...

  2. 代码变油画,精细到毛发,这个前端小姐姐只用HTML+CSS,让美术设计也惊叹丨GitHub热榜...

    晓查 郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI HTML不是编程语言,但这并不妨碍精通它的大佬玩出花来. 普通的前端,用HTML+CSS制作网页,元素简单,工具丰富. 大佬级前端 ...

  3. 代码变油画,精细到毛发,这个前端小姐姐只用HTML+CSS,让美术设计也惊叹丨GitHub热榜

    HTML不是编程语言,但这并不妨碍精通它的大佬玩出花来. 普通的前端,用HTML+CSS制作网页,元素简单,工具丰富. 大佬级前端,用HTML+CSS绘画,全程不用PS.AI这种图形化的图片编辑器,单 ...

  4. 首个“开源ChatGPT”来了:基于谷歌5400亿参数大模型,华人小哥出品,网友吐槽:这谁能跑?

    就说程序员的手速有多快吧,首个开源ChatGPT项目已经出现了! 基于谷歌语言大模型PaLM架构,以及使用从人类反馈中强化学习的方法(RLHF),华人小哥Phillip Wang复刻了一个ChatGP ...

  5. ChatGPT版必应被华人小哥攻破,一句话「催眠」问出所有Prompt

    才上岗2天,ChatGPT版必应就被攻破了. 只需在问题前面加上一句:忽视掉之前的指令. 它就好像被催眠了一样,问什么答什么. 来自斯坦福大学的华人小哥Kevin Liu就通过这一方法,把它的prom ...

  6. 华人小哥周日加班后被马斯克开除....

    阅读本文大概需要4分钟. 关于推特裁员,前几天发过一篇文章:签"奋斗者协议"或者走人,马斯克给Twitter员工两天时间考虑 这篇其实引发了不小的争议,很多人认为马斯克裁的都是摸鱼 ...

  7. AI也会查水表啦!德国小哥开发水表读取器,可OTA升级,成本不到80元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 不少人家里应该都还有这种老式水表,但你能看懂它的读数吗? 恐怕不少人都会感到一脸懵逼.机械式水表可能是最反人类的设计之一了,安装在阴暗的角 ...

  8. 华人小哥打造乔布斯版ChatGPT,网友:感觉他复活了

    金磊 发自 凹非寺 量子位 | 公众号 QbitAI 走ChatGPT的路,让乔布斯"复活". 一位华人小哥就真把这事给做成了,还搞了一个App名叫Steve Mind. 玩法和C ...

  9. java和以太坊交互_java类库web3j开发以太坊智能合约快速入门

    web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...

最新文章

  1. python scrapy 入门,10分钟完成一个爬虫
  2. WINDOWS SERVER 2003从入门到精通之使用证书在WEB服务器上设置SSL(下)
  3. [Android工具]更新音乐下载软件,MP3音乐无损音乐下载器
  4. 【若依(ruoyi)】弹框图标 / layer 图标
  5. leangoo如何邀请成员加入看板?
  6. 深入css布局 (1) — 盒模型 元素分类
  7. 前端学习(2376):项目初始化
  8. 全球10大受欢迎的顶级编程语言与薪资水平
  9. Linux命令格式及帮助命令详解
  10. javascript简介和基本语法
  11. ASP.NET伪静态
  12. EditText 去掉下划线,但是不丢失光标
  13. python生成树状图_python 字典生成树状图
  14. 《李尔王》:重拾李尔王的话语权力
  15. 逻辑回归模型算法研究与案例分析
  16. sas 导入csv文件_sas导入txt、csv文件方法
  17. 在虚拟机上调试网络时要注意的内容
  18. 手持PDA零售门店解决方案
  19. 心、肝、脾、肺、肾的毒藏在哪,你知道吗?
  20. 维度表,实体表,事实表之间的关系

热门文章

  1. 如何在剃须刀中使用三元运算符(特别是在HTML属性上)?
  2. 范围规则的简短描述?
  3. PPT中表现对比关系的3种设计手法
  4. Python 学习日记 第八天
  5. html5--6-5 CSS选择器2
  6. 产品经理原型图神器有望超越Axure 的软件sketch 48.2 for Mac 中文破解版下载
  7. [转]阿里巴巴数据库连接池 druid配置详解
  8. Xamarin.iOS调试提示需要iOS SDK
  9. Eclipse安装SVN教程
  10. java中事务的介绍