如何在尽可能少的采样次数下,ps怎么降低噪点路径追踪产生的噪点

说三个&b&二维动画电影&/b&有关的。&br&&br&1.群像运动镜头,即有名的“一百匹马”问题。&br&群像因为每个人物都需要或多或少的刻画,而且还要满足透视关系和镜头运动。对于电影级别的二维动画(无论是不是手绘),都需要大量的高精尖工作量,很多情况下在分镜甚至剧本阶段就会进行调整。&br&&br& 引用一下&a data-hash=&00c0e955b83ec1a387c6& href=&///people/00c0e955b83ec1a387c6& class=&member_mention& data-editable=&true& data-title=&@zecy& data-tip=&p$b$00c0e955b83ec1a387c6&&@zecy&/a&的文章:&br&&blockquote&现在还有一个月的时间,导演说他一个场景要有100匹马在跑,同时还有各种之前出现过的角色要出现在镜头中帮助女主角逃跑,你觉得应该要怎样做?&br&  A. 找几个原画师爆肝来画。&br&  B. 就画几匹,用合成复制成100匹,但是因为镜头估计有很多,所以还是要画很多。&br&  C. 用3D建模做几匹马,然后复制成100匹。&br&  D. 写100个「马」字。&br&  E. 写1个「马」字,然后加上「×100」。&/blockquote&A-E可以对应很多很多导演风格,嗯嗯。&br&&br&不过最近的二维动画电影已经开始挑战群像运动镜头了,比如细田守的《バケモノの子》,用三维转绘的方法做了大量的群运动镜头,来表现妖怪世界和人类世界的人物场面,就是“搞个大场面”。&br&&img src=&/14454ff7aba7c2dca5c131e3a9d4ce84_b.jpg& data-rawwidth=&580& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/14454ff7aba7c2dca5c131e3a9d4ce84_r.jpg&&&br&&img src=&/da7e116cc3a_b.jpg& data-rawwidth=&640& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/da7e116cc3a_r.jpg&&&br&2.材质动画&br&由于帧动画制作的特点,特殊材质运动的动画十分难做,没有了赛璐珞动画的精准之后,加动画师难以理解原动画的思路,包括结构、光影等等,很容易产生帧关系错误,俗称“抖”。因此这类的动画需要【很少】的原画师从始制作到结束,工作量和难度都是不可小觑的。最右代表性的就是我国的水墨动画真!的!是!一!张!一!张!画!水墨画!又比如在玻璃上制作的手绘动画&br&&a href=&///?target=http%3A///url93827& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Aleksandr Petrov动画作品《俄罗斯铁路广告》&i class=&icon-external&&&/i&&/a&(wifi预警),或者油画动画&a href=&///?target=http%3A///index.php%3Fm%3Dthread%26a%3Dview%26fid%3D30%26tid%3D174501& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&震惊!《爱梵高》 56800帧梵高风格的油画拍成的电影&i class=&icon-external&&&/i&&/a&。&br&&img src=&/587ed6ce230e_b.jpg& data-rawwidth=&502& data-rawheight=&711& class=&origin_image zh-lightbox-thumb& width=&502& data-original=&/587ed6ce230e_r.jpg&&&br&&br&3.特殊运动镜头&br&宫崎骏爷爷最喜欢炫技的镜头,镜头想怎么转就怎么转,人物想怎么动就怎么动。别人家都是用透视夸张糊过去,比如《乒乓》,宫崎骏爷爷:“吃我大转镜头”!不过这样的镜头通过三维转绘或者直接用三维镜头糊已经可以轻松实现,比如&a href=&/question/& class=&internal&&京都动画出品的《吹响吧!上低音号》的op中的旋转镜头是否需要极大的工作量? - ACG&/a&是直接用三维糊,今年的奥斯卡短片提名&a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Dam Keeper&i class=&icon-external&&&/i&&/a&是用三维转绘(下面这个两个小基友二人转的镜头)。&br&&img src=&/3b30b6a7deca3e8ae1a804de0ec6b804_b.jpg& data-rawwidth=&600& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/3b30b6a7deca3e8ae1a804de0ec6b804_r.jpg&&看到这些镜头,每次都会不由得“卧槽”出来,都是动画人心血(真的是血)的结晶啊。
说三个二维动画电影有关的。1.群像运动镜头,即有名的“一百匹马”问题。群像因为每个人物都需要或多或少的刻画,而且还要满足透视关系和镜头运动。对于电影级别的二维动画(无论是不是手绘),都需要大量的高精尖工作量,很多情况下在分镜甚至剧本阶段就会…
动画电影包含3D和2D,试着就3D方面聊聊题主所说的问题。&br&&br&3D动画中的特效主要包含毛发、布料、肌肉、流体(水、火、烟等)、刚体(碎石头、建筑坍塌),柔体(布料的某些实现、脂肪和一些部位的颤动等)、粒子(火花、下雨以及水和烟雾的某些实现等),实际的制作任务可能千奇百怪,但大都可以从上面所说的种类中找到继承源头。&br&以上所有的种类,谈难度很难抛开“质”和“量”这两个因素。&br&&br&简单的说,&b&基本所有“质”高或者“量”大的特效都难&/b&。&br&这样回答难免太过笼统,下面详细说一下,感兴趣的可以一看:)&br&&br&&b&“质”的需求&/b&&br&“质”是很好理解的,你说做毛发难不难呢?答案是不难,也难(请分开读)。&br&如果是要求不高的TV级毛发是相对好满足的,短毛大部分都不需要动力学,如果要量化难度的话一个熟练工一两天做一个角色没有问题,如果流程完善的话短毛后续镜头不需要再做太多调整。&br&难吗?不难。&br&&br&可是一流品质的毛发就恐怖了朋友们,同样是短毛,来举一个悲剧色彩的例子,《少年派》:&br&&img src=&/84f1ca6d25a417f1fbe8ca_b.jpg& data-rawwidth=&340& data-rawheight=&180& class=&content_image& width=&340&&&br&&blockquote&该片的数码特效主要由特效公司“节奏与色彩”(Rhythm & Hues)制作。由于老虎的体形庞大,皮肤松散,艺术家们参考真虎的影像资料对虚拟老虎模型进一步细微调整,模仿真虎的转头、跳跃、扑打和游泳姿势,连一个面部抽搐的小动作都要符合真虎的形态。光是老虎的毛发,就有超过15名动画师负责,有些人得整理与排序老虎超过千万根的毛发。根据负责老虎制作的特效总监比尔·威斯顿豪夫的介绍,单单这些调整就需要三个礼拜,老虎特效花费了六个月,在整部戏中,只是老虎的制作就花掉了一年时间。&br&&/blockquote&来源:&a href=&///?target=http%3A///special/lifeofpi-visualeffects/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&揭秘《少年派》特效 老虎制作花一年时间&i class=&icon-external&&&/i&&/a&&br&我们可以同样的量化一下,差不多是三个礼拜的毛发调整*假如不加班5天工作日*15人=225。虽然工时和难度不是完全对应,但足以从侧面说明同类不同“质”的任务在难度上的巨大差别。&br&之所以说是悲剧色彩,是因为这家卓越的公司做完少年派后就破产了。&br&难吗?难。&br&就这个接题主想问的,可以说几乎所有一流的“质”背后都是特效师抓狂的脸。&br&&br&&b&“量”的需求&/b&&br&这里的量并不是特效镜头和元素的多少,而是计算的量,或者可以理解成需要的精度。&br&拿水举例,水有很多实现的方法,如开头所述粒子也可以,流体也可以,现在流行的做法是将两者结合获得更高的细节和更稳定的动态,与此同时计算资源的消耗也是两者的综合。而且最恐怖的是鉴于我们所处一个三维的空间,在计算机里计算资源(时间资源和空间资源)和精度是呈三次方关系,简单的理解就是精度如果提高到2倍,会近似的需要原来8倍的解算时间和硬盘空间(只是近似,大部分软件都有所优化)&br&如此一来,同样是水,做一个小规模的瀑布和一个翻腾的大海根本就是两种任务。在做《加勒比海盗》的超级大漩涡时工业光魔应对如此规模的水已经非常吃力,于是脑洞大开将容器压扁,同时扭曲重力,从而将解算资源压缩了接近一个维度,模拟完后将平坦的旋窝水面再压成漏斗状,非常巧妙的得到了近似蛮力模拟的效果。&br&&a class=&video-box& href=&/v_show/id_XMzUyNjI3MDI0.html& target=&_blank&&
&img class=&thumbnail& src=&/BA4E4BC9586DF4&&&div class=&content&&
&div class=&title&&ILM放出“加勒比海盗”超级海洋漩涡制作花絮—在线播放—优酷网,视频高清在线观看&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/div&
&div class=&url&&&span class=&z-ico-video&&&/span&/v_show/id_XMzUyNjI3MDI0.html&/div&
&/a&&br&火、破碎等等同理,一旦量的要求高了之后难度指数级的增长。&br&同样就这个接题主想问的,几乎所有量大的日子里都堆满了特效师没抽完的烟。&br&&br&以上我想已经描述了“哪些特效难”。&br&另外想解释下一个误区,就是认为做星球大爆炸比做放鞭炮难,做手撕鬼子比做皮肤淤血难。这个除了用以上“质量二元论”可以推翻外,更重要的原因是:成功的特效应该做到的是“看不出是特效”,但是画鬼容易画人难,聪明的你想想是星球和鞭炮的爆炸对于观众而言是哪个辨别真假容易呢?
动画电影包含3D和2D,试着就3D方面聊聊题主所说的问题。3D动画中的特效主要包含毛发、布料、肌肉、流体(水、火、烟等)、刚体(碎石头、建筑坍塌),柔体(布料的某些实现、脂肪和一些部位的颤动等)、粒子(火花、下雨以及水和烟雾的某些实现等),实际的…
&p&=============这部分是相关讨论,提问回答在最后=============&/p&&p&&a data-hash=&5b4c4c4b09f8e4bd715f23& href=&///people/5b4c4c4b09f8e4bd715f23& class=&member_mention& data-tip=&p$b$5b4c4c4b09f8e4bd715f23&&@孟德尔&/a& 君的回答前面还比较靠谱,而后面说 &/p&&blockquote&光线追踪现在还在很初级的阶段,连电影业都没广泛应用,皮克斯直到汽车总动员才开始大规模使用光线追踪,而且还是部分应用。&/blockquote&&p&以及&/p&&blockquote&或许10年后再看,光线追踪只是一个历史的笑话也说不定。&/blockquote&&p&就显得有些主观臆测了。&/p&&br&&p&说 &光线追踪现在还在很初级的阶段& 我无法认同。&/p&&br&&p&&b&什么是光线追踪算法&/b&&/p&&p&&u&基本光线追踪算法&/u&:&/p&&p&&img src=&/dd1e3e24a6ce2b0e18cd7e2_b.jpg& data-rawwidth=&450& data-rawheight=&299& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&/dd1e3e24a6ce2b0e18cd7e2_r.jpg&&(上图来自wikipedia)&/p&
1. 对于每个像素,由摄像机向场景中发射一条光线。&br&&p&
2. 对于每条光线,一直追踪到它碰到某物体表面。&/p&&p&
3. 对于每个与表面相交的点,向光源发出一条影子探测光线,来查看是否每个光源都可见,并依此来对该像素点着色。&/p&&p&
4. 如果相交的表面材质是漫反射的就停止。如果表面材质是反光/折射的,则根据物理中反射或折射原理计算得出反射/折射方向并发射一条新的光线。&/p&&p&
5. 重复1到4,直到达到最大追踪深度或者光线碰到光源或者漫反射表面。&/p&&br&&p&&u&光线追踪算法的优势:&/u&&/p&&p&1. 具有物理准确性,可以达到相片级渲染,尤其擅长强反射(金属等)和折射材质(玻璃、液体等),焦散( caustics )现象、复反射( interreflection ) 等可以模拟得很逼真,还有影子。&/p&&p&2. 算法简单易实现&/p&&br&&p&&u&光线追踪算法的劣势:&/u&&br&&/p&&p&计算代价很高,就是慢&/p&&br&&p&&u&光线追踪&/u&&u&历史:&/u&&/p&&p&将光线追踪算法应用于图片渲染最初是由Arthur Appel于1968年提出,那时还叫ray casting。1979年Turner Whitted带来了新的研究突破(Recursive Ray Tracing Algorithm)。1984年, Carpenter等人发表了一篇分布式光线追踪的论文(Distributed Ray Tracing),影响甚广。发展到今天,大多数的相片级渲染系统都是基于光线追踪算法的。基本的光线追踪算法并不难,相信大部分计算机图形学的同学都写过的,难的是如何优化提高效率。&/p&&br&&p&&b&皮克斯的RenderMan和光线追踪&/b&&/p&&p&说到皮克斯直到《汽车总动员》才开始大规模使用光线追踪。皮克斯的《汽车总动员》于2006年6月在美国上映,今年已经是2014年了,已经快8年过去了,沧海桑田呐同学们。&/p&&p&皮克斯一直使用的是自家开发的渲染器RenderMan,基于REYES(Renders Everything You Ever Saw&--有点雷= =) 。REYES是另一种渲染算法,它对于处理复杂场景非常高效。1984年的时候皮克斯有考虑过光线追踪,但最终还是坚持使用REYES。那篇关于《汽车总动员》的论文(Ray Tracing for the Movie ‘Cars’)我有浏览过,里面提到五年前(也就是大约2000年左右)他们就启动了添加ray tracing功能到RenderMan的这个项目,同期《汽车总动员》正在制作中,文中也提到了《汽车总动员》使用光线追踪的动机:realistic reflections, sharp shadows, and ambient occlusion。REYES在处理反射强烈的汽车表面材质方面有些捉襟见肘,只能用environment map,仍然达不到光滑闪耀的质感。而这正是光线追踪擅长的。&/p&&br&&p&&b&使用光线追踪的主流渲染器&/b&&/p&&p&RenderMan就不说了,它本是基于REYES的,现在也有ray tracing的选项。众多工作室都在用。&/p&&p&(以下是纯基于光线追踪的渲染器)&/p&&p&Mental ray,NVIDIA出品,已经集成到3D建模软件Autodesk 家的Maya和3ds Max中。&/p&&p&Arnold近些年渐揽风骚,Sony Pictures Imageworks,Digital Domain, ILM, Luma Pictures等著名特效公司均有使用该渲染器。&/p&&p&VRay,比Arnold大众一点,近几年也在疯长,它目前有CPU版本和GPU版本(V-Ray 和 V-Ray RT GPU)。&/p&&br&&p&光线追踪算法在目前的影视特效领域占有重要的地位。我不认为光线追踪会成为&一个笑话&。2013年的SIGGRAPH有关于光线追踪的讲座(Ray Tracing is the Future and Ever Will Be),可以参考。&/p&&br&&p&硬要说的话,“&b&光线追踪算法在电子游戏领域的应用还在初级阶段&/b&”还比较靠谱。&/p&&p&光线追踪目前多用于影视特效中做静帧渲染。若想要应用到游戏中就需要做到实时渲染,就是提问中说的实时光线追踪(Real-time ray tracing)。&/p&&br&&p&======================回答问题的分割线======================&/p&&p&最后回答问题:什么是实时光线追踪技术?它可能出现在当前的次世代主机上吗?&/p&&p&&b&什么是实时光线追踪技术?&/b&&/p&&p&光线追踪(Ray tracing)算法前面说过了,那什么样的是实时的呢?6 fps左右就可以产生交互感,15 fps 可称得上实时,30fps不太卡,60 fps感觉平滑流畅,72 fps再往上肉眼就已经分辨不出差别。&/p&&br&&p&&b&它可能出现在当前的次世代主机上吗?&/b&&/p&&p&全面应用在当前看起来是不太行,在将来应该会有。 &/p&&p&你要CPU跑实时的光线追踪似乎是有点为难它了,在GPU上实现实时光线追踪相对容易一些,原因 &a data-hash=&371c9bdacba72e811063bbec& href=&///people/371c9bdacba72e811063bbec& class=&member_mention& data-tip=&p$b$371c9bdacba72e811063bbec&&@杨三&/a&
的回答里基本说了。GPU的优势就是核多,大量并行计算。而恰巧光线追踪就是个特别平行的体力活,每条光线都相互独立,所以可以并行地计算它们。能够加速的地方有碰撞检测,可以使用kd-tree或oct-tree之类。2009年SIGGRAPH 会议上, Nvidia 就发布了OptiX,Nvidia GPUs实时光线追踪的API 。
&/p&&p&另外,NVIDIA目前已经有virtual GPU技术,类似于云计算,不需要本地的GPU。如果virtual GPU可以应用到主机上,实现实时的光线追踪应该没有问题。&/p&&br&&p&&b&最最最后, Phil Spencer原tweet&/b&说的是:&/p&&blockquote&“@7kayhan@albertpenello We’ve done experiments with Realtime Raytracing. A ton of potential with this tech, amazing visuals.” &/blockquote&&p&他只是说做了相关实验,却被Gamespot完全改编成了另一种说法: &a href=&///?target=http%3A///articles/xbox-one-could-get-photorealistic-rendering-system-for-amazing-visuals//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Xbox One could get photorealistic rendering system for &amazing visuals&&i class=&icon-external&&&/i&&/a&。提问中的那篇文章看上去像是根据Gamespot这篇报道来的。&/p&&br&&p&&b&参考资料&/b&&/p&&p&[1] Matt Pharr and Greg Humphreys. &i&Physically Based Rendering, Second edition&/i&&/p&&p&[2] Tomas Akenine-Moller, Eric Haines and Naty Hoffman. &i&Real-time Rendering, Third edition&/i&&/p&&p&[3] Wikipedia&/p&
=============这部分是相关讨论,提问回答在最后============= 君的回答前面还比较靠谱,而后面说 光线追踪现在还在很初级的阶段,连电影业都没广泛应用,皮克斯直到汽车总动员才开始大规模使用光线追踪,而且还是部分应用。以及或许10年后再看,光…
再次祭出这张表 &a href=&///?target=http%3A//www.klayge.org/wiki/index.php/GPUs_comparison& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GPUs comparison &i class=&icon-external&&&/i&&/a&细节都在里面。&br&&br&最好比的是Tegra K1和Geforce 6/7系列。K1相当于只有一个Kepler的core,680有8个,780有12个,最强的Titan Black有15个。假设他们频率相同,功耗控制手段相同,K1也就只有它们的1/N计算能力。更不用说移动平台不能总是跑在最高频率上和最大功耗上,否则就烧了。&br&&br&内存带宽方面,差距也很大。GDDR5的256bit带宽6GHz的等效频率,和LDDR3的64bit带宽2GHz的等效频率,差别在10倍以上了。
再次祭出这张表 细节都在里面。最好比的是Tegra K1和Geforce 6/7系列。K1相当于只有一个Kepler的core,680有8个,780有12个,最强的Titan Black有15个。假设他们频率相同,功耗控制手段相同,K1也就只有它们的1/N计算能力。更不用说移动平…
很多人都说了,会进行插值。但是做的不是线性插值,而是非线性插值,可以参考橘宝书第二十八页的倒数第二段。可以通过纹理坐标变化来理解这个过程,如果是线性插值,那么得到的纹理坐标是没有纠正过的(可以参考《3D游戏编程大师技巧》的第十二章)。一种更直观的解释插值是利用如下的fragment shader 代码,将zbuffer可视化,你会发现四个点定义的平面是一个灰色渐变的,说明fragment shader是对这个平面内部进行了插值。&br&float exp = 50.0 ;&br&gl_FragColor = vec4(vec3(pow(gl_FragCoord.z, exp)), 1.0) ;&br&&br&&br&在fragment shader中,可以使用如下方式得到在摄像机空间下的物体表面上某个点的实际坐标:&br&float x = gl_FragCoord.x/screenW&br&float y = gl_FragCoord.y/screenH&br&float z = gl_FragCoord.z; // Already in range [0,1]&br&&br&// Converting from range [0,1] to NDC [-1,1]&br&float ndcx = x * 2.0 - 1.0;&br&float ndcy = y * 2.0 - 1.0;&br&float ndcz = z * 2.0 - 1.0;&br&//转换成摄像机坐标系(投影矩阵和透视除法的逆过程)&br&float zeye = 2*f*n / (zndc*(f-n)-(f+n));&br&float xeye = -zeye*(xndc*(r-l)+(r+l))/(2.0*n);&br&float yeye = -zeye*(yndc*(t-b)+(t+b))/(2.0*n);&br&如果看不懂还是回去补补功课吧。&br&我也是最近才开窍shader的,我的学习轨迹是自己写一个软渲染,这样才能明白书上讲的是什么。否则,书上讲的内容你更不不能深入理解,写起来出了错都不知道该往哪里思考。希望对题主有帮助。
很多人都说了,会进行插值。但是做的不是线性插值,而是非线性插值,可以参考橘宝书第二十八页的倒数第二段。可以通过纹理坐标变化来理解这个过程,如果是线性插值,那么得到的纹理坐标是没有纠正过的(可以参考《3D游戏编程大师技巧》的第十二章)。一种更…
&是不是顶点着色器, 确定了顶点的位置后, 到片段着色器之前, 顶点位置还会被改变?&&br&简短的回答是会被改变。&br&&br&有几个空间要弄清楚:世界空间(顶点原始数据所在的空间),剪裁空间[-w, w]x[-w, w]x[0, w],归一化空间[-1, 1]x[-1, 1]x[0, 1],屏幕空间[0, width]x[0, height]x[0, 1]&br&如果要自己算顶点变换,需要考虑这些空间之间的变换。&br&1. 世界空间到剪裁空间:&br&clipPos = ModelViewProjectionMatrix * worldPos&br&2. 剪裁空间到归一化空间:&br&nPos = clipPos / clipPos.w&br&3. 归一化空间到屏幕空间:&br&sPos.x = (nPos.x + 1.0) * 0.5 * width&br&sPos.y = (nPos.y + 1.0) * 0.5 * height&br&sPos.z = nPos.z&br&其实顶点着色器里面只做了第1步,而2和3往往是GPU帮你完成的,而且是发生在片段着色器之前,你如果自己计算顶点变换,就不能忽略2和3,否则用uniform传入的结果就会不对。&br&&br&另外评论下有些人提到的属性插值问题(和原题无关),GLSL其实可以指定属性是否被插值,如果在varying/in/out变量前加个flat关键字,那这个属性就不会被插值。如果在几何着色器里面输出三个flat out vec4的顶点位置,在片段着色器里可以被直接访问到。当然flat是在GLSL某个版本之后才支持的,需要注意。
"是不是顶点着色器, 确定了顶点的位置后, 到片段着色器之前, 顶点位置还会被改变?"简短的回答是会被改变。有几个空间要弄清楚:世界空间(顶点原始数据所在的空间),剪裁空间[-w, w]x[-w, w]x[0, w],归一化空间[-1, 1]x[-1, 1]x[0, 1],屏幕空间[0, wid…
对觉得PBRT太厚的同学补充一本:Advanced global illumination&br&流体:Fluid simulation for computer graphics&br&刚体:&br&没读到过非常全面的书,所以写三个&br&&a href=&///?target=http%3A///companyinfo/research/pbm2001/pdf/notesg.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/companyinfo/r&/span&&span class=&invisible&&esearch/pbm2001/pdf/notesg.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//image.diku.dk/kenny/download/erleben.05.thesis.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&image.diku.dk/kenny/dow&/span&&span class=&invisible&&nload/erleben.05.thesis.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&Realtime collision detection
对觉得PBRT太厚的同学补充一本:Advanced global illumination流体:Fluid simulation for computer graphics刚体:没读到过非常全面的书,所以写三个Realtime collision detection
&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scratchapixel&i class=&icon-external&&&/i&&/a&&br&&br&我看到这个网站后,感动得要哭!这一个网站就够了!!好好珍惜吧!&br&&br&想学opengl, 就用这个网站&a href=&///?target=http%3A//ogldev.atspace.co.uk/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenGL Step by Step&i class=&icon-external&&&/i&&/a&。非常赞!老外好无私!&br&&br&想学DX,就看‘Practical Rendering and Computation with Direct3D 11’。 这本书把pipeline讲得非常清晰。这是我见过最好的一本DX的书。 (小八卦,real-time rendering的作者曾把这书当礼物送给我同事)
我看到这个网站后,感动得要哭!这一个网站就够了!!好好珍惜吧!想学opengl, 就用这个网站。非常赞!老外好无私!想学DX,就看‘Practical Rendering and Computation with Direct3D 11’。 这本书把pipeline讲得非常清…
可以关注下 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Shadertoy BETA&i class=&icon-external&&&/i&&/a&,比拼的是使用一个 wbgl 的 pixel shader 实现复杂得的 demo 场景&br&你可以看上一整天,也可以注册个帐号进行修改,由于是 webgl,实时看到结果
可以关注下 ,比拼的是使用一个 wbgl 的 pixel shader 实现复杂得的 demo 场景你可以看上一整天,也可以注册个帐号进行修改,由于是 webgl,实时看到结果
谢邀。&br&&br&只能说,你没仔细找解释。&a href=&///?target=http%3A//gl.ict.usc.edu/Research/3DDisplay/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rendering for an Interactive 360? Light Field Display&i class=&icon-external&&&/i&&/a& 这是项目网站,2007年的,不是什么新东西了。&br&&br&基本原理是,镜子旋转的角度和投影仪是同步的。在每个时刻,投影仪从上方投出在那个镜子角度下能看到的截面图。旋转速度够快的话,由于人脑的视觉暂留,就能看到稳定的3D影像。&br&&br&我在08年用过这个东西,效果还是很不错的。难点在于投影仪的刷新率要非常高,并且要和镜子高度同步。
谢邀。只能说,你没仔细找解释。 这是项目网站,2007年的,不是什么新东西了。基本原理是,镜子旋转的角度和投影仪是同步的。在每个时刻,投影仪从上方投出在那个镜子角度下能看到的截面图。旋转…
用shader做的~先安利之前博客介绍过的工具 &a href=&///?target=http%3A//qiankanglai.me/misc//Adreno-Profiler/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Adreno Profiler分析任意安卓游戏特效+抓取资源&i class=&icon-external&&&/i&&/a&&br&&br&===================&br&&br&评论区有人指出直接贴别人的代码不太好,想想还是删掉了原答案,就留个博客地址骗流量了
用shader做的~先安利之前博客介绍过的工具 ===================评论区有人指出直接贴别人的代码不太好,想想还是删掉了原答案,就留个博客地址骗流量了
如果有人赞助我正版和泰坦,我可以給大家直播它每个函数是怎么写的,以及应该怎么优化。&br&&br&不用怀疑,显卡公司都会有楼主这样的人全职干这种事,楼主整理过一些公开的图形调试工具&br&&a href=&///?target=http%3A//vinjn.github.io//graphics-debugging-tools-overview.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&An Overview of Graphics Debugging Tools&i class=&icon-external&&&/i&&/a&&br&&br&插播小广告,上海 NVIDIA 还在招这样的人,感兴趣的私信。要求 C++ 和图形学两者擅长一个。&br&&br& 更新&br&得到 &a href=&/people/wang-yin-65-46& class=&internal&&WYin&/a& 的激活码(七天后才能使用),看来必须得直播了:)&br&计划以专栏文章 &a class=&internal& href=&/hacker-and-painter&&黑客与画家 - 知乎专栏 &/a&的形式进行,可以先关注起来啦&br&&br& 更新,开始直播&br&&a href=&/hacker-and-painter/& class=&internal&&《仙剑奇侠传六》纯技术评测(一) - 黑客与画家 - 知乎专栏&/a&
如果有人赞助我正版和泰坦,我可以給大家直播它每个函数是怎么写的,以及应该怎么优化。不用怀疑,显卡公司都会有楼主这样的人全职干这种事,楼主整理过一些公开的图形调试工具插播小广告,上海 NVIDIA 还在招这样…
因为你记错了。&br&&br&glCopyTexSubImage2D是从framebuffer-&texture,所以是那样的原点。glTexSubImage2D才是从头到尾都是texture的坐标系,(0, 0)对应左上角。
因为你记错了。glCopyTexSubImage2D是从framebuffer-&texture,所以是那样的原点。glTexSubImage2D才是从头到尾都是texture的坐标系,(0, 0)对应左上角。
我来补充一些单纯的降噪方法。&br&&br&&b&更加高效的样本分布(Efficiently Placed Samples)&/b&&br&光线追踪里光线路径是由一系列由0-1的随机数样本所组成的所决定的。这些随机样本构成的hyper cube构成了整个样本空间。而这些样本在这个hyper cube中的分布越均匀,对场景中光照的积分也就收敛的越快。计算机生成的的伪随机数的分布并不是最佳的。渲染里面通常使用一些Low Discrepancy的序列例如Sobol,Halton等。使用这种序列积分叫做Quasi Monte Carlo(QMC)。下图是Sobol序列和伪随机数在2维hyper cube中的分布对比。&br&&img src=&/ac20ccbfe6b70_b.jpg& data-rawwidth=&422& data-rawheight=&211& class=&origin_image zh-lightbox-thumb& width=&422& data-original=&/ac20ccbfe6b70_r.jpg&&&br&&a href=&///?target=http%3A//web.maths.unsw.edu.au/%7Efkuo/sobol/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sobol sequence generator&i class=&icon-external&&&/i&&/a&这个链接的代码可以帮你生成到21201维度的hyper cube。不过你自己还是需要手动的做一些scrambling,毕竟像素的数量远大于21201,而且每一个像素都需要至少20-30维度的hypercube。Scrambling并不简单,尤其是在所有双向路径相关的算法中例如Bidirectional Path Tracing,Bidirectional Photon Mapping。要做到robust可以看这个链接:&a href=&///?target=http%3A//gruenschloss.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Leonhard Grnschlo&i class=&icon-external&&&/i&&/a& 不过不是很好理解,也许我会写一篇关于这个的专栏文章,不过感觉这方面感兴趣的人还是不多(跑题了- -)&br&如果Scrambling做的不好的话,样本的维度间有correlation,就会得到下面的这种artifact(当年我自己程序的bug,差不多是见到过最漂亮的bug)。&br&&img src=&/6b8ed8f129e3ca18c0bf77_b.jpg& data-rawwidth=&720& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/6b8ed8f129e3ca18c0bf77_r.jpg&&要得到高效的样本分布还有一个方法就是自己做stratified sampling。&br&自己手动把采样空间分成许多小的strata,然后对每个小的strata单独生成一个样本。这个方法得到的分布比low Discrepancy序列还要高质量,缺点是你必须预先知道你需要多少个样本,不适宜做Progressive的渲染。&br&&img src=&/ab7ca0fe8b0_b.jpg& data-rawwidth=&940& data-rawheight=&458& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&/ab7ca0fe8b0_r.jpg&&&br&&br&&b&自适应采样(Adaptive Sampling)&/b&&br&这个就好理解很多了,你图片每个像素都1000个样本明显不是最优的。有些平滑的区域要收敛需要的样本数比其他区域(例如焦散区域,Near-Specular区域等)需要的样本少,所以应该对某些区域更多的采样。这方面的工作方法不少,也有支持progressive rendering的,也不好说谁最好,大家自行google吧。&br&&br&&b&频域的方法(Frequency Domain Approaches)&/b&&br&这大概是最前沿的方法了。目前这个路数感觉刚刚起步,大概思想就是你在对场景本身采样的同时也射更多的和主光线只有一点offset的光线去算得到的radiance的梯度图。最终再根据梯度的信息去重建最终的图像。这方面的研究最近才起步,以后应该有越来越多相关的算法出来。有兴趣看看下面这个文章吧。&br&&a href=&///?target=https%3A//mediatech.aalto.fi/publications/graphics/GPT/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&mediatech.aalto.fi/publ&/span&&span class=&invisible&&ications/graphics/GPT/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&&b&Hack&/b&&br&可能是最实用的。奇技淫巧有许多,例如大家都知道路径追踪在有镜面反射物体里的场景里因为无法有效采样焦散的关系噪点会很多,所以,大多数渲染器都会遇到镜面反射的物体的时候把返回的radiance clamp到一个最大值。的确最终的结果这样就不正确了,不过也好于你那满屏幕的白噪点。例如下面右图因为手动去掉了焦散画面偏黑,但是也比你渲了半天一堆噪点体验要好。&br&&img src=&/49b2c4a8136dbdca1d9e61d_b.jpg& data-rawwidth=&348& data-rawheight=&253& class=&content_image& width=&348&&&img src=&/851fdd0cfd751f5c31bf4ac2_b.jpg& data-rawwidth=&344& data-rawheight=&250& class=&content_image& width=&344&&&br&再例如遇到多重Glossy反射的时候,许多渲染器都会把当前这次反射的材质的Roughness值Clamp到比之前反射的roughness值,或者比他大。不这样做的话也会有许多噪点。如果再算上Participating Media又有更多hack了。。不展开了。。
我来补充一些单纯的降噪方法。更加高效的样本分布(Efficiently Placed Samples)光线追踪里光线路径是由一系列由0-1的随机数样本所组成的所决定的。这些随机样本构成的hyper cube构成了整个样本空间。而这些样本在这个hyper cube中的分布越均匀,对场景中…
之前说的问题不会产生这么楼主图里这么奇葩的颜色的,那么楼主资源应该是从&a href=&///?target=http%3A//graphics.cs.williams.edu/data/meshes.xml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&williams.edu 的页面&i class=&icon-external&&&/i&&/a&里下载的吧&br&他的mtl文件有错误&br&&img src=&/a41fede7dd59d1f52654_b.jpg& data-rawwidth=&392& data-rawheight=&177& class=&content_image& width=&392&&&br&&br&---------------------------------------&br&1. &a href=&///?target=http%3A///code/tangent.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tangent Space Calculation&i class=&icon-external&&&/i&&/a& 计算出tangent和一个w标记方向,计算时 &b&B&/b& = (&b&N&/b& × &b&T&/b&) · &i&Tw&/i&&br&2. 比如你一个片上贴图要平铺10次,uv可以是(0,0),(10,10),映射到[0,1]就错了
之前说的问题不会产生这么楼主图里这么奇葩的颜色的,那么楼主资源应该是从里下载的吧他的mtl文件有错误---------------------------------------1.
计算出tangent和一个w标记方向,计算时 B = (N × T) · Tw…
上面的几个回答似乎都是指的静态光照,&br&如果你是要动态光照的话,可以稍微搜索下关键词&2d dynamic lighting&,这两年对应的工具和技术都比较成熟了。&br&SpriteLamp是一个不错的开始 &a class=& wrap external& href=&///?target=http%3A///& target=&_blank& rel=&nofollow noreferrer&&Sprite Lamp&i class=&icon-external&&&/i&&/a&
上面的几个回答似乎都是指的静态光照,如果你是要动态光照的话,可以稍微搜索下关键词"2d dynamic lighting",这两年对应的工具和技术都比较成熟了。SpriteLamp是一个不错的开始
之前在专栏上写过相关文章:&a href=&/indiegamepixel/& class=&internal&&Light of Sight - 2D光影 - 独立游戏大像素 - 知乎专栏&/a&,贴一部分出来:&br&&br&&blockquote&&p&光影在2D游戏中就比较少见了,因为2D的图片只能储存到X和Y轴的信息,但3维空间当中的法线对3D光影的计算是必不可少的,所以3D的算法并不能直接地应用到2D当中。&/p&&p&由于纬度的缺失,2D注定没有办法制造真实的光影效果,但是在游戏这个领域,真实未必是王道。所以现有的2D光影技术,都是在利用2维的数据,制造出光影的感觉。&/p&&p&我所了解的2D方案有两种:&/p&&ol&&li&一种是类似于独立游戏Luminesca和Monaco:What's Yours Is Mine的“2D光源”; 这个方案的核心在于对阻碍物边缘的检测,常用raycast算法,计算量相对后者,甚至于3D,都会更大。&/li&&li&另一种是类似于Confederate Express和Legend of Dungeon的Normal Map。它的核心在于下图左下角的那三个人,五颜六色的是normal map,它的rbg通道并不用来记录颜色,而是用来记录人物的XYZ的数据,也就是三维的信息。有了这些信息,就可以计算出每一个点的法线,也就可以用3D的算法了。&/li&&/ol&(左上角为Luminesca,右上角为Monaco: What's Yours Is Mine,左下角为Confederate Express,右下角为Legend of Dungeon。)&br&&img src=&/7cca4dbf59d2e62537bac9a_b.jpg& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/7cca4dbf59d2e62537bac9a_r.jpg&&&/blockquote&&br&如果你对第一种方案感兴趣,可以看看我写的一个开源的Unity插件:&a href=&///?target=https%3A///f15gdsy/2D-Light-of-Sight-Unity& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&f15gdsy/2D-Light-of-Sight-Unity · GitHub&i class=&icon-external&&&/i&&/a&,可以实现:&br&这样的效果&br&&img src=&/2516b1dfd588a8e587e76a8949eaba18_b.jpg& data-rawwidth=&1730& data-rawheight=&1154& class=&origin_image zh-lightbox-thumb& width=&1730& data-original=&/2516b1dfd588a8e587e76a8949eaba18_r.jpg&&&img src=&/4fdac72c94_b.jpg& data-rawwidth=&717& data-rawheight=&408& class=&origin_image zh-lightbox-thumb& width=&717& data-original=&/4fdac72c94_r.jpg&&
之前在专栏上写过相关文章:,贴一部分出来:光影在2D游戏中就比较少见了,因为2D的图片只能储存到X和Y轴的信息,但3维空间当中的法线对3D光影的计算是必不可少的,所以3D的算法并不能直接地应用到2D当…
P1至Q1线段里的每一点都在 A 内,并在 B 外,即那些点都在 A - B 的集合里。&br&问题可能在于判断时候用那一区间,是闭合区间 [P1, Q1] 还是开区间 (P1, Q1)。如果是开区间,那么P1和Q1两点都不属于 A - B 的集合。
P1至Q1线段里的每一点都在 A 内,并在 B 外,即那些点都在 A - B 的集合里。问题可能在于判断时候用那一区间,是闭合区间 [P1, Q1] 还是开区间 (P1, Q1)。如果是开区间,那么P1和Q1两点都不属于 A - B 的集合。
不太清楚你是怎么实现的。&br&&br&&ol&&li&不要觉得Draw Call高,要先去评估后再决定。&br&&/li&&li&在TBR架构的GPU中,同一个Draw中取四个Texture,会导致Texture Fetch Cache的命中率下降。&/li&&li&对于你这样的需求,我默认你是一个Primitive一定是一个Texture。如果不是,那还会有分支的问题。&/li&&/ol&
不太清楚你是怎么实现的。不要觉得Draw Call高,要先去评估后再决定。在TBR架构的GPU中,同一个Draw中取四个Texture,会导致Texture Fetch Cache的命中率下降。对于你这样的需求,我默认你是一个Primitive一定是一个Texture。如果不是,那还会有分支的问题。
妈的,知乎上提问水平越来越高了。Excited&br&我本来可以不回答你们这些问题的,这叫闷声发大财。&br&但周末偶尔闲赋在家总是要找点事情做的。&br&&a class=& wrap external& href=&///?target=http%3A///pseudo/& target=&_blank& rel=&nofollow noreferrer&&Lou's Pseudo 3d Page
&i class=&icon-external&&&/i&&/a&&b&&a class=& wrap external& href=&///?target=http%3A///pseudo/& target=&_blank& rel=&nofollow noreferrer&&题主看完这个你就可以和上面那些大V谈笑风声了&i class=&icon-external&&&/i&&/a&&/b&
妈的,知乎上提问水平越来越高了。Excited我本来可以不回答你们这些问题的,这叫闷声发大财。但周末偶尔闲赋在家总是要找点事情做的。
有可能是 Raycasting&br&
Raycasting is a rendering technique to create a 3D perspective in a
2D map. Back when computers were slower it wasn't possible to run
real 3D engines in realtime, and raycasting was the first solution.
Raycasting can go very fast, because only a calculation has to be
done for every vertical line of the screen. The most well known
game that used this technique, is of course Wolfenstein 3D.&br&&br&&a href=&///?target=http%3A//lodev.org/cgtutor/raycasting.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Raycasting&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///a-first-person-engine-in-265-lines/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A first-person engine in 265 lines&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///raycaster/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Raycaster Demo&i class=&icon-external&&&/i&&/a&
有可能是 Raycasting
Raycasting is a rendering technique to create a 3D perspective in a
2D map. Back when computers were slower it wasn't possible to run
real 3D engines in realtime, and raycasting was the first solution.
Raycasting can g…
谢邀。&br&&br&你完全弄错了概念。pbo不是用来做离屏渲染,fbo也不能取代pbo。fbo是用来取代pbuffer的。
谢邀。你完全弄错了概念。pbo不是用来做离屏渲染,fbo也不能取代pbo。fbo是用来取代pbuffer的。
不太清楚UE的实现。&br&第一个有可能是用了之前RTT的Depth Texture,直接把Depth Texture和当前的Depth输出给Blending就可以了。这样Shader只用Forward,不需要做更复杂的运算。&br&&br&&a href=&///?target=https%3A///en-us/library/windows/desktop/ffv%3Dvs.85%29.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ID3D11DeviceContext::OMSetBlendState method (Windows)&i class=&icon-external&&&/i&&/a&
不太清楚UE的实现。第一个有可能是用了之前RTT的Depth Texture,直接把Depth Texture和当前的Depth输出给Blending就可以了。这样Shader只用Forward,不需要做更复杂的运算。
1省存储空间,图形可以用几个简单的参数存储&br&2省运算时间,渲染一个图形时,只需要渲染局部然后复制到整体,这里优化空间很大&br&3节约美工开支,举个例子,用分形可以画闪电,树杈,雪花,地毯,火焰,星空,草地等成吨的花纹,并且只要稍微调几个参数就能让整张图看起来完全不一样,如果用人力一张一张画无疑不现实,如果用随机生成的方式,则会面临种种看起来不自然,杂乱或者缺乏美感的渲染结果,并且渲染速度也会比较慢&br&4还是节约美工开支,举个例子,我的游戏里面要出现一个类似于帝国死星的东西,我又请不起美术设计,我就按照分形的方式在一个灰白色球面上挖几个洞&br&5更加灵活,调高或者调低画质的时候,增减层数即可,传统的贴图方式要么提供高中低效三套贴图要么提供在低效下看着很诡异的一套贴图&br&&br&ps:前沿技术不清楚
1省存储空间,图形可以用几个简单的参数存储2省运算时间,渲染一个图形时,只需要渲染局部然后复制到整体,这里优化空间很大3节约美工开支,举个例子,用分形可以画闪电,树杈,雪花,地毯,火焰,星空,草地等成吨的花纹,并且只要稍微调几个参数就能让整…
&a href=&///?target=http%3A//www.creativeapplications.net/processing/cop15-identity-processing/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&COP15 Identity [Processing]&i class=&icon-external&&&/i&&/a&&br&&br&&a href=&///?target=http%3A//www.okdeluxe.co.uk/cop15/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&okdeluxe.co.uk/cop15/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
1341 人关注
4914 人关注
1555 个回答
236 人关注
131 个回答
4763 人关注
188 个回答
432 人关注
328 个回答

我要回帖

更多关于 怎么降低噪点 的文章

 

随机推荐