Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PathTracing ShadowRay的问题,球体全部为黑色

PathTracing ShadowRay的问题,球体全部为黑色
EN

Stack Overflow用户
提问于 2019-07-12 14:52:56
回答 1查看 117关注 0票数 2

所以我在OpenGL中制作了一个光线跟踪器,完全基于着色器,我正在努力找出阴影光线的问题所在。如果我将物体的亮度乘以shadowRay输出,似乎只有球体的“边缘”变亮了。

我多次验证了代码,但没有找到问题的来源。

这是我得到的:

代码语言:javascript
运行
AI代码解释
复制
vec3 TraceShadowRay(vec3 hitPoint, vec3 normal, Object objects[3])
{
    Light pointLight;

    pointLight.position = vec3(0, 80, 0);
    pointLight.intensity = 2;

    Ray ShadowRay;
    ShadowRay.origin = hitPoint + normal * 1e-4;
    ShadowRay.dir = normalize(pointLight.position - ShadowRay.origin);
    ShadowRay.t = 100000;
    //ShadowRay.dir = vec3(0, 1, 0);

    for(int i = 0; i < 3; ++i)
    {
        if(objects[i].type == 0)
        {
            if(interectSphere(objects[i].position, objects[i].radius, ShadowRay))
            {
                return vec3(0);
            }
        }
        if(objects[i].type == 1)
        {
            if(intersectPlane(objects[i].normal, objects[i].position, ShadowRay))
            {
                return vec3(0);
            }
        }
    }
    float AngleNormalShadow = dot(ShadowRay.dir, normal);
    clamp(AngleNormalShadow, 0, 1);

    return GetLight(ShadowRay.origin, pointLight);// * AngleNormalShadow;
}

getLight函数:

代码语言:javascript
运行
AI代码解释
复制
vec3 GetLight(vec3 origin, Light light)
{
    return vec3(1, 1, 1) * light.intensity;
    //float dist = sqrt( ((origin.x - light.position.x) * (origin.x - light.position.x))  +   ((origin.y - light.position.y) * (origin.y - light.position.y)));
    //return (vec3(1, 1, 1) * light.intensity) / (4 * M_PI * ((origin - light.position).length * (origin - light.position).length));
}

intersectSphere函数:

代码语言:javascript
运行
AI代码解释
复制
bool interectSphere(const vec3 center, float radius, inout Ray r)
{
    vec3 o = r.origin;
    vec3 d = r.dir;

    vec3 v = o - center;

    float b = 2 * dot(v, d);
    float c = dot(v, v) - radius*radius;
    float delta = b*b - 4 * c;

    if(delta < 1e-4)
        return false;

    float t1 = (-b - sqrt(delta))/2;
    float t2 = (-b + sqrt(delta))/2;

    if(t1 < t2)
    {
        r.t = t1;
        r.t2 = t2;
    }
    else if(t2 < t1)
    {
        r.t = t2;
        r.t2 = t1;
    }

    r.reflectionNormal = normalize((r.origin + r.dir * r.t) - center);

    return true;
}

预期的结果是一个很好的阴影球体,光线来自球体的顶部。

EN

回答 1

Stack Overflow用户

发布于 2019-07-15 01:56:26

会不会是一个缺失的否定呢?当发生冲突时,看起来interectSphere()返回true,但TraceShadowRay()中的调用代码在返回true时退出。

旧的:

代码语言:javascript
运行
AI代码解释
复制
        if(interectSphere(objects[i].position, objects[i].radius, ShadowRay))
        {
            return vec3(0);
        }

新的:

