Unity CG 写一个超酷的 ray-marching(shader纯代码写3D)

来源:互联网 发布:linux命令行下载samba 编辑:程序博客网 时间:2024/05/01 23:57

Unity CG 写一个超酷的 ray-marching(shader纯代码写3D)

1.其实自从看了http://www.shadertoy.com(inigo quilez为其主创始人)上的shader后,让我感到很高兴
2.更重要的是自从我接触了一个叫 inigo quilez 的shader技术后,让我觉得shader情感更深的浓厚了
3.http://www.iquilezles.org/ 哈哈,当然给大家一个崇拜的机会吧,你一定会学到你想学到的技术和秘密


哈哈,邪恶的专栏地址放送,一戳秒进哦
http://blog.csdn.net/column/details/shader-style.html
好吧,本人由于热爱shader技术,有许多的误解之处和错误的地方,就救救俺吧……….


我那猥琐的代码

  • 为什么我的代码猥琐
    你看这儿吧,相当的猥琐,我都不好意思留名了,
    这里写图片描述
    这是代码的地址:http://www.glslsandbox.com/e#24033.0

    这是我试着去写一款3D效果的shader 代码,我当时写啊写啊,各种调试各种修改,就做了这么个3D线条的效果,最后我不敢直视,我没有敢留名,一般的我会留by (834,834144,834144373,834144373zhu)的字样。

    如今我回头一看,都快看不懂自己的每句代码的意思了,当然我还能感觉到那时写的时候思维是多么的通常,可惜方法不适用于任何3D写法。

  • 代码没有明确的思维
    一坨又一坨,层次结构不清晰,囫囵吞枣,经验水平不高,过于强求效果。
    比如这儿:
    这里写图片描述
    http://www.glslsandbox.com/e#24003.1
    坐标复用太多,层次很乱,当然给高手看了都会觉得没有可读性。

How about the ray-marching?

  • ray-marching是什么?
    ray-tracing可是鲜为人知的,不谈ray-tracing的技术细节,人们都扎下了它的深刻印象,比如unity5.x的加入了GI全局光照后,高通给unity5.x提供的光线追中技术,光照渲染大幅度的提高。还有比如UE4等引擎先进的光线追踪技术
    你看UE4的效果,这光线效果:
    这里写图片描述
    当然,UE4中update lighting会自动生成光照信息图,这效果不明摆着么?

    那那,我的 ray-marching呢?
    那那,我的 ray-marching呢?
    好吧!就是它罗:
    这里写图片描述
    以下是ray-marching的一个效果截图(来源于国外的 Mercury团队制作的time less
    ,http://mercury.sexy/):
    这里写图片描述
    当然这是人家做的64KB demo中的截图……..

实现一个小的推理,画一个简单的圆

1.简单推理手稿 show
这里写图片描述 这里写图片描述
哈哈,我记得当时感觉只用到了初中数学,而且我怎得一团翔,,,,,
这只是练练一下实验效果和原理的试手,所以同志们可以自己试试感受一下,,,(我这个就太乱了,一拿出来我又不知所措了,,)

2.试着推实验是否是那个意思
当然,我最后及时的实现了推理的想法:
这里写图片描述

我那简直迷人的ray-marching效果欣赏

  • 谁说迷人了?
    这里写图片描述

  • 在http://glslsandbox.com 上的效果
    这里写图片描述
    这是我的代码链接http://glslsandbox.com/e#26011.0
    如果,你在同一页上看到了3D球….点进去后,你会愤怒的

  • 形状还可以改,随机应变嘛,啊哈………….
    这里写图片描述 这里写图片描述

实现ray-marching的技术细节

  • Sign Distance Field,Find the 物体的表面(surface)
    如果,你真的看到上述的手稿,那么我可以接着说说,Sign Distance Field的的主要作用其实就是定义是什么样的物体,比如:
    这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述
    这很明显嘛!!!基本物体模型和这么叼的fractal(奇葩的3D分形物体)。。。。。。

    好吧!在加一幅distance function 自己收集的函数和一些自己做的函数
    这里写图片描述
    哈哈,你如果不嫌蛋疼,把它们做成一个”收藏库”吧!很明显做成Unity的cginc文件非常到位。。。。。。

  • ray-marching,sphere-marching,射线步进技术
    这幅图很是可以哟
    这里写图片描述
    重屏幕出发的射线,一步一个圆的检测surface,在检测到的surface的圆,在加上改圆的半径继续向前检测

    不信,你可以看这张我做的效果图:
    这里写图片描述
    很明显,的确是一步一步的向前检测的

    这儿我亲手写的一个算法截图:
    这里写图片描述

  • 计算物体Surface 的 Normal
    这里写图片描述

    采用ray-marching位移法,在物体surface表面做出法线法线法线。。。这里写图片描述

哟!代码真的是这样子吗?

你看嘛!!!
这里写图片描述
这里写图片描述
这里写图片描述
其实就是这个样子的,实践出真质



汗水与辛酸的复出,回味可口的果实
献给早先技术实践的人,inigo quilez等人的功劳与技术支持。。这里写图片描述



3 0
原创粉丝点击