码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-16 09:21:08      阅读:671      评论:0      收藏:0      [点我收藏+]

标签:shader   unity   ray-march   新技术   cg-hlsl   

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效果欣赏

实现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等人的功劳与技术支持。。技术分享



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

标签:shader   unity   ray-march   新技术   cg-hlsl   

原文地址:http://blog.csdn.net/baidu_26153715/article/details/46510703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!