惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
A
About on SuperTechFans
NISL@THU
NISL@THU
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
小众软件
小众软件
博客园 - Franky
罗磊的独立博客
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
MongoDB | Blog
MongoDB | Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cyberwarzone
Cyberwarzone
C
CXSECURITY Database RSS Feed - CXSecurity.com
Project Zero
Project Zero
Security Latest
Security Latest
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
The Hacker News
The Hacker News
I
Intezer
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy International News Feed
月光博客
月光博客
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园_首页
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
The Last Watchdog
The Last Watchdog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

机核

游戏性能旗舰最强之选,一加 Ace 6 至尊版国补到手价2999元起 6元钱自己更换电动车刹车线 《生化危机9:安魂曲》编剧Haris Orkin专访 摸金游戏?音乐游戏!暗区新赛季这把能弹的琴有何来历? 好评国产武侠SRPG《息风谷战略》免费DLC现已推出 | 机核 GCORES 碎片 《生化危机:安魂曲》将于5月实装首个免费更新内容 | 机核 GCORES 新锐东方游戏,谱写世界新章! 沉浸式恋爱视觉小说游戏《心象演算》免费试玩版现已正式上线 | 机核 GCORES 互动影游《代号三国:龙起》上线!穿越三国与曹操并肩、与佳人同行、与权谋博弈! 《老头收集梦想生活》,游戏酒桌会6,录音笔VOL.689 | 机核 GCORES 破界·共生——《白日梦:无限世界》五大核心游戏特点解析 价格已到史低,锐龙5 9600X/锐龙7 9700X正适合抄底 时间循环之旅即刻启程!《归环》一周目测试今日开启 热门在线韩游变魂游,洛奇衍生作能否打破“花瓶”魔咒? LG UltraGear evo 全新高端显示器系列:当“5K”遇见“AI”,不止强大,更懂热爱 反套路三国互动影游《代号三国:龙起》今日上线! 愿望单登记人数突破10万!备受瞩目的“女儿养成游戏” 《梦幻魔法公主》今日于Steam平台上线!限时八折优惠中 《黑神话:悟空》全球音乐会2026巡演将于4月29日12时开票 | 机核 GCORES “Snowguelike”生存肉鸽挖矿新作《蛙穿雪境》公布发售日期,5月7日正式上线 | 机核 GCORES 重塑移动办公、AI创作新境!全新华硕灵耀Air系列、ProArt 骁龙版震撼首发,创芯未来 均分88:《Saros》媒体评分汇总 | 机核 GCORES 上海烛龙公布合作遗迹探险游戏《吉时已到》首支预告片 | 机核 GCORES 首个独立游戏《萝薇日记》已上线Steam! 烛龙新IP《吉时已到》首曝,打造国内首款中式合作遗迹探险游戏 喜加一:《暗黑破坏神Ⅳ》国服现已开启限时免费领取本体活动 | 机核 GCORES 新版《生化危机》电影定于9月18日上映,官方网站现已上线 | 机核 GCORES 《冲就完事模拟器2》“星球大战”联动DLC正式宣布 | 机核 GCORES SteamController将于5月4日发售,售价99美元 | 机核 GCORES 事已至此,内存这么用也算省钱了,“2+1”非对称双通道应用实测 505游戏母公司现已收购《明末:渊虚之羽》IP | 机核 GCORES 基石 手动杂谈12|格斗游戏也能讲好故事 | 机核 GCORES I Love You Mr Snowball 我的向日葵小姐 会比GTA6先发售吗?最硬核的生存游戏《DAYZ》要推新DLC了 周记02:在2026遇到新怪谈 什么硬件,能让游戏Loading界面快速消失? | 机核 GCORES GadioSpec《百年风云世界杯》免费试听集 | 机核 GCORES 百年风云世界杯Vol.1丨足球崛起 | 机核 GCORES 100年前,一群人提前替我们经历了AI恐惧 | 机核 GCORES 《呼啸山庄》2026 ——一辆当代艺术的大卡车冲撞了我的大脑 手游《天穗之咲稻姬:日之香巡灵传》宣布将于7月27日停服 | 机核 GCORES 集结梦之队,征战世界杯,《最佳球会ONLINE》上线Steam 山水绝景随心拼 休闲建造游戏《千里山河录》Steam商店页公开 巫师帽、法袍、魔杖,为什么它们是影视、游戏里的法师必备三件套? 《无鞘信使》-第一章 复古风自动战斗肉鸽《终结之终结》Steam商店页面现已上线 电脑里有一款不破不立的MMO,录音笔VOL.688 | 机核 GCORES 《生化危机》30周年纪念周边发售,这次是真的“保护伞” 可靠耐用+AI全能,惠普战66 2025锐龙版深度体验 《时之书:无尽终章》关卡“大航海时代”全球首次公开 经典名作《乌龙派出所》改编经营模拟游戏《乌龙派出所~阿两的商店街物语~》正式宣布支持简体中文 明日开冲,解锁反套路三国互动影游《代号三国:龙起》即将上线 独立游戏《这是我的宝藏!》已发售~ 降低难度不是唯一解,无压力死亡也是好体验 Netflix官宣新片《普通人》:讲述韩国现代史上的权力风暴 《生化危机:安魂曲》全球销量现已突破700万份 《绝地鸭卫》PC版5月15日正式发售 亡妻回忆录?女性向情感叙事游戏《S-mail》现已正式发售 全新酷黑风格,酷睿Ultra 200S PLUS的高性价比搭档!七彩虹BATTLE-AX B860M-PLUS S WIFI7 V20 超级黑刃主板测评 胖狗 索尼发布了港台地区PS5产品价格调整公告,将于5月1日起实施 二次元怪猎+性感美女!《碧蓝幻想:无尽黄昏》开启Beta公测 这款怪谈类型中式恐怖游戏居然更新了?! 《百日战纪 -最终防卫学园-》改编漫画将于今年冬季开启连载 《如被附身,请致电我们》:匈牙利黑色幽默恐怖小说 《竹屿山房杂部卷五》(译文) 大树 超越引擎 摄影分享丨四月 碎片杂记vol.72 当老式FPS与老式动画技术碰撞出新时代的火花—《神探杰克鼠》 想做独游,如何避免首个项目就褒姒? 在线多人动作游戏《OCTOPinbs》将于5月12日上线Steam! 《酒鬼女神的酒诡》确定将于2026年登陆Steam 《CRYMELIGHT》将于11月5日(周四)正式发售!4月25日开始预购! 钢铁国度MKI部落Evolution,蛮兵部分 【钢铁国度】部落-Primal MK I,蛮兵部分 这是一个高中生用ai跑出来的作品,我自称他为物理神话 钢铁国度MKI部落Metamorphosis,蛮兵部分上 钢铁国度MKI部落Metamorphosis,蛮兵部分下 INDIE Live Expo于4月25日举办:首发9款新作,超200款独立游戏亮相 暗黑卡牌策略新作《魔忌:穷鼠啮狸》发布全新中文试玩版和发售预告片,4月30日正式上线在即 战锤40K长篇小说:变节者・苦难主宰(三)(全书完) 战锤40K长篇小说:变节者・苦难主宰(二) 战锤40K长篇小说:变节者・苦难主宰(一) 英语语言学习丨短语专题1:短语的特点 唯一的EVE战争 【少前同人】【M200】战术人形会梦见音乐会吗 【昏迷3】即将发售,前作主角悉数到场!“恶灵”宋老师化身可操控角色 业内人士:游戏公司“十有八九”使用生成式AI,包括卡普空 欢庆一周年:《光与影:33号远征队》全新纪念艺术图、超值折扣与免费更新同步上线 才刚刚开始呢 【抽奖】《星际卡车司机》推出免费大型更新,四折平史低折扣进行中 四人合作FPS游戏《佣兵猎手》抢先体验重大更新 1 现已上线 Raw Fury新作《深馅地牢 Deep Dish Dungeon》将于今秋加入 XGP 塔防幸存者游戏《魔怪来袭》推出首个 DLC 《饿狼传说:群狼之城》1周年纪念!新DLC“沃尔夫冈·克劳萨”今日参战 猫狗相伴 欢乐闯关 双人合作平台跳跃游戏《猫狗同行》上线Steam商店页 《同行:月球逃脱》(Together: Moon Escape)上线将于明日上线Steam
聊聊我是怎么开发软渲染器的
煤问题 · 2022-12-30 · via 机核

