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

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
雷峰网
雷峰网
月光博客
月光博客
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
A
Arctic Wolf
Latest news
Latest news
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
F
Fortinet All Blogs
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
S
Secure Thoughts
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
V
Visual Studio Blog
P
Proofpoint News Feed
博客园 - 【当耐特】
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
H
Help Net Security
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog

博客园 - 大河马和小魔鱼

[zz]dds [zz]Shader programming tips #1 [zz]如何使用effect [论文摘要]Tips and Tricks for D3DX Effects-Based Renders [zt]矩阵和向量的乘法顺序 Depth Bias Planar Shadow Instancing 渲染简要 球面环境贴图 MaxScript 心得1 - 大河马和小魔鱼 - 博客园 Export利器:IGame MAX Script Export/Import 3DS MAX PlugIn 材质和纹理 牛刀小试,Max Script 3DS MAX PlugIn(2) 邂逅Geometry [原创]3DS MAX PlugIn 1 预备役 Novodex2.6.2 布料系统 Novodex,ODE,Tokamak,Bullet,Newton...... 原来我一直在做傻事
[论文简要]Integrating Shaders Into the Vision Rendering Engine
大河马和小魔鱼 · 2009-04-23 · via 博客园 - 大河马和小魔鱼

shaderx3中的这篇paper现在看来明显已经成为了3d game engine设计的commom sense。

下面按照文中的章节标题进行摘要性的叙述:

Assigning Shaders to Geometry

  文中提到,将物体的shader分成2种,一种是静态物体的材质例如毛皮,凹凸等等,一种是动态环境例如动态光影,体积雾等等。在进行动态shader的计算的时候如果动态环境是具有体积效果的话,需要找出受动态环境影响的可渲染物的集合。

Rendering Order

  文中将渲染基本的纹理贴图和静态光照称为Base Pass。将其他的动态效果或者是其他shader的渲染称之为Effect Pass。

  在进行渲染的时候,常识是先进行不透明物体的渲染,再进行透明物体的渲染。但是在多pass渲染的情况下这个方法就不那么灵验了。多pass的情况下使得渲染顺序的复杂度剧增,为了解决这个问题,并能够协调诸如钩边,体积雾等技术,文中提出了以下解决方法:

Code

   将Effect Pass的渲染分为了Pre-Base Pass和Post-Base Pass。例如要进行卡通渲染的钩边,常用的做法是在VS中根据normal进行,这一步放在Pre-Base中进行。而使用Blend方式的渲染动态光源则放在了Post-Base Pass中进行。有时候在同一个阶段可能会存在多个需要渲染的pass,例如动态光照和体积雾的渲染,都是放在Post-Base Pass中进行,这个时候可以给shader加上一个sort key,这样就可以保证体积雾的绘制始终在动态光照绘制之后进行。

shader callback functions

   文中提到,在进行每帧渲染前以及每个批次的几何体渲染前分别提供回调函数,以进行渲染前的最后修改。这点倒是和Gamebryo的实现很像,Gamebryo的Render系统的设计中也是提供了这样的一组回调函数,用意也和本文观点一致。

  文中举出了2个使用回调函数的例子,一个是进行光照渲染的时候,使用回调函数计算几何体受哪些光影的影响,另一个例子是在渲染毛皮的时候,使用到摄像机的距离选择毛发的shell长度。

Reducing Overhead for State Setup

   为了减少渲染状态的切换,文中提出的方法有:对透明以及不透明物体进行排序;在shader对象中提供接口,能够查询shader使用了哪些特殊的纹理,例如光照贴图,法线贴图等等,对这些使用特殊纹理的shader设置需要的渲染状态,否则不进行渲染状态的绘制。另外再进行渲染状态设置前,查询当前的渲染状态,如果和要设置的状态一致的话,就不进行API的调用,毕竟调用改变渲染状态的API耗时还是比较多的。

 Texture

  文中提到,为了灵活的使用程序生成的纹理(CPU端生成的过程纹理)和通过美术制作的纹理,使用另一种叫做纹理修改器的技术,纹理修改器是一个函数,接受一个纹理,然后通过某种算法将纹理中的像素转化为想要的效果,例如转化为灰度图,添加alpha通道等等。纹理修改器提供给了使用引擎的人一定的灵活性,用户可以自定义修改器,来进行纹理的修改,在某些运行时的情况下,这种功能是很方便的。