代码语言:javascript
运行
AI代码解释
复制
        if(!interectSphere(objects[i].position, objects[i].radius, ShadowRay))
        {
            return vec3(0);
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57009441

复制
相关文章
爱因斯坦的光线
爱因斯坦的光线
宇相
2018/09/18
6170
爱因斯坦的光线
光线追踪介绍
摘要 图像渲染就是一个这样的过程,输入一组物体,输出一个像素矩阵。把这个像素矩阵输送给显卡,显示器上就可以显示出来图像。本篇介绍下这个过程用到的算法,就是光线追踪。
一只小虾米
2022/10/25
1.1K0
光线追踪介绍
光线传媒的爆款尴尬
突如其来的疫情,给整个国内院线电影蒙上了阴霾,也给整个电影产业链带来了持久的影响。作为电影产业链的一员,光线传媒受损严重。
刘旷
2020/08/25
4650
光线传媒的爆款尴尬
全球首款光线追踪GPU
NVIDIA® Quadro RTX™ 6000 使用 NVIDIA Turing™ 架构及 NVIDIA RTX™ 平台,为专业工作流程带来电脑绘图领域十余年来最重大的进步。设计师和艺术家现在可以利用硬体加速光线追踪,深度学习,和高级着色的强大功能,大幅提高生产力,并以前所未有的速度创作出色的内容。
用户1332428
2023/03/28
7820
全球首款光线追踪GPU
光学词汇6-系统基本概念6-主光线和边缘光线
主光线(chief ray)是从物体的一个偏离光轴的点发出,并且经过光学系统孔径光阑的中心的光线。主光线代表着从物体某一点发出的光束的中心线。
HawkWang
2023/09/01
1.8K0
光学词汇6-系统基本概念6-主光线和边缘光线
苹果A17将支持光线追踪
12月28日消息,据外媒报道,苹果新一代的A17处理器将会与高通骁龙8 Gen2和天玑9200一样,加入硬件级光线追踪技术。
芯智讯
2023/02/09
3810
动画与光线-让幻像变现实
在本节中,我们将主要使用我们的3D模型。让它看起来很漂亮!为了使您的3D模型看起来非常好,您基本上需要学习如何为其设置动画并使用场景照明。我们还将学习如何在屏幕上应用反射并放置阴影。
iOSDevLog
2019/06/17
1.2K0
动画与光线-让幻像变现实
【案例】炫酷光线交织Canvas特效
今天段老师给同学们带来的是基于canvas 画板绘制彩色发光的光线交织背景动画特效。(是不是非常的炫酷)
用户1730674
2019/12/10
2K0
【案例】炫酷光线交织Canvas特效
英伟达发布RTX 2000系列显卡,性能提升6倍,支持实时光线跟踪
英伟达今天在德国Gamescom推出其新的GeForce RTX 2000系列显卡。虽然最近我们听到了许多风凉话,但GeForce RTX 2080终于正式上市了。RTX 2080基于英伟达新推出的图灵架构,旨在成功推出流行的GTX 1080,并在即将推出的游戏中推出新的实时光线跟踪效果。
AiTechYun
2018/09/26
1.1K0
英伟达发布RTX 2000系列显卡,性能提升6倍,支持实时光线跟踪
【Rust日报】2023-10-14 Rust101: 使用光线跟踪渲染Cornell box
通过这篇文章,我想分享 websurfx 项目的第一个稳定版本,该项目于10月1日发布。
MikeLoveRust
2023/10/18
2090
【Rust日报】2023-10-14 Rust101: 使用光线跟踪渲染Cornell box
开源Cocos全家桶,2D光线追踪!
Cocos-iPhone Cocos2d-x Cocos2d-html5 Cocos2d-js Cocos Creator
张晓衡
2020/11/25
9780
开源Cocos全家桶,2D光线追踪!
黑夜/光线差的场景中目标检测痛点可以缓解
目前的目标检测模型在许多基准数据集上都取得了良好的效果,在夜晚或者黑暗条件下检测目标仍然是一个巨大的挑战。
计算机视觉研究院
2023/08/24
6060
黑夜/光线差的场景中目标检测痛点可以缓解
全球首颗光线追踪绘图处理器
NVIDIA® Quadro RTX™ 8000 使用 NVIDIA Turing™ 架构及 NVIDIA RTX™ 平台,为专业工作流程带来计算机绘图领域十余年来最重大的进步。设计师和艺术家现在可以利用硬件加速光线追踪,深度学习,和高级着色的强大功能,大幅提高生产力,并以前所未有的速度创作出色的内容。
用户1332428
2023/03/28
5970
全球首颗光线追踪绘图处理器
遇见RT——实时光线追踪带来的手游体验革命
实时光线追踪技术随着Nvidia在2018年初推出RTX解决方案而在业界引起了广泛的关注,光线追踪是一种渲染过程,通过模拟真实世界中光线的传播进行图像的渲染,多用于影视制作。优势在于,可渲染出逼真的图像,达到照片级的真实感。
软件绿色联盟
2022/03/31
1K0
遇见RT——实时光线追踪带来的手游体验革命
【笔记】《计算机图形学》(4)——光线追踪
这系列的笔记来自著名的图形学虎书《Fundamentals of Computer Graphics》,这里我为了保证与最新的技术接轨看的是英文第五版,而没有选择第二版的中文翻译版本。不过在记笔记时多少也会参考一下中文版本
ZifengHuang
2020/07/29
2.6K0
【笔记】《计算机图形学》(4)——光线追踪
34. 光场--捕获场景中所有的光线
在27. HDR - 高动态范围成像中,我向你介绍了把多个不同曝光程度的有限动态范围的图像融合起来,我们可以得到高动态范围的图像
HawkWang
2020/04/17
8340
34.  光场--捕获场景中所有的光线
webgl实现发光线框(glow wireframe)效果 要实现发光的效果
在之前这篇文章, WebGL 单通道wireframe渲染 我们介绍了webgl如何实现单通道wireframe的效果。
用户3158888
2020/08/10
1.7K0
点击加载更多

相似问题

光线跟踪:阴影光线输出问题

17

光线跟踪出了问题

30

光线跟踪阴影问题

10

光线跟踪阴影问题

51

光线投射/光线跟踪:从摄影机拍摄光线

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档