本文首次发表于CG世界,内容经过重新编辑

介绍

大概是从去年8月份,我开始一边自学图形学一边开发软渲染器foolrenderer。除了模型加载用了开源代码以外,其他所有功能都是自己开发的。目前实现了基本的光栅化渲染,还添加了可编程渲染流水线、基于物理的材质等功能。

foolrenderer演示了GPU的大致工作原理和一些实时渲染技术,可以作为游戏开发者和图形爱好者了解渲染基础知识的学习性项目。大伙可以在Github上找到源代码

1 / 8

首先解释一下什么是软渲染器?

软渲染器(Software Renderer)是一类完全依靠软件驱动,不使用图形硬件加速的渲染器的统称。原本集成在显卡里的功能需要全部由开发者自己实现,软渲染的速度也远远比不上利用了硬件加速的渲染器。虽然软渲染器缺点很多,但也有一些实际应用场景:例如软渲染器有很好的兼容性,一些系统上的图形编程接口有软渲染层作为硬件不兼容时的后备渲染方案;可以用软渲染器实现一些显卡不支持的功能,早期的光线追踪就是纯软件实现的。

动机

虽然我之前一直在开发游戏,但主要集中在玩法制作上,图形方面的知识其实了解的不多,这就导致我在制作游戏的时候遇到不少问题。比如,色彩贴图一般要用sRGB空间,为啥金属度、法线这类贴图不用;PBR材质里常说的分布函数是个啥,什么是GGX。诸如此类,看了网上的解释还是云里雾里。还有个问题是不会写着色器,很多视觉效果需要自定义的着色器实现,但我一直不熟悉渲染流水线,对着教程也写不出来。

