广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Real-Rime Rendering
  • 709
分享到

Real-Rime Rendering

RealRimeRendering 2023-01-31 01:01:27 709人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

简介      在图形学中,Texturing是一个将物体表面绘制上图像或者其他数据的过程。纹理贴图通过修改物体表面的渲染效果,达到一种更加真实渲染的目的。渲染管线(Textureing Pipeline)       物体表面的渲染颜色由

简介

      在图形学中,Texturing是一个将物体表面绘制上图像或者其他数据的过程。纹理贴图通过修改物体表面的渲染效果,达到一种更加真实渲染的目的。


渲染管线(Textureing Pipeline)

       物体表面的渲染颜色由光照,材质,视口位置和透明度决定。纹理可以改变物体表面的颜色值,而凹凸(bump texture) 改变的是法线。

       整个贴图的过程可以描述为一个贴图管线:


         之所以把贴图的过程细分为几个阶段,是因为每个阶段都为程序员提供了可控制性。

         以一个墙面的贴图为例,来描述整个阶段.


1.找到需要贴图的位置的空间坐标 (x,y,z) ; 

2.将该位置进行投影,3D->2D, (x,y,x) -> (u,v) ,这个变换等同于将坐标乘以一个正交矩阵。

3. u,v 的坐标范围为 (0,1),这样做的目的是为了适应不同分辨率的纹理。u,v的值就用于确定该点的颜色值,通过查找内存中的纹理,将 u,v 由转换到纹理的二维坐标上(相乘就行),就可以确定颜色值了,这个值就是物体的 diffuse color。



投射过程(Projector function)

       纹理管线的第一个过程就是获取物体表面的空间坐标,然后投影到(u,v)空间上,uv空间是纹理的二维空间,(u,v)坐标通常是由3D设计师通过3D建模工具来标定的,这个过程通常称为uv展开,目的就是生成纹理坐标。投影的方法包括球投影,圆柱投影,平面投影。

        在非交互行的渲染中,贴图过程就在渲染过程中,整个场景可能就只使用一种贴图方式,但通常设计师会把模型进行分割并对各个模型使用不停的贴图方法。在实时渲染的时候,投影过程通常在建模阶段完成,而投影的结果会存储在顶点中,或者在shader中完成,这样就可以实现动态的贴图,比如环境贴图 (environment mapping).

        虽然有很多种方法来实现贴图,但是思路都是一样的:通过插值来确定便面的参数,然后去查找对应的纹理值。


依附阶段(Corresponder function)

       插值节点能够将参数空间的组表(u,v)转化到纹理空间坐标,这将为赋材质提供很大的灵活性,很常用的一个功能就是3d游戏中的换妆。

       常用的一种依附方式就是矩阵运算,可以在shader中进行,另一种情况是控制纹理在问题贴不到的地方的处理方式,在OpenGL中该控制由 glTexParameter来实现。


纹理值(Texture value)

       依附阶段之后就可以得到 u,v 的坐标了,通过u,v  的坐标和纹理贴图就可以很容易地得到颜色值,大部分渲染中使用的都是图像纹理,一维,二维或者三维,但是在procedual texture中是不同的,在procedual texturing 中,并不是查找内存中的纹理值来得到rgb值的,而是通过计算获得。

        关于颜色信息的表示,最简单的就是Rgb值,虽然也可以使用灰度值,那就是黑白画了。还有就是Rgba,a表示alpha,多出一个值来表示透明度。法线贴图中,还有更多的颜色信息。


贴图缓存(Texture catching)

       在复杂的应用中,可能需要用到大量的贴图,用于存放纹理的高速缓存依硬件的不同而不同,但总归一句话 - 不够用。解决的方法有很多,总归一句话:寻找平衡点。

       一种策略是将纹理的体积设计得很小,牺牲一些精度,即使一次性全部加载到内存中也OK,典型的用空间换时间。

        还有就是利用OS中的内存调度策略了,比如LRU (Least recently used)。每一次加载纹理的时候都给该纹理一个时间戳,当需要加载新的纹理的时候,如果内存够用,直接加载,不够用就把最久未使用的那个纹理踢除,然后加载。

        加载纹理会耗费可观的时间(从硬盘到内存当然耗时啊!),大部分情况下不可能一次性加载全部纹理,一种解决方案就是预加载。


参考

Real-Time Rendering 3rd

--结束END--

本文标题: Real-Rime Rendering

本文链接: https://www.lsjlt.com/news/183393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作