简体   繁体   English

我怎样才能改变 Ursina 中阴影的强度?

[英]How am I be able to change the intensity of a shadow in Ursina?

For my code I am suffering from lack of realism due to lack of shadows.对于我的代码,由于缺少阴影,我缺乏真实感。 The shadows I am currently using makes every shadow black.我目前使用的阴影使每个阴影都变黑。 I want to find a way to lighten this effect.我想找到一种方法来减轻这种影响。 The code I am using looks something like this (The lighting code is close to the beginning. I put the full code because some other stuff might affect your answer):我使用的代码看起来像这样(照明代码接近开头。我放了完整的代码,因为其他一些东西可能会影响您的答案):

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import lit_with_shadows_shader

app = Ursina()
playerWin = False
sky = Sky(texture="Sky1")
clouds = []
pivot=Entity()
DirectionalLight(parent=pivot, y=50, z=3, shadows=True, rotation=(45, -45, 45))
def update():
    global playerWin
    i = 0
    for block in blocks:
        block.x -= directions[i] * time.dt
        if abs(block.x) > 5:
            directions[i] *= -1
        if block.intersects().hit:
            player.x -= directions[i]*time.dt
            i = i + 1
        if player.y <= -10:
            TEXT = Text(text=f"YOU GAVE IT YOUR BEST", color=color.red)
        if player.z >= 48:
            player.speed = 10
        else:
            player.speed = 20
        if player.y > 56:
            text = Text(text=f"WELL DONE YOU PASSED.", color=color.green)
            destroy(text, 2)
            text = Text(text=f"PRESS Q TO LEAVE.", color=color.green)
    if player.z > 56:
        playerWin = True


player = FirstPersonController(
    collider="box"
)

player.x = 5
player.z = -45
player.speed = 20

key_found = False
boxes = []
x = """A DOOR HAS APPEARED IN THE MAZE ... FIND IT TO REACH THE NEXT LEVEL"""
key = Button(
    position=(5, 1, -45), # position=(5, 1, -25)
    color=color.red,
    model="gem.obj",
    origin_y=0.5,
    scale=(0.2,0.2,0.2),
    shader=lit_with_shadows_shader,
    parent=scene)


ground = Entity(
    model="plane",
    texture="grass",
    collider="box",
    scale=(100, 1, 100)

)

exit_ = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(-5, 5, 50),
        color=color.black
    )


def create_border():
    border1_left_half = Entity(
        model="cube",
        collider="box",
        scale=(40, 10, 1),
        position=(-30, 5, 50),
        color=color.black
    )
    border1_right_half = Entity(
        model="cube",
        collider="box",
        scale=(50, 10, 1),
        position=(25, 5, 50),
        color=color.black
    )
    border2 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 100),
        position=(50, 5, 0),
        color=color.black
    )
    border3 = Entity(
        model="cube",
        collider="box",
        scale=(100, 10, 1),
        position=(0, 5, -50),
        color=color.black
    )

    border4 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 100),
        position=(-50, 5, 0),
        color=color.black
    )