所以我慢慢觉得有必要了解一些计算机图形的概念,于是乎开始找相关资料学习。经过了解之后发现,图形学的基础原理并没有想象中那么复杂,用学到的知识完全可以自己写一个软渲染器。我觉得边学边做个小软件挺有意思的,连带这样学稍微更有动力一点,所以就决定开发一个基于光栅化算法的软渲染器,也就是现在的foolrenderer项目。

开发过程

因为是边学边做,所以foolrenderer的开发是按照自学进度走的,我学到哪里就给程序添加相应的功能。

首先就是为foolrenderer实现三角形光栅化功能,用人话说就是把三角形绘制到屏幕上。原理很简单:检查屏幕上的每一个像素,如果像素刚好落在三角形里面,就给这个像素设置对应颜色。当然了,每画一个三角形都要检查屏幕上的所有像素显然没有必要,最简单的优化方法是只检查三角形所在的矩形范围内的像素。

有了三角形光栅化,我接着添加了插值功能。接触过三维软件的老哥都知道,模型是由一个个点构造的三角形组成(多边形可以分解成若干个三角形)。这些点就叫顶点,顶点除了包括这个点的位置信息外还可以存储颜色、UV坐标、法线等等其他数据。插值说的就是把三角形三个顶点的数据均匀的过渡到三角形表面上。举个例子,如果三角形顶点都是红色,插值会得到一个红色三角形;如果三角形顶点分别是红、绿、蓝,经过差值得到的三角形呈现渐变色,越接近绿色顶点的地方颜色也越接近绿色。

到这里就已经可以渲染一个简单的模型了,只需要读取模型文件里的数据,然后一个个的把三角形画出来就行——当然事情也没有这么简单,得到的结果还有很多问题:比如,程序没有考虑三角形的前后位置关系,模型背面的三角形可能挡住前面的三角,那就用深度缓冲记录每个像素的前后位置,不画靠后的面;渲染器肯定要有调整模型位置大小的功能,还要模拟人眼近大远小的透视观察效果。这就需要利用线性代数提供的数学工具修改顶点位置;还应该给foolrenderer开发一个可编程渲染流水线,这样才方便给模型添加贴图和光照效果。

从这儿就可以看出来,图形学的各种技术就是在讨论现有方案存在的问题时自然而然发展起来的,非常符合直觉。这里我要特别推荐《Tiny renderer》这个教程,内容就是在教你怎么开发一个最基本的软渲染器,非常适合没有基础的菜鸟学习,这个教程也算是一个让我开始写软渲染器的契机。

上面提到,渲染模型时要对所有顶点做位置变换,这需要提供相应的线性代数函数。网上现成的代码有很多,但本着尽量自己做的原则我还是自己写了一套。《线性代数的本质》是我找到的一个不错的入门视频,如果还有高中数学的那点底子,看这个视频就不成问题。一共只有十几集,每集平均10分钟,作者讲解的非常清楚,看完以后应付图形方面的问题足够了。

一番折腾foolrenderer逐渐像模像样起来,能真正能称得上是个渲染器了。在这个基础上可以开始添加一些常见的实时渲染技术,像什么法线贴图、阴影、基于物理的渲染等等。当然难度也开始慢慢变高了。实际开发这些功能后才发现,我们经常在软件中使用的技术,其实远比看起来的要复杂。

印象比较深的是计算顶点的切线向量,用切线空间的法线贴图时就要用到切线。乍一看计算切线很简单,按照推倒的公式算就行。但琢磨一下会发现不对劲的地方——一个顶点可能会被多个三角形共用,怎么计算平均切线就有很多方法了。如果建模软件用的方法和游戏引擎中的不一样,通过法线贴图计算得到的最终法线就会有区别,渲染结果就会有差异。为了避免差异,有人甚至提出计算切线的标准,MikkTSpace就是一种算法,实现方式非常复杂。

总之制作一个软渲染器算是不错的学习经历。开发的时候有个体会:找到合适的资料也挺费功夫的,同一内容的类似资料能在网上找到很多,只能都看看,横向比较一下才能知道好坏。我把找到的资料整理成了一个清单,希望对那些想要充电的朋友多少有点帮助。

后续打算

foolrenderer算是完成了吗?emmm从功能上来说恐怕还有很长一段距离,目前这个软渲染器只能说还很基础,甚至一些技术已经在现有的生产力工具里淘汰了。

随便举个例子,光是纹理这项功能到目前还只能用“残疾”来形容,最基本的双线性差值和Mipmap都没有,所以能在渲染的动画里看到明显的走样。更别提其他一些常见优化手段,更高级的全局照明,都还没来得及加进去。

同样的,图像方面的学习也才刚刚开始,继续练级呗还能咋整啊?