zoukankan      html  css  js  c++  java
  • CG Rendering v.s. Browser Rendering

    浏览器的渲染技术 v.s. CG渲染器的渲染技术

    看了两篇文章: 浏览器的渲染原理简介, How browsers work(译文), 想到了一些东西, 对比两者, 或许有些东西能想得更明白些.

    以下CG Rendering 简称R, Browser简称B.

    共同点:

    -两者都有文本描述文件

    R: rib, ass, ....

    B: html

    -两者的任务都是渲染

    R:从文本描述文件得到一张图片(图片里包含了模型, 材质, 灯光,....)

    B:从文本描述文件得到一个网页, 包含文字, 图片(位置, 布局, 放缩), 视频, 音频, flash,....

    不同点:

    - 最根本的不同是两者的渲染方式. 比如两者如何渲染带动画的元素(R渲染带动画的模型, B渲染带动画的文字或图片). R和B对动画的解决方法完全不同, 这个最根本的分歧导致两者发展出各自的技术.

    对于R来说, 要渲染一个24fps的动画, 就要生成每一帧的图片, 然后把这些图片按顺序播放, 使得人们看到一段动画. 这是电影胶片的思路. 无论游戏(OpenGL/Dirext3D)还是动画/VFX都是这么做的.

    比如, 场景描述文件要渲染24帧(f0~f23), 场景里包含2个元素A0, A1(A0做平移, A1是静止的). 那么渲染第0帧f0的时候要计算A0和A1的数据, 渲染f1的时候同样要重新计算A0和A1的数据, 只不过A0的位置不同而已(所以才产生了动画), f2~f23也是类似, 即每一帧都要重新计算A0和A1的数据.

    对于B来说, 它基于操作系统的window manager(比如XWindow)来显示元素, 而window manager不借助于opengl/d3d来显示(渲染)一个元素.

    比如, B要渲染2个元素A0, A1(A0做平移, A1是静止的). 那么, 初始时A0和A1都被渲染出来. 之后把A0的像素平移到下一个位置, 而A1的大部分(或者说没有被A0影响到的)像素并不改变. 所以A1的大部分(或者说没有被A0影响到的)像素并没有被重新计算!

    (是否可以说B里的A0和A1的渲染是异步的? )

    - R的优势在于, R的渲染方式能hold住更复杂的场景(你看看那些游戏和电影场景).

    - B的优势在于, 如果你要滚动页面, 页面上的所有静止元素(比如静态文字, 静态图片)都不需要重新渲染, window manager只需做平移就可以了, 这个计算量很小.

    - shader

      我是站在R的角度来说的, 所以R里的shader的概念不必多说. 那么, B里有没有什么类似的东西对应于R里的shader呢?

      先想想R里的shader到底是什么, 是做什么的.

      我想, 最简单的情况, A0和A1, A0是红色,A1是蓝色. A0和A1需要两个不同的shader.

      我猜, 起初, 人们可能把红色和蓝色写死在shader里, 于是, shader0是一段代码, 赋给了A0并渲染出红色; shader1是另一段代码, 赋给了A1并渲染出蓝色.

      后来, shader写的多了, 人们为了方便, 把不变的代码提出来形成shader函数体, 而把变化的代码(红色值和蓝色值)提出来作为shader的参数.

      那么, 我想B里的这些代码就类似与R里的shader:

    <font color="#FF0000">我是红色字体</font>
    <font color="#0000FF">我是蓝色字体</font> 

    - CG行业里的shader一直在发展, 比B里的"shader"要复杂得多. 如果把R里的shader的概念和技术引入到B里, 会怎样?

     

    (未完, 待续)

    References:

    [1] 浏览器的渲染原理简介

    [2] How browsers work, (译文)

  • 相关阅读:
    关于Eclipse中Jsp页面打不开并且显示Failed to create the part's controls的解决办法
    FileOutputStream()找不到指定路径
    视频还没剪完室友就喊我去撸串,我直接用python写了个自动关机程序!
    ORM是什么?如何理解ORM
    jquery获取多个相同name的input的value值
    Windows安装OpenSSH的注意点
    小功能~调用QQ进行客服对话功能
    Furion分表分库我也要happy coding
    .Net下你不得不看的分表分库解决方案多字段分片
    分库分表的框架如何设计自动路由
  • 原文地址:https://www.cnblogs.com/yaoyansi/p/4006592.html
Copyright © 2011-2022 走看看