def create_maze():
    wall1 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(20, 5, 45),
        texture="white_cube"
    )

    wall2 = Entity(
        model="cube",
        collider="box",
        scale=(40, 10, 1),
        position=(0, 5, 40),
        texture="white_cube"
    )

    wall3 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 20),
        position=(-30, 5, 40),
        texture="white_cube"
    )

    wall4 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-10, 5, 35),
        texture="white_cube"
    )

    wall5 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(-5, 5, 30),
        texture="white_cube"
    )

    wall6 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 20),
        position=(10, 5, 30),
        texture="white_cube"
    )

    wall7 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 30),
        position=(-40, 5, 25),
        texture="white_cube"
    )

    wall8 = Entity(
        model="cube",
        collider="box",
        scale=(40, 10, 1),
        position=(-20, 5, 20),
        texture="white_cube"
    )

    wall9 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-20, 5, 25),
        texture="white_cube"
    )

    wall10 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(0, 5, 15),
        texture="white_cube"
    )

    wall11 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 70),
        position=(30, 5, 5),
        texture="white_cube"
    )

    wall12 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(25, 5, 30),
        texture="white_cube"
    )

    wall13 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(35, 5, 40),
        texture="white_cube"
    )

    wall14 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(40, 5, 35),
        texture="white_cube"
    )

    wall15 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(35, 5, 20),
        texture="white_cube"
    )

    wall16 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 20),
        position=(40, 5, 10),
        texture="white_cube"
    )

    wall17 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(15, 5, 20),
        texture="white_cube"
    )

    wall18 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(20, 5, 15),
        texture="white_cube"
    )

    wall19 = Entity(
        model="cube",
        collider="box",
        scale=(40, 10, 1),
        position=(-10, 5, 10),
        texture="white_cube"
    )

    wall20 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(10, 5, 5),
        texture="white_cube"
    )

    wall21 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(15, 5, 0),
        texture="white_cube"
    )

    wall22 = Entity(
        model="cube",
        collider="box",
        scale=(30, 10, 1),
        position=(-35, 5, 0),
        texture="white_cube"
    )

    wall23 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 30),
        position=(-20, 5, -5),
        texture="white_cube"
    )

    wall24 = Entity(
        model="cube",
        collider="box",
        scale=(40, 10, 1),
        position=(10, 5, -10),
        texture="white_cube"
    )

    wall25 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-0, 5, -5),
        texture="white_cube"
    )

    wall26 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 40),
        position=(-10, 5, -20),
        texture="white_cube"
    )

    wall27 = Entity(
        model="cube",
        collider="box",
        scale=(50, 10, 1),
        position=(-15, 5, -30),
        texture="white_cube"
    )

    wall28 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 20),
        position=(-40, 5, -20),
        texture="white_cube"
    )

    wall29 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(-35, 5, -10),
        texture="white_cube"
    )

    wall30 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-30, 5, -15),
        texture="white_cube"
    )

    wall31 = Entity(
        model="cube",
        collider="box",
        scale=(20, 10, 1),
        position=(10, 5, -20),
        texture="white_cube"
    )

    wall32 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 30),
        position=(10, 5, -35),
        texture="white_cube"
    )

    wall33 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(30, 5, -45),
        texture="white_cube"
    )

    wall34 = Entity(
        model="cube",
        collider="box",
        scale=(10, 10, 1),
        position=(45, 5, -10),
        texture="white_cube"
    )

    wall35 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(40, 5, -15),
        texture="white_cube"
    )

    wall36 = Entity(
        model="cube",
        collider="box",
        scale=(20, 10, 1),
        position=(30, 5, -30),
        texture="white_cube"
    )

    wall37 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(20, 5, -35),
        texture="white_cube"
    )

    wall38 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(40, 5, -35),
        texture="white_cube"
    )

    wall39 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(0, 5, -45),
        texture="white_cube"
    )

    wall40 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-20, 5, -45),
        texture="white_cube"
    )
    wall41 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-30, 5, -35),
        texture="white_cube"
    )

    wall42 = Entity(
        model="cube",
        collider="box",
        scale=(1, 10, 10),
        position=(-40, 5, -45),
        texture="white_cube"
    )


def input(KEY):
    global key_found, key, x, exit_
    if key.hovered:
        if KEY == "left mouse down":
            if key_found == False:
                key_found = True
                text = Text(text=f"{x}", color=color.blue)
                x = "WELL DONE ... YOU HAVE ESCAPED FOR NOW ...."
                destroy(text, 2)
                destroy(key)
                destroy(exit_)

    if KEY == "q":
        app.destroy()

create_maze()
create_border()


blocks = []
directions = []
window.fullscreen = True

goal = Entity(
  color=color.gold,
  model='cube',
  texture='white_cube',
  position=(0, 11, 55+50),
  scale=(10,1,10),
  collider='box'
)

pillar = Entity(
  color=color.green,
  model='cube',
  position=(0,36,58+50),
  scale=(1,50,1)
)

app.run()

I tried by changing the ambient lighting but that only changed the looks and not the shadow.我尝试通过改变环境照明,但这只改变了外观而不是阴影。

You can change the shadow color like this:您可以像这样更改阴影颜色:

lit_with_shadows_shader.default_input['shadow_color'] = color.black

The color's alpha will determine how "strong" it is.颜色的 alpha 将决定它的“强度”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM